IP(Internet Protocol)是互联网的基本通信协议,它负责数据包的传输,而数据包则组合成一个又一个的数据报文进行传输。IP报文是指数据报文中与IP协议相关部分的结构。本文将从报文结构的组成、各部分的含义以及IP报文与TCP/IP协议栈的关系三个角度进行分析。
1. 报文结构的组成
IP报文结构由报头和数据部分组成,其中报头位于数据部分之前,占用20字节。报头由基本报文头部分和非必需报文头部分构成。基本报文头部分有20字节,具体包含以下字段:
版本号:指示正在使用的IP协议版本,常用的有IPv4和IPv6两个版本;
首部长度:指示IP报文首部的长度,采用4字节为一个单位计算;
区分服务:指示该数据报文在网络中优先级的程度;
数据长度:指示整个数据报文的长度(包括自身和数据部分);
标识:每个IP分组都需要一个唯一标识符,用于识别数据报的分片;
标志:共3位,其中第1位表示是否分片,第2位为保留,第3位为是否为最后一片;
片偏移:指示数据报分片之间的顺序;
生存期:即Time to Live,用来防止数据包无限循环,在传输过程中每经过一跳减1,当为0时,数据包被丢弃;
传输协议:指示IP层之上的传输层协议,如TCP、UDP等;
首部校验和:校验IP数据包首部是否出错;
源IP地址:指发送方的IP地址;
目的IP地址:指接收方的IP地址。
IP报文头部的非必需部分称为选项(Options),不一定存在,如果存在的话则由0或多个选项构成,用来支持特定的IP处理和控制。选项信息最长可达40字节。选项有许多种类,常用的包括安全选项、时间戳选项、记录路径选项等。
2. 各部分的含义
(1)版本号和首部长度
版本号指明了IP协议的版本,IPv4的值为4,IPv6的值为6。而首部长度则表示IP首部的长度。这个字段的4个比特位可表示的值为:5、6、7、8. 即IP首部的长度最小为5字节(这5个字节存储的是必备的字段信息,如上述基本报文头部分),最大为8字节(含有最多40字节的选项信息)。
(2)区分服务(TOS)
用于指定数据包在传输中的优先级。TOS字段包括了延时、吞吐量、可靠性和费用四个特性。
(3)标识、标志和片偏移
若数据包过大,IP协议便会将其分割成多个数据包来传输,以保证可靠传输。在IP报文最开始的地方就有一个标志位,如果数据包“可以被分割”,则这个位会被置1。例如,传输2 KB的数据包,IP协议可以将其分成两个1 KB的数据包进行传输。IP报文不仅可以进行分割,还可以进行重组,使用“标识、标志和片偏移”三个字段来实现。标识符指明了已经被分割的数据包的唯一标识,标志位有三种取值,第一位表示是否对数据报进行分割,第二位在一些IPv4协议中保留,第三位用于标识是否是数据报的最后一片。而片偏移则表示前面片中的数据量,通过计算前面的片中的字节数得到。偏移量的即为下一片的开始序号。
(4)生存期(TTL)
Time to Live(TTL)字段指定了数据包的最大跳数。在数据包经过一跳路由器时,路由器会将该字段的值减1,直到TTL值为0。当TTL值为0时,该数据包会被路由器丢弃。这样可以防止由于网络异常而导致数据包无限循环的问题。
(5)传输协议
传输协议字段指明了上一层协议的类型,例如TCP、UDP等。该字段为8位的数值。
(6)源IP地址和目的IP地址
源IP地址是指发送端的IP地址,而目的IP地址则是指接收端的IP地址。IPv4地址为32位,IPv6地址为128位。
3. IP报文与TCP/IP协议栈的关系
IP位于TCP/IP协议栈的网络层,是上层传输层协议的基础。IP协议提供了一个有序、不可靠的数据包传输服务,上层协议如TCP和UDP等需要提供其他可靠性的服务,而这些服务都建立在IP层之上。TCP处于IP协议的上层,是一个可靠的传输协议。当TCP需要将数据传输到对端主机时,TCP会利用IP向目标主机发送数据包,数据包中携带目标主机的IP地址,目标主机将首先通过数据包中的IP地址所在的网络地址找到网关路由器,并将数据包发给网关路由器。路由器将数据包根据各自的转发策略,判断以后将数据包发给下一跳,一直到数据包传输至目标主机。UDP与TCP类似,但是其是一种无连接协议,不保证数据包的可靠传输,但是传输速度更快。