UDP协议

2021-04-07  本文已影响0人  逗儿比的日常

概念

用户数据报协议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比特的二进制数.png

第一步:对 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则无差错传输,否则丢弃

上一篇下一篇

猜你喜欢

热点阅读