在讲UDP的校验和计算之前,先需要明确一件事情:在计算UDP报文的Checksum之前,我们需要在UDP报文段的头部之前,加入一个“伪头部”。

伪头部

UDP报文段伪头部+头部+数据段

如上图所示,对于运行在IPV4协议之上的UDP协议,其伪头部为红色部分所示。

为何称之为“伪头部”?原因是,UDP协议只使用它来辅助计算校验和,它并不是发送IP数据包时使用的IP数据包的头部。

校验和的计算

在《计算机网络:自顶向下方法》这本书的中译版本中,对于UDP校验和的计算讲解不算很清楚。其实,计算方法很简单:

  1. 从“伪头部”开始,按每16位当作一个数,逐次求和,最终得出一个32位的数;
  2. 如果这个32位的数的高16位不为0,则进行“回卷”操作。也就是,将其高16位与低16位相加,又得到一个32位的数;
  3. 重复第2步直到高16位为0。
  4. 最终,将低16位取反,得到校验和,填入checksum字段中

差错检验

当接收到UDP报文时,需要如何检验其正确性?方法就是将UDP报文中包括校验和在内的,所有的16位的数相加,如果低16位全为1,则没有出错。否则表明该分组中出现了错误。

需要注意,UDP对差错具有一定的校验能力,但缺少差错恢复的能力。

转载请注明来源:https://www.longjin666.cn/?p=1458

欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~

你也可能喜欢

发表评论