IP首部检查和的理解

原文http://www.blogjava.net/huyi2006/articles/118178.html

很多文章对ip首部检验和的计算介绍得很简略,在理解上常常会比较困难。这篇文章是我自己的一些理解。或许也有不正确的地方,希望大家指正。

 

这个问题一直困绕了我很长时间,今天终于理解了。 

我们可以通过spynet sniffer抓包软件,抓取一个ip数据包进行分析研究。 

下面我以本机抓到的一个完整的ip首部为例(红色字体表示): 

0000: 00 e0 0f 7d 1e ba 00 13 8f 54 3b 70 08 00 45 00 

0010: 00 2e be 55 00 00 7a 11 51 ac de b7 7e e3 c0 a8 

0020: 12 7a 

 

45 00 00 2e----4表示ip版本号为ip第4版;5表示首部长度为5个32 bit字长,即为20字节;00 2e表示ip总长度为46字节,其中ip数据部分为 26字节。 

be 55 00 00----be 55表示标识符;00 00表示3 bit标志及13 bit片偏移量; 

7a 11 51 ac----7a表示ttl值为122;11表示协议号为17的udp协议;51 ac表示16 bit首部检验和值; 

de b7 7e e3----表示32 bit 源ip地址为222.183.126.227 

c0 a8 12 7a----表示32 bit 目的ip地址为192.168.18.122 

 

检验和计算: 

首先,把检验和字段置为0。 

45 00 00 2e 

be 55 00 00 

7a 11 00 00<----检验和置为0 

de b7 7e e3 

c0 a8 12 7a 

其次,对整个首部中的每个16 bit进行二进制反码求和,求和值为3ae50,然后3+ae50=ae53(这是根据源代码中算法 cksum = (cksum >> 16) + (cksum & 0xffff) 进行的 ) 

 

最后,ae53+51ac=ffff。因此判断ip首部在传输过程中没有发生任何差错。

转载于:https://www.cnblogs.com/alaigle/archive/2012/05/14/2499414.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值