欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 一种DHCPV6 PD场景下的路由控制方法与装置独创技术0字

一种DHCPV6 PD场景下的路由控制方法与装置

2021-01-31 19:01:53

附图说明" src="/d/file/p/2020/11-20/502a2fbce26617d269bf1221c9224c47.gif" />

一种DHCPV6 PD场景下的路由控制方法与装置

  技术领域

  本发明属于IPV6技术领域,更具体地,涉及一种DHCPV6 PD场景下路由控制的方法与装置。

  背景技术

  为了满足IPV6网络分层次化管理需求,IPV6地址和网络参数一般采用集中分配统一管理的方式去配置部署,在PON(Passive Optical Network,无源光纤网络)接入网体系结构中,用户接入网络边缘设备(如ONU(Optical Network Unit,光网络单元))上使用DHCPV6(DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)for IPV6)PDCLIENT协议向网络侧DHCPV6 SERVER服务器请求获取IPV6前缀和网络侧接入接口地址。DHCPV6是一个用来配置工作在IPV6网络上的IPV6主机所需的IP地址、IP前缀和/或其他配置的网络协议。

  ONU启用DHCPV6 PD(Prefix Delegation,前缀鉴权)功能一般工作在路由模式下,获取到DHCPV6 SERVER分配的IPV6前缀和网络接口地址,通过RA(Route Advertisement,路由通告)消息发布IPV6前缀和网关,告诉局域网侧终端设备,终端利用前缀和EUI-64网络接口标识自动生成IPV6单播地址,并添加缺省路由,下一跳为RA发布的网关地址。后续终端会用生成的IPV6地址接入IPV6网络上网。

  随着接入网向骨干网边缘拓展和自动化组网管理的需求,上述上网场景中,从ONU向网络侧上游部分,包括接入局端汇聚设备、DHCPV6SERVER、其它业务服务提供设备均是靠动态路由协议组网。用户终端上网的上行网络数据先靠缺省路由转发到ONU,再通过OLT(Optical Line Terminal,光线路终端)上动态路由转发到目标设备。

  但是目标设备回应上行数据向下转发数据时,缺少去往用户终端IPV6前缀目的网段的路由,无法转发到OLT。

  现有技术中,一种方法是通过在网络侧额外部署其它设备,完成前缀网段和转发接口的绑定管理,将管理信息在反馈给OLT、ONU,这样成本较高,且增加了额外增加了信令带宽,占用了网络资源,传输效率降低了,PD CLIENT和DHCPV6 SERVER之间耦合太紧,不同厂家的互通兼容性不好。

  另一种方法是靠DHCPV6 SERVER分地址信息时,将大量前缀和下一跳网关地址作为静态路由重分发到整个路由网络中,这样会造成对骨干网的冲击,影响路由收敛同样增加了DHCPV6 SERVER的成本,限定了使用场景,一旦SERVER不支持此特性,就无法完成下行转发。

  发明内容

  为了克服DHCPV6 PD地址分配场景下现有路由转发技术,对骨干网络有信令冲击、互通兼容性差、部署成本高,稳定性差的问题,本发明创造性地提供一种OLT上部署DHCPV6地址分配过程解析模块,管理控制生成静态路由并依据ONU的上线活动状态实时更新用户路由表的生存时间属性的方法及系统,可以避免对网络侧设备的依赖,以较低成本灵活组网,实现稳定低延时的上网下行业务数据转发。

  为实现上述目的,按照本发明的一个方面,提供了一种DHCPV6 PD场景下的路由控制方法,包括:

  S1、在ONU首次上线获取前缀和接口地址时,依据DHCPV6协议报文控制用户路由表生成;

  S2、通过报文交互触发更新用户路由表中前缀、地址生存周期为续租报文申请的租期,ONU续租申请继续使用IPV6前缀和地址;

  S3、每种报文消息根据预定义的规则映射成一个状态码,消息刚好与映射状态码匹配时,则触发当前状态向下一状态迁移;

  S4、系统初始化时建立一个超时扫描定时器,不断遍历用户静态路由链表中各用户节点,若当前用户节点不为空,则将系统当前时间和用户路由上线时间进行比较,若超过用户路由表前缀或接口IPV6地址生存周期,则认为用户下线或异常,执行删除操作将该用户节点和用户路由表清除;

  S5、用户路由表掉电存储和恢复处理。

  本发明的一个实施例中,所述用户路由表的数据结构为:

  用户主节点,构成元素包括:ONU标识DUID、生存周期T1、IPV6网关地址生存时间T2、收包接口VLAN、接口索引RCV_IF、路由转发域VRF、超时周期检测次数TIME_COUNT、前缀标识IA_ID;

  每个用户主节点下挂接1个前缀链表,表上节点PREFIX_NODE存储路由的目的前缀和前缀长度信息,同时该节点下挂下一跳子链表NEXTHOP POINT;

  下一跳子链表NEXTHOP POINT上每个节点NEXTHOP_NODE存储了一个下一跳网关IPV6地址NEXTHOP。

  本发明的一个实施例中,所述步骤S1包括:

  S101:Linux内核系统建立套接字,监听DHCPV6协议交互报文,当收到协议报文后,转到S102;

  S102:按报文类型代表的传送方向转到不同的分支处理流程,若报文是DHCPV6CLIENT发送给DHCPV6 SERVER的上行报文,转到S103;若报文是DHCPV6 SERVER发给DHCPV6CLIENT的下行报文,转到S107;

  S103:判断用户报文是否为RELEASE报文,若是则表明用户申请释放该地址或离线,转到S105,若不是则转到S104;

  S104:利用报文中DUID字段作为KEY去匹配查找用户路由表信息,若查找不到,转到S106,若找到了转S111;

  S105:根据RELEASE报文中的DUID字段删除用户路由表对应的表项,转到S111;

  S106:表明用户首次上线拿地址,新增DUID对应的用户主节点并初始化,转到S111;

  S107:获取DHCPV6 SERVER回复的下行REPLY报文中用户标识DUID信息,将DUID值作为KEY查找用户路由表对应的表项,若不存在,则说明该应答REPLY报文可能是网络侧产生的非法或伪造攻击报文,应该丢弃,所以转到S111,否则转到S108;

  S108:解析下行REPLY应答报文中IPV6前缀选项,在对应用户路由表中记录此前缀字段作为目的IPV6网段,转到S109;

  S109:解析下行REPLY应答报文中IPV6地址选项,在对应用户路由表中记录此地址作为IPV6路由下一跳网关,转到S110;

  S110:记录接收REPLY报文的时间,并以此计算该用户路由表超时时间,转到S111;

  S111:释放报文,结束处理流程。

  本发明的一个实施例中,在用户路由表生成阶段,报文解析后新增或更新路由节点会触发如下动作,包括:

  S201:利用用户DUID值生成查找KEY,转到S202;

  S202:判断用户路由表中对应表项是否存在,若存在,则转到S203;否则转到S207;

  S203:利用最新的前缀值遍历该链表,找到相匹配的前缀网段,若匹配成功,转到S204,否则转到S208,其中所述最新的前缀值是DHCPV6SERVER分配给用户的IPV6前缀更新参数;

  S204:利用添加的最新值更新前缀链表中目的前缀转到S205;

  S205:前缀链表的子节点PREFIX_NODE下挂了IPV6下一跳子链表NEXTHOP_POINT,用来支持等价路由的下一跳网关,用最新的IPV6地址值遍历此链表,查找匹配的IPV6网关,若匹配成功,转到S206,否则转到S209;

  S206:更新匹配到的IPV6网关的下一跳链表节点中IPV6地址值为最新添加值;

  S207:新建用户节点;

  S208:将前缀进行网段聚合计算后,新建目的网段;

  S209:新建IPV6路由下一跳节点。

  本发明的一个实施例中,所述步骤S3包括:

  S401:初始时用户路由表状态值为0,在DHCPV6_MSG_SOLICIT消息的驱动下转到S402;

  S402:状态迁移到DHCPV6C_STATE_SOLICIT,若收到报文DHCPV6_MSG_SOLICIT报文消息,则状态不变停在原地,收到DHCPV6_MSG_REQUEST请求消息时,转到S403;

  S403:用户路由表状态更新为DHCPV6C_STATE_REQUEST,此时若收到DHCPV6_MSG_SOLICT或DHCPV6_MSG_REQUEST报文消息,丢弃,状态机停在原地;若收到DHCPV6_MSG_RENEW租约更新报文消息,转到S405,若收到DHCPV6_MSG_RELEASE消息报文,则转到S406,若收到DHCPV6_MSG_REBIND租约重置报文消息,则转到S407,若收到DHCPV6_MSG_REPLY消息报文则转到S404;

  S404:用户路由表状态更新为DHCPV6C_STATE_UP,表明用户首次上线拿到地址,此时若再次收到DHCPV6_MSG_REPLY消息,丢弃,状态机停在原地;

  S405:用户路由表状态更新为DHCPV6C_STATE_RENEW,此时若收到DHCPV6_MSG_REQUEST报文消息,丢弃,状态机停在原地;

  S406:用户路由表状态更新为DHCPV6C_STATE_RELEASE,此时若再次收到DHCPV6_MSG_DECLINE和DHCPV6_MSG_RELEASE报文消息,丢弃,则状态机停在原地;

  S407:用户路由表状态更新为DHCPV6C_STATE_REBIND,此时若再次收到DHCPV6_MSG_REQUEST和DHCPV6_MSG_RENEW消息,丢弃,则状态机停在原地不动。

  本发明的一个实施例中,所述步骤S3中将每种报文消息根据预定义的规则映射成一个状态码,包括:

  S501:提取用户DHCPV6报文消息类型,转到S502;

  S502:获取报文中快速交互模式标志信息,若为两步模式,转到S504;若为四步模式转到S503;

  S503:判断报文是否为DHCPV6_MSG_REQUEST请求消息,若是,转到S505;不是,转到S507;

  S504:判断报文是否为DHCPV6_MSG_SOLICIT请求消息,若是,转到S505;若不是,转到S507;

  S505:将消息类型映射成用户路由表状态值,转到S506;

  S506:记录用户首次上线时间为当前时间;

  S507:判断报文是否为用户续租DHCPV6_MSG_RENEW或DHCPV6_MSG_REBIND消息,若是转到S508,否则转到S511;

  S508:提取消息中地址和前缀租约时间选项,转到S509;

  S509:计算用户路由表超时时间为当前时间加上租约时间,转到S510;

  S510:开启超时扫描定时器;

  S511:用户报文是否为地址释放消息DHCPV6_MSG_RELEASE或DHCPV6_MSG_DECLINE,若是转到S512,否则转到S514;

  S512:将消息类型和当前用户路由表状态值,进行状态检查,检查通过转到S513,否则转到S514;

  S513:更新用户路由表状态为DELETE;

  S514:处理结束,返回退出。

  本发明的一个实施例中,所述步骤S4包括:

  S601:启动超时扫描定时器,并遍历用户路由表,转到流程S602;

  S602:判断用户节点是否存在,若为空转到S607;否则转到S603;

  S603:计算系统当前时间和用户上线时间的差值,转到S604;

  S604:判断该差值是否超过用户路由表超时时间,若超过则转到S605;否则转到S606;

  S605:删除该超时的用户路由表和用户节点,转到S606;

  S606:取下一个用户节点为当前节点,继续遍历,转到S602;

  S607:单前无用户路由,重启定时器,开启下一轮扫描。

  本发明的一个实施例中,所述步骤S4中用户下线或异常执行删除操作将该用户路由表和用户节点清除,包括:

  S301:依据用户DUID值生成哈希查找KEY,转到S302;

  S302:哈希查找用户路由表中对应的表项,若用户不存在转到S310;若存在转到S303;

  S303:判断前缀链表单前节点是否为空,若为空转到S310;否则转到S304;

  S304:判断当前前缀节点下是否存在下一跳子节点IPV6链表,存在转到S307,不存在转到S305;

  S305:删除当前前缀节点,转到S306;

  S306:遍历,取下一个前缀节点为单前节点,转到S303;

  S307:判断当前前缀节点下下一跳子节点是否存在,若存在转S308,不存在转S305;

  S308:删除当前地址子节点,转S309;

  S309:遍历下一跳子链表,取下一个节点为当前地址节点,转到S307处理。

  本发明的一个实施例中,所述步骤S5包括:

  S701:等待接收添加/更新/删除消息,若无消息,继续转到S701等待,若有消息转到S702;

  S702:读取已存储的用户路由表文件,转到S703;

  S703:判断设备是运行还是重启状态,若为运行态则转到S704,否则转到S706;

  S704:与步骤S1中生成的用户路由表进行比较,若二者相同,代表重复信息无需处理,转到S701,否则转到S705;

  S705:全删全建的方式更新,重写已存储的用户路由表文件使其与当前用户路由表保持一致,转到S706;

  S706:逐行解析读取用户路由表,获取IPV6前缀目的网段和下一跳信息,转到S707;

  S707:将前缀和下一跳已静态路由的方式写入用户路由表,同时重分发到网络侧动态路由协议中。

  按照本发明的另一方面,还提供了一种DHCPV6 PD场景下的路由控制装置,包括用户路由表生成模块、续租申请模块、状态迁移模块、扫描处理模块和掉电恢复模块,其中:

  所述用户路由表生成模块,用于在ONU首次上线获取前缀和接口地址时,依据DHCPV6协议报文控制用户路由表生成;

  所述续租申请模块,用于通过报文交互触发更新用户路由表中前缀、地址生存周期为续租报文申请的租期,ONU续租申请继续使用IPV6前缀和地址;

  所述状态迁移模块,用于将每种报文消息根据预定义的规则映射成一个状态码,消息刚好与映射状态码匹配时,则触发当前状态向下一状态迁移;

  所述扫描处理模块,用于在系统初始化时建立一个超时扫描定时器,不断遍历用户静态路由链表中各用户节点,若当前用户节点不为空,则将系统当前时间和用户路由表上线时间进行比较,若超过用户路由表前缀或接口IPV6地址生存周期,则认为用户下线或异常,执行删除操作将该用户节点和用户路由表清除;

  所述掉电恢复模块,用于用户路由表掉电存储和恢复处理。

  总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:

  (1)充分利用局端OLT设备的强大芯片转发能力,效率和性能提升大;

  (2)在静态路由中引入激活时间,具备超时属性,很好地避免了无效用户终端信息对资源的占用,同时也防止了用户侧恶意攻击;

  (3)利用聚合算法,对同网段IPV6前缀进行一次聚合后再生成的用户路由表规格小于实际用户规格,节约了资源,提高设备网络利用率,使得能够在小规格设备形态上部署该技术方案,拓宽了使用场景;

  (4)本发明无需服务器预先规划好服务器上前缀和接口的绑定关系,在上行方向转发数据时,OLT上网络侧动态路由或静态路由METRIC优先级进行自动选路,无需关注LAN侧。在下行方向,自动生成用户路由表解决了动态路由场景下,报文无法达到ONU的问题;

  (5)本发明未额外使用中继代理路由通知选项消息报文和包含聚合路由目的地址的中继应答消息报文,保持原本DHCPV6协议地址分配二步交互或四步交互流程,实时性更好,提高了网络带宽利用率,减小了对网络侧服务器的协议负荷冲击;无需在中继代理和DHCPV6 SERVER服务器之间额外部署装置处理路由请求和应答,节省了成本;

  (6)本发明对路由信息的处理直接放在OLT汇聚设备上,该OLT同时充当中继代理的角色。同时引入用户路由表状态机和超时管理机制,增强了数据路由转发的安全性,在发挥OLT芯片强大转发效能的同时,也提升了设备防DOS攻击的能力。

  附图说明

  图1为本发明实施例中用户路由表数据结构图;

  图2为本发明实施例中DHCV6报文解析模块流程图;

  图3为本发明实施例中用户路由表添加更新流程图;

  图4为本发明实施例中用户路由表删除流程图;

  图5为本发明实施例中预定义用户报文消息与状态码映射关系表;

  图6为本发明实施例中用户路由表状态机处理流程图;

  图7为本发明实施例中用户路由表状态记录流程图;

  图8为本发明实施例中用户路由表超时管理流程图;

  图9为本发明实施例中用户路由表文件存储管理流程;

  图10为本发明实施例中一种DHCPV6 PD场景下的路由控制装置的结构示意图。

  具体实施方式

  为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

  实施例1

  本发明提供了一种DHCPV6 PD场景下的路由控制方法,在OLT上部署DHCPV6路由控制系统,启用中继路由转发,拦截地址分配和续租的常规协议交互报文,生成并动态维护用户路由表并建立点对点的路由重分发通道(如BGP(Broader Gateway Protocol,边界网关协议)、IP TUNNEL),将此路由重分发给骨干路由域中特定的目标设备,最终完下行数据成从目标设备到OLT,从OLT到ONU的二级路由转发过程。

  该方法有如下几个关键步骤:

  (1)ONU首次上线获取前缀和接口地址时建立用户路由表阶段

  在ONU首次上线获取前缀和接口地址时,依据DHCPV6协议报文控制生成建立用户路由表;

  终端用户上线触发ONU发起DHCPV6地址和前缀请求,OLT上开启监听协议报文的四步交互过程:

  SOLICIT(发现)->ADVERTISE(宣告)->REQUEST(请求)->REPLY(应答)

  或两步交互过程:SOLICIT(请求)->REPLY(应答)。

  从SOLICT消息中提取ONU标识信息DUID字段,新建用户节点,从两步或四步的最后一次下行REPLY消息(此处应答为首次拿地址时对请求的同意应答)中,提取出分配给ONU的IPV6前缀和网络侧接口IPV6地址,以及前缀和接口IPV6地址对应的租约选项值,以DUID标识作为查找KEY、前缀为目的网段、接口IPV6地址为网关生成静态路由,并记录路由上线激活时间为收到此REPLY消息的时间,记录前缀和地址的生存周期为上述租约选项,通过动态路由协议点对点重分发到骨干路由域中特定的目标设备上(例如公网中的一些服务器网络设备)。需要说明的是SOLICIT(发现)和SOLICIT(请求)这两个消息是相同的,只是在不同交互过程中为便于区分阶段而命名不同。

  (2)ONU续租申请继续使用IPV6前缀和地址阶段

  通过报文交互触发更新用户路由表中前缀、地址生存周期为续租报文申请的租期,ONU续租申请继续使用IPV6前缀和地址;

  进行如下报文交互过程:RENEW/REBIND(续租请求)->REPLY(应答),触发更新用户路由表中前缀、地址生存周期为续租报文申请的租期。此处REPLY(应答)是对续租请求的同意应答。

  (3)用户路由表状态迁移和校验阶段

  每种报文消息根据预定义的规则映射成一个状态码,消息刚好与映射状态码匹配时,则触发当前状态向下一状态迁移;

  在上述步骤(1)、(2)过程中,每种报文消息会根据预定义的规则映射成一个状态码(如图5所示),表明用户处于地址管理的某一个阶段,在特定状态码条件下,系统只能处理特定的一类报文消息,消息类型超前或滞后,均认为是非法消息丢弃。消息刚好与映射状态码匹配时,则触发当前状态向下一状态迁移。

  (4)用户路由表超时阶段

  系统初始化会建立一个超时扫描定时器,不断遍历用户静态路由链表中各用户节点,若当前用户节点不为空,则将系统当前时间和用户路由上线时间进行比较,若超过用户路由表前缀或接口IPV6地址生存周期,则认为用户下线或异常,执行删除操作将该用户节点和用户路由表清除。

  (5)用户路由表掉电存储和恢复阶段

  设计了一种机制完成用户路由表在OLT掉电重启时进行加载恢复生效。在步骤(1)生成用户路由表时会,先比较当前用户路由表和已存储的用户路由表文件内容是否相同,若不同将相关用户路由表以预设的字符串格式写入用户路由表文件中,OLT重启上电后,系统读取该文件并解析其中的IPV6前缀目的网段、网关IPV6地址、路由租约时间等信息,利用这些信息重建用户路由节点,生成静态路由进行管理,并重新点对点重分发到骨干路由域中的目标设备上。而在步骤(4)检测到用户下线超时,删除用户路由表时,同时触发删除当前旧的用户路由表文件,重新按最新用户路由表生成新的用户路由表文件存储起来。

  完成上述几个步骤后,OLT本地和骨干路由域中目标设备上都有了正确的、实时的去往终端用户前缀网段的路由信息,用户的IPV6上网下行数据就能正常转发。

  实施例2

  用户路由表的数据结构设计如下图1所示,用户主节点,构成元素包括:ONU标识DUID、生存周期T1、IPV6网关地址生存时间T2、收包接口VLAN,接口索引RCV_IF、路由转发域VRF、超时周期检测次数TIME_COUNT、前缀标识IA_ID。每个用户主节点下挂接1个前缀链表,表上节点PREFIX_NODE存储路由的目的前缀和前缀长度信息,同时该节点下挂了下一跳子链表NEXTHOP POINT,下一跳子链表NEXTHOP POINT上每个节点NEXTHOP_NODE存储了一个下一跳网关IPV6地址NEXTHOP。

  实施例3

  参见图2,代表DHCPV6报文解析处理阶段,用户首次获取IPV6地址信息时,会依据DHCPV6协议报文控制用户路由表生成。

  S101:Linux内核系统建立套接字,监听DHCPV6协议交互报文(UDP端口号为547),当该套接口收到协议报文后,转到S102;

  在RFC协议标准中,DHCPV6 SERER端口号为547;

  S102:按报文类型代表的传送方向转到不同的分支处理流程,若报文是DHCPV6CLIENT发送给DHCPV6 SERVER的上行报文,转到S103;若报文是DHCPV6 SERVER发给DHCPV6CLIENT的下行报文,转到S107;

  S103:判断用户报文是否为RELEASE报文,若是,表明用户申请释放该地址或离线,转到S105;若不是,转到S104;

  具体地,用户报文有很多种报文,在图5所示的规则表中进行过了说明,比如SOLICIT/REQUEST/ADVERTISE/DECLIENT/RENEW/REBIND;但下线一定是RELEASE报文;

  S104:利用报文中DUID字段作为KEY去匹配查找用户路由表信息,若查找不到,转到S106;若找到了,转到S111;

  若找到则表明用户之前经历过上线获取IPV6地址的过程,被软件模块记录和处理过,所以为重复上线应该丢弃。

  S105:根据RELEASE报文中的DUID字段删除用户路由表中对应的表项,转到S111;

  具体地,可以根据RELEASE报文里面对应的用户DUID(DHCPV6Unique Identifier,DHCPV6唯一标识符)查找用户路由表中对应的表项;

  S106:表明用户首次上线拿地址,新增用户路由表中DUID对应的表项用户主节点并初始化,转到S111;

  S107:获取DHCPV6 SERVER回复的下行REPLY报文中用户标识DUID信息,将DUID值作为KEY查找用户路由表中对应的表项,若不存在,则说明该应答REPLY报文可能是网络侧产生的非法或伪造攻击报文,应该丢弃,所以转到S111,否则转到S108;

  S108:解析下行REPLY应答报文中IPV6前缀选项,在用户路由表对应表项中记录此前缀字段作为目的IPV6网段,转到S109;

  S109:解析下行REPLY应答报文中IPV6地址选项,在用户路由表对应表项中记录此地址作为IPV6路由下一跳网关,转到S110;

  S110:记录接收REPLY报文的时间,并以此计算该用户路由表对应表项超时时间,转到S111;

  S111:释放报文,结束处理流程。

  实施例4

  参见图3,描述DHCPV6用户路由表添加和更新处理过程,上述实例1中报文解析后新增或更新路由节点会触发如下动作:

  S201:内部路由存储使用哈希算法,利用用户DUID值生成查找KEY,转到S202;

  S202:判断用户路由表中对应表项是否存在,若存在,则转到S203;否则转到S207;

  S203:用户节点下挂了前缀链表子节点,用来存储多条路由,利用最新的前缀值遍历该链表,找到相匹配的前缀网段。若匹配成功,转到S204;否则转到S208。其中所述最新的前缀值是由上述实例1中的报文解析模块解析出的DHCPV6 SERVER分配给用户的IPV6前缀更新参数;

  S204:利用添加的最新值更新前缀链表中目的前缀,转到S205。

  S205:前缀链表的子节点PREFIX_NODE下挂了IPV6下一跳子链表NEXTHOP_POINT,用来支持等价路由的下一跳网关。用最新的IPV6地址值遍历此链表,查找匹配的IPV6网关,若匹配成功,转到S206,否则转到S209;

  1个目的IPV6,多个下一跳网关,构成等价路由场景。

  S206:更新匹配到的IPV6网关的下一跳链表节点中IPV6地址值为最新添加值;

  S207:新建用户节点;

  S208:将前缀进行网段聚合计算后,新建目的网段;

  即将不同的网段前缀网络号进行比较判断,看是否存在包含关系。若存在则将二者合并,用大网段替换;

  S209:新建IPV6路由下一跳节点;

  即软件上存储用户关联的下一跳IPV6地址,将地址值挂在用户对应节点处。

  实施例5

  参见下图4,描述了DHCPV6用户路由表的删除处理过程。用户主动释放地址或超时会触发此过程动作,即用户下线或异常执行删除操作将该用户路由表清除,包括:

  S301:依据用户DUID值生成哈希查找KEY,转到S302;

  S302:哈希查找用户路由表中对应表项,若不存在,转到S310;若存在,转到S303;

  S303:判断前缀链表单前节点是否为空,若为空,转到S310;否则转到S304;

  S304:判断当前前缀节点下是否存在下一跳子节点IPV6链表,存在转到S307;不存在,转到S305;

  S305:删除当前前缀节点,转到S306;

  S306:遍历,取下一个前缀节点为单前节点,转到S303;

  S307:判断当前前缀节点下下一跳子节点是否存在,若存在转S308,不存在转S305;

  S308:删除当前地址子节点,转S309;

  S309:遍历下一跳子链表,取下一个节点为当前地址节点。转到S307处理。

  实施例6

  如下图6所示,描述了用户路由表状态机处理,依靠报文消息驱动状态迁移,检查消息是否符合预先定义的映射规则表(如图5),若不符合,过滤非法冗余报文消息,完成实时刷新和用户校验认证。

  S401:初始时用户路由表状态值为0,在DHCPV6_MSG_SOLICIT消息的驱动下转到S402;

  S402:状态迁移到DHCPV6C_STATE_SOLICIT,此时,收到报文DHCPV6_MSG_SOLICIT报文消息,则状态不变停在原地。收到DHCPV6_MSG_REQUEST请求消息时,转到S403;

  S403:当前用户路由表状态更新为DHCPV6C_STATE_REQUEST,此时若收到DHCPV6_MSG_SOLICIT或DHCPV6_MSG_REQUEST报文消息(MSG_TYPE<3),丢弃,状态机停在原地;若收到DHCPV6_MSG_RENEW租约更新报文消息,转到S405;若收到DHCPV6_MSG_RELEASE消息报文(MSG_TYPE=8),则转到S406;若收到DHCPV6_MSG_REBIND租约重置报文消息(MSG_TYPE=6),则转到S407;若收到DHCPV6_MSG_REPLY消息报文则转到S404;

  例如,首次获取的请求地址就是DHCPV6_MSG_SOLICIT消息,取值为1小于3,剩余的DHCPV6_MSG_REPLY应答、续租DHCPV6_MSG_RENEW、DHCPV6_MSG_REBIND过程或释放地址的DHCPV6_MSG_RELEASE等过程就都是大于3,这个判断主要是过滤重复报文或杂包,模块收到一种报文,触发用户路由表迁移到特定状态,若重复收到就不处理,若收到下一状态的触发报文就迁移;

  S404:当前用户路由表状态更新为DHCPV6C_STATE_UP,表明用户首次上线拿到地址,此时若再次收到DHCPV6_MSG_REPLY消息,丢弃,状态机停在原地;

  S405:当前用户路由表状态更新为DHCPV6C_STATE_RENEW,此时若收到DHCPV6_MSG_REQUEST报文消息(MSG_TYPE<5&&MSG_TYPE!=1),丢弃,状态机停在原地;

  S406:当前用户路由表状态更新为DHCPV6C_STATE_RELEASE,此时若再次收到DHCPV6_MSG_DECLINE和DHCPV6_MSG_RELEASE报文消息,丢弃,则状态机停在原地;

  S407:当前用户路由表状态更新为DHCPV6C_STATE_REBIND,此时若再次收到DHCPV6_MSG_REQUEST和DHCPV6_MSG_RENEW消息(MSG_TYPE<6&&MSG_TYPE!=1),丢弃,则状态机停在原地不动。

  在图5中,左边代表某种报文,右边代表收到报文后用户路由表设置为某种状态;例如代表MSG_DHCPV6_SOLICIT报文消息用1表示,DHCPV6C_STATE_UP状态用状态码11表示;

  具体地,在本发明实施例中,DHCPV6_MSG_XXXX与XXXX对应,是同一个报文,例如DHCPV6_MSG_SOLICIT对应前文所述的SOLICIT协议报文,DHCPV6_MSG_RENEW对应前文所述的RENEW协议报文,在此不一一描述。

  实施例7

  如图7所示,描述用户路由表状态码生成和记录的过程,过滤非法用户信息,减少冗余报文冲击,提高稳定性。依据用户的DHCPV6报文,按实时例4的处理记录对应路由状态,完成实时管理,具体流程如下:

  S501:提取用户DHCPV6报文消息类型,转到S502;

  S502:获取报文中快速交互模式标志信息(是RFC标准中DHCPV6协议报文中的option14选项字段),若为两步模式,转到S504;若为四步模式转到S503;

  S503:判断报文是否为DHCPV6_MSG_REQUEST请求消息,若是,转到S505;若不是,转到S507;

  S504:判断报文是否为DHCPV6_MSG_SOLICIT请求消息,若是,转到S505;若不是,转到S507;

  S505:将消息类型映射成用户路由表状态值(参见图5),转到S506;

  S506:记录用户首次上线时间为当前时间;

  S507:判断报文是否为用户续租DHCPV6_MSG_RENEW或DHCPV6_MSG_REBIND消息,若是转到S508;否则转到S511;

  S508:提取消息中地址和前缀租约时间选项,转到S509;

  S509:计算用户路由表超时时间为当前时间加上租约时间。转到S510。

  S510:开启超时扫描定时器;

  S511:用户报文是否为地址释放消息DHCPV6_MSG_RELEASE或DHCPV6_MSG_DECLINE,若是,转到S512;否则转到S514;

  S512:将消息类型和当前用户路由表状态值,进行状态检查,检查通过转到S513,否则转到S514;

  例如处于某一状态后,过滤生成该状态前的触发消息报文,允许通过触发迁移到下一状态的消息报文;所谓检查不通过,就是图6中,消息类型MSG_TYPE导致当前转态SATE_CODE停留在原地,没有转至下一个转态;而正常触发状态值跃迁的消息则检查通过;

  S513:更新用户路由表状态为DELETE;

  S514:处理结束,返回退出。

  实施例8

  如下图8所示,描述了用户路由表超时管理流程,实现用户下线或异常时清除冗余用户路由表,提高设备资源利用率,节约了规格。后续发布到上层路由器的路由也少了,容错性和可靠性更高。具体步骤如下:

  S601:启动超时扫描定时器,并遍历用户路由表,转到流程S602;

  S602:判断用户节点是否存在,若为空,转到S607;否则,转到S603;

  S603:计算系统当前时间和用户上线时间的差值,转到S604;

  S604:判断该差值是否超过用户路由表超时时间(即超时后还未发送续约安报文消息),若超过,则转到S605;否则转到S606;

  S605:删除该超时的用户节点和用户路由表,转到S606;

  S606:取下一个用户节点为当前节点,继续遍历,转到S602;

  S607:单前无用户路由,重启定时器,开启下一轮扫描。

  实施例9

  参见图9所示,描述了用户路由表文件存储管理流程,包括路由主备同步保存和掉电重启恢复,实现设备重启后快速恢复业务的目的。具体流程如下:

  S701:等待接收添加/更新/删除消息,若无消息,继续转到S701等待,若有消息转到S702;

  S702:读取已存储的用户路由表文件,转到S703;

  S703:判断设备是运行还是重启状态,若为运行态,转到S704;否则,转到S706;

  S704:与步骤S1中生成的用户路由表进行比较,若二者相同,代表重复信息无需处理,转到S701;否则,转到S705;

  S705:全删全建的方式更新,重写已存储的用户路由表文件使其与当前用户路由表保持一致,转到S706;

  全删全建的方式更新,指删除已存储的全部内容再将最新的用户路由表写入;

  S706:逐行解析读取用户路由表,获取IPV6前缀目的网段和下一跳信息,转到S707;

  S707:将前缀和下一跳以静态路由的方式写入用户路由表,同时重分发到网络侧动态路由协议中。

  实施例10

  如图10所示,本发明提供了一种DHCPV6 PD场景下的路由控制装置,包括用户路由表生成模块、续租申请模块、状态迁移模块、扫描处理模块和掉电恢复模块,其中:

  所述用户路由表生成模块,用于在ONU首次上线获取前缀和接口地址时,依据DHCPV6协议报文控制用户路由表生成建立用户路由表;

  所述续租申请模块,用于通过报文交互触发更新用户路由表中前缀、地址生存周期为续租报文申请的租期,ONU续租申请继续使用IPV6前缀和地址;

  所述状态迁移模块,用于将每种报文消息根据预定义的规则映射成一个状态码,消息刚好与映射状态码匹配时,则触发当前状态向下一状态迁移;

  所述扫描处理模块,用于在系统初始化时建立一个超时扫描定时器,不断遍历用户静态路由链表中各用户节点,若当前用户节点不为空,则将系统当前时间和用户路由上线时间进行比较,若超过用户路由表前缀或接口IPV6地址生存周期,则认为用户下线或异常,执行删除操作将该用户节点和用户路由表清除;

  所述掉电恢复模块,用于用户路由表掉电存储和恢复处理。

  本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

《一种DHCPV6 PD场景下的路由控制方法与装置.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)