2.2 IPv4报文头与QoS

2.2.1 IPv4报文头的结构

IP数据报是第三层传输的协议数据单元。IP数据报分为报文头和数据区两部分,其中报文头部分的各项字段反映了IP协议的工作机制。

IP数据报的具体格式如图2-5所示。

图2-5 IP数据报的格式

下面解释各字段的含义。

● 版本号(VERS)——4比特,表示IP协议版本号。目前的版本号是4,即IPv4。版本号规定了数据报的格式。版本不同,其数据报格式也有所不同,如IPv6的报文结构就和IPv4的结构不同。

● 报文头长度(HLEN)——4比特,表示报文头长度。报文头长度以4B为单位计算。除IP选项(IP Options)和填充(Padding)字段可以不存在外,其他各字段必须存在。这些必须存在的字段是5个4B,共20B长。因此,报文头长度值一般是5。又由于报文头长度必须是32比特的整数倍,所以当一个含有IP选项字段的IP数据报不是32比特的整数倍时,由填充字段用0补足。

● 服务类型(Type of Service)——即ToS字段,8比特,指示对本数据报的处理方式。它主要用来指示数据报的优先权及传输类型。QoS技术就是使用此字段对数据进行标记优先级的。

● 总长(Total Length)——16比特,以B为单位表示整个IP数据报长度,包括报文头及其携带的数据。因为总长字段是16比特,所以IP数据报最长可达216-1=65535个字节。

标识(Identification)、标志(Flags)、片偏移(Fragment Offset)这3个字段与IP报文的传输有关。IP数据报是网络层的数据单元,它需要被封装在第二层的数据帧中来传输。互联网是由各种二层规范不同的网络互联起来的产物,这些不同的网络的帧格式及帧长度各不相同。例如,以太网的帧和令牌环的帧在结构和长度上都不相同。IP数据报在某个二层网络中能够被完全封装,到另一个二层网络中就未必可以。因此,IP数据报有可能被分割,称为“分片(fragmenting)”,当数据到达目的地时还要对分片进行重组。上述3个字段正是用于对分片和重组进行控制的。

● 标识(Identification)——16比特,是发送者赋予数据报的标识符,接收者利用这个信息和源地址判断收到的分组属于哪个数据报,以便进行重组。因此,在分片时,该域必须不加修改地复制到各分片的报文头中。

● 标志(Flags)——3比特,只有低两位有效。第一比特为0时表示该分片是最后一片,如果该位是1表示后面还有分片。第二比特为0时表示可以对数据报进行分片,如果该位是1表示数据报不能分片。当该位设置为1而帧长度不匹配又必须分片时,设备就会将数据报丢弃并返回错误信息。

● 片偏移(Fragment Offset)——指示本分片数据在初始数据报数据区中的偏移量,偏移量以8个B为单位,重组时分片顺序由片偏移提供。

● 生存时间(Time To Live)——简称TTL,8比特,用来控制数据报在网络中存在的时间。目前TTL的值并不代表时间,而是代表经由路由器的个数。数据报每经过一台路由器时,路由器将TTL值减1,一旦TTL=0,系统就丢弃该数据报,并返回错误信息。这样避免了路由出现环路时数据报在路由器之间无休止地循环。

● 协议(Protocol)——8比特,表示该数据报携带的数据是由哪个上层协议封装的,也就是指示传输层的协议类型。如最常见的协议类型是TCP或UDP。

● 头校验和(Header Checksum)——16比特,用于保证IP头数据的完整性。

● 地址(Address)——分为源IP地址和目的IP地址,各占32比特,表明数据的来源及其到达的目的地。

● 选项(IP Options)——本书不讨论。

● 填充(Padding)——当IP报文头长度不是32比特的整数倍时,填充0来凑齐32比特整数倍,没有实际意义。

● 数据(Data)——来自第4层的数据段。

2.2.2 IPv4 ToS字段

如图2-6所示,ToS字段是1B,根据RFC1122的定义,IP优先级(IP Precedence)使用最高3比特,可以定义8个服务等级。第3到第5比特由RFC791定义,称为DTR(Delay,Throughput,Reliability)位,后来RFC1349又扩展到第6位。最后1比特必须为0(Must Be Zero)。

图2-6 IPv4 ToS字节的使用

8个优先级的定义如下:

● 111——Network Control(网络控制);

● 110——Internetwork Control(网间控制);

● 101——Critic(关键);

● 100——Flash Override(疾速);

● 011——Flash(闪速);

● 010——Immediate(快速);

● 001——Priority(优先);

● 000——Routine(普通)。

优先级6和7一般保留给网络控制数据使用,如路由。

优先级5推荐给语音数据使用。

优先级4由视频会议和视频流使用。

优先级3给语音控制数据使用。

优先级1和2给数据业务使用。

优先级0为默认标记值。

在标记数据时,既可以使用数值,也可以使用名称(英文名称)。

第3到6比特的含义如下:

0000——normal service;

1000——minimize delay;

0100——maximize throughput;

0010——maximize reliability;

0001——minimize monetary cost。

QoS没有使用这4比特的定义。