一种地址解析协议报文的流量控制方法
技术领域
本发明涉及网络领域,尤其涉及一种地址解析协议报文的流量控制方法。
背景技术
ARP(address resolution Protocol)是地址解析协议的简称,是获取物理地址的一个TCP/IP协议。其主要作用在于实现地址解析,即通过广播方式获取某个目的IP地址对应的目的MAC地址,以便利用获得的MAC地址进行数据传输。节点A将节点B的IP地址的ARP请求被广播到网络上后,只有具有该IP地址的节点B会给出ARP应答包,其中携带了节点B的MAC地址,节点A收到确认节点B的MAC地址的应答后,数据包才能被传送出去。
但是,在这个过程中存在着ARP欺骗的风险。由于发送的是ARP请求广播,源主机所在网络内的所有主机均将收到该广播请求,黑客或者感染了ARP病毒的主机可以通过这个机会将伪造的MAC地址返回给源主机,源主机获得该MAC地址后向该MAC地址的目的主机发送数据。然而,由于源主机获得的MAC地址是伪造的,发送的数据将无法真正到达目的主机,一方面可能引起数据多次重传,另一方面黑客会不断地返回伪造的MAC地址,致使短时间内网络数据包流量大增,而网络带宽通常恒定不变,ARP数据包过多轻则导致网速减慢、上网延长,重则导致此起彼伏的瞬间掉线或大面积的断网。
为了防止“ARP欺骗”,交换机设备通过开启ARP入侵检测功能,将ARP报文上送到CPU处理,判断ARP报文的合法性后进行转发或丢弃。但是,这样引入了新的问题:在数据中心网络中,一个物理机节点上部署了多台VM(Virtual Machine,虚拟机),这些虚拟机与外界网络或其他虚拟机通信,是通过ARP协议来寻址的;如果攻击者在虚拟机内部恶意构造大量ARP报文发送到网络中,会导致网络中存在大量的ARP报文,使得上层交换机CPU负担过重,从而造成交换机其他功能无法正常运行甚至设备瘫痪。因此,为了防止大量的ARP报文发出,需要对虚拟机的ARP出包报文进行流量控制。
为了达到对虚拟机的ARP出包报文进行流量控制的目的,业内主要采用了两类方案:
第一类:在交换机层面,对ARP报文进行端口限速。该功能使受到攻击的端口暂时关闭,来避免攻击对CPU的冲击。当开启某个端口的ARP报文限速功能后,交换机对每秒内该端口接收的ARP报文数量进行统计,如果每秒收到的ARP报文数量超过设定值,则认为该端口处于超速状态(即受到ARP报文攻击)。此时,交换机将关闭该端口,使其不再接收任何报文,从而避免大量ARP报文攻击设备。同时,设备支持配置端口状态自动恢复功能,对于配置了ARP限速功能的端口,在其因超速而被交换机关闭后,经过一段时间可以自动恢复为开启状态。
这种方案有三大缺陷:
一是对物理机ARP出包而言缺乏优先性。物理机是数据中心中控制的节点,它的ARP优先级要高于虚拟机,不应该跟该物理机节点上的虚拟机同等对待。
二是对虚拟机的ARP出包而言,缺乏公平性。基于端口的限速,限制的是共用该端口的所有虚拟机的发包总量,这存在着一台虚拟机过量发包,抢占其他虚拟机流量的问题。
三是当交换机的端口被短暂关闭时,将导致物理机不能正常通信,会影响物理机的可用性,这在数据中心中是不被允许的。
第二类:在物理机层面,对ARP报文进行流量限速。多数采用基于令牌桶算法的报文限速方法。令牌桶这种控制机制基于令牌桶中是否存在令牌(token)来指示什么时候可以发送流量。令牌桶中的每一个令牌都代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。
这种方案也有两大缺陷:
一是不能根据包的个数进行限制。令牌桶限速的方案,实际上是按包的字节大小来限制的。
二是不能针对每台虚拟机进行出包限制,仍然存在流量抢占的问题,缺乏公平性。
发明内容
本申请要解决的技术问题是如何对ARP报文出包进行精确的流量控制
为了解决上述问题,本申请提供了一种地址解析协议报文的流量控制方法,包括:
抓取从虚拟机发到物理机的地址解析协议出包报文;
将所抓取的地址解析协议出包报文放在发送该地址解析协议出包报文的虚拟机对应的队列中;
依次轮询各队列,每轮询一个队列时,从令牌桶里取出一个令牌,从所轮询到的队列中取出一个地址解析协议出包报文进行出包处理。
进一步地,所述的方法还包括:
以预设的每秒数据包的个数为频率产生令牌。
进一步地,从令牌桶里取出一个令牌的步骤前还包括:
判断令牌桶中令牌的个数是否为零;如果为零则等待,直到令牌桶中令牌的个数大于零时,进行所述从令牌桶里取出一个令牌的步骤。
进一步地,所述的方法还包括:
将未使用的令牌都保留在令牌桶中,每隔一预设的最长积累时间清空一次令牌桶。
进一步地,所述将所抓取的地址解析协议出包报文放在发送该地址解析协议出包报文的虚拟机对应的队列中的步骤包括:
从所抓取的地址解析协议出包报文中解析出发送该地址解析协议出包报文的虚拟机的IP地址;
将所抓取的地址解析协议出包报文放在以所解析出的IP地址为标识的先进先出队列中。
本申请还提供了一种地址解析协议报文的流量控制装置,包括:
报文抓取模块,用于抓取从虚拟机发到物理机的地址解析协议出包报文;
分配模块,用于将所抓取的地址解析协议出包报文放在发送该地址解析协议出包报文的虚拟机对应的队列中;
出包控制模块,用于依次轮询各队列,每轮询一个队列时,从令牌桶里取出一个令牌,从所轮询到的队列中取出一个地址解析协议出包报文进行出包处理。
进一步地,所述的装置还包括:
令牌产生模块,用于以预设的每秒数据包的个数为频率产生令牌。
进一步地,所述出包控制模块还用于在从令牌桶里取出一个令牌前,先判断令牌桶中令牌的个数是否为零;如果为零则等待,直到令牌桶中令牌的个数大于零时,从令牌桶里取出一个令牌。
进一步地,所述的装置还包括:
令牌产生模块还用于将未使用的令牌都保留在令牌桶中,每隔一预设的最长积累时间清空一次令牌桶。
进一步地,所述分配模块将所抓取的地址解析协议出包报文放在发送该地址解析协议出包报文的虚拟机对应的队列中是指:
所述分配模块从所抓取的地址解析协议出包报文中解析出发送该地址解析协议出包报文的虚拟机的IP地址;将所抓取的地址解析协议出包报文放在以所解析出的IP地址为标识的先进先出队列中。
本申请的至少一个备选方案可以在保证物理机的ARP报文出包不受限制的前提下,尽量保证各虚拟机的ARP报文出包的公平性,提高了ARP出包报文限速的精确性,达到了防止网络资源争抢和保护交换机的目的。本申请的一个优化方案可以根据pps(Packets per Second,每秒数据包的个数)设置产生令牌的速度,从而可限制各虚拟机的ARP报文每秒出包的个数。本申请的又一个优化方案可以积累令牌以应付突发的ARP出包流量。本申请的又一个优化方案可以防止令牌积累过多。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。
附图说明
图1是实施例一的流程示意图;
图2是实施例一的原理示意图;
图3是实施例二的流量控制装置的示意框图;
图4是实施例二的例子中令牌产生模块的工作流程示意图;
图5是实施例二的例子中出包控制模块的工作流程示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一个典型的配置中,数据中心或物理机的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
实施例一,一种地址解析协议报文的流量控制方法,如图1所示,包括:
S101、抓取从虚拟机发到物理机的ARP出包报文;
S102、将所抓取的ARP出包报文放在发送该ARP出包报文的虚拟机对应的队列中;
S103、依次轮询各队列,每轮询一个队列时,从令牌桶里取出一个令牌,从所轮询到的队列中取出一个ARP出包报文进行出包处理。
由于物理机节点上的各虚拟机均共享着物理机的网卡设备,也就是说,虚拟机和虚拟机之间、虚拟机和物理机之间存在着网络资源抢占的问题。考虑到在数据中心中物理机发包是可受控制的,本实施例中不抓取物理机的ARP出包报文,使物理机的ARP报文出包不受限制,保证了物理机ARP报文的优先出包。
本实施例的基本原理如图2所示,图中虚线框所示的线程抓取各虚拟机发到物理机的ARP出包报文,并按照发送所抓取的ARP出包报文的虚拟机分不同队列放置;比如图2中将虚拟机VM0的ARP出包报文放在队列S0中,虚拟机VM1的ARP出包报文放在队列S1中,......,虚拟机VM n的ARP出包报文放在队列Sn中。图2中各队列里的每个实心圆表示一个ARP出包报文。依次轮询队列S0~Sn,每次从令牌桶TB里取出一个令牌(图2中以空心圆表示),并从所轮询到的队列中取出一个ARP出包报文进行出包处理,比如第一次从队列S0中取出一个ARP出包报文,第二次从队列S1中取出一个ARP出包报文,......,第n+1次从队列Sn中取出一个ARP出包报文;然后下一次再开始从队列S0中取报文,以此类推,这样就能最大程度地保证各虚拟机的ARP报文出包的公平性。
本实施例中,轮询各队列的顺序可以自行预设和更改,比如可以设置为和数据中心初次上电后,各队列得到本队列第一个ARP出包报文的时间顺序一致。
本实施例中,如果轮询到一个队列时,该队列中没有ARP出包报文,可以轮询下一个队列并从中取出一个ARP出包报文进行出包处理,也可以不进行出包处理,而只是从令牌桶中取出一个令牌。
本实施例的一种备选方案中,所述步骤S102具体可以包括:
从所抓取的ARP出包报文中解析出发送该ARP出包报文的虚拟机的IP地址;
将所抓取的ARP出包报文放在以所解析出的IP地址为标识的先进先出队列中。
本实施例的一种备选方案中,步骤S103中,从令牌桶里取出一个令牌的步骤前还可以包括:
判断令牌桶中令牌的个数是否为零;如果为零则等待,直到令牌桶中令牌的个数大于零时,进行所述从令牌桶里取出一个令牌的步骤。
也就是说,只有拥有令牌的情况下才允许向外发送ARP报文,这样可以防止过快发送ARP报文。
本实施例的一种备选方案中,所述方法还可以包括:
以预设的每秒数据包的个数为频率产生令牌。
每秒数据包的个数可以自行设置和更改。本备选方案能够根据所设置的流量大小来设置产生令牌的频率,从而可限制各虚拟机的ARP报文每秒出包的个数,防止对交换机CPU产生不利影响。
其它备选方案中,产生令牌的频率也可以低于每秒数据包的个数;还可以根据其它方式确定产生令牌的频率。
该备选方案的一种实施方式中,以预设的每秒数据包的个数为频率产生令牌的步骤具体可以包括:
以1秒除以每秒数据包的个数,得到的商作为令牌周期的时间长度;
每到一个令牌周期,产生一个令牌。
例如每秒数据包的个数为5,则表示每1s/5=200ms产生一个令牌,并刷新一次。其它实施方式中,也不排除在每秒中的任意时刻分别或同时产生5个令牌。
该备选方案的一种实施方式中,产生令牌就是将令牌桶中的令牌的个数加一;相应地,从令牌桶里取出一个令牌就是将令牌桶中的令牌的个数减一。
该备选方案的一种实施方式中,未使用的令牌都被保留在令牌桶中,该实施方式可以应对突发的ARP出包流量。其它实施方式中,也可以为所产生的各令牌设置有效时间;当令牌超过该令牌的有效时间还未被取出令牌桶,则丢弃该令牌。
该备选方案的一种实施方式中,所述方法还可以包括:
每隔一预设的最长积累时间清空一次令牌桶。
该备选方案的另一种实施方式中,产生令牌的步骤后还可以包括:
判断令牌桶中的令牌数是否大于或等于预设的最大积累个数,如果大于则清空令牌桶,或从令牌桶中丢弃预定个数的令牌。
上述两种实施方式都可以防止令牌被过多积累;上述两种实施方式可以同时使用,也可以组合使用,比如每隔一预设的最长积累时间,判断令牌桶中的令牌数是否大于或等于预设的最大积累个数,如果不大于就不进行处理;如果大于再清空令牌桶,或从令牌桶中丢弃预定个数的令牌。最长积累时间和最大积累个数均可以自行设置和更改。
实施例二,一种地址解析协议报文的流量控制装置,如图3所示,包括:
报文抓取模块31,用于抓取从虚拟机发到物理机的ARP出包报文;
分配模块32,用于将所抓取的ARP出包报文放在发送该ARP出包报文的虚拟机对应的队列S中;
出包控制模块33,用于依次轮询各队列S,每轮询一个队列S时,从令牌桶TB里取出一个令牌,从所轮询到的队列S中取出一个ARP出包报文进行出包处理。
本实施例的一种备选方案中,所述分配模块32将所抓取的ARP出包报文放在发送该ARP出包报文的虚拟机对应的队列中具体可以是指:
所述分配模块32从所抓取的ARP出包报文中解析出发送该ARP出包报文的虚拟机的IP地址;将所抓取的ARP出包报文放在以所解析出的IP地址为标识的先进先出队列中。
本实施例的一种备选方案中,所述出包控制模块33还可以用于在从令牌桶里取出一个令牌前,先判断令牌桶中令牌的个数是否为零;如果为零则等待,直到令牌桶中令牌的个数大于零时,从令牌桶里取出一个令牌。
也就是说,只有拥有令牌的情况下才允许向外发送ARP报文。
本实施例的一种备选方案中,所述装置还可以包括:
令牌产生模块34,用于以预设的每秒数据包的个数为频率产生令牌。
本备选方案能够根据所设置的流量大小来设置产生令牌的频率,从而可限制ARP报文每秒出包的个数,防止对交换机CPU产生不利影响。
其它备选方案中,产生令牌的频率也可以低于每秒数据包的个数;还可以根据其它方式确定产生令牌的频率。
该备选方案的一种实施方式中,产生令牌就是将令牌桶中的令牌的个数加一;相应地,从令牌桶里取出一个令牌就是将令牌桶中的令牌的个数减一。
该备选方案的一种实施方式中,所述令牌产生模块34还可以用于将未使用的令牌都保留在令牌桶中,该实施方式可以应对突发的ARP出包流量。其它实施方式中,也可以为所产生的各令牌设置有效时间;当令牌超过该令牌的有效时间还未被取出令牌桶,则丢弃该令牌。
该备选方案的一种实施方式中,所述令牌产生模块34还可以用于:
每隔一预设的最长积累时间清空一次令牌桶。
该备选方案的另一种实施方式中,所述令牌产生模块34还可以用于在产生令牌后,判断令牌桶中的令牌数是否大于或等于预设的最大积累个数,如果大于则清空令牌桶,或从令牌桶中丢弃预定个数的令牌。
上述两种实施方式都可以防止令牌被过多积累;上述两种实施方式可以同时使用,也可以组合使用,比如所述令牌产生模块34每隔一预设的最长积累时间,判断令牌桶中的令牌数是否大于或等于预设的最大积累个数,如果不大于就不进行处理;如果大于再清空令牌桶,或从令牌桶中丢弃预定个数的令牌。
该备选方案的一个具体例子中,假设预设的最长积累时间为maxTime秒,预设的每秒数据包的个数为maxPPS,所述令牌产生模块34的工作流程如图4所示,包括步骤S401~S405。
S401、判断令牌积累时间time是否大于maxTime,若time大于maxTime则进行步骤S402;若time<=maxTime秒,则进行步骤S403。
S402、清空令牌桶中的令牌,将time置为0;进行步骤S403。
S403、将令牌桶中的令牌数加1,进行步骤S404。
S404、令牌产生模块休眠1/maxPPS秒。
S405、将time增加1/maxPPS秒,返回步骤S401。
在其它实施方式中,可以在步骤S402中将time置为0后就开始重新计时,一旦time达到maxTime就进行步骤S402。
本例子中,所述出包控制模块33的工作流程如图5所示,包括步骤S501~505。
S501、依次轮询多个队列中的一个队列。
S502、计算所轮询到的队列的长度,若长度等于0,则重复步骤S501,直到轮询到一个队列长度大于0的队列。
S503、从所轮询到的队列中取出一个ARP出包报文。
S504、计算令牌桶中的令牌数;若令牌桶中的令牌数等于0,则重复步骤S504,直至令牌产生,即令牌桶中的令牌数>0时,进行步骤S405。
S505、将令牌桶中的令牌数减1,允许所取出的ARP出包报文从物理网卡中出去。返回步骤S501。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。