一种基于绑定链路实现数据发送的方法

文档序号:7960561阅读:230来源:国知局
专利名称:一种基于绑定链路实现数据发送的方法
技术领域
本发明涉及在多条链路上发送属于同一逻辑链路数据的方法,具体是一种基于绑定链路实现数据发送的方法,特别适用于通讯领域中使用多链路捆绑技术进行数据发送的通信节点。
背景技术
当通信节点间存在多条链路时,为统一使用这些链路的带宽,可以采用MP(Multilink-PPP,RFC1990)协议将多条链路捆绑在一起作为一个Bundle(绑定链路),这时对于上层应用看到的就只有一条链路,这样可以有效的利用节点间所有链路的带宽。
在移动通讯网中,BTS(基站收发信机)与BSC(基站控制器)之间的物理连接一般会使用多条E1线,每个E1线的带宽被32个传输时隙平分。BTS或BSC中的上层业务模块可以根据某些原则,比如Qos要求或者区分信令/媒体流,来选择使用某一个Bundle来传输数据,一个Bundle由多条HDLC链路捆绑而成,一条HDLC链路可能包含1~32个时隙;通过系统管理后台增删Bundle对应子链路集合中的成员,也可以改变每条HDLC链路对应时隙个数,因此每个Bundle和HDLC的带宽都是可以动态配置的。
每一个Bundle对应一个Bundle发送队列,上层业务模块将所有需要在同一Bundle上发送的MP分片包按顺序入队,发送调度模块从队列中取包,选择Bundle对应子链路集中的某一HDLC,将数据包交给该HDLC发送。因为各条HDLC的带宽可能不同,因此发送调度模块需要参考各条HDLC的带宽大小,合理分配数据包到各条HDLC链路上,以保证不出现某些HDLC溢出而某些HDLC空闲的情况。
发送调度模块可以采取的一种调度方法是每条HDLC有一个单独的发送队列,调度方法的原则是,在单位时间内入队到各HDLC发送队列中的数据量之比应当尽可能的接近HDLC带宽比,这样才能达到公平利用每条HDLC发送能力的目的。
这种选择发送HDLC的方法有以下缺点一、必须有定时器来定位单位时间,定时器超时后将各条HDLC的发送统计值清零,对于由网络处理器或FPGA实现的多链路发送模块,定时器不易获得;二、如果HDLC数量较多,HDLC发送队列的管理将消耗大量的内存空间;
三、每条HDLC对应的时隙是可以动态调整的,因此一个Bundle所包含的子链路集成员间的带宽比有可能发生变化,在变化发生以后,发送调度模块需要重新比对HDLC带宽比和发送统计值,方法复杂。
发送调度模块还可以采用另一种相对简单的方法从某一Bundle发送队列中取MP分片包后,查Bundle与HDLC对应表,获得此Bundle对应的所有HDLC,发送调度模块依次查询这些HDLC的链路情况,如果发现某条HDLC空闲,就选择此HDLC发送。
这种方法的缺点是,当发送调度模块从Bundle发送队列中取出MP分片包后,如果前一时刻有短暂的突发数据,那么此时Bundle对应的所有HDLC链路就有可能都处于忙状态,此时有三种处理办法1、数据包丢弃,这样Bundle发送队列就没有起到缓冲的作用;2、将MP分片包再入队,放置在队尾,因为MP协议是按照MP分片包中的序号在接收端组包,所以MP分片包在队列中位置的改变,将引起接收方组包时较大的时延;3、一直轮询此Bundle所有HDLC链路状态,直到有一个HDLC链路空闲为止,这样做的缺点是发送调度模块在此期间无法为其它Bundle发送队列服务,即使其它Bundle对应的HDLC链路处于空闲状态。

发明内容
本发明的目的是在多链路发送技术方面,提供一种基于绑定链路实现数据发送的方法,克服现有技术中存在的上述发送方法的种种缺点,达到方法简单,易于实现,公平高效的目的。
本发明提出的数据发送方法,主要构思是使用发送调度线程判断从哪些Bundle队列中取数据包;发送执行线程提供子链路状况并发送数据;使用子链路发送状态表作为中间层,存储每条子链路当前的发送信息。
本发明具体是这样实现的一种基于绑定链路实现数据发送的方法,包括建立绑定链路发送队列,每个绑定链路对应一个发送队列;其特征在于,还包括如下处理建立子链路发送状态表,一条子链路对应一个表项,所有表项按照子链路号顺序排列;建立子链路的硬件发送缓存,所述硬件发送缓存的字节数固定;建立发送调度线程,根据子链路发送状态表选择从哪个绑定链路的发送队列中取包;建立发送执行线程,循环检查所有配置的子链路情况,并将数据包内容拷贝到硬件发送缓存中。
所述发送调度线程执行如下处理步骤一、循环检测子链路发送状态表中的每条子链路对应状态,找到一个可用子链路;步骤二、根据子链路与绑定链路的对应关系,获取此子链路对应的绑定链路号,并从此子链路对应的绑定链路发送队列中取数据包;步骤三、并且将数据包信息存入子链路发送状态表,修改此子链路发送状态为不可用;步骤四、继续检查子链路发送状态表中下一个子链路的状态。
所述发送执行线程执行如下处理步骤一、循环检测子链路发送状态表中的每个表项,直到找到一条子链路有数据包等待发送;步骤二、检查此子链路是否空闲,若否,则返回步骤一;步骤三、将子链路发送状态表中指示的数据包内容拷贝到硬件发送缓存,通知硬件发送;步骤四、清除此子链路对应表项中数据包信息,将此子链路改为可用状态;步骤五、继续检查子链路发送状态表中下一个表项。
所述子链路发送状态表中的每个表项包含子链路是否被配置使用的字段;子链路是否正处于等待发送状态的字段;当前数据包已发送字节数的字段;当前数据包剩余待发送字节数的字段;指向存储待发送数据包内容内存的字段。
若绑定链路发送队列中的数据包长度都小于硬件发送缓存,省略表项中的当前数据包已发送字节数和当前数据包剩余待发送字节数字段,增加一个字段表示数据包的实际长度;所述发送调度线程将数据包长度填入子链路发送状态表;所述发送执行线程在处理每个表项时,直接将整个数据包内容拷贝到硬件发送缓存。
本发明提出的数据发送方法给每条子链路同样多的发送机会,对于带宽大的链路使用发送机会的比例大些,带宽小的链路使用发送机会的比例小些,这样就不需要关心每条链路带宽的大小以及因配置改变带来的带宽改变,方法简单易于实现;另外使用发送状态表存储每条子链路的发送状态,可以避免某条子链路堵塞而引起整个通信节点发送效率下降的情况。


图1为本发明实施例中各部分关系图;
图2为本发明实施例中发送调度线程处理流程图;图3为本发明实施例中发送执行线程处理流程图。
具体实施例方式
下面结合附图和实施例对本发明作进一步的详细说明。
本发明的一个实施例是应用在BTS的Abis接口板的MP发送模块,此模块使用Intel的网络处理器作为硬件实现平台,最多支持48个Bundle/128条HDLC/48条E1,每个Bundle可以由1~128个HDLC捆绑组成。
图1描述了本发明实施例中各部分之间的关系(1)Bundle发送队列,每个Bundle对应一个发送队列;(2)HDLC发送状态表,一条HDLC对应一个表项,表项数为此通信节点能够配置的最大HDLC个数,所有表项按照HDLC号顺序排列,每个表项包含五个字段Using表示此HDLC是否被配置使用,Waiting表示此HDLC是否正处于等待发送的状态,Sended表示当前数据包已发送字节数,Left表示当前数据包剩余待发送字节数,Buffer_pointer表示指向存储待发送数据包内容的内存;(3)MSF TBUF为网络处理器提供的HDLC发送缓存,发送缓存大小固定,假设为t字节;(4)发送调度线程,它根据HDLC发送状态表选择从哪个Bundle发送队列中取包;(5)发送执行线程,它循环检查所有配置的HDLC链路情况,并将数据包内容拷贝到MSF发送缓存中。
发送调度线程循环检查HDLC发送状态表的各个表项,对每个表项的处理流程如图2描述第一步,检查Using字段,若此HDLC没有被配置使用,转向下一个表项处理;第二步,检查Waiting字段,若此HDLC处在等待发送状态,转向下一个表项处理;第三步,用表项对应HDLC号查找此HDLC对应Bundle号;第四步,从对应Bundle发送队列中取包,若队列中没有包,转向下一个表项处理;第五步,将取到的数据包对应的指针写入Buffer_pointer字段;第六步,将Sended清空,Left置为数据包长度,Waiting字段置为等待状态;第七步,处理下一个表项。
发送执行线程也循环检查HDLC发送状态表的各个表项,对每个表项的处理流程如图3描述
第一步,检查Using字段,若此HDLC没有被配置使用,转向下一个表项处理;第二步,检查Waiting字段,若此HDLC不在等待发送状态,转向下一个表项处理;第三步,检查MSF提供的HDLC发送状态寄存器,如果HDLC链路忙,转向下一个表项处理,如果HDLC链路空闲,则继续下一步处理;第四步,检查Sended是否等于零,如果等于零表示此HDLC将要开始一个新数据包的发送,通知MSF,设置偏移量为0,如果Sended不等于零,说明这个数据包已经发送了一部分,设置偏移量为Sended字节;第五步,根据偏移量,拷贝Buffer_pointer指示数据包对应内容到MSF发送缓存,拷贝长度为t和Left之间的较小值;第六步,Sended自加min(t,Left),Left自减min(t,Left);第七步,如果Left不等于零说明此数据包还有数据等待下一次发送,转向下一个表项处理;第八步,如果Left等于零已经发送完毕,通知MSF,将Waiting置为非等待状态;第九步,处理下一表项。
在具体实施本发明的技术方案时,根据实际情况,子链路发送状态表表项内容可以有所不同,例如如果确定Bundle队列中的数据包长度都小于硬件的发送缓存,表项中的Sended和Left字段都可以省略,增加一个字段表示数据包的实际长度即可,对应的发送调度线程将数据包长度填入HDLC发送状态表,发送执行线程在处理每个表项时,就无需判断此数据包是否已经被发送了一部分,直接将整个数据包内容拷贝到硬件发送缓存即可。虽然表项内容可能与本发明的实施例不同,但是只要使用子链路发送状态表作为中间层,存储子链路发送过程中的临时信息,都应在本发明的保护范围内。
权利要求
1.一种基于绑定链路实现数据发送的方法,包括建立绑定链路发送队列,每个绑定链路对应一个发送队列;其特征在于,还包括如下处理建立子链路发送状态表,一条子链路对应一个表项,所有表项按照子链路号顺序排列;建立子链路的硬件发送缓存,所述硬件发送缓存的字节数固定;建立发送调度线程,根据子链路发送状态表选择从哪个绑定链路的发送队列中取包;建立发送执行线程,循环检查所有配置的子链路情况,并将数据包内容拷贝到硬件发送缓存中。
2.如权利要求1所述的基于绑定链路实现数据发送的方法,其特征在于所述发送调度线程执行如下处理步骤一、循环检测子链路发送状态表中的每条子链路对应状态,找到一个可用子链路;步骤二、根据子链路与绑定链路的对应关系,获取此子链路对应的绑定链路号,并从此子链路对应的绑定链路发送队列中取数据包;步骤三、并且将数据包信息存入子链路发送状态表,修改此子链路发送状态为不可用;步骤四、继续检查子链路发送状态表中下一个子链路的状态。
3.如权利要求1所述的基于绑定链路实现数据发送的方法,其特征在于所述发送执行线程执行如下处理步骤一、循环检测子链路发送状态表中的每个表项,直到找到一条子链路有数据包等待发送;步骤二、检查此子链路是否空闲,若否,则返回步骤一;步骤三、将子链路发送状态表中指示的数据包内容拷贝到硬件发送缓存,通知硬件发送;步骤四、清除此子链路对应表项中数据包信息,将此子链路改为可用状态;步骤五、继续检查子链路发送状态表中下一个表项。
4.如权利要求1或2或3所述的基于绑定链路实现数据发送的方法,其特征在于所述子链路发送状态表中的每个表项包含子链路是否被配置使用的字段;子链路是否正处于等待发送状态的字段;当前数据包已发送字节数的字段;当前数据包剩余待发送字节数的字段;指向存储待发送数据包内容内存的字段。
5.如权利要求4所述的基于绑定链路实现数据发送的方法,其特征在于若绑定链路发送队列中的数据包长度都小于硬件发送缓存,省略表项中的当前数据包已发送字节数和当前数据包剩余待发送字节数字段,增加一个字段表示数据包的实际长度;所述发送调度线程将数据包长度填入子链路发送状态表;所述发送执行线程在处理每个表项时,直接将整个数据包内容拷贝到硬件发送缓存。
全文摘要
本发明涉及一种基于绑定链路实现数据发送的方法,特别适用于通讯领域中使用多链路捆绑技术进行数据发送的通信节点。本发明使用发送调度线程判断从哪些Bundle队列中取数据包;发送执行线程提供子链路状况并发送数据;使用子链路发送状态表作为中间层,存储每条子链路当前的发送信息。本发明所述方法给每条子链路同样多的发送机会,对于带宽大的链路,使用发送机会的比例大些,带宽小的链路,使用发送机会的比例小些,这样就不需要关心每条链路带宽的大小以及因配置改变带来的带宽改变,方法简单、易于实现;另外使用发送状态表存储每条子链路的发送状态,可以避免某条子链路堵塞而引起整个通信节点发送效率下降的情况。
文档编号H04L29/04GK101072224SQ20061007808
公开日2007年11月14日 申请日期2006年5月9日 优先权日2006年5月9日
发明者王飞祥, 周志雄 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1