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

申请号 : CN200610078081.2

文献号 : CN100589477C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王飞祥周志雄

申请人 : 中兴通讯股份有限公司

摘要 :

本发明涉及一种基于绑定链路实现数据发送的方法,特别适用于通讯领域中使用多链路捆绑技术进行数据发送的通信节点。本发明使用发送调度线程判断从哪些Bundle队列中取数据包;发送执行线程提供子链路状况并发送数据;使用子链路发送状态表作为中间层,存储每条子链路当前的发送信息。本发明所述方法给每条子链路同样多的发送机会,对于带宽大的链路,使用发送机会的比例大些,带宽小的链路,使用发送机会的比例小些,这样就不需要关心每条链路带宽的大小以及因配置改变带来的带宽改变,方法简单、易于实现;另外使用发送状态表存储每条子链路的发送状态,可以避免某条子链路堵塞而引起整个通信节点发送效率下降的情况。

权利要求 :

1、一种基于绑定链路实现数据发送的方法,包括:建立绑定链路发送队列,每个绑定链路对应一个发送队列;

其特征在于,还包括如下处理:

建立子链路发送状态表,一条子链路对应一个表项,所有表项按照子链路号顺序排列, 所述子链路发送状态表中的每个表项包含:子链路是否被配置使用的字段、子链路是否正处 于等待发送状态的字段、当前数据包已发送字节数的字段、当前数据包剩余待发送字节数的 字段、指向存储待发送数据包内容内存的字段;

建立子链路的硬件发送缓存,所述硬件发送缓存的字节数固定;

建立发送调度线程,根据子链路发送状态表选择从哪个绑定链路的发送队列中取包,具 体包括以下步骤:步骤一、检查子链路发送状态表中某个表项中的子链路是否被配置使用的字段,若此子 链路没有被配置使用,转向下一个表项处理;

步骤二、检查子链路发送状态表中某个表项中的子链路是否正处于等待发送状态的字段, 若此子链路处在等待发送状态,转向下一个表项处理;

步骤三、根据子链路与绑定链路的对应关系,获取此子链路对应的绑定链路号,并从此 子链路对应的绑定链路发送队列中取数据包;

步骤四、将数据包信息存入子链路发送状态表,修改此子链路发送状态为不可用;

步骤五、继续检查子链路发送状态表中下一个子链路的状态;

建立发送执行线程,循环检查所有配置的子链路情况,并将数据包内容拷贝到硬件发送 缓存中。

2、如权利要求1所述的基于绑定链路实现数据发送的方法,其特征在于:所述发送执行线程执行如下处理:

步骤一、循环检测子链路发送状态表中的每个表项,直到找到一条子链路有数据包等待 发送;

步骤二、检查此子链路是否空闲,若否,则返回步骤一;

步骤三、将子链路发送状态表中指示的数据包内容拷贝到硬件发送缓存,通知硬件发送;

步骤四、清除此子链路对应表项中数据包信息,将此子链路改为可用状态;

步骤五、继续检查子链路发送状态表中下一个表项。

3、如权利要求1所述的基于绑定链路实现数据发送的方法,其特征在于:若绑定链路发送队列中的数据包长度都小于硬件发送缓存,省略表项中的当前数据包已 发送字节数和当前数据包剩余待发送字节数字段,增加一个字段表示数据包的实际长度;

所述发送调度线程将数据包长度填入子链路发送状态表;

所述发送执行线程在处理每个表项时,直接将整个数据包内容拷贝到硬件发送缓存。

说明书 :

技术领域

本发明涉及在多条链路上发送属于同一逻辑链路数据的方法,具体是一种基于绑定链路 实现数据发送的方法,特别适用于通讯领域中使用多链路捆绑技术进行数据发送的通信节点。

背景技术

当通信节点间存在多条链路时,为统一使用这些链路的带宽,可以采用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发送状态表,发送执行线程在处理每个表项时,就无需判断此数据包 是否已经被发送了一部分,直接将整个数据包内容拷贝到硬件发送缓存即可。虽然表项内容 可能与本发明的实施例不同,但是只要使用子链路发送状态表作为中间层,存储子链路发送 过程中的临时信息,都应在本发明的保护范围内。