IP数据包头分析

来源:互联网 发布:松下触摸屏软件 编辑:程序博客网 时间:2024/06/10 12:59
 IP数据包头数据结构
struct ip_hdr
{
unsigned char version:4; //版本号
unsigned char hlen:4;  //首部长度
unsigned char sert;  //服务类型
unsigned short tot_len;  //总长度
unsigned short id;  //标识字段
unsigned short fra_off:13; //偏移 低13位
unsigned char  fra_off:3; //偏移 高3位
unsigned char ttl;  //生存时间
unsigned char protocol;  //协议
unsigned short chk_sum;  //首部校验和
unsigned int srcaddr;  //源IP地址
unsigned int dstaddr;  //目的地址
unsigned int opt;  //选项
};
例:
IP头部:45 00 00 2e 13 23 00 00 80 11 5c 99 c0 a8 01 65 3b 37 cd be
  第一字节,“45”,其中“4”是IP协议的版本(Version),说明是IPv4。“5”是IHL位,表示IP头部的长度,是一个4bit字段,这里为“5”,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。 
 第二个字节“00”是服务类型(Type of Service)。这个8bit字段由3bit的优先权子字段,4 bit的TOS子字段以及1 bit的未用字段(现在为0)构成.4 bit的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1bit位最多只能有一个为1,这里都为0,表示是一般服务。 
  第三、四个字节“00 2e”是IP数据报文总长,包含头部以及数据,这里表示46字节。
  第五、六两个字节是标志位(Identification):“13 23”,转换为十进制就是4899。这个是让目的主机来判断新来的分段属于哪个分组。 
  第七、八个字节“00 00”,转换为二进制就是“0000 0000 0000 0000”,其中第一位是IP协议目前没有用上的,为0。接着的是两个标志DF和MF。DF为0表示要分段,MF为0表示没有进一步的分段。然后的“0 0000 0000 0000”是分段偏移(Fragment Offset)。 
  第九个字节是“80”这个字节是TTL(Time To Live),表示一个IP数据流的生存时间,因为一般主机都有默认的TTL值,不同系统的默认值不一样。WINDOWS一般为128。不过,一般Ping得到的都不是默认值,这是因为每次IP数据包经过一个路由器的时候TTL就减一,当减到0时,这个数据包就被丢弃了,然后发回一个ICMP(Internet Control Message Protocol)告诉源主机重新发送。
  第十个字节是“11”,这个字节表示传输层的协议类型(Protocol)。17表示传输层是UDP协议(应该没错)。 
  第十一、十二两个字节“5c 99”这个16bit是头部校验和(Header Checksum)。 
  接下来四个字节“c0 a8 01 65”,这个就是源地址(Source Address)了,也就是我的IP:192.168.1.101
  最后四个字节是“3b 37 cd be”,这个就是目的地址(Destination Address)是目标地址:59.55.205.190