笔记 OSI中的差错控制之 传输层 UDP检验和(1)


UDP检验和

检验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生改变(例如链路中的噪声干扰和存储在路由器中时引入问题)
发送方的UDP对报文段中的所有16B字的和进行相加,有溢出就进行回卷,然后再进行反码运算,得出的结果就是检验和。
注:回卷就是把溢出的最高位1和低16位做加法运算。例如:原本是(1)0100101011000001,回卷就是:0100101011000001+1=0100101011000010
接收方全部的16B字(包括检验和)相加,如果没有出错,结果应当是1111111111111111.
虽然UDP提供差错检测,但它对差错恢复无能为力。UDP的某种实现只是丢弃受损报文段,其他实现是将受损的报文段交给应用程序并发出警告。
UDP为什么首先在传输层提供差错检测,这是因为不能保证源和目的之间的所有链路都提供差错检测,这就是说,这些链路中的一条可能使用没有差错检测的协议。
即使报文段经过链路正确传输,当报文段存储在某台路由器的内存中时,也可能引入比特差错。
在既无法保证链路的可靠性,又无法确保内存中的差错检测的情况下,如果端到端传输的数据传输服务要提供差错检测,UDP就必须在端到端基础上在传输层提供差错检测。
注;端到端原则,表述为因为某种功能必须基于端到端实现;与在较高级别提供这些功能的代价相比,在较低级别上设置的功能可能是冗余的或没有价值的。

补充:IP TCP UDP ICMP校验和区别

UDP计算校验和的方法和计算IP数据报首部校验和的方法相似。 但不同的是:IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是将首部和数据部分一起都检验。 在发送端,首先是将全零放入检验和字段。再将伪首部以及UDP用户数据报看成是由许多16bit的字串接起来。 若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(即:最后一个基数字节应是16位数的高字节而低字节填0)。 然后按二进制反码计算出这些16bit字的和(两个数进行二进制反码求和的运算的规则是:从低位到高位逐列进行计算。 0和0相加是0,0和1相加是1,1和1相加是0但要产生一个进位1,加到下一列。若最高位相加后产生进位,则最后得到的结果要加1)。 将此和的二进制反码写入校验和字段后,发送此UDP用户数据报。 在接收端,将收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些16bit字的和。 当无差错时其结果应全为1。否则就表明有差错出现, 接收端就应将此UDP用户数据报丢弃(也可以上交给应用层,但附上出现了差错的警告)。
TCP 的校验和计算方法同UDP一样,同样要加上一个伪头部,区别是伪头部的协议码是0x06,长度是整个TCP报文的长度(包含TCP头部)。

ICMP的校验和

ICMP校验和的计算方法一样,只不过只是对ICMP包整个进行校验和,没有伪头部,也不包括IP包头部。

摘自《计算机网络 自顶向下方法》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁡⁢⁡布莱克先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值