IPv6 QoS及其实现进一步探讨


目前 , IPv4 QoS已经获得比较好的发展 , 因此在IPv6大规模部署之前 , 可以先借助IPv4 QoS的成果 , 进一步研究Flow Label机制的使用 。从目前情况看 , 可以通过Diff-Serv实现QoS , 以后随着技术的发展和标准的成熟 , 可以逐渐引入其他更有效的方法 。而终结目标是 , 伴随着ITU-T的QoS架构和实现方法的成熟 , 最终解决IPv6 QoS 。现在的信息网络可以用“Everything over IP”和“IP over Everything”来概括 。业界基本达成共识 , IP网络将成为下一代信息网络的基础设施 。但自由、开放和“Best Effort”的IP网络 , 在担负这样的责任时 , 还需要大量的改进 。一方面 , 由于宽带网络的高速发展、NGN(下一代网络)和3G网络的大规模部署以及家庭网络等即将成为现实 , 需要大量的IP地址 , 而目前广泛使用的IPv4地址 , 由于总量的缺乏以及分配的不公平性等原因存在严重短缺 , 在不久的将来势必耗尽 。所以 , 早在10多年前 , 鉴于当时B类地址需求高速增长 , 眼看地址耗尽指日可待 , 一度造成恐慌而发展了具有巨大地址空间的IPv6技术 。同时 , 也发展了CIDR(无级别域内路由选择)和保留地址/NAT技术 , 以进一步延缓IPv4地址的消耗速度 。另一方面 , IPv4在地址自动配置、QoS、安全性以及移动性等方面也难以满足下一代网络的发展要求 , 因此 , IPv6不仅仅解决地址问题 , 也在其他方面做了相应的改进 。
本来希望IPv6一劳永逸地解决一系列问题 , 但经过10多年的发展 , 许多目标并没有实现 , 包括下面将要讨论的IPv6 QoS问题 。
IPv6 QoS基本情况
和IPv4相比 , IPv6在QoS方面提供了更多的措施 , 以期改善甚至彻底解决网络的服务质量问题 。最初的想法是 , 根据当时IP QoS的研究进展 , 引入Flow Label机制 , 帮助处理QoS 。由于受到当时网络技术发展水平的限制 , 第一个比较成熟的成果在1994年前后才推出 , 即所谓的Int-Serv模型 。该模型在信息传递之前 , 使用资源预留协议(RSVP)建立一个可以保证QoS各有关指标的一个通道 。这种想法似乎是可行的 , 因为和它相类似的ATM技术在QoS上获得了较大的成功 , 或者说后者的一个主要特点就是解决了QoS问题(当然 , 各有关技术还在不断发展之中) 。但是 , Int-Serv并没有获得广泛的应用 。今天再来分析其原因 , 可以发现 , ATM网络支持的电路/流的数量 , 基本上是以千条(thousands)为单位实施扩展的;而IP网络 , 非凡是Internet这样的全球网络 , 其业务流基本上是以百万条(millions)为基本单位的 , 这对于网络中的路由器设备来说 , 很难支持如此大量的软状态 。同时 , 也存在跨多个运营商进行资源预留治理等问题 。后来进一步发展了Diff-Serv模型 , 它基于对网络业务的分类来简化处理的类别 , 从而解决了可扩展性问题 , 为IP网络的QoS提供了一个可行的解决方案 。但是 , Diff-Serv模型并不能提供一个端到端的解决方案 , 其对IP QoS的实现 , 需要通过与PHB(Per-Hop-Behavior)、网络流量规划或者流量工程(Traffic Engineering , TE)等措施联合提供 。
IPv6 QoS定义
IP QoS的实现 , 需要网络中所有相关元素的全面支持 , 包括应用、终端和网络设备等 。在基本的IP协议层面 , 提供一些字段的定义 , 用于支持QoS的实现 。IPv6同样如此 。
IPv6包头格式
IPv6的报头格式如图1所示(图中同时显示了IPv4报头格式 , 以示对比) 。和IPv4相比 , IPv6采用更规整的结构 , 便于使用硬件进行高速处理 。IPv6定义了一个固定长度的基本报头 , 其他的一些选项归类为扩展报头 , 其中包括每一个网络节点都必须处理的Hop by Hop报头等 。
从图中可以看出 , IPv6有两个字段与QoS有关 , 分别为流量类别(Traffic Class , TC)和流标签(Flow Label , FL)字段 。流量类别字段有8位 , 和IPv4的服务类型(ToS)字段功能相同 , 用于对报文的业务类别进行标识;流标签字段有20位 , 用于标识属于同一业务流的包 。流标签和源、目的地址一起 , 惟一标识了一个业务流 。同一个流中的所有包具有相同的流标签 , 以便对有同样QoS要求的流进行快速、相同的处理 。
流标签规范
流标签规范定义了流以及与流标签有关的一些基本规范 , 同时提出了不少建议草案 。这里摘要简单介绍 。
流是从某一源节点发往某一单播、任播或组播地址的目的节点的一系列包 。源节点用流标签标识一个流 。一个具体的传输连接或媒体流中的所有包都属于一个流 。当然 , 并非一个流必须和一个传输连接 1:1对应 。

流标签在高效处理方面具有非凡的优势 。和五元组相比 , IPv6的源地址、目的地址以及流标签都出现在基本报头中 。而五元组则由于或者是报文的分段 , 或者是加密 , 或者是协议在多个扩展的报头之后才可以取得 , 因此在处理的效率上要差一些 。
当然 , 由于流标签处在一个非常暴露的位置 , 在反抗服务盗用以及DoS(拒绝服务)攻击方面比较脆弱 , 需要一定的措施来保护 。一般需要一个比较信任的环境 , 或者启用入境(ingress)过滤等防范措施 。
现在 , 流标签规范还只是一个框架 , 并没有对流标签的使用做出明确的定义 , 只规定了一些非常原则的内容 , 主要包括:(1)IPv6流支持的最低要求是标记流(给流打标签) 。流标签应该由流的发起者信源节点赋予一个流 。流标签是一个1-FFFFF的伪随机数 。对那些不支持流标签处理的节点和应用应将FL置成0 , 或者不对该字段进行处理 。(2)源节点应该能够为流选择没有用过的流标签值 。当新建流时 , 源节点必须保证它不会无意识地重用当前正用或是最近刚用过的流标签值 。也就是说 , 新建同一源地址和目的地址之间的流 , 不能用之前120s之内用过的流标签值 。对于各自不同的流 , 源节点应该能够提供方法 , 为应用和传输协议指定留验期长于120s 。(3)为了避免由于系统每次重新启动而意外地重用流标签值 , 初始值应该能够从存储在非易失性存储器里的上一次流标签值导出 , 假如这些历史数据也丢失了 , 则用一个好的随机数算法产生一个随机初始值 。(4)流状态的建立方式必须满足的最低要求是 , 提供具体流处理功能的IPv6节点具有清理流状态的手段;当请求的流状态节点不能支持时 , 流状态建立方法必须能够恢复 , 从而保证不同的方法可以被使用 。
当然 , 对流标签的定义和使用还提出了不少草案 。例如 , 将20位进一步细分为3 17位 , 前3位可以定义为支持诸如Diff-Serv、Int-Serv等几种类别 , 后17位则根据前面定义的类别再定义相应的功能或者应用 。这里不具体介绍 。
IPv6 QoS信令扩展
QoS信令是目前研究的热点之一 , 也是支持端到端QoS技术的一个重要方面 。从技术的角度看 , 可以支持带内或者带外的信令 。RSVP和802.1p分别是一个示例 。但如前所述 , RSVP可能并不适合在Internet这种大规模的网络中使用 。
IPv6可以比较方便地支持QoS信令的实现 , 具体的做法是 , 根据IPv6的Hop by Hop扩展头对信令进行定义 。由于每个IPv6节点都必须处理Hop by Hop扩展头 , 这样就可以实现QoS信令 。即通过在数据流的第一个数据包中携带有关信息 , 在经过逐跳处理和预留以后到达接收端 , 接收端根据情况将有关信息回传发送方 , 这样就可以进行有QoS保证的数据发送了 。
QoS信令的定义还处于探讨阶段 , 具体的内容包括可用带宽、保证带宽、优先级以及与报文处理有关的一些定义字段等 。
IPv6 QoS实现方案
IPv6 QoS的实现可以在不同层面进行 。例如网络应用 , 可以通过流量类别字段和/或流标签字段提出QoS要求 , 也可以在用户接入的服务提供商(SP)网络边缘节点对用户业务进行标识 。当然 , 这里涉及服务提供商和用户之间的QoS/SLA协商 , 以及据此制定的服务策略 。最要害之处还在于网络设备 , 必须可以根据这些业务要求完成相应的处理并保证QoS 。需要说明的是 , 在IPv6 QoS信令实现比较成熟的情况下 , 网络应用还可以通过信令和网络进行协商 , 实现动态的QoS处理 。
图2简单示意了IPv6 QoS的实现方案 , 实际的网络可能更复杂一些 。处于服务提供商网络边缘的支持QoS的节点与最终客户之间 , 可能有一个宽带接入网络 , 其QoS也是问题的一个部分 , 但可以通过一定的带宽集中方式获得保证 。这里不讨论 。
图2示出了对网络应用进行QoS处理的两种情况:支持QoS的标记和在服务提供商网络边缘对不同的应用流重新进行标记 。但从网络运营的角度看 , 在网络边缘进行标记处理更加合理 。这一方面有利于用户和服务提供商之间的协商;另一方面有利于服务提供商验证用户的标记是否与其SLA相一致 , 以阻断用户私自提高服务等级等情况的发生 。而在网络的核心 , 通过和边缘配合的方法实现具体的QoS处理 。
如前所述 , IPv6 QoS的实现可以使用Diff-Serv、Int-Serv以及IPv6 QoS信令等方式 , 但具体到在网络节点上的实现 , 主要还是标记、排队和拥塞避免等一些具体的措施 。
在网络边缘节点对进入网络的报文进行分类 , 根据不同的SLA和QoS策略 , 可以有多种方法 。对IPv6而言 , 可以根据源地址、目的地址和流标签进行标记;也可以根据IP包的5元组(源、目的IP地址 , 源、目的端口号 , 传输协议)来确定 。从广泛的适用性看 , 还应该支持DSCP(差异化服务编码点)、802.1p以及MPLS(多协议标签交换)QoS机制的E-LSP/L-LSP等 。
进入网络的报文在网络节点由PHB控制 , 实现不同的QoS , 包括带宽、延时、丢包率等 。具体的实现将根据不同的设备资源和功能情况有所不同 , 但基本上都是通过设置一定的缓存队列 , 在发生拥塞时通过队列进行缓冲 , 通过对不同队列的不同调度算法 , 实现不同业务的优先级和各有关QoS指标 。
现在 , 已经发展了多种队列调度算法 。可以根据不同的设备等级 , 选用其中一些或者它们的组合 , 比如PQ(优先级队列)、WFQ(加权公平队列)、DRR(亏空循环)等等 。其中的一些类别还进一步发展了一些细分技术 , 例如SPQ(严格优先队列)、W2FQ等 。
队列技术虽然解决了在竞争情况下哪种业务获得优先服务的问题 , 但并没有解决拥塞引起的丢包问题 。例如 , 多个输入端口同时向一个输出端口发送报文 , 假如输出端口无法及时处理这些报文 , 则必然有报文被丢弃 。RED/WRED(随机早期检测/加权随机早期检测)可以缓解拥塞问题 。

由于目前高端设备都具有大量的缓存 , 可以存贮高速端口约200ms的数据包 , 因此在极端的情况下 , 可能引起较大的延时 。因此 , 对一些业务通过网络节点的数量以及在每个节点的延时都要做相应的规划 , 或者通过流量工程来实现 。
另外 , 针对IP网络的业务突发量比较大的情况 , 可以通过流量整形以及在接入端采用CAR(承诺访问速率)使得网络的流量比较平缓 , 从而保证比较好的服务质量 。
上述解决方案是基于Diff-Serv实现的 。也许IPv6信令和Diff-Serv的结合 , 可以产生新的更有效的IPv6 QoS实现方案 。
建设IP网络 , QoS是一个非常重要的方面 。而IPv6在未来的2~5年内 , 必然会成为网络建设的主流 , 因此 , 探讨IPv6 QoS有其现实的意义 , 对IP网络向电信级过渡以及相关产品的研发均能提供有效的线索 。
【IPv6 QoS及其实现进一步探讨】目前 , IPv4 QoS已经获得比较好的发展 , 因此在IPv6大规模部署之前 , 可以先借助IPv4 QoS的成果 , 进一步研究Flow Label机制的使用 。从目前情况看 , 可以通过Diff-Serv实现QoS , 以后随着技术的发展和标准的成熟 , 可以逐渐引入其他更有效的方法 。而终结目标是 , 伴随着ITU-T的QoS架构和实现方法的成熟 , 最终解决IPv6 QoS 。