如果校验和应该包括数据部分,数据部分可以可变大小,并且无法预测数据大小,那么如何计算ICMP回送请求或答复的校验和?
下面是关于如何计算ICMP头的校验和的文档。
ICMP头校验和。16位从ICMP类型字段开始的ICMP消息的16位补码。计算校验和时,应首先将校验和字段清除为0。当数据包被发送时,校验和被计算并插入到这个字段中。当接收到数据包时,再次根据校验和字段计算校验和并对其进行验证。如果两个校验和不匹配,则发生错误。
发布于 2013-11-27 16:25:58
当发送方正在计算校验和时,该值将插入到零d字段中。然后,接收方进行反向操作,取出校验和,对字段进行零化,并将该字段设置为零计算校验和。它将它计算的值与它提取的值进行比较。
传输的两边都计算出场为零的校验和。
更新
这个Scribd陈述上有一个如何执行此计算的示例,从幻灯片44开始。我还包括了下面的相关例子幻灯片。
图9.19显示了一个简单回显请求消息的校验和计算示例(参见图9.14)。我们随机选择标识符为1,序列号为9。消息被划分为16位(2字节)字。这些词加在一起,和得到补充。现在,发送方可以将此值放入校验和字段。

您将ICMP头和数据拆分为16位字(在校验和字段中使用0x0000 ),得到这些单词的和,然后得到和的补充。然后将其插入校验和字段。
发布于 2013-11-28 04:03:51
您可以通过从IP报头中的“总长度”字段中减去IP报头的大小来计算ICMP消息长度。
发布于 2016-01-08 11:11:57
请记住,在IPv6中,校验和计算中还包括IPv6头的伪头。在IPv4中,这是没有完成的,因为标头本身已经校验了。
https://stackoverflow.com/questions/20247551
复制相似问题