如果校验和应该包含数据部分,数据部分可以调整大小,并且无法预测数据大小,我如何计算ICMP回应请求或回复的校验和?
这里有关于如何计算ICMP标头校验和的documentation。
ICMP标头校验和。 16位。 16位的补码 ICMP消息的一个补码和,从ICMP类型开始 领域。计算校验和时,应首先使用校验和字段 被清除为0.发送数据包时,校验和为 计算并插入此字段。当数据包是 收到后,校验和再次计算并验证 校验和字段。如果两个校验和不匹配则出现错误 发生。
答案 0 :(得分:8)
当发件人计算校验和时,该值将插入到零字段中。然后接收器执行相反的操作,它拉出校验和,将字段归零并计算校验和,并将此字段设置为零。它将计算出的值与提取的值进行比较。
传输的两侧计算校验和,其中字段为零。
<强>更新强>
从幻灯片44开始,此Scribd presentation上有一个如何执行此计算的示例。我还包括下面的相关示例幻灯片。
图9.19显示了一个简单的校验和计算示例 echo-request消息(见图9.14)。我们随机选择了 标识符为1,序列号为9.消息为 分为16位(2字节)字。这些词被加在一起 总和是补充。现在发件人可以将此值放入 校验和领域。
将ICMP头和数据拆分为16位字(校验和字段使用0x0000),得到这些字的总和,然后求和的补码。然后将其插入校验和字段。
答案 1 :(得分:3)
您可以通过从IP标头中的“总长度”字段中减去IP标头的大小来计算ICMP消息长度。
答案 2 :(得分:1)
请记住,在IPv6中,IPv6标头的伪标头也包含在校验和计算中。在IPv4中,这没有完成,因为标头已经自动校验。