IPv4首部一般是20字節長。在以太網幀中,IPv4包首部緊跟着以太網幀首部,同時以太網幀首部中的協議類型值設置為080016。 IPv4提供不同,大部分是很少用的選項,使得IPv4包首部最長可擴展到60字節(總是4個字節4個字節的擴展)
0 |
4 |
8 |
12 |
16 |
19 |
24 |
31 |
版本 |
首部長度 |
服務類型 |
長度 |
||||
認證 |
標志 |
段偏移量 |
|||||
TTL |
校驗和 |
||||||
源IP地址 |
|||||||
目的IP地址 |
|||||||
選項 ... |
IP包頭字段說明
版本:4位,指定IP協議的版本號。
包頭長度(IHL):4位,IP協議包頭的長度,指明IPv4協議包頭長度的字節數包含多少個32位。由於IPv4的包頭可能包含可變數量的可選項,所以這個字段可以用來確定IPv4數據報中數據部分的偏移位置。IPv4包頭的最小長度是20個字節,因此IHL這個字段的最小值用十進制表示就是5 (5x4 = 20字節)。就是說,它表示的是包頭的總字節數是4字節的倍數。
服務類型:定義IP協議包的處理方法,它包含如下子字段
過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值范圍為:0(正常)~ 7(網絡控制)
延遲字段:1位,取值:0(正常)、1(期特低的延遲)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
未使用:1位
長度:IP包的總長
認證:
標志:是一個3位的控制字段,包含:
保留位:1位
不分段位:1位,取值:0(允許數據報分段)、1(數據報不能分段)
更多段位:1位,取值:0(數據包后面沒有包,該包為最后的包)、1(數據包后面有更多的包)
段偏移量:當數據分組時,它和更多段位(MF, More fragments)進行連接,幫助目的主機將分段的包組合。
TTL:表示數據包在網絡上生存多久,每通過一個路由器該值減一,為0時將被路由器丟棄。
協議:8位,這個字段定義了IP數據報的數據部分使用的協議類型。常用的協議及其十進制數值包括ICMP(1)、TCP(6)、UDP(17)。
校驗和:16位,是IPv4數據報包頭的校驗和。
源IP地址:
目的IP地址:
IP協議是在網絡層的協議.它主要完成數據包的發送作用. 下面這個表是IP4的數據包格式,IP封包格式(IPv4包首部長度為20字節)
|0......4........8..............16....................................32
-------------------------------------------------------------------------
|版本4.|首部長度|服務類型(優先級|數據包總長............................|
-------------------------------------------------------------------------
|標識...........................|RF|DF|MF|碎片偏移.....................|
-------------------------------------------------------------------------
|生存時間TTL....|協議(TCP/UDP)..|首部較驗和............................|
-------------------------------------------------------------------------
|源IP地址..............................................................|
-------------------------------------------------------------------------
|目的IP地址............................................................|
-------------------------------------------------------------------------
|選項..................................................................|
=========================================================================
|數據..................................................................|
-------------------------------------------------------------------------
Version (4) Internet Header Length (4) Type of Service (8) Total Length (16)
Identification (16) Flags (3) Fragment Offset (13)
Time To Live (8) Protocol (8) Header checksum (16)
Source Address (32)
Destination Address (32)
Options (Variable) Padding (0-24)
Data
....
IP包字段含義
下面我們看一看IP的結構定義
struct ip
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4;
unsigned int ip_v:4;
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4;
unsigned int ip_hl:4;
#endif
u_int8_t ip_tos;
u_short ip_len;
u_short ip_id;
u_short ip_off;
#define IP_RF 0x8000
#define IP_DF 0x4000
#define IP_MF 0x2000
#define IP_OFFMASK 0x1fff
u_int8_t ip_ttl;
u_int8_t ip_p;
u_short ip_sum;
struct in_addr ip_src, ip_dst;
};
ip_v IP協議的版本號,這里是4,現在IPV6已經出來了
ip_hl IP包首部長度,這個值以4字節為單位.IP協議首部的固定長度為20個字節,如果IP包沒有選項,那么這個值為5.
ip_tos服務類型,說明提供的優先權.
ip_len說明IP數據的長度.以字節為單位.
ip_id標識這個IP數據包.
ip_off碎片偏移,這和上面ID一起用來重組碎片的.
ip_ttl生存時間.沒經過一個路由的時候減一,直到為0時被拋棄.
ip_p協議,表示創建這個IP數據包的高層協議.如TCP,UDP協議.
ip_sum首部校驗和,提供對首部數據的校驗.
ip_src,ip_dst發送者和接收者的IP地址
關於IP協議的詳細情況,請參考 RFC791