UDP协议

作者: 逗儿比的日常 | 来源:发表于2021-04-07 15:02 被阅读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则无差错传输,否则丢弃

    相关文章

      网友评论

          本文标题:UDP协议

          本文链接:https://www.haomeiwen.com/subject/jfbtoktx.html