IP包头数据结构及校验

作者在 2008-12-30 09:49:40 发布以下内容
IP包头数据结构及校验
 
最简单的IP数据包头:
typedef struct _IPHDR{
    u08     nVer_HeadLen;          // Version and header len
    u08     nService;                // Quality of IP service
    u16    nLen;                    // Total len of IP datagram
    u16    nIdent;                // Identification value
    u16    nFlags;                // Flags & fragment offset
    u08    nTTL;                    // Time to live
    u08    nPCol;                    // Protocol used in data area
    u16    nChk;                    // Header checksum
    u32     nSrcIP;                // IP source addr
    u32    nDstIP;                // IP dest addr
} IPHDR;
IP数据包的头结构中的校验值,是由包头数据累加得到的,不包含IP数据。这点与TCP和UDP不同。
IP数据包头的长度是可变的,最大24字节,最小20字节,真实长度通过nVer_HeadLen的最后面4位计算得到。(nVer_HeadLen | 0x0F) * 4 就是真正包头的长度。TCP包头也是可变长度,也是通过头结构中的某个值算出来实际长度,只是计算方法不太一样。
 
/**//**//**////////////Ethernet II帧格式//////////////
01 00 5E 7F FF FA    //目标MAC地址    厂商代码  设备编号
00 14 78 FF 0F 04    //源MAC地址        |      |  |     |
                                    00-14-18+FF-0F-04
08 00    //上层数据类型    0x0800:IP协议数据;0x809B:AppleTalk协议数据;
        //0x8138:Novell类型协议数据           
/**//**//**///////////IP侦头////////////////
4    //IP 封包的版本    Version
5    //IP头长度5*4字节 = 20个字节 IHL(Internet Header Length)长度的范围为 5~15
00    //PPPDTRUU PPP:表示此IP 封包的优先度 D:若为O表示一般延时(Delay),若为1表示为低延时
            // T:0表示一般传输量(Throughput),1表示为高传输量
            // R:0表示一般可靠度(Reliability),1表示高可靠度 UU:保留尚未使用
01 48 //IP封装包的总容量(Total Length:328 bytes),表头与内容(Data)部分,最大可达65535 Bytes
13 21 //标识(Identification),当总容量超过65535Bytes,IP被重组时,标识码告知接收端这些小IP其实来自同一个封包
00 00 //000(特殊标志Flags)0DM;其意义为:D:0表示可以分段,1表示不可分段;M:0表示此IP为最后分段,1表示非最后分段
      //00000 00000000(分段偏移Fragment Offset)    表示这个IP分段在原始的IP封包所占的位置
01      //Time To Live (TTL存活时间)范围0-255,当IP包通过一个路由器时,TTL就会减一,当TTL为0时,此IP包将被直接丢弃。
11      //协议代码(Protocl Number)在表头告知接收端IP内含是什么协议的数据
      //1:ICMP;2:IGMP;3:GGP;4:IP;6:TCP;8:EGP;17:UDP
DF D6 //Header CheckSum(表头检查码)检查IP表头的正确性
C0 A8 15 0B //Source Address
EF FF FF FA //Destination Address
/**//**//**////////UDP//////////////////////////////////////////////////
04 01 //源端口
07 6C //目的端口
01 34 //长度 308字节(包含UDP头长度)
 
基础知识 | 阅读 12072 次
文章评论,共1条
vfdff(作者)
2009-02-19 13:23
1
一些常用的报文头结构定义ETHERNET IP UDP PPP<br />
<br />
/*Ethernet&nbsp;&nbsp;Header*/<br />
typedef struct tagEthernet_II_header<br />
{<br />
&nbsp;&nbsp;&nbsp; BYTE byDA[6];&nbsp;&nbsp;&nbsp; /*Destinate MAC*/<br />
&nbsp;&nbsp;&nbsp; BYTE bySA[6];&nbsp;&nbsp;&nbsp; /*Source MAC*/<br />
&nbsp;&nbsp;&nbsp; WORD wType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Type*/&nbsp;&nbsp;&nbsp; <br />
}ETHERNET_HEADER_S,*PETHERNET_HEADER_S;<br />
<br />
/*UDP Packet Header*/<br />
typedef struct tagUDPPackerHeader<br />
{<br />
&nbsp;&nbsp;&nbsp; WORD wSPort;&nbsp;&nbsp;&nbsp; /*Source Port*/<br />
&nbsp;&nbsp;&nbsp; WORD wDPort;&nbsp;&nbsp;&nbsp; /*Destinate Port*/<br />
&nbsp;&nbsp;&nbsp; WORD wLength;&nbsp;&nbsp;&nbsp;/*UDP Length*/<br />
&nbsp;&nbsp;&nbsp; WORD wCheckSum; /*UDP CheckSum*/<br />
}UDPPACKETHEADER_S,*PUDPPACKETHEADER_S;<br />
<br />
/*IP Packet Header*/<br />
typedef struct tagIPPackerHeader<br />
{<br />
&nbsp;&nbsp;&nbsp; BYTE byHeadlen:4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*head length*/<br />
&nbsp;&nbsp;&nbsp; BYTE byVer:4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*version*/&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; BYTE byTOS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Type of Service*/<br />
&nbsp;&nbsp;&nbsp; WORD wPacketLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Packet Length*/<br />
&nbsp;&nbsp;&nbsp; WORD wSequence;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Sequence number*/<br />
&nbsp;&nbsp;&nbsp; WORD wMarkFragPoi;&nbsp;&nbsp;&nbsp;/**/&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; BYTE byTTL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Time Life*/&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; BYTE byProtocolType; /*byProtocolype*/<br />
&nbsp;&nbsp;&nbsp; WORD wHeadCheckSum;&nbsp;&nbsp;/*Check Sum*/<br />
&nbsp;&nbsp;&nbsp; DWORD dwIPSrc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Source IP*/<br />
&nbsp;&nbsp;&nbsp; DWORD dwIPDes;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Destinate IP*/<br />
}IPPACKETHEADER_S,*PIPPACKETHEADER_S;<br />
<br />
/*&nbsp;&nbsp;PPP Packet Header*/<br />
typedef struct tagPPPPackerHeader<br />
{<br />
&nbsp;&nbsp;&nbsp; BYTE byFrame;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Frame 0x7e*/<br />
&nbsp;&nbsp;&nbsp; BYTE byAddress;&nbsp;&nbsp;/*address 0xFF*/&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; BYTE byControl;&nbsp;&nbsp;/*control 0x03*/<br />
&nbsp;&nbsp;&nbsp; WORD wProtocal;&nbsp;&nbsp;/*protocal 0021 c021 8021*/&nbsp;&nbsp;&nbsp; <br />
}PPPPACKETHEADER_S,*PPPPPPACKETHEADER_S;
游客请输入验证码
浏览1970477次