zoukankan      html  css  js  c++  java
  • 2.UDP协议

    UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能。

    图片

    图片

    应用层给UDP多长的报文,UDP就照样发送,即一次发送一个完整报文

    一、UDP首部格式

    图片
    这里的长度是指(首部+数据)

    UDP校验:

    图片

    图片

    在发送端:

    1. 填上伪首部
    2. 全0填充检验和字段
    3. 全0填充数据部分
    4. 伪首部+首部+数据部分采用二进制反码求和
    5. 把求和反码填入检验和字段
    6. 去掉伪首部,发送

    在接收端:

    1. 填上伪首部
    2. 伪首部+首部+数据部分采用二进制反码求和(此时校验和不为0了)
    3. 结果全为1则无差错,否则发生差错

    二、用python实现UDP校验和

    实验步骤:
    ①传入一个16位整数数组
    ②每个数加起来,当和溢出时,回卷
    ③将所有数的和求反,这个值就是校验和
    ④验证校验和的正确性:校验和+所有16位整数 = -1

    """
        @author: xsy
        @date: 2020/3/28
        @desc: UDP校验和
    """
    
    # 计算·udp校验和(_data是一个16位整数的数组)
    def calculate_udp_sum(_data):
        _sum = 0x0
        for d in _data:
            _sum = _sum + (d & 0xffff)
            # 溢出回卷
            if _sum < 0xffff:
                _sum = (_sum >> 16) + (_sum & 0xffff)
        # 取反
        return ~_sum
    
    
    
    def check_ans(_ans, _data):
        if ans + data[0] + data[1] + data[2] == -1:
            print('校验结果正确')
        else:
            print('校验结果失败')
    
    
    
    # 测试数据
    data = [0b0110011001100000, 0b0101010101010101, 0b1000111100001100]
    
    # 校验和
    ans = calculate_udp_sum(data)
    
    # 检测UDP校验和是否正确
    check_ans(ans, data)
    
  • 相关阅读:
    Vue
    自定义分页器
    selenium-确认进入了预期页面
    PyCharm常用快捷键(pycharm使用教程)
    Linux命令大全|linux常用命令
    ADB常用命令(adb常用命令)
    关于界面库
    VMWARE player 如何让 win2012 guest os 支持HYPER-V
    关于中文域名转码
    注册表中LEGACY残留项的清理技巧
  • 原文地址:https://www.cnblogs.com/theory/p/13338763.html
Copyright © 2011-2022 走看看