UDP协议
概念
用户数据报协议UDP(User Data Protocol)
是无连接的用户协议
设计UDP原因
不需要建立连接(减少延时);无拥塞控制:UDP可按需发送;经常用于流媒体数据传输(如视频点播),低负载、速率敏感
UDP报头的封装
UDP报头的封装.png❀UDP报头中主要的内容就是进程的端口号
UDP报头格式
UDP报头格式.png• UDP源端口号:指示发送方的UDP端口号
• UDP目的端口号:指示接收方的UDP端口号
• UDP报文长度:指示数据报总长度,包括报头以及数据区总长度
• UDP校验和:进行差错检测,但UDP不会恢复差错
UDP校验和
(UDP校验和部分参考链接:https://blog.csdn.net/qq_34902437/article/details/87938913)
对发送方的 UDP 报文段的所有 16 比特字的和进行反码运算,当求和遇见溢出的时候,进行回卷,得到的结果放在 UDP 报文段中的检验和字段
• 回卷: 就是当进行 16 比特的加法运算的时候,如果进位到 17位,则将第 17 位和后 16 位进行加法和运算
例子:
假设我们有 3 个 16 比特的字
第一步:对 3 个 16 比特的字依次相加
3个二进制数相加.png注意,在最后一次加法的过程中,发生了回卷,看下面,多了第 17 位,要消除第 17 位
回卷.png这两个数相加得到
实际得到的和.png此时用 1 + 0100 1010 1100 0001 = 0100 1010 1100 0010
第二步:对和进行反码运算
取反.png第三步:将这个值放入校验和中
第四步:在接收方中,将全部的 4 个 16比特的字(包含了校验和)加在一起(例子中“取反”里的两组数相加),没有差错的话,就是 1111 1111 1111 1111
伪首部:位于UDP报头之前,用于验证UDP数据报是否被送到正确的目的节点
发送方将UDP伪首部、首部、数据每16位一组进行二进制反码求和,再将求和结果求反码,填入校验和字段。接收方收到UDP报文后,生成伪首部,将伪首部、首部、数据每16位一组进行二进制反码求和,若求和结果全为1则无差错传输,否则丢弃