基于NBMA链路类型OSPFv3协议实现方案

1 问题的提出 随着网络信息时代的到来 , Internet技术在全球范围内得到了迅速的发展 , 开放最短路径优先(Open Shortest Pass First , 简称OSPF)动态路由协议已成为解决网络路由的首选内部网关协议 。在从IPv4向IPv6过渡的阶段 , OSPFv3(开放最短路径优先第3版)作为下一代网络中的核心路由技术已经引起学术界的足够重视和深入研究 , 但当前的研究与实现多是在串行线路相连的路由器构成的网络拓扑上运行的情况 , 而Internet包含多种子网技术(也就是数据链路技术):如以太网、802.5令牌环网、FDDI环、帧中继子网、ATM、分组无线网等 。为此 , 有必要研究OSPFv3协议在多种链路上的实现机制 , 本文将基于NBMA链路类型研究OSPFv3协议的实现方案 。2 OSPFv3的基本原理 开放式最短路径优先(OSPF)算法是由互联网工程任务组(IETF)的内部网关协议工作组为IP网络专门设计的路由协议 , 是一种基于区域实现的、建立在链路状态(Link State)算法和Dijkstra算法基础之上的内部网关动态路由协议 。OSPFv3是该协议的第3版本 , 是IPv6网络中路由技术的主流协议 。2.1 邻居的发现与保持 OSPFv3通过呼叫协议来完成发现邻居并保持邻接状态 , 呼叫协议主要是通过定时发送Hello协议包来实现的 。每个运行OSPF的接口都发送Hello包 , Hello包用于发现和维护邻居关系 , 并最终形成近邻关系(Adjacency) 。在广播(Broadcast)和非广播多点接入NBMA(Not Broadcast Multicast Access)网络上 , Hello还用于选择指派路由器DR(Designed Router)和备份指派路由器BDR(Backup Designed Router) 。2.2 数据库的同步 每个运行OSPFv3协议的路由器都维护一个用于跟踪网络链路状态的链路状态数据库(LSDB:Link State DataBase) 。数据库中存储的是反映路由器及其链路状态的各种链路状态通告(LSA:Link State Advertisement ) , 这些状态包括路由器可用接口、已知可达路由和各链路的状态信息 。链路状态数据库实际上就是一张有关该区域的完整的网络映射图 , 是路由器建立路由表的依据 , 一个自治系统内的路由器要形成对网络拓扑结构的一致视图 , 就必须同步它们的链路状态数据库 。OSPFv3依靠“邻接协议”、“交换协议”、“扩散协议”来完成数据包的交互 , 并最终实现同一个路由域中所有路由器的LSDB同步 。2.3 OSPFv3在NBMA上的工作原理 OSPFv3把不同的子网技术分为以下几类:点到点子网、广播子网、NBMA子网(Non-Broadcast Multi-Access , 非广播多路接入子网)以及点到多点子网 。其中 , 点到点链路指连接一对路由器的链路 , 例如56Kb串行线路;广播链路具备广播能力 , 其上的每对路由器可以相互直接通信 , 例如以太网;NBMA链路不具备广播能力 , 要求链路上两两路由器可以相互直接通信 , 模拟在广播链路上的操作 , 如ATM网;点到多点链路指把非广播链路视为多个点到点链路的集合 , 如帧中继网 。OSPFv3在NBMA链路上的工作特点如下: (1)邻居发现机制:由于NBMA网络类型不能自动发现邻居 , 所以需要手工给其配置邻居 , 并采取NBMA特有的邻居发现机制进行邻居的查询 。(2)数据包的发送方式:广播链路和点到点链路上链路状态更新包向组播地址发送 , 而NBMA没有多播能力 , 所以必须复制链路状态更新 , 然后向每个邻居路由器发送 。(3)泛洪机制:NBMA链路和广播链路相同 , 在DR(指定路由器)和BDR(备份指定路由器)选举之后 , 其他所有路由器与DR和BDR进行数据库交互 。
3 OSPFv3在NBMA链路上的实现 由于NBMA网络类型不能自动发现邻居 , 所以需要手工给其配置邻居 , 包括邻居的IPv6链路本地地址以及邻居的Router-ID 。首先把路由器的某个接口设置为NBMA链路类型 , 并在此接口上配置邻居 。根据工作原理分析实现流程:手动配置邻居之后 , 该邻居被加入到该接口的邻居列表中 , 按照正常的发送hello包的规则 , 每间隔HelloInterval会发送hello包给邻居 , 在RouterDeadInterval内必须收到邻居的回应才会认为该邻居可以进行通信 , 才会开始DR、BDR的选举 , 进而进行下面的操作;假如在RouterDeadInterval内没有收到对方邻居的hello包回应 , 则认为邻居是一个虚假的邻居 , 把该邻居进行删除的处理;(在一般链路类型如广播链路 , 邻居是自动发现的 , RouterDeadInterval后没有收到hello回应 , 则自动把该邻居从接口列表中进行删除;而在NBMA链路类型中 , 假如在RouterDeadInterval内没有邻居的回应 , 则触发事件Inactivity_timer , 把邻居转为Down状态 , 同时开启查询邻居定时器(发Hello包) , 定时器间隔是PollInterval , 假如收到了邻居的回应(假如邻居激活 , 会开启reply_timer定时器 , 进行reply的发送)则说明该手工配置的邻居真实存在 , 同时关闭poll_timer查询邻居定时器;反之假如在查询时间内还没有收到邻居的回应 , 则继续发poll查询 , 直到手工删除该邻居为止) 。3.1 邻居发现机制的实现 NBMA的邻居发现是靠poll_timer定时器来查询邻居的存在 , 直到邻居启动reply_timer定时器给其回应 , 才算找到了邻居;同时关闭poll_timer定时器 。(1)查询邻居模块 该模块用于完成邻居的手工配置 , 并根据NBMA的邻居发现机制查询邻居 。(2)接收Hello包处理模块 该模块用于完成对收到的Hello包进行处理 , 并根据对收到包中邻居信息的判定进行NBMA相关的操作 。(3)发送Hello包处理模块 该模块部分是在找到邻居后进行的处理 , 所以不涉及poll_timer以及reply_timer等一系列NBMA特有的操作机制 , 只需在发送Hello包时判定接口是否为NBMA类型 , 并根据判定发送Hello包 。3.2 数据库同步的实现 NBMA网络的数据库同步与广播网络的实现方法一样 , 首先选定指定路由器DR和备份指定路由器BDR , 其他所有路由器开始执行与DR和BDR之间的数据库交换 , 并且向NBMA网络的泛洪总是通过DR到达连在NBMA网络上的其他路由器的 。唯一一点不同是:广播子网中路由器把链路状态更新向组播地址AllSPFRouter和AllDRouter发送 , 而在NBMA网络中 , 必须复制链路状态更新 , 然后分别向每个邻居路由器发送 。4 结束语 OSPFv3作为IPv6时代的重要内部网关协议 , 在很大程度上增强了网络的灵活性与稳定性 , 本文从Internet包含的多种子网技术出发 , 分析并提出了基于NBMA链路类型的OSPFv3动态路由协议的实现方案 。有关传统的点到点和广播链路类型的实现方案比较成熟 , 而点到多点链路类型上OSPFv3的实现与NBMA链路基本相同 , 只是泛洪机制中存在DR/BDR选举以及邻居/接口状态机上有所区别 。随着IPv6时代的到来 , 如何将OSPFv3动态路由协议高效地运行在多种链路状态类型有机融合的新一代网络上将是我们努力的目标 。