0%

IPv4报文

IPv4报文是一种可变长报文,由“首部”和“数据”两部分组成:

  1. 首部:由“固定首部”和“可选首部”两部分组成,长度范围为[20字节,60字节]
    • 固定首部:从版本字段到目的地址字段为止,长度为定长20字节
    • 可选首部:在目的地址字段和数据字段之间,长度范围为[0字节,40字节],且为4字节倍数
  2. 数据:IPv4报文数据,长度范围为[0字节,65535字节-20字节=65515字节]

整个IPv4报文长度范围为[20字节,65535字节]


下表是上述3部分的示意。

固定首部可选首部数据

下表是固定首部的示意。

版本(4 bits)首部长度(4 bits)区分服务(8 bits)总长度(16 bits)
标识(16 bits)标志(3 bits)片偏移(13 bits)
生存时间(8 bits)协议(8 bits)首部检验和(16 bits)
源地址(32 bits)
目的地址(32 bits)

一、固定首部

1.1、版本

英文名:Version

长度:4 bits。

含义:指明IP协议版本号,IPv4版本的话其值为0100

1.2、首部长度

英文名:Header Length

长度:4 bits。

含义:指明本IPv4报文首部长度,以4字节为单位,故首部长度必为4字节倍数,其值范围为[0101,1111],对应的首部长度范围为[20字节,60字节]。最常用的就是20字节,即:只有固定首部,没有可选首部。

1.3、区分服务

英文名:Differentiated Services Field (DS)

长度:8 bits。

含义:分为“6 bits的区分服务代码点(Differentiated Services Codepoint,DSCP)”和“2 bits的显式拥塞通知(Explicit Congestion Notification,ECN)”两部分:1)前者可用来标识该IPv4报文数据的服务类型,在支持该字段的网路设备(一般是“路由器”)的配合下,可提供不同服务质量等级(Quality of Service,QoS)的IP服务;2)后者用来扩展拥塞控制机制。

扩展说明:

  • 之前该字段被设计作为“服务类型(Type of Service,TOS)”,已废弃,被DS替代
  • 网络设备是否支持该字段、对该字段的支持程度、对该字段支持的具体落地方案等由生产厂商自决定

1.3.1、DSCP

用于区分不同服务。

备注:对于恶意攻击流量恶意设置DSCP值,以期达成“攻击流量在网络中的优先级高于正常流量”目标,是否可行以及可行情形如何应对,笔者不甚清晰。[3]

1.3.1.1、支持DSCP字段的路由器的应对行为分类

支持DSCP字段的路由器的应对行为分为4类:

  1. Expedited Forwarding PHB (EF PHB):迅速转发PHB
  2. Assured Forwarding PHB (AF PHB):确保转发PHB
  3. Default Forwarding PHB (DF PHB):默认转发PHB
  4. Class Selector PHBs:该分类主要是为了兼容TOS
1.3.1.2、Service Class

RFC 4594

1.3.1.3、DSCP说明
DSCP二进制 DSCP十进制 PHB 细分 Service Class
001,010 10 AF AF1 + 低丢弃优先级 High-Throughput Data
001,100 12 AF AF1 + 中丢弃优先级 High-Throughput Data
001,110 14 AF AF1 + 高丢弃优先级 High-Throughput Data
010,010 18 AF AF2 + 低丢弃优先级 Low-Latency Data
010,100 20 AF AF2 + 中丢弃优先级 Low-Latency Data
010,110 22 AF AF2 + 高丢弃优先级 Low-Latency Data
011,010 26 AF AF3 + 低丢弃优先级 Multimedia Streaming
011,100 28 AF AF3 + 中丢弃优先级 Multimedia Streaming
011,110 30 AF AF3 + 高丢弃优先级 Multimedia Streaming
100,010 34 AF AF4 + 低丢弃优先级 Multimedia Conferencing
100,100 36 AF AF4 + 中丢弃优先级 Multimedia Conferencing
100,110 38 AF AF4 + 高丢弃优先级 Multimedia Conferencing
101,110 46 EF / Telephony
001,000 8 Class Selector CS1 Low-Priority Data
010,000 16 Class Selector CS2 OAM
011,000 24 Class Selector CS3 Broadcast Video
100,000 32 Class Selector CS4 Real-Time Interactive
101,000 40 Class Selector CS5 Signaling
110,000 48 Class Selector CS6 Network Control
111,000 56 Class Selector CS7 Reserved for future use
000,000 0 DF / Standard

扩展说明:其他DSCP值默认对应DB PHBStandard Service Class

1.3.2、ECN

ECN:设计用来完善整个拥塞控制机制。

之前的拥塞控制机制:传输层通过丢包感知到拥塞,进行拥塞控制。

ECN——网络层提供的显式拥塞控制标记:

  1. 之前的拥塞控制是隐式的,被动的,实际可根据路由器内排队情况提前预测是否拥塞,进行拥塞显式标记,以期提前介入,避免丢包,更快缓解拥塞,一般路由器只工作在网路层,故上述拥塞显式标记只能在网络层协议报文实现,此即ECN产生的背景
  2. 引入ECN后,传输层除了通过丢包感知拥塞之外,也可根据ECN感知拥塞

ECN值含义如表1。

表1

ECN值 含义
00 不支持ECN的传输,非ECT (Non ECN-Capable Transport)
10 支持ECN的传输,ECT (0)
01 支持ECN的传输,ECT (1)
11 发生拥塞,CE (Congestion Experienced)

1.4、总长度

英文名:Total Length

长度:16 bits。

含义:整个IPv4报文的长度(单位是“字节”,最大值为2^16-1=65535,即整个IPv4报文最大为65535个字节),包括“首部”和“数据”。

1.5、标识、标志和片偏移

首先介绍IPv4报文分片概念:

  1. 数据链路层协议都规定了一个该层协议报文能接收的上层协议递交数据的最大长度,该最大长度被称为最大传送单元MTU(Maximum Transfer Unit),比如以太网协议的MTU值为1500个字节。当IPv4报文总长度超过所使用数据链路层协议的MTU后,需要将该IPv4报文分割成几个,使得每个分割后IPv4报文总长度不超过MTU,该过程即为分片,在IPv4报文接收端会将属于同一个IPv4报文的分片报文重新组装成原IPv4报文
  2. 具体分片过程:
    • 首部。复制原报文的首部,在复制过程中,部分字段保持不变,部分字段有所变化:1)保持不变字段——版本,首部长度,区分服务,标识,生存时间,协议,源地址,目的地址,可选首部;2)有所变化:总长度,标志,片偏移,首部检验和
    • 数据。分片数据的长度具体协议实现软件具体决定,只须满足两个限制条件:1)分片后分片总长度不超过MTU;2)假如分成N个分片,则前N-1个分片数据长度为8字节的倍数

1、例子1
一个IPv4报文长度为3820字节(数据长度为3800字节,首部长度为20字节),其使用的数据链路层协议的MTU为1500个字节,须进行分片(示例中将分片数据最大长度选为1400个字节),分片后首部中变化字段情况描述如下。

/ 总长度 标志(DF-MF) 片偏移 首部检验和
原始报文 3820 0-0 0 原始报文首部检验和
分片1报文 1420 0-1 0 分片1首部检验和,独立计算
分片2报文 1420 0-1 175(1400/8=175) 分片2首部检验和,独立计算
分片3报文 1020 0-0 350(2800/8=350) 分片3首部检验和,独立计算

以上分片2报文假定经过一个网络,其使用的数据链路层协议的MTU为1000个字节,须进行再分片(示例中将分片数据最大长度选为800个字节),分片后首部中变化字段情况描述如下。

/ 总长度 标志(DF-MF) 片偏移 首部检验和
分片2-1报文 820 0-1 175(1400/8=175) 分片2-1首部检验和,独立计算
分片2-2报文 620 0-1 275(2200/8=275) 分片2-2首部检验和,独立计算

2、例子2
一个IPv4报文长度为1508字节(数据长度为1488字节,首部长度为20字节),其使用的数据链路层协议的MTU为1500个字节,须进行分片(示例中将分片数据最大长度选为800个字节),分片后首部中变化字段情况描述如下。

/ 总长度 标志(DF-MF) 片偏移 首部检验和
原始报文 1508 0-0 0 原始报文首部检验和,独立计算
分片1报文 820 0-1 0 分片1首部检验和,独立计算
分片2报文 708 0-0 100(800/8=100) 分片2首部检验和,独立计算

1.5.1、标识

英文名:Identification

长度:16 bits。

含义:IPv4协议实现程序维持一个计数器,每产生一个IPv4报文,计数器就加1,并将此值赋值给该报文的标识字段,标识字段作为该IPv4报文的“标识”,不是序号。当报文不分片时,该标识无实际意义;当报文分片时,分片报文会复制原报文的标识字段,接收端据此会将属于同一个IPv4报文的分片报文重新组装成原IPv4报文。

1.5.2、标志

英文名:Flags

长度:3 bits。

含义:共3位,现在只有后面两位有意义:

  1. 最低位记为MF(More Fragment):
    • MF=1:表示后面还有分片
    • MF=0:1)在分片情形中,表示已是若干分片中最后一个;2)在未分片情形中,表示即原报文本身
  2. 次低位记为DF(Don’t Fragment):
    • DF=1:表示不能分片,即便报文总长度超过所使用链路层协议的MTU值(该种情形下,链路层协议实现程序一般那是丢弃该报文,并发送“ICMP Packet Too Big”报文),此时必有MF=0[4]
    • DF=0:表示允许分片

1.5.3、片偏移

英文名:Fragment offset

长度:13 bits。

含义:当报文不分片时,片偏移字段无实际意义;当报文分片时,片偏移字段的含义是:分片内数据相对于原报文内数据的偏移量,偏移量的具体计算公式为偏移字节数/8(偏移字节数必为8的倍数,这跟上面“假如分成N个分片,则前N-1个分片数据长度为8字节的倍数”的论述是相对应的),具体例子可参见“例子1”和“例子2”。

1.6、生存时间

英文名:Time to Live

长度::8 bits。

含义:生存时间,用于限制数据包在网络上的生存时间,防止数据包在网络中无限循环堵塞网络。在最初设计和实现中,其以秒为单位,报文在经过一个路由器时,该报文的TTL值会被减去在该路由器所耗费的时间,当TTL值减为0时,该报文就会被该路由器丢弃。后来随着技术发展,路由器处理报文的时间远小于1秒,但至少每次减1,因此演变成“跳数限制,每经过一个路由器转发就减去1,减至0后被路由器丢弃”。

1.7、协议

英文名:Protocol

长度:8 bits。

含义:报文数据对应的协议,这个协议一般是传输层协议(“TCP”和“UDP”),但也可能是其他协议,比如“IP(指的是IPv4报文再封装到IPv4报文中)”,“IPv6(指的是IPv6报文再封装到IPv4报文中)”。常见值及对应的协议见下表。

协议名 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP AH ICMP-IPv6 OSPF
字段值 1 2 4 6 8 9 17 41 50 51 58 89

1.8、首部检验和

英文名:Header checksum

长度:16 bits。

含义:用来标识报文首部是否被篡改,须注意——通过首部检验和的检验是首部未被篡改的必要不充分条件。其具体工作机制是:在报文发送端,首先将首部检验和字段置为全0,然后将报文首部以16 bits为一组分成多组(由于首部长度是4字节的倍数,故正好能划分成整数组),执行反码算术运算求和 + 取反码运算,将结果置入首部检验和字段,后续每个路由器都执行上述运算过程,根据上述运算过程的特点,合法结果值应该是0,如果非0,表示必被篡改,直接丢弃。

1.9、源地址

英文名:Source

长度:32 bits。

含义:源IP地址。

1.10、目的地址

英文名:Destination

长度:32 bits。

含义:目的IP地址。

二、可选首部

英文名:Options

长度:可变。结合“1.2、首部长度”小节和“固定首部定长20字节”可知:可选首部长度范围为[0字节,40字节],且须是4字节倍数,否则需要进行0字节填充。

含义:可选首部,用于扩展IPv4头部,实际不常用。

三、数据

结合“1.4、总长度”小节和“1.2、首部长度”小节可知:数据长度范围为[0字节,65535字节-20字节=65515字节]


参考文献

[1]https://en.wikipedia.org/wiki/Differentiated_services
[2]https://zh.wikipedia.org/wiki/%E6%98%BE%E5%BC%8F%E6%8B%A5%E5%A1%9E%E9%80%9A%E7%9F%A5
[3]https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=10314996
[4]https://support.huawei.com/enterprise/en/doc/EDOC1100278546/bc7714b7/understanding-mtu
[5]https://zh.wikipedia.org/wiki/IP%E5%8D%8F%E8%AE%AE%E5%8F%B7%E5%88%97%E8%A1%A8

您的支持将鼓励我继续分享!