一种实现报文分片组包的方法

文档序号:7945399阅读:519来源:国知局
专利名称:一种实现报文分片组包的方法
技术领域
本发明涉及报文的传输技术,特别是关于使用多连接点对点通信协议(ML-PPP,PPP Multilink)实现报文分片组包的方法。
背景技术
在数据传输中,一条物理连接对应一条逻辑上的点对点连接被称为单连接系统,而多条物理连接对应一条逻辑上的点对点连接通常被称为多连接系统。图1为多连接系统的示意图,其中,1、2、3为实际物理链路,4为逻辑上的虚拟数据通路,这里多条物理连接就象被“捆绑”成一条虚拟的通路来进行数据传输。
目前,基于多条物理连接“捆绑”成逻辑上的点对点单连接技术普遍的是采用基于多连接点对点通信协议(ML-PPP),使用该协议可使逻辑上点对点单连接顺利地达到目的。利用ML-PPP协议传输报文的格式如图2所示,图2示意出一个报文被分成若干个报文分片,在每个报文分片的头部加上包括标志字、是否是第一个分片(B,begin)、是否是最后一个分片(E,end)等附加信息。当发送端发送报文时,报文序列号是严格按照递增顺序进行的,而且这个报文序列号并不是每发送完一个报文就重置,而是所有报文都连续使用这个递增的序列。在报文的接收端通过B、E字段和报文分片序列号等信息来处理传输中需要解决的各种问题,最终得到组包完整的报文。
图3为单连接系统的传输方式。由于单连接系统中报文的源端和目的端之间只有一条数据链路,使用上述方式进行组包时,报文或者报文分片在这条通路中是顺序通过的,在数据接收端,报文或者报文分片的顺序以数据源端的发出顺序呈现,不存在报文乱序问题,因此在单连接系统中采用这种方式是完全可以进行正确组包的。
但是,在多连接系统中使用这种方式往往会出现报文的乱序现象。由于多连接系统存在多条物理上的数据链路,一般情况下,报文分片是分散在这些数据链路中进行传输的,在数据源端,即使是严格按顺序发送报文分片,由于各个物理数据链路的不同传输特性,数据接收端也很可能会接收到顺序已经混乱的报文分片。
图4所示为A、B、C三个报文的传输示意图,在数据源端,将A报文分为A-1、A-2和A-3三个报文分片,B报文分为B-1、B-2和B-3三个报文分片,C报文分为C-1、C-2和C-3三个报文分片,这些报文分片通过多点连接传输后,数据接收端可能会先收到A-1、A-2、B-1,然后才收到B-2、B-3、A-3,依此类推,报文的接收顺序已经混乱,接收端不能简单地将接收到的报文分片按照接收的顺序组合成完整报文。
并且,接收系统首先收到了A报文的报文分片A-1、A-2,如果报文分片A-3在传输过程中出现了滞后,迟迟没有到达接收端,那么在接收端必须为第一、第二个分片分配缓存空间,并且由于第三个分片到达时间是不可预知的,接收系统将一直等待该报文分片,那么随之而来的将是其他报文分片的不断传入,缓冲区的容量势必不断扩大,以至于不可控制。更糟糕的是,接收端无法判断迟到的报文分片A-3到底只是传输延迟,还是已经在传输中丢失了,如果该报文分片丢失了,那么该报文已经不可能完整组包,第一、第二个分片仍一直占用系统缓冲资源,那就意味无谓的浪费。
综上所述,现有技术中的缺点正如RFC(Request for Comment)1717中所描述“不能完整组包的出错报文的甄别及处理、接收缓冲区的设计、等待未组包完整的报文的分片的延时设计、乱序的报文分片的重整”。

发明内容
有鉴于此,本发明提供了一种实现报文分片组包的方法,使其在使用ML-PPP协议传输报文时,解决伴随多径传输产生的一系列问题不能完整组包的出错报文的甄别及处理、接收缓冲区的设计、等待未组包完整的报文的分片的延时设计、乱序的报文分片的重整,并且该方法传输效率高、可靠性强。
一种实现报文分片组包方法,该方法是这样实现的。
一种实现报文分片组包的方法,应用于多条物理连接对应一条逻辑上的点对点连接系统中,在发送端将报文分成一个以上的报文分片,其特征在于,该方法包括A.在每个报文分片上加附加信息,将所有含有附加信息的报文分片分配至每条物理数据链路中传输,所述附加信息包括标志字,报文序列号、分片序列号、净荷长度和循环比特位;B.在接收端,设置并初始化缓冲区掩码表,从任意一物理链路中接收一个含有附加信息的报文分片,根据该报文分片的报文序列号和循环比特位判断是否接收过与该报文分片属于同一报文的报文分片,如果接收过,执行步骤D,否则,执行步骤C;C.存储该报文分片的循环比特位之值,置该报文分片对应的掩码表的比特位;D.根据该报文分片的报文序列号、报文分片序列号和净荷长度,将该报文分片的净荷存储到对应缓冲区中;根据掩码位判断该报文是否组包完整,如果是,则初始化缓冲区掩码表和循环比特位数值,否则,执行步骤B。
所述方法进一步包括在步骤C和步骤D之间包括E.判断该报文分片是否为最后一个报文分片,如果是,则将缓冲区中高于该报文分片对应掩码表的比特位全部置位,否则,返回执行步骤D。
所述步骤B进一步包括B1.根据该报文分片头部的报文序列号和接收端缓冲区中的掩码位,判断接收端是否接收过与该报文分片的报文序列号相同的报文分片,如果接收过,执行步骤B2,否则,执行步骤C;
B2.判断该报文分片循环比特位的数值与已存储在接收端的L比特位的数值是否相等,如果相等,执行步骤D,否则,丢弃原来的报文,把当前的报文分片作为新报文的第一个分片,再执行步骤C。
所述步骤E进一步包括E1.判断该报文分片是否是该报文的第一个报文分片,如果是,则执行步骤E2,否则,执行步骤D;E2.从报文头部获得包括路由查找、地址自学习等信息。
本发明通过将报文分片的头部加上包括该报文分片含有效字节数是多少、该报文分片是否是报文第一个分片、是否是最后一个分片、接收过程是否经过了一个循环等附加信息,以及接收系统缓冲区的重新设计,使接收端较好地甄别和处理不能完整组包的出错报文,等待未组包完整的报文分片的延时,重整乱序报文分片,且该方法实现了基于ML-PPP协议的高可靠性、高可用性、高效率的数据传输。


图1为为多连接系统的示意图;图2为RFC 1717文档建议的报文分片格式;图3为单连接系统的基本传输模型;图4为现有技术中多连接系统的基本传输模型;图5为本发明的报文分片附加信息格式;图6为报文在发送时被分成报文分片示意图;图7为本发明接收报文的流程图。
具体实施例方式
下面结合附图和具体实施例详细说明本发明的具体实施方案。
本发明通过在发送端将报文分成相同大小的报文分片,且将这些报文分片头部加上长度为8个字节的附加信息,这些附加信息包括该报文分片属于哪个报文、处于报文什么位置、该报文分片中包含的该报文分片的有效字节数是多少、该分片是否是报文第一个分片B、是否是最后一个分片E、接收过程是否经过了一个循环(L,LOOP)等,然后将含有这些附加信息的报文分片分配到每条独立的物理数据链路中传输,在接收端获得这些分片,并将这些报文分片重新组合为原来的报文。
参见图5所示,其中5A为报文分片头部附加信息前4个字节的格式,5B为报文分片头部附加信息后4个字节的格式。附加信息前4个字节为RFC 1717协议中要求的标志字0xff03003d,后4个字节分为报文序列号、分片序列号、净荷长度和L比特位四部分,报文序列号在使用中必须是严格地递增的,并且这里标志字0xff03003d和B、E部分的含义和RFC 1717协议中建议的是一样的,而报文序列号、分片序列号以及有效字节数目字段是在发送端,每个报文的状态如图6所示。从图6中可以看到,一个报文被切成了若干个报文分片,每个报文分片头部都加上了图5所示的附加信息。与现有技术不同的是,这里要给每个报文都分配一个报文序列号,当报文序列号字段溢出的时候L位之值翻转,报文序列号字段则从头计数;在一个报文中,每个报文分片都有唯一的分片序列号,由于合理选择分片的大小,再考虑到整个数据报文的大小,所以这个字段一般是不会溢出的;如果该报文分片是报文的第一个分片,则将B置位,若是最后一个分片则将E置位;在有效字节字段填入本分片净荷中有效的字节数目,由于在传输过程中报文分片中可能会被填充一些无用的数据,因此才有此项。
如上所述,经过处理的各个数据分片被分配到各条物理数据链路中传输,当然这些数据分片被分配到物理数据链路中的分配算法可以是多种多样的。比如,考虑到一些数据链路的时延比较长,那么在数据流量小的情况下就不要使用这些数据链路等。
由于发送端已在报文分片的头部加上附加信息,所以接收端就可以依靠报文分片头部的附加信息来组合报文分片。组合报文分片的过程参见图7所示,其具体过程如下步骤701、初始化报文接收系统,预先设置掩码表,并将掩码表清零;步骤702、从多连接系统中任意一物理链路中接收一个含有包括标志字、报文序列号、分片序列号、有效字节数目和L比特位等附加信息的报文分片;步骤703、根据该报文分片头部的报文序列号和接收系统中的掩码位,判断接收系统是否接收过与该报文分片的报文序列号相同的报文分片,如果接收过,执行步骤704,否则,该报文分片是在接收端最先收到的一个新报文的报文分片,执行步骤705;步骤704、判断该分片的L比特位的数值与已存储在接收系统中的L比特位的数值是否相等,如果相等,则执行步骤706,否则,将该报文作为错误报文丢弃,把当前的报文分片作为新报文的第一个分片,执行步骤705;步骤705、接收系统存储该报文分片的L比特位之值,置该报文分片对应缓冲区中的掩码位为1;步骤706、判断该报文分片是否为最后一个分片,即E比特位是否为1,如果是,则执行步骤707,否则,执行步骤708;步骤707、将缓冲区中高于该报文分片对应掩码表的比特位全部置1;步骤708、判断该报文分片是否是报文的第一个分片,也就是判断该报文分片的B比特位是否是1,如果是,则执行步骤709,否则,执行步骤710;步骤709、从该报文分片的头部获得包括路由查找、地址自学习等信息;步骤710、根据报文序列号、报文分片序列号和净荷长度,计算得到报文净荷对应缓冲区地址,根据缓冲区地址将该报文净荷存储到对应缓冲区中;步骤711、判断缓冲区中所有接收到的报文分片对应掩码的比特位是否为1,如果是1,则执行步骤712,否则执行步骤702;步骤712、清除所有报文分片掩码比特位和存储区中L比特位数值。
在发送端,由于报文序列号字段溢出时,L比特位之值翻转,因在发送端L比特位是作为报文序列号的最高比特位来使用。但是在接收端L比特位代表报文接收是否经过了一个循环,这个循环的深度就是报文序列号字段代表报文总数。如报文序列号为0x31的报文在L比特位为0时,系统开始陆续接收该报文的报文分片,但直到接收到一个序列号同样为0x31、L比特位为1的报文分片时,L位为0的报文仍没有组包完整,系统则将丢弃该报文。也就是说,接收系统已等待了一个循环仍不能获得完整报文,接收系统将丢弃没有组包完整的报文,而开始接收新报文。
并且,每个报文分片对应缓冲区中一位掩码位,而掩码位大于等于报文分片数,因此在收到最后一个报文分片时,为更方便判断该报文是否组包完整,将所有高于该报文分片对应的掩码位都置1。当所有掩码比特位都为1时,整个报文的各个报文分片都到齐了,组包也就完成了。一个报文组包完整后,就将缓冲区中这些标志位清除,然后准备接收另外一个报文。这种接收过程实际上是一种并行接收模式,也就是同时进行若干个报文的接收。如,接收A报文时,B报文相对而言就是在等待。这种方式不但解决了报文分片丢失的检测,同时还解决了另外一个重要问题接收端报文缓冲区的问题。
并且,本实施例中使用了报文序列号的循环使用机制,使得等待“迟到的报文分片”的时间是一个相对确定的值一报文序列号的一个循环周期L,这个时间不依赖于硬件时钟,完全是靠软件来实现,这是它突出的优点。而且,随着数据流速率的变化,这个等待时间也在变化。也就是说,当系统中负荷重时数据流速率快,报文序列号很快就会经过一个循环,否则经过一个循环的时间甚至可以是无限长。因此,当系统负荷重时不允许将有限资源大量花费在无结果的等待上,而系统空闲时系统将有足够的时间等待那些“迟到的报文分片”以获得系统较好的传输性能。
另外,缓冲区的数量正好与一个循环的报文序列得数目是相等的,这就使得缓冲区的大小是完全可控的,不仅如此,该方法有助于编程的便利性、高可靠性、甚至系统性能的提升。
需要指出的是,对于不同的多连接系统,报文序列号字段的长度也许不同,在编程中可以随时修改这个字段的长度以适应不同多连接系统的特点。如果该系统各个物理连接的特性相差很大,甚至有些连接的可用性比较差的话,尽可能地将该字段扩大使系统获得好的性能;反之则可以缩小该字段,以减少系统资源的占用。
通过以上处理流程,报文分片的乱序问题也同时的到根本解决,即使报文分片如何混乱,总能根据报文序列号和分片序列号计算出对应的缓冲区地址,进而将报文分片的净荷存储到正确的缓冲区并最终正确地完成组包任务,重现发送端发出的报文。
权利要求
1.一种实现报文分片组包的方法,应用于多条物理连接对应一条逻辑上的点对点连接系统中,在发送端将报文分成一个以上的报文分片,其特征在于,该方法还包括以下步骤A.在每个报文分片上加附加信息,将所有含有附加信息的报文分片分配至每条物理数据链路中传输,所述附加信息包括标志字,报文序列号、分片序列号、净荷长度和循环比特位;在接收端,设置并初始化缓冲区掩码表;B.从任意一物理链路中接收一个含有附加信息的报文分片,根据该报文分片的报文序列号和循环比特位判断是否接收过与该报文分片属于同一报文的报文分片,如果接收过,执行步骤D,否则,执行步骤C;C.存储该报文分片的循环比特位之值,置该报文分片对应的掩码表的比特位;D.根据该报文分片的报文序列号、报文分片序列号和净荷长度,将该报文分片的净荷存储到对应缓冲区中;根据掩码位判断该报文是否组包完整,如果是,则初始化缓冲区掩码表和循环比特位数值,否则,执行步骤B。
2.根据权利要求1所述的方法,其特征在于,所述的方法进一步包括在步骤C和步骤D之间包括E.判断该报文分片是否为最后一个报文分片,如果是,则将缓冲区中高于该报文分片对应掩码表的比特位全部置位,否则,返回执行步骤D。
3.根据权利要求1所述的方法,其特征在于,所述步骤B进一步包括B1.根据该报文分片头部的报文序列号和接收端缓冲区中的掩码位,判断接收端是否接收过与该报文分片的报文序列号相同的报文分片,如果接收过,执行步骤B2,否则,执行步骤C;B2.判断该报文分片循环比特位的数值与已存储在接收端的L比特位的数值是否相等,如果相等,执行步骤D,否则,丢弃原来的报文,把当前的报文分片作为新报文的第一个分片,再执行步骤C。
4.根据权利要求2所述的方法,其特征在于,所述步骤E进一步包括E1.判断该报文分片是否是该报文的第一个报文分片,如果是,则执行步骤E2,否则,执行步骤D;E2.从报文头部获得包括路由查找、地址自学习信息。
全文摘要
本发明公开了一种实现报文分片组包的方法,应用于多条物理连接对应一条逻辑上的点对点连接系统中,在发送端将报文分成一个以上的报文分片,并且通过将报文分片加上该报文分片含有效字节数是多少、该报文分片是否是报文第一个分片、是否是最后一个分片、接收过程是否经过了一个循环等附加信息,以及接收系统缓冲区的设计,使接收端较好地甄别和处理不能完整组包的出错报文,等待未组包完整的报文分片的延时,重整乱序报文分片,且该方法实现了高可靠性、高可用性、高效率的数据传输。
文档编号H04L12/54GK1509025SQ0215677
公开日2004年6月30日 申请日期2002年12月18日 优先权日2002年12月18日
发明者蓝建栋, 徐前锋 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1