传输层协议UDP与TCP

UDP协议
UDP协议用于网络协议传输层交互,不同于TCPUDP没有重传、重复包的处理,不保证传输可靠性,其下层为IP协议。
 消息结构
传输层协议UDP与TCP
Source Port占用16比特,为可选择域,如果不使用可以全写为0,指示是发送的端口,但缺乏其它有效信息时,也作为回应的目的端口;Destination Port占用16比特,指示目标端口号;lengthUDP包的字节长度,包含header部分,最小值为header长度8个字节。
Checksum为校验位,计算时需要加上UDP虚拟头部、真实头部、数据部分及末尾补0部分一起计算。需要补齐整个数据长度为两个字节的倍数,计算时以16-bit数据为最小单位进行求和,如果存在进位,则将进位1加到低16位数字上去,计算完成后取反的结果即为Checksum。如果没有Checksum时,此域需要全部填值为0
TCP协议
TCP提供可靠的传输模式,TCPUDP同样是传输层协议,其主要差别在于TCP保证可靠性,因而不同于UDPTCP工作是面向连接的。
消息结构
传输层协议UDP与TCP
Source port/Destination Port为源和目的端口号,各占有16比特;Sequence number占用32比特,指示数据包中第一个字节的SN,如果存在携带初始SNISNSYN时,第一个数据字节的SNISN+1Acknowledgement Number指示期望收到的下一个连续的SN号;Data offset占用4比特,指示TCP头部总的32比特word长度,可计算开始数据开始位置;Reserved占用6比特,留后续使用;URG占用1比特,用来指示Urgent Pointer是否存在;ACK占用1比特,用来指示Acknowledgment域是否存在意义;PSH占用1比特,用于指示Push功能;RST占用1比特,用于重置连接;SYN占用1比特位,同步SN号;FIN占用1比特,指示发送端是否还存在更多需要发送的数据,用于结束链接;window占用16比特,指示从Acknowledgment域开始数据窗口长度;Checksum计算校验和,包括头和内容,不足16比特部分补零对齐,计算时需要增加IP的虚拟头部;Urgent Pointer占用16比特,和URG标志配合使用,指示正常数据起始位置,在此位置之前为带外数据(紧急数据);Options为字节的倍数,存在两类option,一种是只带类型option-kind,另一种带有option-kind + option length + option dataoption length包括kindlength本身的共两个字节的长度; Padding用于补齐TCP头部长度,满足32比特word对齐。
Options
TCP模式下,携带的Option都需要被执行。
传输层协议UDP与TCP
传输可靠性
TCP不同于UDP,提供了数据的可靠传输,这种可靠性依赖于停止-等待协议机制,主要体现在SNACK机制上。首先需要将TCP连接的两端SN进行同步,也就是SYN标志位带有的功能,当SYN1是带有的SN号即为ISN(初始SN),常常听到的三/四次握手就是实现此功能,相当于初始建立链路过程,发起端需要首先发送SYN给对端,对端需要对SYN包返回ACK,同样需要对端发送相应SYN来确认接收的起始SN号,并对相应TCP包返回对应ACK,因此此流程有四个过程交互;而对端返回ACK时可以同时携带SYN标志,可以简化为三条消息。相对于建立流程,链路同样可以使用类似方式释放,通过标志FIN来控制。在传输过程中需要维护数据的SN及其ACK状态,加以不同的Timer进行丢包重传控制;Window域用来表示接收到ACK的数据到最多允许发送的数据包的窗口大小,也就是说超出窗口的数据不能,窗口的大小影响实际情况下的速率。TCP基于SN次序进行有次序的传输,紧急(带外)数据可以采用Urgent模式传输。Push标志影响发送、接收的处理时间,在接收端收到标志位将不等待缓存状态,直接将数据递交上层梳理。TCP采用的是面向连接的分组交换机制,当状态出错时,可以用Rest机制来重新恢复链路链路,同时存在平静时间的定时器来确保分组机制网络中的残留的数据包能够处理完成,减少状态和数据类型冲突的概率。
参考文档
RFC768 User Datagram Protocol
RFC793 TRANSMISSION CONTROL PROTOCOL