IP报文格式
IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议,提供不可靠的、无连接的、尽力而为的数据报传输服务。
协议栈结构
IP协议栈结构
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | | TFTP| ... | ... |
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | ... | ... |
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP |
+-------------------------------+
| L2 Type = 0x0800 |
+-------------------------------+
| L1 |
+-------------------------------+
报文格式
IP头格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP头字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Version | 4bits | 4:表示为IPv4; 6:表示为IPv6。 |
| IHL | 4bits | 首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。 |
| Type of Service | 8bits | 服务类型。只有在有QoS差分服务要求时这个字段才起作用。 |
| Total Length | 16bits | 总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。 |
| Identification | 16比特 | 标识,主机每发一个报文,加1,分片重组时会用到该字段。 |
| Flags | 3比特 | 标志位。详见 |
| Fragment Offset | 13比特 | 片偏移,分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。 |
| Time to Live | 8比特 | 生存时间,可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。 |
| Protocol | 8比特 | 下一层协议,指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 |
| Header Checksum | 16比特 | 首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。 |
| Source Address | 32比特 | 源IP地址。 |
| Destination Address | 32比特 | 目的IP地址。 |
| Options | 可变 | 选项字段,用来支持排错,测量以及安全等措施,内容丰富(请参见)。 选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。 |
| Padding | 可变 | 填充字段,全填0。 |
IP Flags字段
0 1 2
+-----+------+------+
| 0 | DF | MF |
+-----+------+------+
-
Bit 0: 保留位,必须为0。
-
Bit 1: DF(Don't Fragment),能否分片位,0表示可以分片,1表示不能分片。
-
Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。
IP Protocol字段对照表
| Value | 含义 | 标准 |
|---|---|---|
| 0 | 保留Reserved | |
| 1 | ICMP, Internet Control Message | |
| 2 | IGMP, Internet Group Management | |
| 3 | GGP, Gateway-to-Gateway | |
| 4 | IP in IP (encapsulation) | |
| 6 | TCP Transmission Control Protocol | |
| 17 | UDP User Datagram Protocol | |
| 20 | HMP Host Monitoring Protocol | |
| 27 | RDP Reliable Data Protocol | |
| 46 | RSVP (Reservation Protocol) | |
| 47 | GRE (General Routing Encapsulation) | |
| 50 | ESP Encap Security Payload | |
| 51 | AH (Authentication Header) | |
| 54 | NARP (NBMA Address Resolution Protocol) | |
| 58 | IPv6-ICMP (ICMP for IPv6) | |
| 59 | IPv6-NoNxt (No Next Header for IPv6) | |
| 60 | IPv6-Opts (Destination Options for IPv6) | |
| 89 | OSPF (OSPF Version 2) | |
| 112 | VRRP (Virtual Router Redundancy Protocol) | |
| 115 | L2TP (Layer Two Tunneling Protocol) | |
| 124 | ISIS over IPv4 | |
| 126 | CRTP (Combat Radio Transport Protocol) | |
| 127 | CRUDP (Combat Radio User Protocol) | |
| 132 | SCTP (Stream Control Transmission Protocol) | |
| 136 | UDPLite | |
| 137 | MPLS-in-IP |
IP Header Options
IP Header Options
| CLASS | NUMBER | 长度 | 含义 |
|---|---|---|---|
| 0 | 0 | - | Code为0代表了选项列表的结束,放在所有选项链表的后面,用来补字节对齐。该选项无长度字段,占一个字节。详见。 |
| 0 | 1 | - | 表示无操作的选项。用在各种选项之间,占一个字节。用于填充4字节对齐。详见。 |
| 0 | 2 | 11B | 表示安全和处理限制的选项。 该选项提供一种主机可以发送安全、分隔、处理限制及TCC(关闭使用组)的参数功能。详见 |
| 0 | 3 | 可变 | 松散的源站选路(为数据报指定一系列必须经过的IP地址)。详见。 |
| 0 | 7 | 可变 | 记录路径(让每个路由器都记下它的IP地址)。详见。 |
| 0 | 8 | 4B | 流标识选项。详见. |
| 0 | 9 | 可变 | 严格的源站选路选项。与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。详见。 |
| 2 | 4 | 可变 | 时间戳选项。详见。 |
选项结束选项
+--------+
|00000000|
+--------+ Type=0
IP 无操作选项
+--------+
|00000001|
+--------+ Type=1
表示无操作的选项。用在各种选项之间,占一个字节。用于填充4字节对齐。
IP 安全和处理限制的选项
+--------+--------+--...---+--...---+--...---+--...---+
|10000010|00001011|SSS SSS|CCC CCC|HHH HHH| TCC |
+--------+--------+--...---+--...---+--...---+--...---+ Type=130 Length=11
-
Type=130(10000010):占1字节,code 的值此处设为130
-
length=11:占1字节,长度选项固定为11,表示该选项的长度为11字节
-
SSS:占2字节,表示安全域,下面列出了16种不同的安全标准,其中8个至今还没使用,预留将来使用,列表如下:
-
00000000 00000000 - Unclassified
-
11110001 00110101 - Confidential
-
01111000 10011010 - EFTO
-
10111100 01001101 - MMMM
-
01011110 00100110 - PROG
-
10101111 00010011 - Restricted
-
11010111 10001000 - Secret
-
01101011 11000101 - Top Secret
-
00110101 11100010 - (Reserved for future use)
-
10011010 11110001 - (Reserved for future use)
-
01001101 01111000 - (Reserved for future use)
-
00100100 10111101 - (Reserved for future use)
-
00010011 01011110 - (Reserved for future use)
-
10001001 10101111 - (Reserved for future use)
-
11000100 11010110 - (Reserved for future use)
-
11100010 01101011 - (Reserved for future use)
-
-
CCC:占2个字节,表示分隔域,当传输的数据没被分隔的时候,此值设为0。
-
HHH:占2个字节,操作限制域。
-
TCC:占3个字节,传输控制码。提供一种传输隔离的手段,该值为3字母词,可用值从HQ DCA Code 530。
IP 松散源站选路选项
+--------+--------+--------+---------...--------+
|10000011| length | pointer| route data... |
+--------+--------+--------+---------...--------+ Type=131
-
Type: 类型。占1字节,此处设为131。
-
length: 占1字节,记录整个选项的长度。
-
pointer: 指针项,占1个字节,指向下一个被处理的源站地址,最小值为4。
-
route data: 路由数据。
IP 记录路径选项
+--------+--------+--------+---------...--------+
|00000111| length | pointer| route data... |
+--------+--------+--------+---------...--------+ Type=7 Length=Variable
-
Type: 指明IP选项的类型。此处值为7。
-
length: 选项的总字节长度。不包含填充的长度,IP填满时最大为39;。
-
pointer: 它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16,最大到36,当记录下9个IP地址后,ptr的值为40,表示清单已满。
-
route data: 路由数据。
IP 流标识选项
+--------+--------+--------+--------+
|10001000|00000010| Stream ID |
+--------+--------+--------+--------+ Type=136 Length=4B
流标识选项。该选项长度固定为4字节,code值为136,后面的字段固定为0x02,流ID为2字节。该选项提供了一种携带SATNET流标识符通过不支持流方式的网络。
IP 严格源选路选项
+--------+--------+--------+---------...--------+
|10001001| length | pointer| route data ... |
+--------+--------+--------+---------...--------+ Type=137 Length=1B
-
Type=137(10001001):占1字节,code 的值此处设为137。
-
length:占1字节,记录整个选项的长度。
-
pointer:指针项,占1个字节,指向下一个被处理的源站地址,最小值为4。
IP 时间戳选项
0 7 15 23 31
+--------+--------+--------+--------+
|01000100| length | pointer|oflw|flg|
+--------+--------+--------+--------+
| internet address |
+--------+--------+--------+--------+
| timestamp |
+--------+--------+--------+--------+
| ... |
-
Type (01000100):时间戳选项,代码为68;
-
length:选项的总长度(一般为36或40);
-
ponter:指向下一个可用空间的指针(5,9,13等);
-
oflw:表示溢出字段;
-
flg:表示标志字段:
-
0:只记录时间戳。
-
1:每台路由器都记录它的IP地址和时间戳。在选项列表中只有存放4对地址和时间戳的空间。
-
3:发送端对选项列表进行初始化,存放了4个IP地址和4个取值为0的时间戳值。只有当列表中的下一个IP地址与当前路由器地址相匹配时,才记录它的时间戳。
-
参考标准
IP参考标准
| 标准 | 描述 |
|---|---|
| INTERNET PROTOCOL(Updated by: , , ) |
No comments to display
No comments to display