《部署IPv6网络(修订版)》一2.2 IPv6分组格式

  1. 云栖社区>
  2. 博客>
  3. 正文

《部署IPv6网络(修订版)》一2.2 IPv6分组格式

异步社区 2017-05-02 10:43:00 浏览1510
展开阅读全文

本节书摘来自异步社区《部署IPv6网络(修订版)》一书中的第2章,第2.1节,作者【美】Ciprian Popoviciu , Eric Levy-Abegnoli , Patrick Grossetete,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 IPv6分组格式

部署IPv6网络(修订版)
在IPv6中对IP分组头部结构作了修改。这些改动反映了从多年运营IPv4中学到的一些教训,它们对协议操作具有重大影响。由于这些原因,在以下小节将简单地回顾一下IPv6分组格式。

2.2.1 IPv6和IPv4基本头部格式

为了理解是什么促使对IPv6分组头部结构的改动,重要的是回顾其前身(IPv4)的结构。

一个分组有两部分:包含第3层信息的头部,携带数据和高层协议信息的净荷。RFC 791定义了IPv4分组头部的下列字段:

版本(4位)——代表IP协议版本。在这种情况下,字段设置为4。
头部长度(4位)——分组头部长度,以8位字节的数表示。
服务类型(ToS)(8位)——本字段携带使路由器能够以不同方式分类并转发分组的信息。它是用于实现服务质量(QoS)的一个重要的服务标识符。
总长度(16位)——以8位字节的数表示的整个分组长度,头部加上净荷。因为这个字段中有16位,一个IPv4分组的最大长度是65 535个8位字节。
标识(16位)、标志(3位)、分段偏移(13位)——这3个字段使IPv4网络能够在支持各种最大传输单元(MTU)的链路上,支持分组分段协商转发。在分组路径上,路由器根据需要进行分段处理。
存活时间(8位)——重要的是保护网络资源,使之免受由于路由选择问题所导致的分组回环。本字段用于倒计数交换分组的路由器数量。当本字段的值为0时,丢弃分组。
协议号(8位)——协议号列出了在分组净荷中存在的高层协议(TCP、UDP、ICMP等)。代表这些协议的号码是由IANA分配的(http://www.iana.org/assignments/protocol-numbers)。
头部校验和(16位)——分组头部的完整性是通过将计算出的校验和与本字段中列出的值进行比较来验证的。
源IPv4地址(32位)——发出分组的节点IPv4地址。
目的IPv4地址(32位)——分组目的节点的IPv4地址。
选项(可变长度)——本字段是作为位置保留符使用的,用于由分组携带数据的正确处理的相关信息,该信息是在头部其他字段中没有体现的。因为这个字段,IPv4头部具有可变的长度,这就需要头部长度字段。
填充(可变长度)——用于将可变长度的选项字段对齐到32 位边界。
图2-15给出IPv4分组头部结构。

image

重点标示字段的相关性在开发IPv6的过程中已经重新评估。新的头部结构遵循几条新的规则:

基本头部的固定长度——选项字段导致可变长度的IPv4头部(最少20字节)。相反,IPv6的主头部长度固定为40字节,这对进行快速头部处理是有利的,因为路由器不必实现处理可变长度头部的查找过程。固定长度使头部长度字段没有了。由选项提供的功能通过扩展头部来实现,这是在本节后面要描述的一个概念。选项和填充都从主分组头部去除了。
分段仅由流量的源点处理——在发送IPv6流量之前,源执行路径MTU(PMTU)发现。之后它以发现的PMTU长度发送分组,因此将路由器从分段分组的任务中解脱出来。因此,IPv4头部中与分段相关的3个字段(标识、标志和分段偏移)在IPv6中变得不再相关。
注释:

PMTU发现可能非常耗费资源。虽然如此,重要的是要记住,在IPv6中任何链路的MTU不应小于1 280字节,这是在RFC 2460中规定的。
去除了头部校验和——由于变化的存活时间(TTL)值,交换分组的每个节点必须重新计算IP头部校验和,因此加重了路由器资源负担。自从IPv4出现以来,数据链路技术的提高和32 位循环冗余校验(CRC)支持以及第4层校验和提供了足够的保护,从而使第3层头部校验和不再是必须的。因此,在IPv6中去除了分组头部校验和,而在高层中得到增强。重要的是注意这样的事实,即UDP和TCP将基于一个伪头部计算校验和,伪头部中包含IPv6头部的关键信息,如SA和DA。
基于上述一些规则,RFC 2460定义了下列IPv6头部字段:

版本(4位)——IP协议版本,其值设置为6。
流量类型(8位)——执行IPv4头部中服务类型相同的功能。
流标签(20位)——这个字段标识了一个流,其目的是:不需要在分组中进行深度搜索,路由器就能识别应该以类似方式处理的分组。在RFC 3697中给出了这个头部字段的规范。字段由源设置,不应该被到达目的地路径上的路由器修改。
注释:

流标签和SA、DA一起能够唯一地识别IPv6流。这个ID能够在主头部中映射分组中深藏的流量特性,在无需深入地查看分组的情况下,为路由器提供合适地处理分组的能力。流标签能够为路由器提供相关信息(例如,TCP/UDP端口等),这些信息由于分组净荷是加密的而变得不可用。当端到端使用加密时,这将是一种有价值的特性。

流标签字段是IPv6独有的,但它被公认为是一种强大的工具,因此已经建议对IPv4做类似扩充。使用这个字段的应用预期有仅作为一个标记的应用和复杂的应用,后者使用一个信令协议在节点上维持标签状态。流标签能够和下列协议一起使用:区分服务(DiffServ)、集成服务(IntServ)和资源预留协议(RSVP2)。
净荷长度(16位)——因为头部长度固定为40字节,为了确定整个分组的长度,指明净荷长度就足够了。
注释:

注意扩展头部也被认为是分组净荷的一部分。
下一个头部(8位)——本字段扩展了IPv4头部中协议号的功能。它指明直接跟随基本头部的信息类型。这可能是一个扩展头部或净荷中的高层协议。
跳数限制(8位)——在IPv6中,IPv4 TTL被适宜地重命名为跳数限制,因为它是在每一跳都要减1的变量,而且它不具有时间维度。
源IPv6地址(128位)——发出分组的节点的IPv6地址。
目的IPv6地址(128位)——分组目的节点的IPv6地址。
图2-15将IPv6头部和IPv4头部放在一起,以显示它们的差异和相似点。流标签是重点标出的,原因是它代表了IPv6引入的新功能。

2.2.2 IPv6扩展头部

基本IPv6头部对执行简单分组转发和基于ToS或流标签的QoS等功能是足够了。但是,还有比基本头部能力所支持的通信更多的端到端IP通信方式。因为基本头部是固定长度的,IPv6必须寻找另外一种方式以实现IPv4中由选项字段所提供的功能。IPv6是通过扩展头部的概念来实现的。

注释:

实际上,通过扩展头部,IPv6为类似选项的信息提供了更多的空间。IPv4选项受限于40个字节,而IPv6扩展头部仅受限于分组大小。
扩展头部为与分组净荷或分组处理相关的附加信息预先定义位置保留符,并以模块方式提供了弥补基本分组头部功能的方法。每个扩展头部类型的格式都支持某些功能,但所有扩展头部在8字节边界处对齐以维持八位组对齐。

如果需要,扩展头部应串接在一起。在链中,从基本头部开始,每个头部的下一个头部字段是指向后续头部类型的一个指针。在链中最后一个扩展头部的下一个头部字段包含净荷中高层协议的代码号。图2-16展示了一个没有扩展头部的IPv6分组和一个有扩展头部的分组。每一个扩展头部和高层(UL)协议都有一个特定的代码号。

RFC 2460定义了IPv6扩展头部。在多数IPv6入门书籍中,都能够找到扩展头部、它们的格式和功能的详细说明。本节仅给出本主题的简单回顾。

一、逐跳选项头部
逐跳头部(由下一个头部值0来标识)是唯一的扩展头部,它必须由除目的地之外的分组传输路径上的所有节点处理。因此,当存在这个扩展头部时,总是跟在基本IPv6头部后面。这个头部用于,例如,本节后面所描述的加快超大型分组的转发,或者为路由器提供转发指令。

逐跳头部可能携带多个包含其他参数的选项,这些参数应该用于处理分组。选项以类型-长度-值(TLV)的格式进行编码,如图2-17所示。

image

接收到含有逐条扩展头部IPv6分组的每个节点将处理选项。如果有个选项不能被理解,可能向源发送一个Internet控制消息协议(ICMP)错误消息。

注释:

在一个逐跳头部中,一个选项类型对出现次数是没有限制的。不是所有选项类型都产生ICMP错误消息。选项的这些特性极有可能被用于低带宽的拒绝服务攻击中。

重要的是要考虑逐跳处理对路由器的性能影响。
逐跳扩展头部的一个用途是支持使用大型分组。在基本头部中的16位长的净荷长度字段能够表示不大于65 536(216)个八位组(字节)。

逐跳扩展头部包含一个32位长的字段,能够表示更大型分组,称为超大分组(Jumbograms)。当逐跳选项用来标识一个超大分组时,净荷长度字段设置为0。

RFC 2711定义了逐跳扩展头部中的路由器警示选项,用来为中间路由器提供转发指令。例如,这个特性可能用来做RSVP中的资源预留。它也能用在多播侦听者发现分组中,提醒路由器必须处理这些分组(参见第6章)。

二、目的选项头部
如其名所示,在目的选项扩展头部中携带的信息仅用于分组目的地。例如,目的选项头部用于MIPv6。除了逐跳头部外,目的头部是仅有的以图2-17所示相同格式携带选项的一个头部。目的选项头部通过下一头部字段值60来标识。

三、路由选择头部
路由选择扩展头部(通过下一头部字段值43来标识)用来强制分组经过某些路径。这个路径由源定义,而且大多与网络中运行的路由选择协议计算的路径不同。通过路由选择扩展头部实现的功能类似于IPv4的松散源和记录路由选项。

路由选择头部包含一个类型字段,它定义了扩展头部的精确功能。本书撰写之时,已经定义了两个类型:

类型0,在RFC 2460中定义,确定了一个路由选择头部,其包含了路由器地址的一个顺序列表,在到达目的的路径上分组必须经过这些路由器。注意:每台被访问的路由器将基本头部中的DA修改为列表中的下一台路由器。因此不在路由选择扩展头部列表上的路由器就不需要处理扩展头部。这为IPv6提供了源路由选择能力。
类型2,在RFC 3775中定义,确定了用于MIPv6的一个路由选择头部。它包含单一的单播地址,即家乡代理的地址,从而使相应的节点将流量直接转发到移动节点,这就是称之为路由优化的转发选项且仅在IPv6中存在(参见第8章)。
这是一个正在开发的主题,正在建议使用其他类型(但那些还没有到达RFC状态)。

四、分段头部
分段是耗费处理资源的,且它可能加重网络单元的资源负担。为了保护网络基础设施的资源,经过讨论确定,IPv6分组经过路径中的路由器不应执行分段。在发送分组之前,如2.3节所描述的,源必须执行PMTU发现过程。源确定在路径上不需要分段能够使用的最大分组。虽然路由器省掉了分段的麻烦,目的地仍然需要知道如何组装接收到的分段。目的地通过分段选项头部,从源接收这些指令。但交换的第一个分组必须包含在两个端点间转发分组的所有信息:IPv6基本头部和在路径上需要处理的任何扩展头部。这称为原始分组的不可分段部分。

注释:

在IPv6中和MTU处理相关的两条新规则是:一条链路的MTU不应小于1 280字节,路由器不应作分组分段。在今天的网络中,这两个要求不像它们看起来那么严格。具有小MTU的链路正在变得不再常见,因此一个典型的以太网主机的MTU极可能接近在其大多数通信中将使用的PMTU。
五、认证头部
这个头部类似于RFC 2402中定义的IPv4 IPSec认证头部。它提供了分组源认证和数据完整性保护。AH头部通过下一个头部值51标识。

六、封装安全净荷头部
这个头部类似于RFC 2406中定义的IPv4 IPSec封装安全净荷(ESP)头部。它通过下一个头部字段值50来标识。ESP和AH扩展头部以IPv4中相同的方式使用。

七、移动性头部
RFC 3775描述了这个扩展头部及其用途,用在移动节点、通信节点和家乡代理之间的建立和管理绑定(详细信息参见第8章)的通信之中。它通过下一个头部字段值135来标识。

八、连接多个扩展头部
基于需要提供给目的地或中间跳的信息和净荷数据,使得各种扩展头部链接起来。例如,下面一组扩展头部——逐跳、目的地、路由选择、分段——能够跟在一个基本IPv6头部后面。这些扩展头部加到基本头部的顺序不是任意的。在一个IPv6分组中,有一个扩展头部应该如何链接的建议顺序,但唯一的严格要求是逐跳(如果存在的话)头部在任何其他扩展头部类型前面。表2-7以建议的链接顺序列出扩展头部,并给出标识它们的下一个头部代码及3个常用第4层协议代码。

image

扩展头部是IPv6的一个重要特征,它们的能力将在生产网络部署的优化规划中使用得越来越多。它们使得IPv6比起其前身来更容易扩展,并将被证明这是除更大的地址空间之外的最有意义的优势之一。扩展头部的模块概念代表了 IPv4 头部中可变长度选项字段的一个可扩展的、有所提高的替代方案。同时,注意扩展头部能够带来安全风险(参见第9章)。扩展头部的存在可能也影响分组转发性能,其方式与IPv4中选项的影响相同。路由器必须处理的高层信息现在更进一步地移到分组中并且需要处理整个扩展头部链(chain)。

2.2.3 IPv6和数据链路技术

在分析第3层协议的同时,重要的是分析将之映射到OSI模型的第2层协议。IPv6在各种数据链路技术上运行,在如下RFC定义:

以太网(RFC 2464),也用在WiFi的IPv6上(802.11);
FDDI(RFC 2467);
令牌环(RFC 2470);
PPP(RFC 2472);
通用分组隧道(RFC 2473);
非广播多路访问(NBMA)(RFC 2491);
ATM(RFC 2492);
帧中继(RFC 2590);
动态分组传输(DPT)和空间复用协议(SRP),定义于RFC 2982,虽然支持IPv6,但并没有如其他所列技术那样被标准化。
这些RFC(除了DPT/SRP使用类似于以太网的机制之外)同样定义了这些媒介传输类型中每一种类型构建IPv6接口ID的机制。

第2层PDU格式独立于被传输的高层协议。但是,第2层头部的协议ID字段指明它在净荷中所承载的第3层协议类型。例如,表2-8给出了几种常用的数据链路技术中这个字段的值。

image

帧格式,特别是协议ID,当使用第2层过滤以区分IPv4和IPv6流量时是重要的。

深入理解IPv6分组的结构和相应的第2层帧结构,不仅对于更好地理解协议操作,而且对于形成IPv6排错专业知识是重要的。

本章后续部分给出了几个重要的IPv6特有的控制平面机制。为了便于对后续小节进行清晰地描述,这里先对后面将用到的一些相关术语进行简单介绍:

节点——运行IP的一台设备。
邻居——连接到相同链路的节点。
主机——不是路由器的一个节点。
路由器——将地址不是自己的分组进行路由(转发接收到的分组)的一个节点。
链路层地址——第2层的一个接口标识符。
在线地址——在相同第2层域或链路内的一个IP地址。
离线地址——在不同第2层域或链路上的一个IP地址。
下一跳——用来到达目的地的网关IP地址。有一个节点为一个给定目的地计算出的下一跳是它的一个邻居。

网友评论

登录后评论
0/500
评论