一种VPLS中基于软硬件协同进行MAC地址学习的方法
技术领域
本发明涉及网络通信领域,具体涉及一种VPLS(Virtual Private Lan Service,虚拟专用局域网服务)中基于软硬件协同进行MAC(Media Access Control,介质访问控制)地址学习的方法。
背景技术
VPLS是一种在广域网上提供虚拟以太网服务的技术,提供多点到多点的VPN(Virtual Private Network,虚拟专用网络)组网方式,实现跨广域网的局域网站点之间的互连。VPLS的典型组网包括CE(Custom Edge,用户边缘设备)和PE(Provider Edge,运营商边缘设备)等,其中,CE通过AC(Attachment Circuit,接入链路)与PE连接,在PE之间建立公网隧道。然后,在各PE上创建VSI(Visual Switch Instance,虚拟交换实例)并在VSI内配置PW(Pseudo Wire,伪线),同时,在所有PE之间建立全连接的PW。
VPLS网络中的PE具备地址学习的能力,通过地址学习完成MAC地址与AC和PW端口的映射关系。对于从AC或PW端口上接收的数据报文,确定其所属的虚拟交换实例VSI,所有的AC或PW端口均在该虚拟交换实例VSI下进行虚拟二层网桥交换,同时学习该报文的源MAC地址、所属的VSI和接收报文的AC/PW端口来建立MAC地址表。具体地,如果当前MAC地址表中不存在该报文的源MAC地址,则将该报文的源MAC地址、所属的虚拟交换实例VSI和接收报文的AC/PW端口更新到MAC地址表中;如果当前MAC地址表中存在该报文的源MAC地址,且接收报文的AC/PW端口与MAC地址表条目的端口不匹配时,即发生了站点移位操作,则可以进行端口的替换操作,覆盖MAC地址表条目的端口信息;如果当前MAC地址表中存在该报文的源MAC地址,且接收报文的AC/PW端口与MAC地址表条目的端口也匹配,则直接更新该MAC地址表条目的状态。
同时,为了防止学习条目长期占用资源有限的MAC地址表,目前采用地址老化操作,对数据库进行周期性的扫描。如果在老化周期内未收到与该学习条目相匹配的报文,则这些学习条目将从MAC地址表中被删除,从而释放MAC地址表空间供其他新的条目进行学习。
现有技术中,PE会对AC/PW端口上接收到报文的MAC地址进行合法性检查,例如对于携带全0、组播或者广播的源MAC地址的报文,PE会将其丢弃;只有通过MAC地址合法性检查的报文才能学习到MAC地址表中并用于转发。同时,对于其他攻击性或者站点移位到其他AC/PW端口的MAC地址,PE会将其转发到CPU进行进一步地有效性检查,通过合法性检查的MAC地址和AC/PW端口才能学习到MAC地址表中。
上述方法可以有效地控制AC/PW端口上接收报文的合法MAC地址学习操作,但是也存在一定的漏洞,例如攻击者会伪造大量合法的MAC地址进行攻击,致使CPU频繁处理MAC地址的认证请求消息,导致CPU负担过重,同时,当CPU维护其它业务而不能够及时处理MAC地址的认证请求时,会使得伪造的MAC地址长期占用正常的MAC地址表资源,导致MAC地址表溢出,使得合法用户的报文转发受到影响。
发明内容
本发明所要解决的技术问题是攻击者伪造大量合法的MAC地址,致使CPU频繁处理MAC地址的认证请求消息,导致CPU负担过重,当CPU不能够及时处理MAC地址的认证请求时,会使得伪造的MAC地址长期占用正常的MAC地址表资源,导致MAC地址表溢出,使得合法用户的报文转发受到影响。
为了解决上述技术问题,本发明所采用的技术方案是提供一种VPLS中基于软硬件协同进行MAC地址学习的方法,包括以下步骤:
从输入端口接收报文,并解析获取该报文的源MAC地址和所属的虚拟交换实例;
若该虚拟交换实例中存在地址学习请求访问MAC地址表,则基于源MAC地址获取MAC地址表中的条目信息,仲裁预学习条目信息与MAC地址表中的条目信息;当输入端口启动MAC地址认证时,则更新预学习条目的状态为预认证,并更新预认证条目的老化周期为二分之一的预设老化周期,仲裁预认证条目信息的链表长度状态;当输入端口不启动MAC地址认证时,则更新预学习条目的状态为认证通过,并更新预学习条目的老化周期为预设老化周期;
若该虚拟交换实例中不存在地址学习请求而存在CPU请求访问MAC地址表,则确认MAC地址表中预认证条目的状态以及预认证条目信息与MAC地址表中的条目信息的匹配情况;当预认证条目的状态有效且条目信息匹配时,根据CPU请求访问MAC地址表的指令类型,对MAC地址表中的预认证条目状态执行相应操作。
在上述技术方案中,仲裁预学习条目信息与MAC地址表中的条目信息,具体为:
获取预学习条目信息,如果预学习条目状态为有效且源MAC地址和虚拟交换实例均匹配,但是输入端口信息不一致,则更新输入端口信息到MAC地址表;
如果预学习条目状态为无效,则更新预学习条目的源MAC地址、虚拟交换实例和输入端口信息到MAC地址表;
如果预学习条目状态为有效且条目信息匹配,则更新条目状态为认证通过,并更新预学习条目的老化周期为预设老化周期。
在上述技术方案中,仲裁预认证条目信息的链表长度状态,具体为:
当链表长度为空时,链表开始接收预认证条目信息,并启动计时器;
当链表长度未达到请求发送阈值且计时器未超时时,链表继续接收预认证条目信息;
当链表长度达到请求发送阈值或者计时器超时时,将预认证条目信息转发到CPU进行认证操作,并停止接收预认证条目信息。
在上述技术方案中,根据CPU请求访问MAC地址表的指令类型,对MAC地址表中的预认证条目状态执行相应操作,具体为:
当CPU请求指令为插入时,更新预认证条目的状态为认证通过,并更新预认证条目的老化周期为预设老化周期;
当CPU请求指令为删除时,更新预认证条目的状态为无效,并结束该预认证条目的认证。
在上述技术方案中,所述预学习条目信息包括预学习条目状态、老化周期、源MAC地址、虚拟交换实例和转发的输入端口号。
在上述技术方案中,所述输入端口为AC或PW端口。
在上述技术方案中,所述请求发送阈值为128。
本发明提供的一种VPLS中基于软硬件协同进行MAC地址学习的方法,有效地利用MAC地址表资源和CPU资源,避免了攻击者伪造的大量合法MAC地址长期占用正常的MAC地址表资源,避免了CPU因为频繁处理MAC地址的认证请求消息而负担过重,以维护网络和其他业务的正常运行。
附图说明
图1为本发明提供的一种VPLS中基于软硬件协同进行MAC地址学习的方法流程图;
图2为本发明提供的初始状态下MAC地址表的内容;
图3为本发明提供的预认证状态下MAC地址表的内容;
图4为本发明提供的认证完成状态下MAC地址表的内容。
具体实施方式
本发明首先对预认证学习条目进行标识和对MAC地址表中的条目内容进行更新,其中,对MAC地址表中的条目内容进行更新包括更新条目状态为预认证,并更新预认证条目的老化周期为二分之一的预设老化周期,即等待二分之一的预设老化周期后自动释放预认证条目,防止预认证条目长时间得不到CPU的响应而长期占用MAC地址表资源。
根据预认证条目的统计链表长度状态,判断预认证条目的统计链表长度是否达到或者超过请求发送阈值,或者链表中预认证条目的驻留时间是否超过预设的阈值,如果满足上述条件之一,则开始向CPU发送认证请求,同时,停止接收预认证条目。然后,CPU逐条进行预认证条目的认证,并发出对MAC地址表中的预认证条目状态和老化周期进行更新的响应消息,等待本轮所有预认证条目均认证完成后,判断预认证条目的统计链表长度是否为空,如果为空则恢复接收预认证条目。
下面结合说明书附图和具体实施方式对本发明做出详细的说明。
本发明实施例提供了一种VPLS中基于软硬件协同进行MAC地址学习的方法,如图1所示,包括以下步骤:
S101、从输入AC/PW端口接收报文,解析获取该报文的源MAC地址和所属的虚拟交换实例VSI。
S102、判断该虚拟交换实例VSI中是否存在地址学习请求访问MAC地址表,如果是,转S103;否则,转S112。
S103、基于源MAC地址获取MAC地址表中的条目信息,获取预学习条目信息,判断预学习条目状态是否无效,以及预学习条目信息是否与MAC地址表中的条目信息匹配,如果预学习条目状态为有效且源MAC地址和虚拟交换实例VSI均匹配,但是输入AC/PW端口信息不一致,则转S104;如果预学习条目状态为无效,则转S105;如果预学习条目状态为有效且条目信息匹配,则转S115;其他情况,则不进行写入操作。
预学习条目信息包括:预学习条目状态、老化周期、源MAC地址、虚拟交换实例VSI和转发的AC/PW端口号。
S104、更新输入AC/PW端口信息到MAC地址表。
S105、更新预学习条目的源MAC地址、虚拟交换实例VSI和输入AC/PW端口信息到MAC地址表。
S106、判断输入AC/PW端口是否启动MAC地址的认证过程,如果是,转S107;否则,转S115。
S107、更新预学习条目状态为预认证,并更新预认证条目的老化周期为二分之一的预设老化周期。
S108、预认证条目信息的链表长度状态的仲裁操作,当链表长度为空时,转S109;当链表长度未达到请求发送阈值且计时器未超时时,转S110;当链表长度达到请求发送阈值或者计时器超时时,转S111。
S109、链表开始接收预认证条目信息,并启动计时器。
S110、链表继续接收预认证条目信息。
S111、将预认证条目信息转发到CPU进行认证操作,并停止接收预认证条目信息。
其中,预认证条目信息包括预认证条目存储到MAC地址表的位置以及站点移位情况下MAC地址表中的原始条目信息。
S112、判断该虚拟交换实例VSI中是否存在CPU请求访问MAC地址表,如果是,转S113;否则,转117。
S113、获取预认证条目状态,判断预认证条目状态是否无效,以及CPU请求认证的预认证条目信息与MAC地址表中的原有条目信息是否匹配;如果预认证条目状态为有效且条目信息匹配,则转S114;如果预认证条目状态为无效或者条目信息不匹配,则转S117。
S114、判断CPU请求访问MAC地址表的指令类型,如果CPU请求指令为INSERT插入,则转S115;如果CPU请求指令为DELETE删除,则转S116。
S115、更新条目状态为认证通过,并更新条目的老化周期为预设老化周期,转S117。
S116、更新条目状态为无效,转S117。
S117、结束。
下面以VSI网桥(VSI=10)中软硬件协同进行MAC地址学习的具体流程对本发明进行具体说明,具体包括以下步骤:
S201、从PW1端口接收到四份报文,解析得到这四份报文的源MAC地址分别为MAC1/MAC2/MAC3/MAC4,获取各报文所属的虚拟交换实例VSI均为VSI10。
在本实施例中,VSI网桥(VSI=10)中的所有AC/PW端口均启动MAC地址认证操作,其中初始状态下MAC地址表的内容如图2所示。
S202、此时存在地址学习请求访问MAC地址表,基于MAC1/MAC2/MAC3/MAC4和VSI10获取MAC地址表中对应地址A/B/C/D的条目信息。
S203、获取预学习条目信息,判断预学习条目状态是否无效,以及预学习条目信息是否与MAC地址表中的原有条目信息匹配,其中根据MAC地址表中的地址A/D对应的预学习条目状态均为“NO_VALID”,直接转S205;根据MAC地址表中的地址B对应的预学习条目状态为“VALID”并且源MAC地址和虚拟交换实例VSI均匹配,但是输入AC/PW端口信息不一致,转S204;根据MAC地址表中的地址C对应的预学习条目状态为“VALID”并且源MAC地址、VSI和输入AC/PW端口信息均匹配,则转S212。
S204、将PW1端口替换AC1端口并写入到MAC地址表中地址B空间,转S206。
S205、将MAC1,VSI10以及PW1端口信息写入到MAC地址表中地址A空间,将MAC3,VSI10以及PW1端口信息写入到MAC地址表中地址C空间。
S206、PW1端口启动MAC地址的认证过程。
S207、更新MAC地址表中地址A/B/D的条目状态为“AUTHORIZING”,并更新该条目的老化时间间隔为“HALF_TIME”。
S208、预认证条目信息的链表长度状态的仲裁操作,预设链表的请求发送阈值为128,对于MAC地址表中地址A对应的预认证条目信息,查看当前链表长度状态为“空”,则转S209;而MAC地址表中地址B对应的预认证条目信息,查看当前链表长度为1,即链表长度还远未达到请求发送阈值,则转S210;而MAC地址表中地址D对应的预认证条目信息,查看当前链表统计长度为2,即链表长度快要到达请求发送阈值,则转S211。
S209、链表接收MAC地址表中地址A对应的预认证条目信息,其中预认证条目信息包括“地址A,MAC1,VSI10以及PW1端口”,并启动链表中的认证条目的计时操作,链表长度进行加1操作。
S210、链表接收MAC地址表中地址B对应的预认证条目信息,其中预认证条目信息包括“地址B,MAC2,VSI10,AC1端口以及PW1端口”,链表长度进行加1操作。
S211、链表接收MAC地址表中地址C对应的预认证学习条目信息,其中条目信息包括“地址C,MAC4,VSI10以及PW1端口”,链表长度进行加1操作,此时仲裁链表长度已经达到请求发送阈值,则将MAC地址表中地址A/B/D对应的预认证条目信息转发到CPU进行认证操作。
S212、更新MAC地址表中地址C对应的条目状态为有效,并更新条目的老化周期为“FULL_TIME”。
完成上述操作后,预认证状态下MAC地址表的内容如图3所示。
CPU对MAC地址表中地址A/B/D提交的条目进行认证操作,其中MAC地址表中地址A提交的条目认证通过;而MAC地址表中地址B提交的条目认证不通过,即不允许AC1端口发生站点移位,并对发生站点移位的原始条目进行删除操作;而MAC地址表中地址D提交的条目在1/2的预设老化周期内还未得到认证结果,则更新当前MAC地址表中地址D对应的条目状态为“NO_VALID”,具体过程如下:
S213、此时不存在地址学习请求访问MAC地址表。
S214、此时存在CPU请求访问MAC地址表,根据CPU下发的预认证条目信息中携带的地址A/B/D依次获取当前MAC地址表的预认证条目信息,包括条目状态、老化间隔、源MAC地址、VSI和转发的AC/PW端口号。
S215、对CPU下发的预认证条目信息进行仲裁操作,判断MAC地址表中预认证条目是否失效或者预认证条目信息与当前地址表中的条目信息是否匹配,此时MAC地址表中地址A/B的条目状态均为“AUTHORIZING”并且条目内容匹配,则转S216;而MAC地址表中地址D的条目状态已经被老化为“NO_VALID”状态,则转S219。
S216、CPU请求指令仲裁操作,查看基于每条预认证条目的CPU请求访问MAC地址表的指令类型,其中MAC地址表中地址A提交的认证条目,CPU请求指令为“INSERT”,则转S217;而MAC地址表中地址B提交的认证条目,CPU请求指令为“DELETE”,则转S218。
S217、MAC地址表条目内容更新操作,更新条目状态为“VALID”,并更新老化时间间隔为预设的老化周期,则转S219。
S218、MAC地址表条目内容更新操作,更新条目状态为“无效”,则转S219。
S219、结束该条目的认证过程。
完成上述操作后,认证完成状态下MAC地址表的内容如图4所示。
本发明不局限于上述最佳实施方式,任何人在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。