TCP-IP:IP校验和讨论

来源:互联网 发布:淘宝贷款需要什么条件 编辑:程序博客网 时间:2024/06/05 00:12

TCP-IP:IP校验和讨论

当IP数据包由源主机生成时:

只清零校验和字段,然后将生成的校验和填写到校验和字段,最后发送数据包。

当路由器收到一份I P数据包后,路由器会首先做以下两件事情:

1. 计算校验和是否全为1

对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么I P就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

2. 生成新的校验和:

首先TTL减一,然后检验和字段置为0,最后对首部中每个16 bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),生成新的校验和,结果存在检验和字段中,再发送数据包。

验证校验和的计算公式:

check_sum =(check_sum& 0xffff)+(check_sum>> 16);

下图为我用Wireshark抓的一个ICMP包,高亮部分为IP包头:

、、

下图IP包头个单字对照表:


下图为IP包头每个单字取反后对照表:


将所有单字加起来结果为:0x6ffff9

将溢出的0x6加到低160xfff9,结果为0xfffff.

刚好验证了校验和的计算公式:

check_sum =(check_sum& 0xffff)+(check_sum>> 16);

 

原创粉丝点击