在ICMP头校验和计算?

时间:2014-02-27 11:08:11

标签: c++ c networking packet icmp

在ICMP标题中,他们使用以下语句填充校验和

我发现ICMP_ECHO值为8

 icmp->checksum = htons(~(ICMP_ECHO << 8));

任何人都可以告诉我它究竟会做什么以及它将如何填补校验和的细节

1 个答案:

答案 0 :(得分:2)

ICMP校验和是RFC 1071 checksum

  

(1)要校验和的相邻八位字节配对形成16位           整数,这些16位整数的1的补码和           形成。

     

(2)要生成校验和,校验和字段本身将被清除,           在八位字节上计算16位1的补码和           有关,并且这笔金额的1的补充被放在           校验和领域。

对于ICMP_ECHO消息(类型8,代码0),类型和代码字段应该是0x08 0x00,如果这是消息包含的所有数据,那么这也是应该是16位整数的总和形成校验和。