ICMP回声校验和

时间:2013-11-27 16:15:56

标签: network-programming checksum icmp

如果校验和应该包含数据部分,数据部分可以调整大小,并且无法预测数据大小,我如何计算ICMP回应请求或回复的校验和?

这里有关于如何计算ICMP标头校验和的documentation

  

ICMP标头校验和。 16位。   16位的补码   ICMP消息的一个补码和,从ICMP类型开始   领域。计算校验和时,应首先使用校验和字段   被清除为0.发送数据包时,校验和为   计算并插入此字段。当数据包是   收到后,校验和再次计算并验证   校验和字段。如果两个校验和不匹配则出现错误   发生。

3 个答案:

答案 0 :(得分:8)

当发件人计算校验和时,该值将插入到零字段中。然后接收器执行相反的操作,它拉出校验和,将字段归零并计算校验和,并将此字段设置为零。它将计算出的值与提取的值进行比较。

传输的两侧计算校验和,其中字段为零。

<强>更新

从幻灯片44开始,此Scribd presentation上有一个如何执行此计算的示例。我还包括下面的相关示例幻灯片。

  

图9.19显示了一个简单的校验和计算示例   echo-r​​equest消息(见图9.14)。我们随机选择了   标识符为1,序列号为9.消息为   分为16位(2字节)字。这些词被加在一起   总和是补充。现在发件人可以将此值放入   校验和领域。

Ping Checksum calculation

将ICMP头和数据拆分为16位字(校验和字段使用0x0000),得到这些字的总和,然后求和的补码。然后将其插入校验和字段。

答案 1 :(得分:3)

您可以通过从IP标头中的“总长度”字段中减去IP标头的大小来计算ICMP消息长度。

答案 2 :(得分:1)

请记住,在IPv6中,IPv6标头的伪标头也包含在校验和计算中。在IPv4中,这没有完成,因为标头已经自动校验。