先介绍我们UDP/TCP协议缓冲区
在UDP和TCP在数据传输和介绍时有有缓冲区概念的。
UDP缓冲区
UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后 续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果 缓冲区满了, 再到达的UDP数据就会被丢弃;
TCP缓冲区
TCP在内核中是具有接收缓冲区和发送缓冲区的。
TCP和UDP由于他们的发送缓冲区和接收缓冲区是独立的(尽管udp没有真正发送缓冲区),所以使用TCP和UDP通信是全双工状态的。
udp协议报头介绍
报头也是结构体。
为了节约紧凑数据,降低内存对齐问题,我们的结构体使用位段结构。
不做数据浪费,tcp报头数据结构也是使用位段结构
UDP报头内容介绍
原端口号:发送方的端口号,接收方再给发送方发送数据时候,可以依据端口发送到对应的主机中特定的进程。
目的端口号:发送方机器上绑定该端口的进程。
UDP长度:整个UDP报文(报头+数据)长度,确定数据长度用的,UDP报头是固定的8字节,所以16位UDP报文长度-8字节就是数据长度。
16位UDP检验和:检测这次数据发送情况,如果有误直接将整个报文丢弃。
检验和的检测我们后面讲完TCP报文后一起说。
UDP协议注意事项
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
- 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层 返回任何错误信息;
- 面向数据报: 不能够灵活的控制读写数据的次数和数量
数据报文:报头固定,以一个一个报的发送方式,不考虑
无连接:意味着不需要链接就可以直接对某个服务器发送数据。
不可靠:这并不是一个贬义词而是中性词,不可靠意味着,我们发出数据后不用管数据是否抵达,我们只管发送就行了。不需要太多的编写和维护成本。
注意事项
UDP数据报文如果超过了64K数据,数据报会变成2个UDP报,我们需要手动拼接数据。
tcp协议报头介绍
TCP协议特点与报头内容
这里我们讲报头内容和特点是相辅相成的
确认应答机制:每条报文发送对方都会返回一条确认报文
对应使用的是32位序号和32位确认序号。