2013-11-27 58 views
5

当校验和应该包含数据部分时,如何计算ICMP回显请求或回复的校验和,数据部分可以是可变大小的,并且无法预测数据大小?ICMP回显校验和

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

ICMP头校验和。 16位。 ICMP消息的补码总和为 的16位补码,从ICMP类型 字段开始。当计算校验和时,首先应将校验和字段 清零。当传输数据包时,校验和为 ,并计算并插入到该字段中。当接收到数据包 时,再次计算校验和并根据 校验和字段进行验证。如果两个校验和不匹配,则发生错误 。

+0

www.roseperrone.com无法联系到! – fedorqui

回答

4

当发送者正在计算校验和时,该值被插入到zero'd字段中。然后接收机做相反的操作,它将取出校验和,将该字段置零并计算校验和,并将该字段设置为零。它将它计算的值与它提取的值进行比较。

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

更新

的如何执行存在于该Scribd presentation该计算,开始幻灯片44.我还包括相关的示例下面滑动的一个例子。

图9.19显示了一个简单的 回声请求消息的校验和计算示例(见图9.14)。我们随机选择 标识符为1,序列号为9.消息为 ,分为16位(2字节)字。这些词加在一起, 的总和是补充。现在发送者可以将该值置于 校验和字段中。

Ping Checksum calculation

拆分ICMP报头和数据转换成16个字(使用0×0000的校验和字段),获得的这些话,然后总和的补总和。然后将其插入校验和字段。

+0

这不是我的问题。我需要计算整个ICMP消息的校验和,其中可以包含一个可变大小的数据部分。我如何知道计算校验和的消息大小? –

+0

我认为在这一点上更好的问题是,你如何解析你的数据包?数据包数据应该是你数据包解析的一部分。这会给你数据的大小。 – Andy

+0

数据是可选的,对我而言,我不在乎数据是什么,所以我根本不解析它。但发件人仍然可能将数据包含在校验和中,所以我需要知道数据的长度,所以我可以将其包含在校验和中。 –

3

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

+0

在那里的任何证明? –

+0

一个ICMP数据包由一个IP头和一个ICMP消息组成。 RFC 792将总长度字段描述为“Internet头和八位字节数据的长度”。对于ICMP数据包,数据是ICMP消息。 –

+0

Ops,我以为你在谈论校验。但你的问题是关于校验和。 –

1

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