收到数据包需要按如下步骤进行转发:
(1)检查PID字段是否为空,如果为空,则匹配AS号,根据匹配项填充PID字段,根据查询到的PID进行平面查找内核路由表,并将数据包转发到相应的端口上。
(2)如果PID字段不为空,则用平面查找方式匹配PID,如果有匹配项,路由器根据匹配项转发到对应端口;如果没有匹配的PID,再根据标志位,置位的路由器可以按匹配目的AS号的方法对数据包进行转发,没有置位的则将数据包丢弃。
(3)当数据包跨出本AS域转发到下一个AS域时,PID字段需替换成路由条目中NEXT_PID;当PID为本地AS的哈希值时,表明数据包此时已经到达目的AS,此时需交由域内路由协议用Destination Local Identier进行转发。
3 基于路径标识的多路径域间路由方案的实现
多路径域间路由方案实现模块图如图3所示,其中控制层模块主要实现UPDATE消息的产生、交互和处理,并且提供了一些配置和显示命令。在多路径域间路由方案中只需要修改NLRI模块、UPDATE消息处理模块、平面路由表模块和配置、显示命令模块,其他部分可以沿用BGP的设计。RTM模块主要实现控制层和转发层之间的交互,原始数据包的提交和路由信息的下发。转发层模块实现平面转发表的构建、数据包的封装和解封,以及具体的数据包转发流程。
3.1 NRLI模块
该模块主要实现在AS之间传递路由可达消息。在BGP中被设计成(长度,前缀)二元组,为了兼容多路径域间路由方案,需要修改成<长度,前缀,PID,AS>四元组,使之既可以满足多路径域间路由的需要,也可以兼容现有的路由方式。
3.2 UPDATE消息处理模块
该模块主要实现UPDATE消息的发送和接收。在BGP当中用来在对等体之问传递可用路由前缀、撤销路由等,在多路径域间方案中需要修改数据包发送函数和接收函数,使之能够正常地传递新的网络可达性信息,同时需要修改包安全性检查等函数,使之能够不被错误地丢弃。
3.3 平面路由表模块
该模块主要实现在控制层维护核心路由表,并向转发层下发最佳转发信息。BGP的路由表是基于最长前缀匹配的方式查找的,用二又树具体组织。在多路径域间路由方案中需要将其平面化,利用PID和AS号来检索域间路由,利用HASH算法将路由节点信息存储在一个双向链表上面,实行了精确查找。
3.4 配置、显示和调试命令模块
该模块主要实现多路径域间路由协议的配置,并且提供了一些显示核心路由表、对等体状态等的显示命令,还有一些路由器故障时的调试命令。相对于BGP,在多路径域间路由方案中添加了以下的命令:
(1)路由显示命令
通过该命令可以遍历多路径域间路由协议的核心路由表,显示具体路由信息,即到目的AS的具体路由信息,包括PID、NEXT_PID和具体路径显示。
(2)路径选择命令
因为在多路径路由方案中,在控制层可以发现多条路径,通过该命令可以选择控制层向转发层通告的最佳路径,在当前链路失效时选择备份路径下达到转发层,实现链路的快速收敛,最终完成了转发路径的可控。