对IP首部检验和的理解
2009-11-27 22:37
302 查看
对IP首部检验和的理解
很多文章对ip首部检验和的计算介绍得很简略,在理解上常常会比较困难。这篇文章是我自己的一些理解。或许也有不正确的地方,希望大家指正。
很多文章对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首部在传输过程中没有发生任何差错。
相关文章推荐
- 对IP首部检验和的理解
- 对IP首部检验和的理解
- 对IP首部检验和的理解
- IP、TCP、UDP、ICMP、IGMP包首部中的检验和都是针对哪部分的?
- ip首部检验和算法
- 计算IP首部检验和
- IP首部检验和
- Ip:首部检验和字段
- 对IP首部校验和的理解
- 关于IP数据包首部校验字段的理解
- 计算IP首部检验和
- IP首部检验和的二进制反码求和过程方法
- IP首部检查和的理解
- IP首部检验和计算
- IP 首部检验和算法
- 深入理解Linux网络技术内幕——L4层协议与Raw IP的处理
- 如何理解ip路由和操作linux的路由表
- TCP/IP和UDP的基础理解(1)
- 对TCP/IP三次握手的理解
- IP首部以及TCP首部