1.2.4 IGP/BGP
与IPv4相同,IPv6同样借助内部网关协议(Interior Gateway Protocol,IGP)和边界网关协议(Border Gateway Protocol,BGP)两类动态路由协议完成自治系统(Autonomous System,AS)域内和域间路由传递。IPv6动态路由协议继承了IPv4 IGP和BGP的关键交互流程,仅在原有协议的基础上进行了IPv6扩展。下面重点介绍IPv6与IPv4动态路由协议的主要差异点,具体IGP/BGP方案设计则在与各类网络相关的章节中进行详述。
1.IGP for IPv6简介
(1)IS-IS for IPv6
因为IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是基于数据链路层的协议,与IP地址无关,因此在邻接关系建立过程中不需要区分IPv4和IPv6地址。同时,IS-IS采用TLV(Type-Length-Value,类型长度值)格式进行编码,具有较好的扩展性,因此可通过新增TLV实现IPv6路由信息传递并计算相关路由。
在IETF的标准协议中,规定IS-IS需要支持IPv6路由的处理和计算,主要通过新增路由信息相关的两个TLV和一个NLPID(Network Layer Protocol Identifier,网络层协议标识)实现。其中新增的两个TLV如下。
•IPv6接口地址(IPv6 Interface Address):类型值为232(0xE8),与IPv4中的同名TLV格式类似,只是将原来的32 bit的IPv4地址改为128 bit的IPv6地址。IPv6接口地址TLV主要在HELLO报文和LSP报文中进行扩展,其中HELLO报文携带接口的IPv6链路本地地址,用于进行邻接标识。而LSP报文的TLV扩展中则携带接口的IPv6全球单播地址,用于接口的路由信息传递。
•IPv6可达性(IPv6 Reachability):类型值为236(0xEC),用于传递可到达的IPv6路由前缀信息,并携带该路由前缀的度量值和内外部路由标识、防环标志位等信息,用于IPv6路由计算。
NLPID用于通告邻居本地的IPv6支持能力。如果IS-IS支持IPv6,则向外发布IPv6 HELLO报文时需携带的NLPID值为142(0x8E)。
由于IS-IS主要在IPv4的原有协议中进行必要扩展以支持IPv6,绝大部分功能和交互仍继承原有协议,因此使用IS-IS作为IPv4 IGP的原有网络完全可以在该进程下直接使能IPv6能力,以支持IPv6路由传递。IS-IS还支持多拓扑(Multi-Topology,MT)等功能,可以为IPv6建立独立的路由表和拓扑环境。因此,在IPv6部署演进过程中,即使在同一个IGP进程下,也可以形成与IPv4不同的独立拓扑信息,以防止采用原有IPv4拓扑时会将IPv6报文转发给未支持IPv6的部分节点,导致报文被丢弃。
(2)OSPFv3
OSPF是IETF制定的动态路由协议,基于IP层开发,因此IP地址对OSPF影响较大,支持IPv6需要采用独立的进程和路由协议。当前针对IPv4使用的是OSPFv2,针对IPv6使用OSPFv3,后者在前者基础上进行了增强,但仍然使用HELLO、DD(Database Description,数据库描述)、LSR(Link State Request,链路状态请求)、LSU(Link State Update,链路状态更新)和LSAck(Link State Acknowledgment,链路状态确认)5种类型报文,并将其封装在IPv6报文头内。同时,OSPFv3也继承了OSPFv2的报文交互流程、邻居状态机、LSDB(Link State Database,链路状态数据库)及路由计算方式等。
OSPFv3在OSPFv2基础上完成的优化如下。
•使用IPv6链路本地地址:IPv6使用链路本地地址在同一链路上发现邻居并自动配置地址,目的地址为链路本地地址的IPv6报文只在同一链路上有效,不会通过设备进行转发。作为运行在IPv6上的路由协议,OSPFv3同样使用链路本地地址来维持邻居并同步LSA(Link State Announcement,链路状态公告)数据库,这样可以在不配置IPv6全局地址的情况下获得OSPFv3拓扑,实现拓扑与地址分离。同时,使用链路本地地址的报文在链路上泛洪不会传到其他链路上,减少了不必要的泛洪,节省带宽。
•基于链路建立邻居:OSPFv3基于链路而不是网段建立邻居。因此,在配置OSPFv3时,不需要考虑接口地址是否配置在同一网段,只要在同一链路即可。
•改变报文及LSA格式:OSPFv3的IP地址不再包含于Router LSA和Network LSA中,而是由新增的Link LSA和Intra Area Prefix LSA完成宣告。其中,Link LSA用于设备宣告各个链路上对应的链路本地地址及其所配置的IPv6全局地址,仅在链路内泛洪;Intra Area Prefix LSA用于向其他设备宣告本设备或本网络的IPv6全局地址信息,在区域内泛洪。另外,OSPFv3的Router ID、Area ID和LSA Link State ID虽然仍保留IPv4地址格式,但不再表示IP地址。广播、NBMA(Non-Broadcast Multiple Access,非广播多路访问)及P2MP(Point-to-Multipoint,点到多点)网络中邻居的标识仅借助Router ID完成,与IP地址无关。
•添加LSA泛洪范围:OSPFv3的LSA报文中添加泛洪范围,使设备更加灵活,可以处理不能识别类型的LSA。其中,OSPFv2只能简单丢弃不能识别的报文,OSPFv3可以完成存储或泛洪处理;对于U比特置为1的未知LSA,OSPFv3允许泛洪,且范围由该LSA自己指定。例如,可识别某类LSA的设备Device A和Device B通过Device C连接,当Device A泛洪此类LSA时,Device C虽然不识别,但也可以泛洪给Device B,Device B收到后即可继续处理。
•支持一个链路上多个进程:与OSPFv2中一个物理接口只能绑定一个实例不同,OSPFv3中的物理接口可以和多个实例绑定,并用不同的实例ID区分。运行在同一物理链路上的多个OSPFv3实例可以分别与链路对端设备建立邻居并发送报文,彼此之间互不干扰,实现了对链路资源的充分共享。
综上所述,IS-IS支持IPv6所需改造相对较小。如果现网已经部署IS-IS,则在现有进程中使能IPv6能力和IPv6拓扑即可。如果采用OSPFv3,则需要配置新的OSPFv3进程。
2.BGP4+简介
BGP是一种用于自治系统之间的动态路由协议。传统的BGP4只管理IPv4路由信息,为支持IPv6,RFC 4760和RFC 2545定义了增强BGP(即BGP4+),对NLRI(Network Layer Reachability Information,网络层可达信息)属性和Next_Hop属性进行扩展增强,增加了IPv6信息。
RFC 4760继承自1998年的RFC 2283,新增的MP_REACH_NLRI(Multi Protocol Reachable NLRI,多协议可达网络层可达信息)和MP_UNREACH_NLRI(Multi-Protocol Unreachable NLRI,多协议不可达网络层可达信息)属性用于“发布”和“撤销”路由,这是实现BGP多协议扩展的关键。MP_REACH_NLRI用于发布对应协议的可达路由及下一跳信息,而MP_UNREACH_NLRI则用于撤销不可达路由。二者可承载IPv6、MPLS(Multi Protocol Label Switching,多协议标签交换)和组播等协议内容,大大提升了BGP的多协议支持能力。
RFC 2545中定义了如何通过BGP的多协议扩展属性来实现IPv6域间路由。在链路中,通过IPv6或IPv4地址均可建立BGP邻居,二者均可传递IPv6可达信息。但通过Next_Hop属性实现下一跳信息学习时,需要采用IPv6全球单播地址或下一跳对应的链路本地地址。
BGP4+并未改变原有的消息和路由机制。参考BGP采用AF(Address Family,地址族)区分不同的网络层协议,BGP4+只需在对应的地址族视图下进行配置,即可实现IPv6扩展。BGP4+的规划设计与原有BGP的相同。