基于收发平衡的TCP网络流量回放测试方法
技术领域
本发明涉及一种计算机网络设备测试方法,特别涉及一种通过双向回放TCP协议流量对计算机网络设备,如Firewall(防火墙)、IPS(入侵阻断系统)、路由器等进行测试的方法。
背景技术
在计算机网络/安全产品的研发、安全解决方案的实施(网络建设和扩容时安全设备选型)中,对网络/安全设备的性能(功能)进行客观、全面、系统的测试是至关重要的一个环节。
目前计算机网络设备或安全产品的测试手段主要可分为两种:(1)人工仿真测试;(2)真实环境接入试运行。人工仿真测试是指用SmartBits、协议分析仪、仿真器或自行建造的流量仿真发生器产生测试需要的仿真流量对网络设备进行测试。人工仿真测试需要的专用设备价格昂贵,且无法测试设备在真实环境中的性能。真实环境接入试运行是指接入真实的网络环境试运行来考察设备实际的性能指标,通过该测试可弥补人工仿真测试的不足。但实际运营网络一般都不愿意参与产品测试,而且真实网络中测试环境不可控,这使得测试场景难以再现,发现问题之后的定位也非常困难。
为了达到真实实用环境的测试效果,同时保留人工仿真测试方法的优点,研究人员提出了基于流量回放的测试方法。此类方法事先从真实网络中采集流量数据,通过专用的回放系统将采集到的流量回放到测试网络中对设备进行测试。由于采用了真实的网络流量作为测试数据,测试结果能较好反映设备在真实网络环境下的行为;同时测试过程可控、测试场景可再现,方便对发现问题的定位和分析。
基于流量回放的测试方法分为直接回放测试和互动式回放测试两种,直接回放测试只能测试入侵检测系统等旁路型网络设备;互动式回放测试不仅可对旁路型网络设备进行测试,也可以测试防火墙、IPS及路由器等串接式网络设备。直接回放测试已较成熟,互动式回放测试是一种新技术。目前互动式回放测试主要处理TCP协议流量,回放过程按照TCP协议规范进行:回放系统为回放流量源中的每个TCP会话建立并维护一组TCP协议状态,网络数据包发送前先检查数据包中的TCP协议字段是否符合所属TCP会话当前的TCP协议状态,不符合的数据包不予发送;伴随着网络数据包的发送和接收,回放系统按照TCP协议规范对相关TCP会话的TCP协议状态进行及时更新。通过互动式流量回放,测试环境可模拟出待测设备与测试流量间的真实互动过程。
在现有的互动式回放方法中,网络数据包发送前的协议状态检查和TCP会话协议状态的实时维护都比较费时。这使得现有方法的实时处理能力受到限制,不适合模拟高速网络环境下的TCP通讯行为,无法完成对高速网络设备的测试。因此迫切需要一种更为高效的互动式流量回放方法。
发明内容
本发明提供了一种基于收发平衡的TCP网络流量回放测试方法,通过在回放过程中,先进行简单的网络数据包收发平衡条件判断,来尽可能减少复杂TCP状态条件判断,达到减小实际开销,提高TCP流量回放效率的目的。
为达到以上目的,本发明是采取如下技术方案予以实现的:
一种基于收发平衡的TCP网络流量回放测试方法,通过在测试网络中依次发送并接收TCP网络数据包仿真真实TCP通讯过程,对网络设备进行测试,其特征在于,包括下述步骤:
第一步,回放控制器打开回放流量源;
第二步,回放过程中,回放控制器的第一测试端用于模拟流量采集点一侧的通讯方:第二测试端用于模拟流量采集点另一侧的通讯方;回放流量源中从流量采集点左侧流入的流量,由第一测试端负责发送,第二测试端负责接收;回放流量源中从流量采集点右侧流入的流量,由第二测试端负责发送,第一测试端负责接收;
第三步,回放控制器从回放流量源中按从前到后的次序读出一个数据包P;
第四步,将四元组“源IP地址、源端口、目的IP地址、目的端口”相同或源IP地址、目的IP地址相反且源端口、目的端口也相反的网络数据包认定为属于同一个TCP会话。以数据包P的四元组作为数据包P所属TCP会话SP的标识,并查看该TCP会话SP是否已经存在于当前正在被系统回放的TCP会话的队列中:如果该TCP会话SP已经存在于当前正在被系统回放的TCP会话的队列中,读出该TCP会话SP当前的收发平衡状态和TCP协议状态;如果当前正在被系统回放的TCP会话的队列中没有该TCP会话SP,将该TCP会话SP加入当前正在被系统回放的TCP会话的队列,并将该TCP会话SP的收发平衡状态和TCP协议状态设为初始状态;所述的TCP会话SP当前的收发平衡状态为四个数据包收发计数器Cs,12,Cr,12,Cs,21,Cr,21的值;所述的初始状态为四个数据包收发计数器值均为0;
第五步,根据数据包P的四元组确定发送数据包P的测试端;如果数据包P属于回放流量源中从流量采集点左侧方向流入的流量,则设定数据包P将由第一测试端发送;反之设定数据包P将由第二测试端发送;
第六步,查看数据包P所属TCP会话SP的收发平衡条件是否成立,如果收发平衡条件成立,则由相应测试端发送数据包P并更新所属TCP会话SP的收发平衡状态和TCP协议状态,跳到第九步;
第七步,查看数据包P所属TCP会话SP的TCP协议状态,根据TCP协议规范,如果数据包P在当前TCP协议状态下可以被发送,则由相应测试端发送数据包P并更新所属TCP会话SP的收发平衡状态和TCP协议状态,跳到第九步;
第八步,将该数据包P放入所属TCP会话SP的等待数据包队列的尾端等待发送;
第九步,回放控制器分别查看其两个测试端是否接收到数据包M,对两个测试端接收到的每个数据包M,更新数据包M所属会话SM的收发平衡状态和TCP协议状态,并按照先进行会话收发平衡条件判定后进行会话状态判定的次序,重新判断所属会话SM的等待数据包队列中的网络数据包P是否可以发送。此时,数据包M所属TCP会话SM即为网络数据包P所属会话SP。如果可以发送则将该数据包P交由对应测试端发送,更新数据包P所属TCP会话SP的收发平衡状态和TCP协议状态并从该TCP会话SM的等待队列中将该数据包P删除;
第十步,回到第三步,直到回放流量源中的数据包均处理完毕。
上述方法中,第四步中所述数据包P所属TCP会话SP当前的收发平衡状态的四个数据包收发计数器Cs,12,Cr,12,Cs,21,Cr,21中,第一计数器Cs,12记录了第一测试端已经发送的属于TCP会话SP的数据包的个数;第二计数器Cr,12记录了第二测试端已经接收到的属于TCP会话SP的数据包的个数;第三计数器Cs,21记录了第二测试端已经发送的属于TCP会话SP的数据包的个数;第四计数器Cr,21记录了第一测试端已经接收到的属于TCP会话SP的数据包的个数。第四步中所述数据包P所属TCP会话SP当前的TCP协议状态至少包括该TCP会话SP通讯双方各自接收到的TCP数据包序列号区间。初始化该TCP会话SP的TCP协议状态至少包括将通讯双方各自接收到的TCP数据包序列号区间设为[-1,-1]。
第六步中所述的收发平衡条件是指必须同时满足以下两个条件:
(1)在数据包P所属TCP会话SP中位于该数据包P之前的所有数据包均已发送;
(2)如果该数据包P将由第一测试端发送,必须有第三计数器Cs,21=第四计数器Cr.,21成立;如果该数据包P将由第二测试端发送,必须有第一计数器Cs,12=第二计数器Cr,12成立。
第六、七、九步中所述收发平衡状态的更新是指:第一测试端发送TCP网络数据包P后第一计数器Cs,12的值加1;第一测试端接收TCP网络数据包M后第四计数器Cr,21的值加1;第二测试端发送TCP网络数据包P后第三计数器Cs,21的值加1;第二测试端接收TCP网络数据包M后第二计数器Cr,12的值加1;所述发送数据包P后TCP协议状态的更新按TCP协议规范进行。
第九步中所述接收数据包M后的TCP协议状态的更新按TCP协议规范进行,接收数据包M后至少对会话SM的数据包M的接收方已经接收到的TCP数据包的序列号区间进行更新:回放系统在接收到数据包M后将该数据包M的序列号区间加入到会话SM的数据包M对应的接收方当前已经接收到的TCP数据包的序列号区间中;如果当前数据包M的接收方已经接收到的TCP数据包的序列号区间为[-1,-1],则直接将该区间设为数据包M的序列号区间。
第三步中所述的回放流量源可为:
(1)记录从实际网络中采集得到的真实流量的流量文件;
(2)通过镜像方式从实际网络实时引入的网络流量;
(3)记录符合TCP协议规范的人造流量的流量文件;
本发明的基于收发平衡和状态判定相结合的TCP流量回放方法有以下优点及效果:
1.通过优先判断收发平衡条件来发送TCP数据包,有效减少较复杂的TCP协议状态判定开销,提高回放效率。
2.能够回放由于数据包缺失而状态不全的不完整会话。
附图说明
图1是本发明的测试网络回放系统示意图。
图2是包含从实际网络中采集并存储真实流量的回放系统结构示意图。
图3是以镜像方式从实际网络中直接引入实时流量的回放系统结构示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步的详细描述。
系统结构
如图1所示,测试网络回放系统由两个测试端1和2、测试区及回放控制器组成,其中待测设备3位于测试区,串行接入测试端1和2之间的通讯链路,在回放控制器的控制下测试端1和2之间相互通讯,测试端1或2发出的网络流量,经过待测试设备3,再分别由测试端2或1接收。
如图2图3所示,其中可采用一台服务器作为测试网络中的回放控制器,服务器上安装两块网卡A和B,分别作为测试网络中的测试端1和2,网卡A和网卡B分别通过通讯线路与待测设备3的两端相连形成测试回路。服务器通过网卡A发出TCP网络流量通过待测试设备3由网卡B接收或服务器通过网卡B发出TCP网络流量通过待测试设备3由网卡A接收,对待测试设备进行测试。
回放流量源
本发明基于收发平衡的TCP流量回放测试方法主要针对防火墙、IPS等串接式设备的测试设计,实施时回放的流量为对应于可能的串接式设备接入点位置的流量。例如,防火墙通常被安装于内外网络之间,或内网的出口处。防火墙测试时就需要这些网络位置的流量。本发明实施时回放流量源为三个类型。
第一种类型为从真实网络串接式设备接入点处采集得到的流量文件。如图2所示,一台流量处理服务器通过交换机的镜像端口与串接式设备接入点相连,镜像记录该位置的实际流量得到流量文件,回放系统再对流量文件中的流量数据进行回放。
第二种类型为真实网络串接式设备接入点处镜像的实时流量。如图3所示,流量回放服务器的网卡C接收通过交换机镜像的实际流量,在回放系统中实时回放。
第三种类型中的回放流量源可按照TCP协议规范,通过编程的方式,人工设定并生成TCP流量数据文件;或将Traffic Emulator、Network TrafficGenerator、SmartBits等各类流量仿真/生成工具自动生成的符合TCP协议规范的TCP流量记录下来得到。
流量回放过程
假设回放流量源为存储记录实际TCP流量得到的流量文件(图2),本发明将按以下步骤进行流量回放。
第一步,在流量回放服务器中打开流量文件。
第二步,回放过程中,回放系统的两块网卡分别用于模拟流量采集点两侧的通讯方,网卡A负责发送实际网络I中从流量采集点左侧流入的流量,而网卡B则负责发送实际网络II中从流量采集点右侧流入的流量。
第三步,从流量文件中按从前到后的次序读出一个数据包P。
第四步,以数据包P的四元组<源IP地址、源端口、目的IP地址、目的端口>作为P所属TCP会话SP的标识,并查看SP是否已经存在于当前的TCP会话队列中:如果SP已经存在于当前的TCP会话队列中,读出SP当前的收发平衡状态和TCP协议状态;如果当前的TCP会话队列中没有SP,将SP加入当前的TCP会话队列,并将SP的收发平衡状态和TCP协议状态设为初始状态。
第五步,根据P的四元组<源IP地址、源端口、目的IP地址、目的端口>确定发送P的网卡:如果P在实际网络中从流量采集点左侧方向流入,则设定P将由网卡A发送;反之设定P将由网卡B发送。这里不妨设P在实际网络中从流量采集点左侧方向流入,由网卡A发送。
第六步,查看SP由A发向B的收发平衡条件是否成立,如果收发平衡条件成立,则由A网卡发送P并更新SP的收发平衡状态和TCP协议状态,跳到第九步。
第七步,查看SP的TCP协议状态,根据TCP协议规范,如果P在当前TCP协议状态下满足TCP协议通讯条件,则可以被发送,由A网卡发送P并更新SP的收发平衡状态和TCP协议状态,跳到第九步。
第八步,将P放入SP的等待数据包队列的尾端等待发送。
第九步,分别查看两块网卡A、B是否接收到数据包,对每一个收到的数据包M,更新M所属会话SM的收发平衡状态和TCP协议状态,并按照步骤六和七从前到后依次重新判断SM等待队列中的网络数据包是否可以发送,如果可以发送则将该数据包交由对应网卡发送,更新SM的收发平衡状态和TCP协议状态并从SM的等待序列中将该数据包M删除。
第十步,回到第三步,直到流量文件中的数据包均处理完毕。
其中第三步的数据包P为流量回放服务器从流量回放源读入的数据包;第九步的数据包M为流量回放服务器的两块网卡接收到的数据包。
当回放流量源为实时镜像流量(图3)或记录人工生成流量的流量文件,本发明进行回放的过程与上述步骤基本相同,只不过回放实时镜像流量时需引入缓存机制,并且要预先过滤掉非TCP流量,具体过程不再详述。
下面用一个TCP会话的流量回放过程为例,结合图2来对本发明作进一步说明。
本例中的TCP会话描述了通讯端a与b之间一次TCP会话的过程,如表1所示。该次会话中总共发生11个TCP数据包,其中冒号两边的数字代表数据包中TCP数据段的序列号区间,括号中的数字代表该数据包的TCP数据长度,ACK代表确认号,win代表发送方通告的窗口大小。
表1 TCP会话案例
为简洁起见,表1中未将通讯端a与b的实际IP及该会话的通讯端口标出,表1中11个TCP数据包的四元组(源IP地址、源端口)、(目的IP地址、目的端口)均是相同或相反的,因此这些数据包会被实施本发明的流量回放系统认定为同一个会话S的TCP数据包。
1)假设通讯端a与b分别位于回放流量采集点的左右两侧,在实施本发明的流量回放系统图2中,负责采集点左侧通讯方的网卡A和负责采集点右侧通讯方的网卡B分别模拟通讯端a与b的通讯行为,即a->b方向的数据包由网卡A发送和网卡B接收,b->a方向的数据包则相反;
2)最开始回放系统先从流量文件中按从前到后的次序读取1号数据包,本例所示会话第一次出现,回放系统新建一个会话记录,加入到当前的会话队列,并初始化会话的收发平衡状态和TCP协议通讯状态,1号数据包将由A网卡发送;
3)1号数据包为该TCP会话S的第一个数据包,且网卡B已经发送的属于会话S的数据包的个数和网卡A接收的属于会话S的数据包个数均为0,a->b方向收发平衡的两个条件均满足,1号数据包可以由网卡A发送出去,并更新S的收发平衡状态Cs,12=Cs,12+1=1和相关TCP协议状态;
4)回放系统接着读入2号数据包,2号数据包将由网卡B发送,此时,如果网卡B还未收到1号数据包,Cs,12=1<>Cr,12=0,b->a方向收发平衡条件不满足,2号数据包不能根据收发平衡发出;而2号数据包确认的序列号区间[0,0]未包含在当前B已经接收到的数据包的序列号区间[-1,-1],该数据包也不能由TCP协议通讯条件判断发出,因此,2号数据包被放入S的等待数据包队列的尾端等待发送;
5)网卡B接收到1号数据包后,更新S的网卡B接收到的数据包序列号区间为[0,0]及Cr,12=Cr,12+1=1,此时,该TCP会话中2号数据包之前的数据包(1号包)均已发送且Cr,12与Cs,12相等,b->a方向收发平衡的两个条件满足,2号数据包可以由网卡B发送出去,并更新S的收发平衡状态Cs,21=Cs,21+1=1和相关TCP协议状态;将2号数据包从S的等待数据包队列中删除;
6)系统按序读入3号数据包,3号数据包将由A网卡发送;如果网卡A未收到2号数据包,Cs,21=1<>Cr,21=0,a->b方向的收发平衡条件不满足,3号数据包不能根据收发平衡发出;而3号数据包确认的序列号区间[0,0]未包含在当前A已经接收到的数据包的序列号区间[-1,-1],该数据包也不能由TCP协议通讯条件判断发出,因此,3号数据包被放入S的等待数据包队列的尾端等待发送;
7)网卡A接收到2号数据包后,更新S的网卡A接收到的数据包序列号区间为[0,0]及Cr,21=Cr,21+1=1,此时,该TCP会话中3号数据包之前的数据包(1号包和2号包)均已发送且Cr,21与Cs,21相等,a->b方向收发平衡的两个条件满足,3号数据包可以由网卡A发送出去,并更新S的收发平衡状态Cs,12=Cs,12+1=2和相关TCP协议状态;将3号数据包从S的等待数据包队列的中删除;
以此类推,后续数据包可按本发明所公开的回放方法,以收发平衡和TCP协议状态判定相结合的方式陆续发出。
具体实施时,采用了从实际网络中采集的流量对本发明的基于收发平衡的TCP流量回放方法进行测试。该流量记录中包含1255385个TCP数据包,共计7695个会话。其中,实验发现1105675个数据包可以由收发平衡判定发送出去,149710个数据包由状态判定发送出去。由收发平衡判定发送的数据包个数占总数据包个数的85%以上。在1000Mbps测试网络环境下,采用本发明回放方法在回放时达到的平均速度为265Mbps,采用状态判定回放方法在回放时达到的平均速度为240Mbps,测试表明采用本发明回放方法性能可提升10%或以上。