一种分布式链路接入带宽控制系统的制作方法

文档序号:13730422阅读:133来源:国知局
技术领域本发明涉及一种分布式链路接入带宽控制系统,属于分布式计算及计算机网络控制技术领域。

背景技术:
现代的宽带网络对于用户不但要求提供足够大的宽带链路接入,而且要求能同时支持视频、语音、数据等不同的业务,并且能够根据用户的不同应用需求,对其提供个性化的服务。从计算机技术和网络技术的发展历史和趋势来判断,用户数和网络带宽需求的不断增长使服务器的数据计算和控制成为整个系统的瓶颈,因此,通过提高运算结点的计算效率、对不同结点进行负载调度和对用户链路进行带宽控制等措施能够有效地降低接入结点的负载和提高网络出口带宽的利用率问题。目前市场的网络链路接入设备并不支持基于用户角色的个性化带宽分配功能,因此,在日常网络实际运行中缺少有效的技术方法,电信、联通等各ISP甚至考虑通过流量计费方案来解决日益严重的用户数量增加、滥用网络带宽资源和网络攻击等问题。在我国,网络建设往往只注重硬件方面,通常会忽略了整个系统的运行优化方案,因此,在硬件部属完后依然存在不少实际运行问题,各个高校的校园网和商业小区普遍存在服务结点计算能力低、部分用户滥用网络资源、恶意消耗网络带宽的现象,导致网络流量异常增长,严重影响了网络的正常运行安全和其他上网用户的正常网络使用。越来越多的网络用户接入到宽带网络,增多的用户产生的链路必然会导致接入服务器计算负载的增大。虽然通过客户端通信优化可以在一定程度上能够降低服务器的计算负载,但是,服务器负载的主要来源是用户和服务器处理结点之间的数据交换,因此,通过客户端优化的手段来降低接入服务器负载的效果不是特别明显;另外,通过不断地增大网络出口带宽、服务器硬件配置升级或者采用集中式的负载均衡调度方法是能够增加单接入结点的计算能力,但是,以上这类方法的可操作性和可扩展性不足,依然无法满足整个环境对负载计算能力不断增长的需求。随着Internet各类应用的不断丰富,其流量也在不断地增加,网络拥塞现象显得越来越严重,因此,各ISP迫切需要合理地对网络带宽资源进行利用,在整个网络实施对所有的用户链路进行准确有效的带宽控制手段,网络瓶颈和拥塞才不会出现。因此,要达到整个网络系统的可运行、可管理和可控制的目的,必须通过对上网用户链路进行准确的带宽限制。

技术实现要素:
本发明的目的在于克服现有宽带网络链路接入技术的不足,提供一种分布式链路接入带宽控制系统。为解决上述技术问题,本发明采用的技术方案如下:一种分布式链路接入带宽控制系统,包括网络链路接入内核级计算模块、分布式结点系统负载均衡调度模块和链路带宽分配模块;其中,网络链路接入内核级计算模块是在Linux操作系统的内核中的一个虚拟的网络接口,用于将接入服务器接收到的客户端的用户数据包进行拆包和封装处理,同时还向它的上层应用提供接口服务;分布式结点系统负载均衡调度模块,采用分布式多计算结点的架构,在网络环境中部署多台接入服务器,并且各接入服务器之间都是相对透明的,接入服务器独立地为用户提供链路接入;所述计算结点随着系统负载的变化,增加或者减少;链路带宽分配模块由数据包排队器和令牌缓冲池构成,所述数据包排队器为每个接入系统的用户链路新建一个排队,同一个用户链路,按照先进先出队列的规则进行排队,数据包依次进入令牌缓冲池,在系统的内存为每个用户链路新建一个令牌缓冲池,令牌缓冲池的容量根据认证数据库中相应的数据表指定的网络带宽来设置,并且编程为每一个令牌缓冲池生成一定数量的令牌,令牌缓冲池根据FIFO规则及剩余可用令牌的数量,把令牌发放给进入令牌缓冲区的数据包,最后,持有令牌的数据包将有权限到达出口链路;若数据包无法获得令牌,数据包将不能发送,然后被丢弃。前述的网络链路接入内核级计算模块通过在用户空间实现或者在系统内核空间;在用户空间实现中,当要进行数据转发时,首先要建立原始套接字来接收数据链路层的数据包,若该数据包已经被封装,则要先把该数据包解封,并且上层的应用程序不能使用封解装;在系统内核空间实现中,上层的应用程序通过利用接口和链路进行数据交换,数据包发送通过链路接口自动进行封装操作,成为一个新数据包后再转发出去。前述的客户端和接入服务器配置链路配置规则,链路配置规则用于新建、显示、删除或者修改链路的配置数据。前述的客户端和接入服务器之间进行通信,实现链路的新建、用户端IP参数分配,具体是客户端从调度器获得接入服务器的地址,然后向接入服务器发送接入请求,接入服务器通信程序接收到该请求,依次在数据库中对用户的身份进行检测、检查是否存在冲突地址、生产并对请求进行响应,最后进行新链路的建立操作。前述的分布式结点系统负载均衡调度模块配置一个负载调度器,所述负载调度器对用户链路的接入请求进行统一安排,对系统负载较低的接入点增加接入链路,对系统负载较高的接入点减少接入链路,动态地在多台接入服务器间均衡调度。前述的链路带宽分配模块中建立一个主分类,该主分类包含系统的所有带宽,然后基于该主分类再设计若干子分类,子分类根据各样条件对原始的数据包进行划分,每个子分类把所拥有一定数量的带宽都分配给不同链路接口。本发明所达到的有益效果:本发明支持超大规模的网络链路接入,能够有效地降低系统计算负载,能够有效地降低数据包在链路间的总时延长度,增加链路出口总体带宽利用率和系统效能,适用于高负载网络环境下的高性能宽带链路接入及带宽控制。附图说明图1为本发明的系统架构图;图2为网络链路接入内核级计算模块实现原理图;图3为分布式链路接入模型图;图4为多计算结点链路接入负载均衡调度方法图;图5为多链路带宽控制原理图。具体实施方式下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。本发明的系统架构如图1所示,由网络链路接入内核级计算模块、分布式结点系统负载均衡调度模块、链路带宽分配模块组成。网络链路接入内核级计算模块的主要功能是将接入服务器接收到的用户数据包进行拆包和封装处理,其表现形式是在Linux操作系统的内核中的一个虚拟的网络接口,它是链路接入服务器和客户端拨号软件的重要构成组件。另外,网络链路接入内核级计算模块还向它的上层应用提供接口服务,即输入输出数据的处理方法,客户端和链路服务器交互应用程序、链路配置规则等通过输入输出控制隧道对网络链路接入内核级计算模块进行处理。如图2所示,网络链路接入内核级计算模块可以通过两种方法实现,第一种是在用户空间实现,第二种是在系统内核空间实现。在用户空间实现中,当要进行数据转发时,首先要建立原始套接字来接收数据链路层的数据包,若该数据包已经被封装,则要先把该数据包解封,并且上层的应用程序不能使用封解装功能。在系统内核空间实现最显著的特点就是它和上层的应用程序是相对独立的,任意的程序可以调用链路的大部分功能,因此,上层的应用程序无需为此作出改动,即链路对上层的应用程序是透明存在的。在系统内核空间实现中,上层的应用程序通过利用接口和链路进行数据交换,数据包发送通过链路接口自动进行封装操作,成为一个新数据包后再转发出去。在提高链路接入服务器计算性能的角度来看,在系统内核空间实现链路功能明显要比在用户空间实现更加高效。因此,在该方法中,在数据链路层的P2P协议的基础上增加了一步操作,P2P协议数据链路的建立、数据的转发、链路的删除等步骤都通过P2P协议来实现,其它的功能例如数据包路由选择等就放在系统核心级完成,编程实现一个服务器端的监听程序,系统内核中实现核心模式的驱动程序和套接字,通过使用套接字对数据包进行接收发送,从而实现一台服务器能承受超大规模的链路接入。因为网络链路接入内核级计算模块是一个相对独立的模块,装载时不需要和上层应用程序进行交互访问,因此,可以在系统启动时进行自动启动。链路配置规则和交互应用程序只有当在网络链路接入内核级计算模块已经运行系统的情况下才能正确执行,否则向输入输出控制隧道发送的数据无法得到回应,并且不能新建、修改或删除链路。为了向网络管理员提供一个直观的、用于配置链路的图形化配置管理界面,我们需要开发链路配置规则。链路配置规则主要功能是新建、显示、删除或者修改链路的配置数据。具有相应权限的网络管理员可以通过链路配置管理界面监视所有用户链路状况,监控的内容包含发送和接收的流量、具体参数、异常信息等等,某些情况下还能够新建、修改或强制删除链路。链路配置规则是客户端拨号软件和链路接入服务器软件的组成部分,终端用户可以选择安装或者不安装链路配置规则。客户端和链路接入服务器通信功能是应用层软件的重要组成部分,目的是实现链路的新建、用户端IP参数分配等。通信功能的实现要从调度器获得链路接入服务器的地址,然后向接入服务器发送接入请求,接入服务器通信程序接收到该请求,依次在数据库中对用户的身份进行检测、检查是否存在冲突地址、生产并对请求进行响应,最后进行新链路的建立操作。在整个流程里,它要和MySQL数据库保持交互。MySQL数据库里面需要有多张数据表,其中最重要的是保存用于身份认证的用户名密码和保存在线用户的详细信息的两张数据表,例如链路创建时间、接口序号、状态信息、IP参数、在线时间等。因为网络链路接入内核级计算模块在Linux系统中以虚拟网络接口的形式存在,因此,它和其它网络设备一样,同样具备其它网络设备应有的基本功能,主要功能包括:初始化设备、接收发送数据包、异常处理、输入输出控制等。其中接收发送数据包是最重要的部分,是虚拟网络接口驱动程序不同于其它一般网络接口驱动程序的最本质区别。数据发送和接收方式的差异,也导致了设备初始化、异常处理、输入输出控制等功能在实现上也有所不同。如图3所示,用户链路增加会存在扩展性问题,因此,在分布式结点系统负载均衡调度模块中,采用分布式多计算结点的架构,在网络环境中部署多台接入服务器,并且各服务器之间都是相对透明的,它们都可以独立地为用户提供链路接入,这些服务器可以位于不同的地理位置上,具有的分布式特征。随着系统负载的变化,计算结点可以增加或者减少,因此,在这种网络架构环境中,我们可以采取增加新的接入服务器来到达提高系统的整体容量的目的,满足日益增加的用户链路接入需求。链路的接入点和带宽分配由控制节点完成调度,而且每条链路可以接入到任何一个计算结点上。分布式结点系统负载均衡调度模块对分布在不同方位的计算结点综合调度和并行化计算,这样能够达到超大规模的链路接入负载及带宽均衡的目的。并且,在本发明增加一个负载调度器,如图4所示,主要负责对用户链路的接入请求进行统一安排,对系统负载较低的接入点增加接入链路,对系统负载较高的接入点减少接入链路,动态地在多台接入服务器间均衡调度,避免了单台服务器因负载过高出现不稳定的情况,大大提高了系统的可靠性。均衡调度不但提高了系统的稳定性,而且还可以有效增加系统带宽的总体利用率。如图5所示,链路带宽分配模块主要由两大部分构成:数据包排队器和令牌缓冲池。数据包排队器负责为每个接入系统的用户数据包新建一个排队,同一个用户数据包,按照先进先出队列的规则进行排队,数据包依次进入令牌缓冲池,在系统的内存为每个用户链路新建一个令牌分配缓冲池,令牌缓冲池的容量是根据认证数据库中相应的数据表指定的网络带宽来设置,并且编程为每一个令牌缓冲池生成一定数量的令牌,令牌数量的多少与缓冲池的容量构成线性关系,然后把这些令牌分发给用户数据包。当有用户数据包进入系统时,若是新用户,数据包排队器则生成一个新队列,否则进入各自的队列后面,然后在数据包排队器中按先后顺序进行排队,接着数据包被移到令牌缓冲池中,令牌缓冲池根据FIFO规则及剩余可用令牌的数量,把令牌发放给进入令牌缓冲区的数据包,最后,持有令牌的数据包将有权限到达出口链路;若用户数据包无法获得令牌,数据包将不能发送,然后被丢弃。在实现过程中,我们通过编写shell脚本,每个用户链路连接时都必须读取shell脚本并且被运行,从而达到带宽分配的目的。链路带宽分配模块根据数据包中源地址/目的地址、源端口/目的端口等数据包的关键信息,通过对网络带宽种类进行划分,限订每个分类中数据包的发送和接收速度,达到对网络链路进行流量控制的目的,从而保障了关键业务的带宽需求。队列排队模块、数据包分类模块和数据包过滤模块三部分组成了带宽控制功能。在链路带宽分配模块中,我们第一步首先要建立一个主分类,该主分类包含系统的所有带宽,然后基于该主分类再设计若干子分类。子分类的功能是把根据各样条件对原始的数据流进行划分,用于进行相应的流量控制。每个子分类把所拥有一定数量的带宽都分配给各不同链路接口,因此,所有子类带宽的相加和不能大于父类的带宽总数。对数据包进行分类目的是为数据包创建若干条数据传输通道,另外,过滤规则是用于决定数据包的流向。为了实现带宽控制,必须在链路接口加上控制规则,控制规则可以用于控制通过该网络接口的流量大小。在Linux系统的内核中,HTB、CBQ是能够分类的,并且可以设置每个用户链路的优先级,优先级高的先发送,优先级低的后发送;为了充分利用系统带宽,我们还实现了链路带宽共享,当某一个分类上有空闲带宽的时候,那么该分类的带宽可以暂时提供给其它的分类,还可以控制链路的突发流量,限制最大速率等。在该模块中需要配合认证服务器的属性的进行控制,实现时需要编辑系统的/etc/ppp/options文件:plugin/usr/lib/pppd/2.4.5/radius.soplugin/usr/lib/pppd/2.4.5/radattr.so在认证服务器的数据库中我们必须要定义好用户链路的上行下行带宽值,可以分别为Download-Bandwidth和Upload-Bandwidth,通过修改数据库表中该属性的值能够实现对不同链路的带宽进行相应的限制,客户端用户成功拨号连接到服务器后,我们可以在系统的/var/run/radattr.ppp*文件查看通过认证服务器返回给该拨号用户的属性,具体如下:Framed-IP-Address193.168.10.133Service-TypeFramed-UserFramed-ProtocolPPPFramed-MTU600Upload2048Download4096Burst8000Session-Timeout6350086Idle-Timeout120最后需要编辑系统的/etc/ppp/ip-up.local这个文件,拨号链接创建的时候将被强制运行带宽控制脚本,脚本的详细代码为:#!/bin/sh#$6IP参数#$5远程IP地址#$4本地IP地址#$3速度#$2终端设备#$1接口名称DOWNLOAD=`cat/var/run/radattr.$1|grep'Download-Bandwidth'|cut-d''-f2`UPLOAD=`cat/var/run/radattr.$1|grep'Upload-Bandwidth'|cut-d''-f2`Buff=`cat/var/run/radattr.$1|grep'Burst'|cut-d''-f2`#限制下载带宽/sbin/tcqdiscadddev$1roothandle1:htbdefault1/sbin/tcclassadddev$1parent1:classid1:1htbrate${DOWNLOAD
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1