在讲UDP的校验和计算之前,先需要明确一件事情:在计算UDP报文的Checksum之前,我们需要在UDP报文段的头部之前,加入一个“伪头部”。
伪头部
如上图所示,对于运行在IPV4协议之上的UDP协议,其伪头部为红色部分所示。
为何称之为“伪头部”?原因是,UDP协议只使用它来辅助计算校验和,它并不是发送IP数据包时使用的IP数据包的头部。
校验和的计算
在《计算机网络:自顶向下方法》这本书的中译版本中,对于UDP校验和的计算讲解不算很清楚。其实,计算方法很简单:
- 从“伪头部”开始,按每16位当作一个数,逐次求和,最终得出一个32位的数;
- 如果这个32位的数的高16位不为0,则进行“回卷”操作。也就是,将其高16位与低16位相加,又得到一个32位的数;
- 重复第2步直到高16位为0。
- 最终,将低16位取反,得到校验和,填入checksum字段中
差错检验
当接收到UDP报文时,需要如何检验其正确性?方法就是将UDP报文中包括校验和在内的,所有的16位的数相加,如果低16位全为1,则没有出错。否则表明该分组中出现了错误。
需要注意,UDP对差错具有一定的校验能力,但缺少差错恢复的能力。
转载请注明来源:https://www.longjin666.cn/?p=1458
欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~