作为家庭作业的一部分,我必须在Linux中编写一个C程序,使用原始套接字生成ICMP回复ICMP Echo请求。 ICMP数据包中的数据是否也必须包含在校验和中?或者我应该只计算标题的校验和吗?
答案 0 :(得分:10)
必须从HEADER + DATA计算。执行计算时,让校验和为零,然后将其替换。
从RFC 792:
引用第14页(回声或回声回复消息)校验和是16位的校验和的补码 补充以ICMP类型开头的ICMP消息的总和。 为了计算校验和,校验和字段应为零。 如果总长度是奇数,则用一个填充接收的数据 用于计算校验和的零八位字节。这个校验和可能是 将来取代。