开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
TCP与UDP
上一节分析了IP的首部,并且详细介绍了IP首部的每个字段的作用,从这一节开始,将进入传输层的学习。传输层内容较多,将会分成几节去进行介绍。本节将从介绍TCP和UDP的首部字段及区别开始。
UDP
首先从比较简单的UDP开始,UDP是无连接的,这减少了创建和释放连接额外的开销,但是UDP只能保证最大能力交付,并不能保证可靠传输。因此UDP的首部并不复杂。
UDP首部只有8个字节,端口号16位可以得出端口范围为0到65535。
需要注意的是在计算UDP校验和时还需要加上伪首部,伪首部包括源IP地址,目的IP地址,填充0,protocal和UDP长度,这和TCP是一样的。
TCP
TCP比UDP更复杂,它通信前需要建立连接,并且实现可靠传输。
序号和确认序号都是32位占4个字节,序号表示这一次传给对方的TCP数据部分的第一个字节编号,确认序号则是期望对方下一次传过来的TCP数据部分的第一个字节编号。
数据偏移占4位,乘以4就是TCP首部长度,首部长度为20到60个字节。
保留占6位以及6种标志,每个标志占一位。URG是紧急标志Urgent,当它为1时,紧急指针才会生效,表明当前报文段有紧急数据,应优先传送。ACK是确认标志,当它为1时确认序号字段生效。PSH标志生效时强制要求接收系统清空缓冲区内容,将报文段交给应用层。RST标志是Reset表示连接出现严重差错,需要释放连接后再重新建立连接。SYN表明这是一个建立连接的请求。FIN表明数据已经发送完毕,要求释放连接。
窗口占16位2个字节,这个字段是为了实现流量控制功能,告诉对方下一次允许发送的数据大小。
校验和16位2个字节,和UDP一样,计算内容为伪首部+首部+数据。
紧急指针16位2个字节,表示从数据首位到该指针所指的部分为紧急数据,在URG为1时生效。
TCP与UDP区别
观察首部,你会发现UDP有一个UDP长度,这个长度是首部+数据的长度,但是TCP只有一个表示首部大小的数据偏移而没有TCP报文段数据长度。其实这个长度是可以根据网络层算出来的
传输层数据=网络层总长度-网络层首部长度-传输层首部长度
因此可以说UDP首部这16位数据是冗余的,纯粹是为了32位对齐。
TCP和UDP的区别还可以从以下几个方面进行分析
连接:TCP传输需要创建连接,UDP则不用即刻开始传输
首部开销:TCP首部至少需要20个字节,而UDP开销较小只需8个字节
可靠性:TCP保证传输数据的不丢失,不重复,无差错,有序而UDP并不保证数据可靠性
拥堵控制:TCP有拥堵控制,保证数据安全,而UDP即使网络拥挤也会正常发送
分片:由于如果在IP分片,发生分片丢失的话需要重传整个数据包,因此如果发送数据大于MSS大小,TCP会提前分好片,对方系统接收到后会在传输层组装分片,分片丢失仅重传分片即可。而UDP需要在IP网络层进行分片。
应用场景:TCP用于可靠性交付,如邮件,浏览器,文件传输等,UDP则适合音视频通话、直播。
总结
本节介绍了UDP和TCP的首部,以及这两种协议的区别。下一节开始将介绍TCP的几种特性和TCP著名的三次握手,四次挥手等。
感谢观看!