天天看點

IP資料報的結構及定義

IP資料報的結構及定義

1 版本域:表示資料報相對應的IP協定是多少,目前是4(代表IPv4,但IPv6也許要替代IPv4了)

2 首部長度:4位,IP協定標頭的長度,指明IPv4協定標頭長度的位元組數包含多少個32位。由于IPv4的標頭可能包含可變數量的可選項,是以這個字段可以用來确定IPv4資料報中資料部分的偏移位置。IPv4標頭的最小長度是20個位元組,是以IHL這個字段的最小值用十進制表示就是5 (5x4 = 20位元組)。就是說,它表示的是標頭的總位元組數是4位元組的倍數。

3 服務類型:定義IP協定包的處理方法,它包含如下子字段

過程字段:3位,設定了資料包的重要性,取值越大資料越重要,取值範圍為:0(正常)~ 7(網絡控制)
延遲字段:1位,取值:0(正常)、1(期特低的延遲)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
未使用:1位

4 總長度域:IP包的總長,以位元組為機關

5 辨別域:是源機賦予資料報的辨別符,以便目的機進行分片的重組工作;

6 标志:是一個3位的控制字段,包含:

                                                    保留位(2):1位

                                                不分段位(1):1位,取值:0(允許資料報分段)、1(資料報不能分段)

                                                更多段位(0):1位,取值:0(資料包後面沒有包,該包為最後的包)、1(資料包後面有更多的包)

7 段偏移量:當資料分組時,它和更多段位(MF, More fragments)進行連接配接,幫助目的主機将分段的包組合。偏移量是以8個位元組為機關的;

8 TTL:表示資料包在網絡上生存多久,每通過一個路由器該值減一,為0時将被路由器丢棄。

9 協定:8位,這個字段定義了IP資料報的資料部分使用的協定類型。常用的協定及其十進制數值包括ICMP(1)、TCP(6)、UDP(17)。

10 校驗和:16位,是IPv4資料報標頭的校驗和。

11 源IP位址:為發送方的IP位址  4位元組,0x0a0x080x7a0xfe  對應IP位址  10.8.122.254  

12 目的位址:接收方IP位址

13 選項域:可有可無

 // IP header

typedef struct _tagX_iphdr

{

 unsigned char h_len:4;          // IP報頭長度  4位     5<<2 =20

 unsigned char version:4;        // 版本     4位        4

 unsigned char tos;             // 服務類型  8位        0

 unsigned short total_len;      // 總長度               16位   0042

 unsigned short ident;          // 辨別                 16位   410e

 unsigned short frag_and_flags; // 報片标志偏移             4+12位 0000

 unsigned char ttl;    // 生存時間              8位    80

 unsigned char proto;           // 協定(TCP, UDP etc)       8位    01

 unsigned short checksum;       // 報頭校驗和           16位        d4d1

 unsigned int sourceIP;       //信源IP位址           32位        0a 00 08 7a

 unsigned int destIP;         //信宿IP位址           32位        0a 00 08 7a

}XIpHeader;

//TCP header

 typedef struct _tcphdr

{

 byte source_port[2]; //發送端端口号,16位

 byte dest_port[2];  //接收端端口号,16位

 byte sequence_no[4]; //32位,标示消息端的資料位于全體資料塊的某一位元組的數字

 byte ack_no[4];   //32位,确認号,标示接收端對于發送端接收到資料塊數值

 byte offset_reser_con[2];//資料偏移4位,預留6位,控制位6為

 byte window[2];   //視窗16位

 byte checksum[2];  //校驗碼,16位

 byte urgen_pointer[2]; //16位,緊急資料指針

 byte options[3];  //選祥和填充,32位

}TCP_HEADER;

繼續閱讀