在对高性能转发设备测试时,一款好用的高性能压测工具必不可少,考虑被测设备一般也基于dpdk实现,而压测工具的性能理论上是需要能榨干被测设备的,传统的一些压测工具,iperf/wrk/ab等出于性能方面就被pass了。dpdk-pktgen在性能方面基本能满足述求,但是灵活性极差,不改源码的情况下,甚至连tcp flag都无法设置。
那么有没有一款压测设备即基于dpdk实现,在保持高性能的同时,又能提供高度自由的包编辑能力呢,Cisco在18年开源的trex就是这么一款dream tools,且提供的能力远不止这些。
介绍trex前,可以先介绍一款python的数据包操纵程序scapy,scapy中允许按layers来逐级构包,比如基于如下代码,可构造出一个vxlan的ipv6 syn包。
pkt = Ether()/IP()/UDP(dport=4789)/VXLAN()/IPV6()/TCP(flags="S")
事实上scapy可以发出任意想发的包(不符合协议也允许),通过自定义layers,可以很方便的插一些自定义协议进去,比如自定义的tcp options,自定义的proxy protocol、nsh之类的。