运输层2——用户数据报协议UDP
写在前面:本文章是针对《计算机网络第七版》的学习笔记
用户数据报协议只在IP数据报服务之上增加了很少一点的功能:复用,分用以及差错检测的功能。UDP的主要特点:
-
UDP是无连接的:即发送数据前不需要建立连接,减少了开销和发送数据的时延。
-
UDP使用尽最大努力交付:不保证可靠,因此主机无需维持复杂的连接状态。
-
UDP是面向报文的:发送方的UDP对应用程序交下来的报文添加首部后直接交付给IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
-
UDP没有拥塞控制:因此网络出现拥塞不会影响主机的发送速率,也就是允许丢失数据,但要保证时延。
-
UDP支持一对一,一对多,多对一,多对多的通信。
-
UDP首部开销小:只有8个字节。
2. UDP首部格式
UDP用户数据报分为 = 首部字段 (8个字节,4个字段,每个字段2个字节)+ 数字字段。
首部字段:
-
源端口: 源端口号。在需要对方回信的时候选用,不需要填0。
-
目的端口: 目的端口号。必填。
-
长度: UDP用户数据报的长度。最小为8。
-
检验和:检测UDP用户数据报传输过程中是否有错。有错就丢弃。
3. UDP首部检验和计算方法
在计算检验和时,需要在用户数据报之前加12字节的伪首部。
所谓伪首部,是指他并不是UDP用户数据报的真正首部,只是在计算检验和的时候,临时加上的,检验和就是按照这个临时的用户数据报计算的。既不下传也不向上提交。伪首部的格式如上图。
UDP计算检验和与IP数据报类似,只是UDP的首部校验和把首部和数据一起都检验了。步骤如下:
-
在发送方,首先先把全零放到检验和字段;
-
再把伪首部和UDP用户数据报看成是由许多16位的字串连接起来的;
-
然后按二进制反码计算出这些16位字的和,并将此和的反码写入检验和字段后,就发送这样的用户数据报。
-
在接收方,把收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些16位字的和。
-
若无差错时其结果应全为1;否则就是有差错出现,可以选择丢失,可以上传(但是要附上错误信息)。