代码改变世界

IP数据包包头分析

2010-06-02 17:13  libiver  阅读(1138)  评论(0编辑  收藏  举报

 

声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。  

本文链接:http://blog.csdn.net/li_007/archive/2010/06/02/5642818.aspx

开拓进取的小乌龟------->CSDN点滴点点滴滴Blog

 

 

首先根据IP协议定义IP数据包头(关于IP协议头各部分的定义,具体参考http://en.wikipedia.org/wiki/IPv4),注意严格的类型大小,不然数据转换会出现错误。

 

 

首先来看一个调试内存截图,在这里都是以16进制来表示。

 

 

这里我们需要注意在内存中字符存储方式(其实是由于CPU的决定的),也就是大小端和内存对齐原则。关于大小端做一个简单的解释。DEC和Intel的机器CPU一般采用小端. IBM, Motorola和Sun的机器CPU一般采用大端. 当然这并不能代表所有情况. 有的CPU即能工作于小端, 又能工作于大端, 比如ARM, PowerPC, Alpha. 具体情形参考处理器开发手册。

更形象的表述示例,来看看我在网上找到的图形。 比如一个int x, 起始地址为0x100, 它的值为0x1234567. 则它所占据的内存为0x100, 0x101, 0x102和0x103这4个字节,地址具体数值组织如下图:

Ok,可以结合大小端示例图与调试内存示例图,仔细分析分析,计算IP数据包头的各个变量的具体数值。然后结合IP数据包头定义来理解这个IP数据包的含义。