一种邻居发现的实现方法

文档序号:7954644阅读:147来源:国知局
专利名称:一种邻居发现的实现方法
技术领域
本发明涉及数据通信领域,具体地讲涉及到一种邻居发现的实现方法。
背景技术
邻居发现协议(Neighbor Discover,ND)是下一代IPV6(Internet ProtocolVersion 6)网络提出的一种新的查找IP地址对应的链路层地址的协议,它主要用在地址解析的过程中。
地址解析是由邻居的非组播地址得到其链路层地址的过程,且只用于本链路内的IP地址。当本链路范围内节点有单播报文要发送给邻居但不知道其链路层地址时,就启动地址解析过程。
地址解析过程的基本原理如下对于接口支持组播的节点,该节点首先在邻居缓存里创建一个表项,然后向该地址对应的受限组播组发送包含链路层地址选项的邻居通告请求(Neighbor Solicitation,NS)报文;当有节点收到该邻居通告请求报文,向该节点回应邻居通告(Neighbor Advertisement,,NA)报文。如果没有收到任何邻居发出的邻居通告报文则地址解析失败,该节点的IP层会产生一个因特网信息控制协议(Internet Control Message Protocol,ICMP)不可达消息给应用层。收到邻居通告请求报文的节点如果源IP地址不是未分配地址则进行学习创建或更新邻居缓存的表项。
另一方面,目前的宽带城域网的接入网部分,一般是由用户终端、接入层汇接设备和汇聚层的宽带接入服务器(Broadband Remote Access Server,BRAS)或路由器设备等三个层次的设备组成的层状拓扑结构。为了电信运营的需要,一般不同的用户终端,例如图1中的PC1和PC2,通过虚拟局域网(Virtual Local Area Network,VLAN)、永久虚连接(Permanent VirtualConnection,PVC)等进行隔离,杜绝用户间不经过汇聚层设备直接通信。另外,一般宽带城域网中的接入层汇集设备,例如IP数字用户环路接入复接设备(Digital Subscriber Line Access Multiplexer,DSLAM),对没有VLAN的用户之间也是隔离的,不允许用户之间的报文不通过汇聚层设备直接进行二层互连,也即不同用户间的报文必须通过三层设备的处理才能实现互连。
这样,如图1所示,当汇聚层的BRAS或路由器设备在一个子接口下同时接入多个VLAN、PVC等虚拟链路或者直接接入多个无法实现二层广播的接入设备时,对于同一个子接口下的多个VLAN、PVC下的接入设备共用一个连续的IP地址网段的情况,因为该子接口下的链路都是无法二层互通的,所以就无法相互学习到链路层地址,因此当该子接口下的两个用户终端之间要实现通信时,就无法实现了。所以,其实宽带城域网的接入网部分就是一个非广播多点接入(Non Broadcast Multi Access,NBMA)的网络。
由于邻居发现协议仅在用户本链路使用并且通过组播方式广播到整个链路中,但图1描述的宽带城域网的接入网是NBMA网络,无法将组播报文广播给其他用户,因此需要BRAS设备或路由器提供邻居发现代理(ND Proxy)功能,即BRAS设备或路由器作为代理为用户转发ND报文从而让NBMA网络中的用户能够学习到被路由器代理的链路层地址,最终实现两者的互通。
在现有技术中,路由器首先从NBMA网络接入接口的链路接收NS、NA报文,通过修改报文的媒体介质访问控制(Media Access Control,MAC)地址等处理实现路由器代理该主机,然后向该接口的其他链路广播NS报文或某条链路转发NA报文,从而实现不同链路中的多播的ND报文互通,解决上述NBMA网络中用户之间互通的问题。
由于在现有技术中,硬件只是接收并识别ND报文,邻居发现协议和邻居发现代理都是由软件部分来完成,如图2所示,这带来了以下问题1.当BRAS设备或路由器在接入大量用户的情况下,邻居发现协议和邻居发现代理功能要提供多链路间的报文复制,容易让软件造成瓶颈,影响设备的稳定运行;2.当BRAS设备或路由器采用流控等方式减少交给软件处理的报文时,容易使得用户报文丢失。

发明内容
本发明解决的技术问题是提出一种邻居发现的实现方法,用于在路由器接入非广播多点接入网络时实现终端设备间的互相通信情况下,解决软件实现邻居发现处理所导致的运行性能问题,以及对送交软件处理的邻居发现协议报文进行流控所导致用户正常报文被丢失的问题。
为解决上述问题,本发明提出了一种在路由器接入非广播多点接入网络时实现终端设备间的互相通信情况下邻居发现的实现方法,包括以下步骤a)在路由表主机路由中预设对应邻居节点的邻居状态信息的接口索引;b)接收邻居发现报文;c)根据邻居发现报文的源IP地址和目的IP地址在路由表中查找该源IP地址和目的IP地址分别对应的接口索引,并根据接口索引得到分别对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态;d)根据邻居发现报文的源IP地址和目的IP地址以及对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态,对所接收到的邻居发现报文进行邻居发现处理。
其中,步骤d)进一步包括步骤判断所接收的邻居发现报文的源IP地址和目的IP地址是否满足条件源IP地址是未分配IP地址或者目的IP地址所对应的接口索引是路由器本身或者本地链路地址,如果是,则对所接收的邻居发现报文进行本地邻居发现处理,否则,对所接收的邻居发现报文进行邻居发现代理处理。
其中,所述的本地邻居发现处理包括以下步骤d11)、判断所述的邻居发现报文的源IP地址是否是未分配地址,如果是,执行步骤d12),否则,执行步骤d13);d12)、对所接收的邻居发现报文进行重复地址检测处理,并更新邻居节点的状态,结束本地邻居发现处理;d13)、判断源IP地址对应的邻居节点是否存在,如果是,执行步骤d14),否则,执行步骤d15);d14)、如果所接收的邻居发现报文是邻居通告报文,则更新源IP地址所对应邻居节点的链路状态,如果所接收的邻居发现报文是邻居通告请求报文而且具有不同介质访问控制地址,则回应邻居通告报文,否则丢弃报文,并结束本地邻居发现处理;d15)、确认收到该报文的链路是本接口上的链路后创建源IP地址对应的邻居节点的邻居状态,否则丢弃报文。
所述的邻居发现代理处理则包括以下步骤d21)、判断所述的邻居发现报文的源IP地址所对应的邻居节点是否存在,如果是,执行步骤d22),否则,执行步骤d27);d22)、判断所述的邻居发现报文的目的IP地址所对应的邻居节点是否存在,如果是,执行步骤d23),否则,执行步骤d24);d23)、如果所接收的邻居发现报文是邻居通告请求报文,则代理目的IP地址对应的邻居节点向源IP地址对应的邻居节点发送邻居通告报文,如果所接收的邻居发现报文是邻居通告报文,则代理源IP地址对应的邻居节点向目的IP地址所对应的邻居节点转发邻居通告报文,并结束邻居发现代理处理;d24)、判断所述的邻居发现报文是否是邻居通告请求报文,如果是,则执行步骤d25),否则执行步骤d26);d25)、代理源IP地址所对应的邻居节点在本链路内广播该邻居通告请求报文,结束邻居发现代理处理;d26)、如果所接收的邻居发现报文是邻居通告报文,则确认收到该报文的链路是本接口上的链路后更新更新该链路节点对应的链路状态,否则丢弃报文,并结束邻居发现代理处理;d27)、确认收到该报文的链路是本接口上的链路后创建源IP地址对应的邻居节点的邻居状态,否则丢弃报文。
与现有技术相比,本发明具有以下优点1.本发明的邻居发现和邻居发现代理均可由硬件处理,这样让设备软件从低“受益”链路层地址映射的繁重工作中解脱出来,处理更为重要的工作,避免了软件因处理大量的ND报文而导致的性能不足,更利于业务的处理;2.本发明同时也避免了软件的流控导致接入设备的正常业务报文被丢失的问题。


图1是宽带城域网路由器接入NBMA网络结构示意图;图2是现有技术方案原理示意图;图3是本发明实现邻居发现代理原理示意图;
图4是发明涉及的数据结构示意图;图5是本发明方案主要流程图;图6是本发明本地邻居发现处理流程图;图7是本发明邻居发现代理处理流程图。
具体实施例方式
下面根据附图对本发明的优选实施例作出详细的说明。
如图3所述,本发明邻居发现代理的实现方法主要包括以下几个步骤步骤1、在路由表主机路由中预设对应着IP地址所对应的邻居状态信息的接口索引;步骤2、接收邻居发现报文;步骤3、根据邻居发现报文的源IP地址和目的IP地址在路由表中查找所述的源IP地址和目的IP地址分别对应的接口索引,并根据接口索引得到对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态;步骤4、根据邻居发现报文的源IP地址和目的IP地址以及对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态,对所接收到的邻居发现报文进行邻居发现处理。
下面对以上步骤作具体描述首先,如图4所示,本发明设计如下的数据结构,在现有的路由表中增加主机路由所在的接口索引,通过该接口索引可以找到该接口所对应的接口IP地址、所有的邻居状态信息和所有接入的链路信息(例如具体的接入VLAN ID列表等)。这些数据结构保存在硬件中,但其中的邻居状态信息由于涉及到路由信息的更新,为了保证整个系统的路由信息有效同步,邻居状态的处理以及邻居节点的维护这些步骤由软件来处理。
同时,路由器接入NBMA网络的接口硬件自动加入到该接口所涉及的所有组播组中。
如图5所示,当路由器接收到来自于NBMA网络的报文时,接口硬件识别出有效的邻居发现报文(包括NS报文和NA报文),并取出报文的源IP地址和目的IP地址信息,并根据邻居报文的IP地址信息作如下处理根据源IP地址和目的IP地址分别查找路由表中对应的接口索引,并根据源IP地址和目的IP地址所对应的接口索引分别查找对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态。
根据报文的源IP地址和目的IP地址判断,如果源IP地址为未分配地址或者目的IP地址对应的接口索引是路由器本身或本地链路的地址则对报文进行本地邻居发现处理,否则对报文进行邻居发现代理处理。
具体的,本地邻居发现处理包括以下步骤11)判断报文的源IP地址是否是“未分配地址”即全0地址,如果是,那么该报文是重复地址检测(Duplicated Address Detect,DAD)报文,执行以下步骤12),否则,执行以下步骤13)。
12)根据目的IP地址对应的邻居状态判断目的IP地址对应的邻居节点是否存在。如果该邻居节点不存在,那么进行重复地址检测的地址为不重叠的IP地址,并确认收到该报文的链路是否是本接口上的链路,如果是,通知软件创建相应的邻居状态,否则丢弃报文;如果该邻居节点存在,则判断报文的MAC地址是否跟本接口的MAC地址不同,如果是,那么代理已存在的邻居节点回应NA报文,否则直接丢弃报文并更新邻居状态,结束本地邻居处理。
13)判断源IP地址对应的邻居节点是否存在,如果存在,执行步骤14),否则执行步骤15)。
14)判断所接收报文的类型,如果是NA报文,那么直接通知软件刷新邻居状态,如果是NS报文,判断报文的MAC地址是否跟本接口的MAC地址不同,如果是,则回应NA报文,否则直接丢弃报文,结束本地邻居处理。
15)判断收到该报文的链路是否是本接口上的链路,如果是,通知软件创建相应的邻居状态,否则丢弃报文。
邻居发现代理处理包括以下步骤21)判断源IP地址对应的邻居节点是否存在,如果是,执行步骤22),否则,执行步骤25)。
22)判断目的IP地址对应的邻居节点是否存在,如果是,执行步骤23),否则执行步骤24)。
23)判断所接收报文的类型,如果是是NS报文,那么代理目的IP地址对应邻居节点向源IP地址对应的邻居节点直接回应NA报文,如果是NA报文,那么代理源IP地址对应的邻居节点向目的IP地址对应的邻居节点转发NA报文,同时报文中的源MAC地址改为路由器接口MAC地址,结束邻居代理处理。
24)判断所接收报文类型,如果是NS报文且允许NS广播,则代理源IP地址对应的邻居节点向该接口所在的链路广播该报文,并将报文的源MAC地址改为路由器的接口MAC地址,如果是是NA报文,那么确认收到该报文的链路是否是本接口上的链路,如果是,通知软件创建相应的邻居状态,否则丢弃报文,结束邻居代理处理。
25)判断收到该报文的链路是否是本接口上的链路,如果是,通知软件创建相应的邻居状态,否则丢弃报文。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种邻居发现的实现方法,其特征在于,包括步骤a)在路由表主机路由中预设对应邻居节点的邻居状态信息的接口索引;b)路由器接收邻居发现报文;c)路由器根据邻居发现报文的源IP地址和目的IP地址在路由表中查找该源IP地址和目的IP地址分别对应的接口索引,并根据接口索引得到分别对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态;d)路由器根据邻居发现报文的源IP地址和目的IP地址以及对应于源IP地址的邻居状态和对应于目的IP地址的邻居状态,对所接收到的邻居发现报文进行邻居发现处理。
2.如权利要求1所述的邻居发现的实现方法,其特征在于,步骤d)中进行邻居发现处理包括步骤判断所接收的邻居发现报文的源IP地址和目的IP地址是否满足条件源IP地址是未分配IP地址或者目的IP地址所对应的接口索引是路由器本身或者本地链路地址,如果是,则对所接收的邻居发现报文进行本地邻居发现处理,否则,对所接收的邻居发现报文进行邻居发现代理处理。
3.如权利要求2所述的邻居发现的实现方法,其特征在于,所述的本地邻居发现处理包括以下步骤d11)判断所述的邻居发现报文的源IP地址是否是未分配地址,如果是,执行步骤d12),否则,执行步骤d13);d12)对所接收的邻居发现报文进行重复地址检测处理,并更新邻居节点的状态,结束本地邻居发现处理;d13)判断源IP地址对应的邻居节点是否存在,如果是,执行步骤d14),否则,执行步骤d15);d14)如果所接收的邻居发现报文是邻居通告报文,则更新源IP地址所对应邻居节点的链路状态,如果所接收的邻居发现报文是邻居通告请求报文且具有不同介质访问控制地址,则回应邻居通告报文,否则丢弃报文,并结束本地邻居发现处理;d15)确认收到该报文的链路是本接口上的链路后创建源IP地址对应的邻居节点的邻居状态,否则丢弃报文。
4.如权利要求2或3所述的邻居发现的实现方法,其特征在于,所述的邻居发现代理处理包括以下步骤d21)判断所述的邻居发现报文的源IP地址所对应的邻居节点是否存在,如果是,执行步骤d22),否则,执行步骤d27);d22)判断所述的邻居发现报文的目的IP地址所对应的邻居节点是否存在,如果是,执行步骤d23),否则,执行步骤d24);d23)如果所接收的邻居发现报文是邻居通告请求报文,则代理目的IP地址对应的邻居节点向源IP地址对应的邻居节点发送邻居通告报文,如果所接收的邻居发现报文是邻居通告报文,则代理源IP地址对应的邻居节点向目的IP地址所对应的邻居节点转发邻居通告报文,并结束邻居发现代理处理;d24)判断所述的邻居发现报文是否是邻居通告请求报文,如果是,则执行步骤d25),否则执行步骤d26);d25)代理源IP地址所对应的邻居节点在本链路内广播该邻居通告请求报文,结束邻居发现代理处理;d26)如果所接收的邻居发现报文是邻居通告报文,则确认收到该报文的链路是本接口上的链路后更新更新该链路节点对应的链路状态,否则丢弃报文,并结束邻居发现代理处理;d27)确认收到该报文的链路是本接口上的链路后创建源IP地址对应的邻居节点的邻居状态,否则丢弃报文。
全文摘要
本发明公开了一种邻居发现的实现方法,用于在路由器接入非广播多点接入网络时实现终端设备间的互相通信,主要包括以下步骤在路由表主机路由中预设对应邻居状态的接口索引;接收邻居发现报文;根据邻居发现报文的源IP地址和目的IP地址在路由表中查找它们分别对应的接口索引,并根据接口索引得到它们分别对应的邻居状态;根据邻居发现报文的源IP地址和目的IP地址以及它们分别对应的邻居状态,对所接收到的邻居发现报文进行邻居发现处理。采用本发明,避免了现有技术中软件因处理大量的邻居发现协议报文而导致的性能不足以及因软件的流控导致接入设备的正常业务报文被丢失问题,提高了设备的业务处理能力。
文档编号H04L12/56GK1859304SQ20061003354
公开日2006年11月8日 申请日期2006年2月13日 优先权日2006年2月13日
发明者欧阳伟龙 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1