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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值