在互联网中,两个互联网模块(即主机、路由器、网关等)之间的通信,是执行互联网协议(IP,Internet Protocol)。互联网协议(IP)规定了通信信息的数据传输格式,这称为互联网报文(internet datagram),或称数据报。所谓互联网报文,是指在一对互联网模块之间交换的数据单位(包括互联网报头)。在RFC 791《Internet Protocol》中规定了互联网报文的格式,它是由报头和报文数据信息构成。RFC 791规定的互联网协议属于IPv4版本。IPv4的报文格式如下图0所示。
图0:IPv4报文(Datagram)格式
欲详细了解互联网协议介绍的请进入。
一、报头
由图0可知,IPv4的报文格式是用二进制比特表示,4个字节(32比特)构成一个单元。互联网报头(Internet Header)是指“消息、段、数据报、数据的分组或块的开头的控制信息”。它分为固定长度部分和可变长度部分。报头中每单元由一个或多个字段构成。每字段的长度(比特位)不同,但各字段的长度是固定的,这就是固定长度部分的报头,由前12个字段构成,共占用20个字节。报头可变长度部分只有最后一个字段,即“可选项(Optional)”字段。下述对各字段分别做一介绍。
1、版本(Version)字段:
版本(Version)字段表示互联网报头的格式。其字段长度为4比特。IPv4的该字段之值为“4”(二进制表示为0100)。该值是由RFC 1700《Assigned Numbers》规定的,RFC 1700对于互联网协议体系(也称套件)版本号码(0~15)分配详见下表1-1。
表 1-1:互联网协议体系版本号的规定
2、报头长度(IHL,即Internet Header Length)字段:
该字段长度为4比特。由于报头中有可选字段,因而报头长度不固定,此字段之值指明报头为4字节的倍数。此字段的最小值为5,表示只有固定长度部分而无选项,即报头长度为20字节;该4比特字段的最大值为15,故报头最长为60字节;
3、服务类型(TOS,Type Of Service)字段:
服务类型字段的长度为8比特(1个字节)。该字段用于指明用户期望的非量化的服务质量,IPv4对TOS字节中各比特的用途规定如下图1-3所示,
图 1-3:IPv4对服务类型比特的规定
其中:PPP(Precedence)表示优先权,3比特(第0~2比特),用于指明报文的重要性或优先级别,以及后续参数(D、T、R)映射为实际网络的服务质量的方式;D(Delay attribute)表示延迟属性,1比特(第3比特);T(Throughput attribute)表示吞吐率属性,1比特(第4比特);R(Reliability attribute)表示可靠性属性,1比特(第5比特);第6~7比特留作备用,其值恒为0。对于TOS前6比特的取值及含义具体详见下表1-3-1。另外,RFC 795对在ARPANET、PRNET和SATNET内服务质量的映射作了具体的规定。
表 1-3-1:IPv4服务类型值
在实践中,IPv4文本中对TOS字节中D、T、R比特的定义并未获得实际应用,也未强制用户使用上述比特。1981年的RFC 1700、1992年的RFC 1349和1993年的RFC 1455进一步规范了“优先级(Precedence)”之后5比特域的使用规则,将前4比特称为TOS域,最后1比特称为“必为零比特”(MBZ,即Must Be Zero)。此后,所有主机发送IP报文时都必须使用这5比特。下表1-3-2列出了RFC 1700和RFC 1349中总结的TOS域代码和意义。这一规定的意图在于利用TOS域作为路由器选择路径的基础。
表 1-3-2:IPv4的TOS域之规定
从上面的讨论我们可以看出:IPv4追求的服务质量是一种尽其所能的质量,在费用、可靠性、吞吐率、延时和安全性等5个方面选择一个最重要的指标,请求网络传输系统就其所能尽量满足。这与X.25网络和ATM网络对服务质量的要求不同。
4、报文总长度(Internet Datagram Total Length)字段:
报文总长度字段长度为 16比特(两个字节),用于指示报文(Datagram)总的长度,以8字节为单位,包括报头和报文数据信息。允许IP报文的最大长度为65536字节。但由于实际网络支持的长度可能不同,IPv4要求支持的最大报文长度至少为576字节,即至少允许存放512字节的用户数据(64+512);
5、报文标志符(Identification)字段:
也为16比特长度的字段,发送方指定的一种标识值,用于帮助组合数据报的“片(Fragment)”。在该报文存活期内,在同一对通信目标间的报文中,此标志符之值必须惟一。因此,在报文“片”重新合成报文时,可用它作为“片”与原报文之间的关联标志符。
注意:互联网片(Internet Fragment)是指带有互联网报头的互联网数据信息的一部分数据。“片”由1个或多个8字节数据块(“片块”,Fragment Block)组成。
6、标志字段(Flags):
标志字段(Flags)用作各种控制标志。其字段长度为3比特,各比特的用意详见下表1-6(注意:除最后一“片”外,前面的“片”必须为8字节(64比特)的整数倍)。
表 1-6:标志字段(Flags)各比特用用意
7、片位移(Fragment Offset)字段:
片位移字段的长度为13比特(因为前面标志字段占用3比特)。该字段表示该“片”在数据报中的位置,片偏移量以8个字节(64位)为单位测量,第一个片的偏移量为0。片由1个或多个8字节组成的数据块(“片块”,Fragment Block)。每个数据片中的片块数(NFB,即Number of Fragment Block)将用作片位移的计数增量。例如:报文的第一“片”的该字段为“0”,若该“片”为512字节(NFB=64),分片后第2个报文的片位移字段内应为“64”,余类推。由于IP报文的最大长度为65536字节,故最大片位移量为8191。
8、存活期(TTL,Time To Live)字段:
TTL字段长度为8比特,用于指明报文在互联网内还能够生存的时间(单位:秒)。经过一个路由器,处理报头的模块至少对该值减1(即使处理时间不到1秒),当该值减为0时,该报文被丢弃,以防止报文在互联网内长时间循环。目前推荐使用的存活期(TTL)的缺省初始值为64。
存活期以时间秒为单位进行计算和处理在实践中很难进行,标准文本中也没说怎么实现。如果以绝对时间为基础进行计算,就要求全网时钟同步或具有某种“时戳”(Time Stamping)系统,而该功能属于选项,并非所有网络都支持。在实践中,最简单的方法是计算跨过的中间节点数(Hop),许多IPv4协议实现就是这样做的,IPv6已将该字段改为“Hop Limit”。
9、协议(Protocol)字段:
该字段长度为8比特。用于标志在IP报文用户数据字段内部装载的下层协议数据使用的协议(如:TCP),RFC 1700对此字段数字作了明确的规定。下面将IP层之上的典型协议十进制代码列举如下,详见表1-9。
表 1-9:相关标准对典型IP上层协议的编号列表及协议的中英文对照
10、报头校验和(Header Checksum)字段:
该字段长度为16比特,只对报头进行校验和。由于一些报头字段发生了变化(例如,生存时间),因此在处理互联网报头的每个点上都要重新计算和验证。IPv4的16位校验码采用简单的16位求反码的方式获得,而没有采用循环冗余校验方式.。
11、源地址/目的地址(Source/Destination Address)字段:
源地址和目的地址的字段长度均为32比特(4个字节),并有其专门的格式。
欲详细了解IPv4的地址(源地址和目的地址)技术要求的请进入。
12、可选项(Optional)字段:
该字段是报文头中的可选择部分。其字段长度可变,最大总长度为44字节。为了与报文长度为4字节的整倍数相适应,选项部分总长度也必须为4字节的整倍数,否则应通过填充字段(Padding)补齐。应当指出:尽管单个报文中可能有一个或一个以上的选项,也可能无选项,但实现IPv4协议的软、硬件则必须支持所有种类的选项。
选项具有下图1-12所示的通用格式,但某些选项可能只有第1字节(选项类型Option Type)。选择类型又由3个字段(Copied Flag,Option Class和Option Number)组成,这3个字段的取值要求详见下表1-12-1。
图 1-12:IP报文选项通用格式示意图
表 1-12-1:选择类型中各字段的取值
下表1-12-2为典型IPv4选项的内部字段及选项用途说明。目前相关标准文本(RFC 1700)中定义了19种选项(注意:表1-3-1中只列出了其中的8种典型选项),它们分别与安全、源选径、路径记录、连续报文流和报文在网内传输过程中加盖时戳等有关。
表 1-12-2:典型IPv4选项的内部字段及选项用途说明
二、报文的数据信息
报头后紧跟报文的数据信息。报文的数据信息即两个互联网模块间应传送的用户数据。包括报头(含固定长度部分和可变长度部分)最大长度为65536字节(4字节的整倍数)。
三、报文的示例
下图3是一个IPv4的携带最小数据的互联网报文的例子(注意,每个刻度表示一个比特的位置)。其报头由5个32比特(4字节)组成,数据报的总长度为21个八位字节。这个数据报是一个完整的数据报(无“片”段)。
图 3:IPv4的携带最小数据的互联网报文示例
四、报文中比特的传输顺序
报文中报头和数据的传输顺序被解析为八位字节级别。当图表显示一组八位元时,这些八位位元的传输顺序是它们在英语中阅读的正常顺序。例如,在下图4中(每个刻度表示一个比特的位置),八位位元是按照十进制的编号顺序传输的。当八位字节表示一个数字量时,图中最左边的位是高阶或最高有效位。也就是说,十进制标记为0的位是最高有效位。
图 4:比特的传输顺序
欲详细了解互联网IPv6报文格式的请进入。