1. 引言
服务质量[1] (quality of service, QoS)是指数据流在网络上传输时,对网络提供的服务的一系列要求,这些要求可量化为传输延迟、抖动、丢失率、带宽要求、吞吐量等指标。
IPv6环境下的典型的QoS模型有:综合服务/资源预留(integrated service/resource reservation protocol, IntServ/RSVP)、区分服务[2] (diferentiated services, DifServ)、多协议标签交换协议[3] (multi protoco1 label switching, MPLS)、流量工程[4] (Tramc En, gineering)和约束路由[4] (constraint based routing, CBR)、子网带宽管理[4] (subnet bandwidth manager, SBM)。
IntServ/RSVP模型实现细粒度的资源预留,能严格实现端到端[5] (End-to-End)的服务,但实现复杂,存在可扩展性和鲁棒性[6] 问题。DifServ实现简单,可扩展性好,是粗粒度[7] 的QoS实现方式,由于是针对聚集的流,不能解决核心网络拥塞问题,另外DifServ无信令[8] 机制,以隐式[9] 的方式实现接纳控制,削弱了端到端QoS应用的服务质量。MPLS实现了快速的路由转发,但它不能选择路由,因此需要和CBR合作。SBM[10] 提供数据链路层的资源预留。这些模型各有特点和侧重,但都不能实现严格的端到端IPv6QoS。
本文保留了IntServ/RSVP模型的优势,弥补IntServ/RSVP模型的不足之处,在IntServ/RSVP模型的基础上,加入了一种新模型SNMP[11] ,SNMP模型与IntServ/RSVP模型的功能相同,但SNMP的实现方法相对简单,可扩展性强。这样在两端使用IntServ/RSVP模型,针对单个数据流满足不同应用对服务质量个性化需求,在中间使用SNMP模型,可以减低成本,在大型的网络中,中间部分可以使用多个SNMP模型组成群,增加了网络的可扩展性。
2. IPv6的QoS功能
IPv6在设计上对QoS具有很好的支持,如简化的报头,扩展报头,分层次的高效路由等。
IPv6的扩展报头——路由报头[12]
IPv6定义数据包由一个基本报头、多个扩展报头和一个上层协议数据单元组成,IPv6在基本报头后面,是一种可选报头,可以具有不同的长度。与源路由相关的一个扩展报头,称其为路由报头。该报头是由其前一个报头中的下一个报头字段中的值43来标识。路由报头的格式如表1。
路由报头由参数组和应通过中间结点[13] 的地址表构成。起始32比特分成4个8比特的域,接下来的32比特是保留域[14] ,由发送方将其全部置零,接收方则不予理睬。
下一个头标:用来标识紧接路由报头之后的报头类型。

Table 1. Routing header format
表1. 路由报头格式
扩展报头长度:以8比特为单位表示路由报头长度。
路由类型:目前置成0。
剩余中继点数:该值显式列出在到达目的前还要访问的中间结点个数。
保留域:32比特全为零,用于路由报头未来的改进版本。
路由报头的剩余部分是N个地址表。
当源结点开始生成报文时,在剩余中继点域中置入N(是地址表中地址的总数),在目的地址里填入的是预定路径上的第一个中继点的地址。该分组每到达一个,就被此结点从地址表中取出下一个地址并置入目的地址中(地址表中的下一个被指定地址的位置用扩展头标长度值和剩余中继点数值的差值来计算),同时将此域的值减1。该值一旦为0,分组就到达了指定路径控制的目的地。此时目的主机将跳过路由报头,开始处理下一个扩展报头的内容。
而当某个结点碰到不认识的路由类型,并且Segnent left为0,它忽略路由报头而继续处理下一个报头。如果Segnent left不为0,则该结点将丢弃此数据包并向源结点发送一个代码为0的ICMP6参数错误消息。
3. IntServ(集成服务,Integrated Services)模型
集成服务[7] 的基本思想是在传送数据之前,根据业务的QoS需求进行网络资源预留,从而为该数据流提供端到端的QoS保证。为此,集成服务通常采用面向流的资源预留协议(RSVP),在流传输路径上的每个节点为流预留并维护资源。主机利用RSVP向网络为应用流提出QoS的请求;路由器利用RSVP将QoS请求信息传给流的路径中的其他路由器,并建立和保存该服务的信息;RSVP请求将会使得沿着数据路径的资源在路由器处预留。
IntServ模型能够提供绝对有保证的QoS,但是IntServ模型扩展性不好。随着流数目的增加,状态信息的数量成比例上升,占用了大量的路由器存储空间和处理开销。IntServ体系结构复杂,所有路由器都必须装有RSVP、接纳控制、分类器和调度器。
4. SNMP(简单网络管理协议,Simple Net Management Protocol的简称)模型
网络中使用IGP(内部网关协议,Interior Gateway Protocol简称)作为动态路由协议时,如果在目的和源之间有多于一条的物理路径且又没有启用等值路由功能时,系统在转发报文时将只会使用一个称为2的最佳路径,这种情况下,即使该2是满负载并出现拥塞,系统也不会选择其他路径,这其实是对可用带宽的一种变相浪费。SNMP模型是为了带宽能够得到充分的利用,为满足用户的服务质量需求而设计的,是基于源路由[15] 特性的IPv6下QoS系统。
基本思想是:在该模型放置了一个VOD Server[16] (视频点播服务,Video-On-Demand Server的简称)点播客户端和一个BCM[17] (带宽控制管理,Band Control Manage简称)服务器。在VOD Server上安装Agent (代理)软件,主要为了申请带宽用。而将BCM作为系统的核心,在此设备上将动态地维护两个数据库:LUDB (链路带宽利用率数据库,Link-Bandwidth Utilization rate DateBase)和LSDB (链路状态数据库,Link State DataBase)。在正式发出有效数据之前,由该结点上的Agent[18] 向BCM发出链路带宽请求。Agent将执行如下操作:将自己需要带宽请求,源地址和目标地址等信息告诉BCM,根据返回的结果进行处理,如果返回的结果是拒绝,则结点的通信按正常的尽力而为进行转发,无法得到必要的保证。如果返回的结果告诉了应该走的源路由,则该结点设置相应的路由报头,沿源路由指定的负载较轻的链路传输。当BCM收到结点上Agent发来的带宽等请求信息后,将执行如下操作:利用IPv6路由报头及IPv4下的trace route [19] 设计思想获得source到Destination将经过哪些个结点。BCM查询LUDB和LSDB,决定对于Agent的请求是拒绝还是接受。SNMP模型结构如图1。
5. 基于IntServ/RSVP+SNMP实现端到端的IPv6QoS研究
IntServ/RSVP虽然能提供严格的End-to-End的QoS保证。但是RSVP实现的是面向单个流的管理,因此存在扩展性差,实现较复杂,所有路由器必须实现RSVP、接纳控制、分类器和调度器。这种路由器称为RSVP路由器。在应用数据传送过程中只要有有一个路由器是非RSVP路由器,整个服务就又变为“尽最大努力交付了”不适用于大型网络中。
而SNMP模型只需要在SNMP域中安装一个VOD Server和BCM就可以实现资源预留,比较IntServ/RSVP中每个路由器都是RSVP路由器,SNMP模型要简单得多。
根据以上的原因,考虑在两端接入网部分实施IntServ/RSVP服务,在主干网上用SNMP模型。在靠近用户的接入网部分实施IntServ/RSVP服务。通过对特定资源的预留,用户可以向ISP申请特定要求的服务,实现服务的个性化。ISP可以为付费高的用户提供高质量的服务。在主干网内放置一个BCM,BCM通过SNMP(简单网络管理协议)采集本域内各个链路带宽的使用情况,运行和域内路由器相同的IGP [20] 动态路由协议来获得整个域内的物理拓扑情况。这样当一个应用数据流需要通过该网络时,可以根据这些信息确定是否有足够的资源分配给这些数据流。这种方法不需要主干网的每个路由器都是RSVP路由器,在降低成本的同时可以在大型网络中实现端到端的QoS。也就是以下要实现的模型。
IntServ/RSVP+SNMP模型的体系结构如图2。
5.1. IntServ/RSVP与SNMP的接口问题
IntServ和以上的核心网两者结合具有一定的可行性,IntServ提供了一种在异构网络元素之上提供瑞到端QoS方法。一般而言,网络元素可以是单独的节点(如路由器)或链路,更复杂的实体(如ATM云)也可从功能视为网络元素,在这种意义上来说,核心网也可视为更大的IntServ网络中的一种网络元素。从IntServ的角度看,核心网被视为连接Int-Serv路由器和主机的虚链路。况且,两者在体系结构上存在相似和共同之处,它们都需要进行资源预留。实现IntServ接入网与核心网之间的无缝连接和高效的转发是实现该体系结构的关键之一。在实现接入网和核心网的互通中,需要解决RSVP在IntServ资源预留如何和核心网中资源预留达到一致,即两个资源预留的映射问题。它要求建立一套从IntServ到核心网的映射机制。最终达到既能提供端到端的强有力的服务,又能实现与状态有关网络近似的可扩展性和鲁棒性[7] 。
在接入网和核心网之间有一个边界路由器,它是RSVP路由器,既有IntServ域内预留资源的功能,并且把VOD Server点播客户端也按装在此路由器中,同时还要有保留SNMP域内满足QoS需求链路的路由器的IP地址组的作用。在核心域之间的边界路由器不需要是RSVP路由器,其他作用和上述的边界路由器相同。

Figure 1. SNMP model structure
图1. SNMP模型结构

Figure 2. IntServ/RSVP+SNMP model
图2. IntServ/RSVP+SNMP模型
5.2. 在IntServ/RSVP+SNMP上QoS的获取和数据传输
1) 如果H1要向H2发送数据,在发送数据之前要进行资源预留,H1先要发送PATH消息,在和H1相连的IntServ/RSVP内RSVP路由器收到PATH消息后就创建一个路径状态块(PSB),当PATH消息数据报到达边界路由器ER1时,ER1把PATH消息和自己的IP地址发送给BR1,BR1保存ER1的IP地址,并把PATH消息和自己的IP地址发送给BR2,BR2保存BR1的IP地址并把PATH消息和自己的IP地址发送给ER2,ER2保存BR2的IP地址并把PATH消息经过IntServ/RSVP内发送给H2,IntServ/RSVP内RSVP路由器收到PATH消息后就创建一个路径状态块(PSB)。
2) 当H2接收到PATH消息后,接收端需要QoS保证的应用程序发送RESV消息,表明它们需要的资源保证。当RESV消息在接入网内传送时,发送路径和PATH消息到来时的路径相同,如果在接入网域资源预留成功,路由器将创建预留状态块。
当RESV消息到达接入网的边界路由器ER2时,ER2就调出原来存储的BR2的IP地址,把ER2的IP地址和RESV消息发送个BR2,VOD Server点播客户端Agent软件根据RESV消息把资源需求信息和保留BR1的IP地址发给BCM,BCM根据核心网的资源情况寻找本域内符合资源要求的从BR1到BR2的链路。如果发现有满足要求的链路,BCM就把此链路的中的路由器的IP地址,按照从BR1到BR2的顺序组成地址组发送给和BR1相连的VOD Server。BR2把RESV消息和自己的IP地址发送给BR1,BR1保存BR2的IP地址,调出原来存储的ER1的IP地址,把RESV消息和自己的IP地址发送给ER1,ER1保存BR1的IP地址RESV消息按照PATH消息来时的路径发送,如果IntServ/RSVP内资源预留成功路由器将创建预留状态块。等发送端H1接收到RESV消息时,整个网络的资源预留成功,就可以开始实时业务的数据传输。如果预留没有成功,就向接收端发送一个错误信息。
3) 数据传输
当IPv6分组数据流按照留的路径从ER1进入核心网的边界路由器BR1时,VOD Server把IPv6分组基本首部的目的地址填入BR1的IP地址,把剩余中继段数一栏中填入地址组中的路由器数。其他的地址都填入相应的位置,这样数据流就可以在核心网内发送。
6. 结束语
本文利用IPv6扩展报头中的路由报头,实现了SNMP模型。使SNMP模型和IntServ模型结合使用,取长补短。很好地实现了端到端的IPv6QoS。目前系统架构在城域网中。如果在广域网中需要把SNMP模型组成不同的SNMP模型群,从而实现广域网上端到端的IPv6QoS。SNMP模型也可以结合其他模型使用,比如,可在源路由指定的路径上引入区分服务。