一种完全序列号协议数据单元记录块删除的方法

文档序号:7974604阅读:195来源:国知局
专利名称:一种完全序列号协议数据单元记录块删除的方法
技术领域
本发明涉及数据网络通讯领域,尤其涉及一种完全序列号协议数据单元 记录块删除的方法。
背景技术
中间系统到中间系统路由协议IS-IS的完全序列号协议数据单元CSNP 报文描述了链路状态协议数据单元LSP数据库中的所有LSP条目信息,通 过邻居发来的CSNP报文可以知道邻居路由器LSP数据库信息, 一旦本地 路由器收到了 CSNP报文中描述的所有LSP条目,则可以认为本地路由器 已经和邻居路由器完成了 LSP数据库的同步过程。
CSNP报文通过TLV9 (指类型为9的TLV , TLV为〈Type, Length, Value>, <类型,长度,值>)字段携带LSP摘要信息,摘要信息包括LSP 报文的剩余保持时间(remain life-time), LSP报文ID(lsp-id),报文序列号 (sequence-number),报文校验和(check画sum)。除此之外,CSNP报文中通过 START LSP-ID和END LSP-ID字段描述在该CSNP报文中携带的LSP摘要 信息的范围,其中START LSP-ID总是以0000.0000.0000.00.00开始,END LSP-ID总是以ffff.ffff.ffff.ff.ff结束。并且如杲LSP数据库中LSP条目过多, 在一个CSNP报文中不能完全描述,则通过连续发送多个CSNP报文来描述, 其中第一个CSNP报文的STARTLSP-ID为0000.0000.0000.00.00,最后一个 CSNP报文的END LSP-ID为ffff.ffff.ffff.ff.ff,对于其他的CSNP报文,其 START LSP-ID为上一个CSNP报文中携带的最后一个LSP描述信息的 LSP-ID + 1,其END LSP-ID为本CSNP报文中携带的最后一个LSP描述信 息的LSP-ID。
举例如下如果LSP数据库中有四条LSP报文,其ID分别为 1111.1111.1111.00-00, 2222.2222.2222.00-00, 3333.3333.3333.00-00,和
4444.4444.4444.00-00,这四条LSP如果通过两个CSNP报文来发送,每个 CSNP报文中携带两条LSP摘要信息的话,这两个CSNP报文中描述的内容 分别如图1、图2所示(在这里只是为了举例的简单而假设了每个CSNP报 文中只携带两条LSP报文摘要信息)。

发明内容
本发明要解决的技术问题就是提供一种完全序列号协议数据单元记录 块删除的方法,判断是否收到了邻居路由器所有CSNP报文。
为了解决上述技术问题,本发明提供一种完全序列号协议数据单元记录 块删除的方法,包括如下步骤
(A) 定义一个链表,其链表节点包括两个字段,分别用于记录未收到 的CSNP报文的START LSP-ID和END LSP-ID;
(B) 路由器收到CSNP报文后,在链表上遍历,根据收到CSNP报文 的START LSP-ID和END LSP-ID,修改链表中相应节点,使其链表节点只 记录未收到的CSNP报文的START LSP-ID和END LSP-ID;
(C) 当链表中没有节点,则已经收到了邻居路由器发来的所有的CSNP报文。
进一步地,所述步骤(A)中,链表的两个字段为bgn、 end,首先设置 第一个节点,该节点的bgn字段值为0000.0000.0000.00-00, end字段值为 ffff.ffff.ffff.ff画ff。
进一步地,所述步骤(B)包括如下步骤
(a)若找到链表节点其bgn值< CSNP报文中描述的START LSP-ID 值< CSNP报文中描述的END LSP-ID值〈end值,则再创建一个新节点, 该新节点的bgn字段值为收到的CSNP报文中描述的END LSP-ID+1 ,其end 字段值为原节点的end字段值,并把该新节点插入到原节点后面,修改原节 点的end字段值为收到的CSNP报文中描述的START LSP-ID-1;
(
b )若找到链表节点,CSNP报文中描述的START LSP-ID值< =bgn 字段值< end字段值< =CSNP报文中描述的END LSP-ID值,则删除此节 点;若链表上有其他节点,则继续遍历链表上其他节点;
(c) 若找到链表节点,CSNP报文中描述的START LSP-ID值< =bgn 值〈CSNP报文中描述的ENDLSP-ID值〈end值,则修改此链表节点,其 bgn为CSNP报文中描迷的最后一个LSP-ID+1,并继续遍历其他节点;
(d) 若找到链表节点,其bgn值〈CSNP报文中描述的START LSP-ID 值〈end值<=CSNP报文中描述的END LSP-ID值,则修改此链表节点, 其end值为CSNP报文中描述的START LSP-ID值-1并继续遍历其他节点。
本发明利用了 IS-IS协议现有的报文格式,判断是否收到了邻居路由器 所有CSNP报文.,进而可以判断是否全部收到邻居路由器发送的CSNP报文 中记录的LSP条目,方法简单、方便、实用。


图1 ~图2为CSNP报文内容举例;
图3 ~图5为举例说明CSNP记录块删除的方法;
具体实施例方式
下面结合附图及具体实施例对本发明进行详细说明。 通过如下方式判断是否收到邻居所有的CSNP报文。
1. 定义一个链表,其链表节点用于记录未收到的CSNP报文的START LSP-ID和END LSP-ID ,分别用bgn和end表示。
2. 在路由器重启开始后,由于没有收到CSNP报文,因此挂入链表的第 一个节点bgn字段值为0000.0000.0000.00-00, end字段值为ffff.ffff.ffff.ff-ff。
3. —旦路由器收到CSNP报文后,在链表上遍历
a)如果找到链表节点(节点1),其bgn值〈CSNP报文中描述的START LSP-ID值< CSNP报文中描述的END LSP-ID值〈end值,则将此节点一分 为二,将中间的LSP-ID去掉。具体做法是再创建一个新节点(节点2), 节点2的bgn字段值为收到的CSNP报文中描述的END LSP-ID+1。其end 字段值为节点1的end字段值,并把节点2插入到节点1后面。修改节点1 的end字段值为收到的CSNP报文中描述的STARTLSP-IEM。
b) 如果找到链表节点(节点1) , CSNP报文中描述的START LSP-ID 值< =bgn字段值 < end字段值 < = CSNP报文中描述的END LSP-ID值, 则删除此链表节点。如果链表上有其他节点,则继续遍历链表上其他节点。
c) 如果找到链表节点(节点1), CSNP报文中描述的START LSP-ID值<= bgn值 < CSNP报文中描述的END LSP-ID值<end值,则修改此链表节 点,其bgn为CSNP报文中描述的最后一个lsp-id+l,并继续遍历其他节点。
d) 如果找到链表节点(节点1),其bgn值< CSNP报文中描述的START LSP-ID值< end值< =CSNP报文中描述的END LSP-ID值,则修改此链 表节点,其end值为CSNP报文中描述的START LSP-ID值-1并继续遍历其 他节点。
4.一旦链表中没有节点了,这时可以认为已经收到了所有的CSNP报文。
上面的判断是否收到所有的CSNP报文的方法通过逐块清除CSNP记录 节点的方式完成,当所有的记录节点都被删除后,我们认为已经收到了所有 的CSNP才艮文。因此,我们称这种方法为CSNP记录块删除法。
举例々口下
假设路由器的LSP-DB中有如下LSP条目
LSP1: llll.lll1.l1ll.OO-OO
LSP2: 2222.2222.2222.00-00
LSP3: 3333.3333.3333.00-00
LSP4: 4444.4444.4444.00-00
LSP5: 5555.5555.5555.00-00
LSP6: 6666.6666.6666.00-00
这些LSP通过三个CSNP报文发送,其中CSNP报文1携带LSP1和 LSP2信息,CSNP报文2携带LSP3和LSP4信息,CSNP报文3携带LSP5 和LSP6信息。根据上面描述的CSNP记录块删除方法。
第一步创建链表并把第一个节点挂入,由于此时还未能收到CSNP报文,因此节点的bgn和end字段分别为0000 0000 0000 00 00和FFFF FFFF FFFFFFFF,如图3所示。
第二步收到CSNP报文2以后,由于链表中有节点,其bgn为0000 0000 0000 00 00,其end为FFFF FFFF FFFF FF FF,而CSNP才艮文2中4苗述的 START LSP ID为2222 2222 2222 00 01, END LSP ID为4444 4444 4444 00 00,因此满足算法流程第3步的a流程。最终链表中剩余的CSNP块如图4 所示
第三步收到CSNP报文1以后,由于链表中有节点,其bgn为0000 0000 0000 00 00, end为2222 2222 2222 00 00,而CSNP才艮文1的START LSP-ID 为0000 0000 0000 00 00, END LSP-ID为2222 2222 2222 00 00,满足算法流 程第3步b流程。最终链表中剩余的CSNP块如图5所示
第四步收到CSNP报文3以后,链表中所有的CSNP记录块都被删除。
从上面的描述可以看出,不论收到CSNP报文的先后顺序如何, 一旦用 于记录CSNP报文块的链表为空,就说明所有的CSNP报文已经被全部收到, 否则说明CSNP报文仍未全部收到。
本发明所述方法可以避免路由黑洞过程中过载位的自动清除。网络中运 行IS-IS协议,其中某台路由器重启。由于重启过程在数秒到数十秒内完成, 所以网络中其他路由器的IS-IS LSP数据库中仍保留有重启路由器重启前产 生的LSP报文信息。因此一旦重启路由器和其建立邻居关系,该路由器就 可能根据这些旧的LSP报文计算出到某个目的网段A的路由通过重启路由 器。然而由于重启路由器此时LSP数据库还未和网络中其他路由器同步完 成,因此,重启路由器并不知道如何到该目的网段A,所有到达A的流量 将被全部丟弃。因此在重启路由器LSP数据库同步过程中,会产生暂态的路由黑洞。
国际互联网组织IETF公布的标准RFC3277中提出了相应的避免措施,这就是 一旦路由器重启结束并和其他邻接路由器建立邻居关系后,立刻更 新其非伪节点0号LSP报文并且洪泛出去,并且在这个LSP报文中设置过 载位(overload-bit)。这样就防止了网络中的其他路由器将该重启路由器作 为流量转发中继节点。此后,再清除这个过栽位,该重启路由器可以再次作为流量转发中继节点。
然而该过载位的清除时机,RFC3277并没有描述该等待时间究竟是多 少。目前业界常用的做法是该等待时间设置为用户配置的一个经验值,这 段时间用于完成IS-IS LSP数据库的同步, 一旦时间到则立刻清除过载位。 然而这样做并不恰当,如果采用设置经验值的方式将会产生如下问题
1、 如果IS-IS LSP数据库中LSP条目较少的话,会导致虽然数据库中 LSP报文同步过程很快就结束了 (通常几秒内完成),但过载位的清除却要 等待很长时间,这样网络运行状态的恢复将耗费大量的额外时间。
2、 如果IS-IS LSP数据库中的LSP条目很多的话(对于骨干网络很可 能出现这种情况),可能导致由于设置时间过短,在该段时间内数据库同步 过程未结束就清除了过载位,这样仍然不能避免路由黑洞的出现。
3、 如果根据网络运行的当前状况,根据各路由器实际LSP报文数量的 多少来分别设置经验值的话,对于网络的可维护性,可扩展性又会造成较大 的影响。维护的复杂性会大大增加。
由于IS-IS的CSNP报文描述了 LSP数据库中的所有LSP条目信息,因 此通过邻居发来的CSNP报文可以知道邻居路由器LSP数据库信息, 一旦 本地路由器收到了 CSNP报文中描述的所有LSP条目,则可以认为本地路 由器已经和邻居路由器完成了 LSP数据库的同步过程,此时就可以清除过 载位。在点到点链路上,在邻居关系建立起来时,会发送CSNP报文。在广 播链路上CSNP报文则是周期性发送的。因此,能够通过收到的CSNP报文 中描述的LSP摘要信息和收到的具体LSP报文做比较,来判断当前本地路 由器是否和邻居路由器完成了 LSP数据库的同步,从而实现过载位的自动 清除功能。
具体包括
a) 当路由器重启以后,立刻设置过栽位。此后当其收到邻居路由器发 送的CSNP报文后,对CSNP报文中携带的LSP摘要信息(TLV9字段)做检 查。
b) 如果该TLV中描述的LSP条目在重启路由器的LSP数据库中不存 在,则根据LSP描述内容生成一个"等待接收LSP记录”信息,记录内容包括等待接收的LSP报文ID号以及该报文的剩余保持时间。
c) 当重启路由器收到邻居发送的LSP报文后,根据LSP报文的ID号 遍历步骤b中记录的"等待接收LSP记录",如果找到相应的记录,其ID 号匹配,则清除该记录并将该LSP条目存储到LSP数据库中。如果没有找 到相应记录,则仅需要将LSP条目存储到LSP数据库中。
d) 每过1秒将"等待接收LSP记录"的剩余保持时间减1,当其剩余 保持时间为0后,需要将此记录删除。
e) —旦收到了所有的CSNP报文,并且"等待接收LSP记录,,全部被 清除后,说明重启路由器已经收到了所有的CSNP报文中描述的LSP条目, 其LSP数据库已经和邻居路由器同步完成,此后可以主动清除过载位。
其中,所述的步骤e中,如果邻居路由器LSP数据库中LSP条目过多, 则在一个CSNP报文中不能完全描述,邻居路由器将通过连续发送多个 CSNP报文的方式来描述。因此重启路由器需要采用本发明CSNP记录块删 除的方法确定收到了邻居发来的所有的CSNP报文。
权利要求
1.一种完全序列号协议数据单元记录块删除的方法,包括如下步骤(A)定义一个链表,其链表节点包括两个字段,分别用于记录未收到的完全序列号协议数据单元CSNP报文的链路状态协议数据单元的起始标识START LSP-ID和链路状态协议数据单元结束标识END LSP-ID;(B)路由器收到CSNP报文后,在链表上遍历,根据收到CSNP报文的START LSP-ID和END LSP-ID,修改链表中相应节点,使其链表节点只记录未收到的CSNP报文的START LSP-ID和END LSP-ID;(C)当链表中没有节点,则已经收到了邻居路由器发来的所有的CSNP报文。
2. 根据权利要求1所述的方法,其特征在于所述步骤(A)中,链 表的两个字段为bgn、 end,首先设置第一个节点,该节点的bgn字段值为 0000.0000.0000.00-00, end字段值为ffff.ffff.ffff.ff-ff。
3. 根据权利要求2所述的方法,其特征在于所述步骤(B)包括如 下步骤(a)若找到链表节点其bgn值< CSNP报文中描述的START LSP-ID 值< CSNP报文中描述的END LSP-ID值〈end值,则再创建一个新节点, 该新节点的bgn字,殳值为收到的CSNP才艮文中描述的END LSP-ID+1 ,其end 字段值为原节点的end字段值,并把该新节点插入到原节点后面,修改原节 点的end字段值为收到的CSNP报文中描述的START LSP-ID-l;(b )若找到链表节点,CSNP报文中描述的START LSP-ID值< =bgn 字段值〈end字段值<=CSNP报文中描述的END LSP-ID值,则删除此节 点;若链表上有其他节点,则继续遍历链表上其他节点;(c) 若找到链表节点,CSNP报文中描述的START LSP-ID值< =bgn 值<CSNP报文中描述的END LSP-ID值< end值,则修改此链表节点,其 bgn为CSNP报文中描述的最后一个LSP-ID+1,并继续遍历其他节点;(d) 若找到链表节点,其bgn值〈CSNP报文中描述的START LSP-ID 值< end值< =CSNP报文中描述的END LSP-ID值,则修改此链表节点, 其end值为CSNP报文中描述的START LSP-ID值-1并继续遍历其他节点。
全文摘要
本发明公开了一种完全序列号协议数据单元记录块删除的方法,包括定义一个链表,其链表节点包括两个字段,分别用于记录未收到的CSNP报文的STARTLSP-ID和ENDLSP-ID;路由器收到CSNP报文后,在链表上遍历,根据收到CSNP报文的STARTLSP-ID和ENDLSP-ID,修改链表中相应节点,使其链表节点只记录未收到的CSNP报文的STARTLSP-ID和ENDLSP-ID;当链表中没有节点,则已经收到了邻居路由器发来的所有的CSNP报文。本发明利用了IS-IS协议现有的报文格式,判断是否收到了邻居路由器所有CSNP报文,进而可以判断是否全部收到邻居路由器发送的CSNP报文中记录的LSP条目,方法简单、方便、实用。
文档编号H04L29/02GK101202734SQ20061016586
公开日2008年6月18日 申请日期2006年12月14日 优先权日2006年12月14日
发明者林光辉, 昊 金 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1