一种网络处理器对数据流量进行限速的方法 【技术领域】
本发明涉及通讯领域中宽带数据通讯,具体涉及网络处理器实现数据流量速率限制的方法。
背景技术
随着Internet的普及和商用化,提供IP接入服务的运营商面对的用户群体不断增多,网上的增值业务类型也不断丰富。当大量的话音/视频和数据业务在同一网络中传输时,只有对业务类型进行划分和对用户的服务等级(QOS)级别进行更有力的控制,才能使运营商能够针对不同用户提供不同服务等级(QOS)等级、具有个性化的宽带数据服务。实现这些差别服务的关键技术之一是对业务类型进行分类,在网络设备中采用线速网络处理器结构,针对不同的业务类型,网络处理器采用不同的带宽管理策略,对用户数据流量进行有效的限速。
在采用网络处理器进行线速数据包处理的网络设备(如路由器、交换机、接入服务器)中,现在大都采用的漏斗算法进行速率控制。漏斗算法的具体实现是,网络处理器开辟一定的数据包缓冲区作为缓冲队列,该队列被称为漏斗。当数据流量输入速率超过设置的最高速率时,将超出部分的包保存在缓冲队列即漏斗中,并在以后合适的时机将它调度出去。漏斗算法需要网络设备要有比较大的数据缓冲区进行数据包的缓存,才能进行有效的线速。在没有较大缓冲区作缓存地网络设备中,漏斗算法比较难实现,限速效果不好,不能达到增值业务的要求。
【发明内容】
本发明解决的技术问题是提供了一种网络处理器对数据流量进行限速的方法,根据简单的业务分类方法针对高速网络中的线速网络处理器数据处理流程,对输入网络处理器的数据包输入速率进行业务类型区别处理,采用定时严格限制法,用定时内允许通过的字节数作为数据包丢弃的依据,实现对输出速率的控制。克服了现有网络中,缺乏数据包的带宽控制,在对带宽严格要求的应用场合,不能提供有效增值服务的缺陷。
本发明所述的网络处理器对数据流量进行限速的方法,包括以下处理步骤:
1)网络处理器建立并初始化路由表,所述路由表的内容包括:搜索关键字,带宽控制参数,转发路由,前一次计时时间,前一次转发字节计数值,当前计时时间和当前转发字节计数值;
2)设定采样周期,并用所述采样周期内允许通过的字节数作为限速的门限值;
3)网络处理器接收数据包,并提取数据包中对应步骤1)中的关键字,用关键词在所述路由表中检索该数据包的带宽控制参数,如果需要进行带宽控制转步骤4),否则转发数据包;
4)比较当前计时时间与前一次计时时间的差值与所述采样周期的大小,若大于,则转发数据包,并记录实时参数;否则转步骤5);
5)判断当前转发字节计数值与前一次转发字节计数值的差值是否大于门限值,如果小于,转发数据包,并记录实时参数;否则,丢包处理。
所述步骤1)中的关键字是数据包的目的IP地址;所述步骤3)具体是根据数据包的目的IP地址检索所述路由表;
所述步骤1)中的带宽控制参数设定用以区分恒定比特率业务与未定义比特率业务,对于恒定比特率业务需要进行带宽控制,未定义比特率业务不进行带宽控制;
所述步骤4)和5)中的转发数据包,并记录实时参数具体包括以下步骤:
将当前计时时间赋值给前一次计时时间,当前转发字节计数值赋值给前一次转发字节计数值;
转发数据包;
将当前转发字节计数值加转发的数据包长度值赋值给当前转发字节计数值。
本发明在网络处理器收到数据包后,提取数据包头中的搜索关键字,匹配网络处理器中的用户路由表,再按照该用户记录中的业务类型参数,识别数据包的业务类型,采用相应的带宽控制策略进行限速处理,从而实现对不同业务类型数据包进行带宽控制。
采用本发明所述网络处理器对数据流量进行限速的方法,在采用网络处理器的宽带接入服务器上,用FTP传文件分别对128K、256K、512K、1M、2M、4M、8M进行测试,结果表明,稳定在所限速率左右,误差较小。从试验的结果来看,采用该限速后,视频点播(VOD)的图像效果很好。基本满足了有需要限速的增值业务(如视频点播)的要求。本发明实现简单,限速有效,达到了应用的要求。
【附图说明】
图1是本发明所述网络处理器对数据流量进行限速的方法流程图。
图2是本发明优选实施例的处理流程图。
图3是本发明实施例中采用的路由表的内容和格式示意图。
【具体实施方式】
本发明所述的网络处理器对数据流量进行限速的方法,对具体应用进行业务类型分类,根据不同的业务类型,网络处理器采用不同的数据包丢弃策略,满足限速要求。
业务类型分为以下两种:恒定比特率(CBR-Constant Bit Rate)业务、未定义比特率(UBR-Unspecified Bit Rate)业务。
恒定比特率(CBR)业务
CBR业务是指那些要求在整个连接周期内保持固定带宽的业务。业务所需求的带宽用参数平均速率rate来描述。网络应该保证数据源在任何时刻都可以以rate进行数据发送。比如说视频点播业务(VOD)就需要固定带宽平滑播放。
未定义比特率(UBR)业务
面向对时延和时延变化没有严格要求的非实时的应用,数据源的发送速率可能随时间变化。
参考图1所示,本发明的限速方法的处理流程包括以下步骤:
步骤一:定义具体的服务等级(QOS)参数,区分以上两种业务类型恒定比特率(CBR)业务、未定义比特率(UBR)业务;以及恒定比特率(CBR)业务平均速率;
步骤二:定义采样周期和限速的门限值
设置采样周期,并计算出采样周期内允许通过的字节数作为限速的门限值。如限速512kbps,采样周期设为2秒,那么限速的门限值为512kbps×2÷8字节。
步骤三:根据业务类型,设置QOS带宽控制参数,下载到网络处理器中的路由表中。路由表中包含数据包的统计,时间参数。网络处理器收到数据包,提取搜索关键字,查找路由表。
步骤四:根据数据包的目的地址,查到与该地址相对应的路由表。参看路由表项中带宽控制参数,如果是未定义比特率业务,就直接转发数据包,不做限速处理,跳转到步骤十。否则是恒定比特率(CBR)业务,进行下面的限速处理。
步骤五:读取网络处理器的定时器数值timer,判断当前时间和前次时间的时间间隔是否大于采样周期时间?
步骤六:时间间隔如果大于采样周期时间值,那么;
1)记录当前时间,和当前已转发数据包字节数;
2)转发数据包;
3)记录此次转发的字节总数;
4)跳转到步骤十。
步骤七:当前时间和前次时间的时间间隔如果小于采样周期时间值,那么判断此次转发的字节总数和前次已转发数据包字节数差值是否小于限速门限值?
步骤八:此次转发的字节总数和前次已转发数据包字节数差值如果小于限速门限值,那么:
1)记录当前时间,和当前已转发数据包字节数;
2)转发数据包;
3)记录此次转发的字节总数。
4)跳转到步骤十。
步骤九:此次转发的字节总数和前次已转发数据包字节数差值如果大于限速门限值,那么:丢弃该数据包;
步骤十:跳转到步骤四,循环以上的处理过程。
下面通过具体的实施例并结合附图2对本发明作进一步详细地描述。
在此具体实施例中,IP接入专线用户(IP地址是136.1.23.87)希望得到2M的带宽用FTP下载文件。采用本专利,我们设置该种业务类型为恒定比特率(CBR)业务,网络处理器对目的IP地址是136.1.23.87的数据包进行限速。
图2是本发明的程序流程图,采用本发明,我们设置该种业务类型为恒定比特率(CBR)业务,网络处理器对目的IP地址是136.1.23.87的数据包进行限速。参照图2程序流程图。
步骤一:定义具体的服务等级(QOS)参数和限速速率;
1).qos_type;
qos_type值区分以上三种业务类型恒定比特率(CBR)业务、未定义比特率(UBR)业务。恒定比特率(CBR)业务:qos_type=0x01;未定义比特率(UBR)业务:qos_type=0x02;
2)cbr_rate;
cbr_rate值确定恒定比特率(CBR)业务平均速率;cbr_rate值范围:(128,256,512,1024,2048,4096,8192),对应的速率从128kbps到8Mbps。
步骤二:定义采样周期和限速的门限值:网络处理器中有一个timer计时器,采样timer计时器用于时间处理。
本实例采用1秒作为限速的采样周期,这样计算比较简单,限速也更精确。用1秒内通过的字节数作为限速判断,设置限速门限值bytes_threshold。就是说如果限速512Kbps,那么这个用户在1秒内可以流过的最大流量为512k/8=64k字节,bytes_threshold=64k字节。
现在限速为2M,那么bytes_threshold=2M/8=256k字节。
步骤三:网络处理器建立并初始化路由表:
在本实例中,每一个搜索关键字对应一条路由表项,这条路由表项的内容包括:搜索关键字,带宽控制参数(恒定比特率(CBR)业务/未定义比特率(UBR)业务),转发路由,前一个计时时间former_time,前一次转发字节计数值former_bytes,当前时间,当前转发字节计数值current_bytes。初始化时,former_time=former_bytes=current_bytes=0.路由表的内容和格式请参见附图3。
步骤四:网络处理器收到IP数据包,提取目的IP地址,查找路由表。参看路由表项中带宽控制参数,是否恒定比特率(CBR)业务qos_type==1?如果不是,转到步骤七;
步骤五:读取定时器数值timer,判断(timer-former_time)值是否大于1秒?如果大于1秒,则转到步骤九;
步骤六:判断(current_bytes-former_bytes)值是否大于限速门限bytes_threshold;如果大于,则转到步骤八;如果小于,则转到步骤九。
步骤七:转发数据包;转到步骤四;
步骤八:丢弃该数据包,转到步骤四;
步骤九:former_time=timer;
forme_bytes=current_bytes;
转发数据包;
current_bytes=current_bytes+此数据包长度len;
转到步骤四;