• 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)
    
  • 相关阅读:
    图片文件重命名
    MySql基础学习-Sql约束
    MySql基础学习-库表操作
    java内存模型
    数据库常用函数整理
    linux用户管理
    Db2数据库在Linux下的安装和配置
    图像金字塔
    特征值与特征向量
    齐次线性方程组
  • 原文地址:https://www.cnblogs.com/theory/p/13338763.html
Copyright © 2020-2023  润新知