本文主要是介绍数据报差错检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
运输层
1. 用户数据报协议 UDP
用户数据报协议 UDP 有两个字段:
- 首部字段
- 数据字段
首部字段有 8 个字节,由四个字段组成,每个字段的长度都是两个字节。
- 源端口:源端口号。不需要时可用全 0。
- 目的端口:目的端口号。
- 长度:UDP 用户数据报的长度,其最小值是 8 (仅有首部)。
- 校验和:检测 UDP 用户数据报在传输中是否有错。有错就丢弃。
UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户报之前增加 12 个字节的伪首部。所谓 “伪首部” 是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算校验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。校验和就是按照这个临时的 UDP 用户数据报来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。
IP数据报的检验和只检验数据报的首部,但UDP 的校验和是把首部和数据部分一起都检验。
在发送方
首先是先把全零放入检验和字段。
再把伪首部以及 UDP 用户数据报看成是由许多 16 位的字串接起来的。
若 UDP 用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发生)。
然后按二进制反码计算出这些 16 位字的和。
将此和的二进制反码写入检验和字段后,就发送这样的 UDP 用户数据报。
在接收方
把收到的 UDP 用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些 16 位字的和。
当无差错时其结果应为全 1。
这篇关于数据报差错检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!