一、介绍
网络测试工具nsit(Network System Integerity Test tool),实现语言C。
旨在解决目前网络数据面测试的一些痛点,如开源工具不便于遍历基础流量、异常流量、小规格机器难以创建大量会话、不易长稳测试等问题,使用此工具可以一键执行解决上述问题,提升质量和测试效率。
目前支持的功能:
1、不同包长流量遍历,验证基本通信能力,支持ICMP、TCP、UDP协议
2、会话测试,支持会话数量的压测和会话cps性能测试,支持TCP、UDP协议
3、针对常用网络协议头部、支持构造异常流量测试,支持Ethernet头、IP头、ICMP头、TCP头、UDP头、VXLAN头
4、组合流量模型测试,可做长稳测试,保持存量+毫秒级不断新建会话,支持ICMP、TCP、UDP协议
5、网络探测,支持ICMP、TCP、UDP协议
二、获取和执行方式
推荐系统:64位CentOS 7.x 、Ubuntu
1、最新版本:
version 2024.07.20
md5值 9457e3bb02a87cdc640449c32c9a6b1a
查看版本信息命令:nsit -v
查看帮助信息命令:nsit -h
2、获取最新可执行文件nsit:
3、使用方式
Linux中授予权限后即可使用,不用安装依赖:
chmod +x nsit
cp nsit /usr/local/sbin
nsit -v
三、支持的功能
命令格式借鉴于iperf
通用功能介绍
- 指定为服务端,支持多个客户端接入 -s
- 指定为客户端 -c,需要配置为服务端的IP,测试Ethernet异常流量时可配置为rand、gw、指定目的mac
- 指定端口号 -p,服务端为本地监听端口(支持端口范围如1000-1010),客户端为目的端口
- 支持绑定本端端口 -P,客户端绑定源端口
- 支持绑定本端地址 -S,客户端是绑定源IP、服务端是绑定监听IP
- 支持绑定网卡 -D,客户端是指定发出网卡、服务端是指定接收网卡
- 支持IPv6 -6,默认是IPv4
- 支持打印详细日志 -J,打印报文来回耗时、会话建立信息、报文详细信息等等
- 支持关键信息记录到系统日志
1、包长遍历
功能介绍
一键遍历ICMP、TCP、UDP各种包长,覆盖不同的分片情况
为保证测试不因限速导致丢包,尽量保证200M带宽。带宽小时会自动降速、并每个包长重试3次,3次都失败判定为次包长测试失败。
推荐命令
服务端(注意安全组规则放通此端口的ICMP、TCP、UDP)
nsit -s -p 80
客户端
nsit -c 服务端地址 -p 80
参数介绍
- 支持指定开始测试的载荷长度值 -B
- 支持指定结束测试的载荷长度值 -E
- 支持指定发送间隔时间,单位微秒usec -I,默认100 usec
- 支持指定协议 -T,默认all,会依次测试ICMP、TCP、UDP,可指定某个或几个协议
- 支持持续发包 -L
- 支持UDP报文每次发包使用随机源端口 -M
- 支持每报文3次重试,每次重试等待1s
- 支持报文长度、载荷校验
使用举例
- 服务端- IPv4: nsit -s -p80- IPv6: nsit -s -p80 -6- IPv6指定监听地址和入接口: nsit -s -p80 -6 -S2406:d440::2 -D eth0
- 客户端- IPv4全部流量测试: nsit -c 1.1.1.2 -p80- IPv4 UDP流量测试: nsit -c 1.1.1.2 -p80 -T udp- IPv4 TCP和UDP流量测试: nsit -c 1.1.1.2 -p80 -T tcp -T udp- IPv4全部流量测试,打印详细日志: nsit -c 1.1.1.2 -p80 -J- IPv4全部流量测试并指定源端口、源地址和出接口: nsit -c 1.1.1.2 -p80 -S1.1.1.1 -P8000 -D eth0- IPv4 UDP流量并指定载荷长度范围: nsit -c 1.1.1.2 -p80 -T udp -B1400 -E1500- IPv6全部流量测试: nsit -c 2406:d440::2 -p80
2、会话测试
功能介绍
小规格机器一键建立指定数量的TCP或UDP会话并保持指定时间,保持过程中持续检查存活会话数量,支持两种创建模式:
(1)大量会话模式,--mode large,用于压测会话总数,TCP最多支持4百万、UDP最多支持2百万。大量会话模式测试前必须在客户端、服务端执行调优命令,放开最大会话数量限制。不可以指定会话创建间隔时间。
(2)突发会话模式,支持2种
- --mode burst,TCP、UDP最多支持2.5万会话,间隔时间最小100usec即1W cps,用于测试cps。可指定会话创建间隔时间控制创建的cps,但实际cps受机器规格、操作系统、环境时延等影响,存在一定误差。
- --mode cps,TCP、UDP最多支持50万会话,无间隔时间创建会话,用于尽量量压cps,不能保证时间精度,实测g2i.large能达到25万cps。
会话测试前在客户端、服务端上需要配置调优参数:
echo 'net.ipv4.ip_local_port_range=1024 65535'>>/etc/sysctl.conf
echo 'net.ipv4.tcp_tw_reuse=1'>>/etc/sysctl.conf
echo 'fs.file-max=4096000'>>/etc/sysctl.conf
echo 'fs.nr_open=4096000'>>/etc/sysctl.conf
echo 'net.core.somaxconn=65535'>>/etc/sysctl.conf
sysctl -p
echo 'ulimit -u unlimited -n 4096000' >> /etc/profile
source /etc/profile
推荐命令
服务端(注意安全组规则放通此端口的ICMP、TCP、UDP)
nsit -s -p 80-81
客户端
nsit -c 服务端地址 -p 80-81 -C 100000 -T tcp
参数介绍
- 指明是会话测试,并指定会话数 -C,如1百万会话为 -C 1000000
- 支持多个端口 -p,如60000-60100
- 支持TCP、UDP -T,默认TCP,支持配置TCP、UDP
- 支持指定会话模式large或burst --mode,默认为large,--mode burst指定为突发会话模式
- burst模式下指定会话创建间隔时间 -I ,默认10000 usec,即每秒创建100个会话
- 支持指定会话完全建立后保持时间 -K,默认一直保持,单位秒
- 支持打印每会话详细信息 -J,会话多时不建议开启
使用举例
- 服务端- IPv4监听多个端口: nsit -s -p60000-60100- IPv6监听多个端口: nsit -s -p60000-60100 -6
- 客户端- IPv4创建1百万TCP,大量会话模式: nsit -c 1.1.1.2 -C1000000 -p60000-60020- IPv4创建1百万UDP,大量会话模式: nsit -c 1.1.1.2 -C1000000 -T UDP -p60000-60020- IPv4创建1百万TCP,大量会话模式,会话全部建立完成后保持100秒: nsit -c 1.1.1.2 -C1000000 -T TCP -p60000-60020 -K 100- IPv4创建1万TCP,突发会话模式: nsit -c 1.1.1.2 -C10000 -p60000-60020 --mode burst- IPv4创建20万TCP,cps会话模式: nsit -c 1.1.1.2 -C10000 -p60000-60020 --mode cps- IPv6创建1百万TCP,大量会话模式: nsit -c 2406:d440::2 -C1000000 -p60000-60020
3、异常流量测试
功能介绍
支持Ethernet、IP、ICMP、TCP、UDP、VXLAN头的重要字段填充随机值,测试各种异常情况,seed值不变的情况下每次发送的同序号报文内容一致,暂不支持IPv6。
推荐命令
服务端(注意安全组规则放通此端口的ICMP、TCP、UDP)
nsit -s -p 80
客户端
nsit -A -c 服务端地址 -p 80 -T tcp
参数介绍
- 指定为异常流量测试 -A,即abnormal
- 支持指定协议 -T,默认IP,可配置值ETH、IP、ICMP、TCP、UDP、VXLAN
- 指明目的地址 -c,Ethernet头时支持gw、rand、和指定mac地址,其他协议时需要配置正确IP地址
- 支持指定发送最大速率 --max_speed,默认100Mbps
- 支持指定seed值 --seed,默认值888888
- 支持发送指定序号的报文 --number,单个值100或范围1-100000
- 支持指定IP头部tos值 --tos,默认值0
- 支持指定IP头部ttl值 --ttl,默认值188
- 部分字段支持指定错误百分比 --err_percent,默认值0.1
- VXLAN协议支持指定内层源IP --inner_src,内层源IP地址,默认192.168.0.66
- VXLAN协议支持指定内层目的IP --inner_dst,内层目的IP地址,默认192.168.0.88
使用举例
无需服务端,仅在客户端执行命令:
- IP头部异常流量测试:nsit -c 1.1.1.2 -A -T IP 或 nsit -c 1.1.1.2 -A
- IP头部异常流量测试,指定最大速率:nsit -c 1.1.1.2 -A -T IP --max_speed 500
- IP头部异常流量测试,指定发送第1-100000个报文:nsit -c 1.1.1.2 -A -T IP --number 1-100000
- IP头部异常流量测试,指定tos值为46:nsit -c 1.1.1.2 -A -T IP --tos 46
- IP头部异常流量测试,指定ttl值为200:nsit -c 1.1.1.2 -A -T IP --ttl 200
- IP头部异常流量测试,指定IP Version、IP Header Length、Packet Length错误比例为0.3:
nsit -c 1.1.1.2 -A -T IP --err_percent 0.3
- IP头部异常流量测试,指定发送第100个报文并打印报文详情:
nsit -c 1.1.1.2 -A -T IP --number 100 -J
- Ethernet头部异常流量测试,目的mac随机,-T ETH 时必须指定出接口:nsit -c rand -A -T ETH -D eth0
- Ethernet头部异常流量测试,使用网关mac ee:ff:ff:ff:ff:ff:nsit -c gw -A -T ETH -D eth0
- Ethernet头部异常流量测试,指定目的mac:nsit -c 88:88:88:88:88:88 -A -T ETH -D eth0
- ICMP头部异常流量测试: nsit -c 1.1.1.2 -A -T ICMP
- TCP头部异常流量测试: nsit -c 1.1.1.2 -p80 -A -T TCP
- UDP头部异常流量测试: nsit -c 1.1.1.2 -p80 -A -T UDP
- VxLAN头部异常流量测试:nsit -c 1.1.1.2 -A -T VXLAN --inner_src 192.168.0.66 --inner_dst 192.168.0.88
4、组合流量模型长稳测试
功能介绍
1、可用于升级、配置变更、故障切换等情况下,虚拟机内测试数据面存量、新建会话的功能是否正常
2、可用于机器内流量长稳测试
通过--keep_ct保持指定数量的存量会话,通过-I指定间隔时间不断突发、通过--burst_ct指定每次突发的TCP新建会话数量。ICMP、UDP目前每次突发新建会话数为1不可修改,是为避免虚拟机内再次新建时OVS、CLB等网络节点对应ct实际还没有老化。每秒的新建会话数=每秒突发次数*每次突发的会话数
会根据报文发送、接收情况判断会话检查会话,新建会话、存量会话默认每隔10ms发一个包、载荷长度1字节,服务端会将报文返回,客户端检查包长度,超时时间500ms,如果报文发收出现异常会打印红色日志,测试过程中主要看是否出现大量红色日志。
默认参数配置下客户端:CPU消耗 5%左右,内存消耗3M左右,包转2.6Kpps,带宽1.2Mbps。
最高参数配置下客户端:CPU消耗80%左右,内存消耗3M左右,包转60Kpps, 带宽26Mbps。
UDP是不可靠传输,根据实际测试情况来看会偶现丢包,重点关注突然出现的大量丢包。
推荐命令
服务端(注意安全组规则放通此端口的ICMP、TCP、UDP)
nsit -s -p 80
客户端
nsit -Z -c 服务端地址 -p 80
参数介绍
- 指明为组合流量长稳测试 -Z
- 支持指定协议 -T,不配置-T时默认all会测试ICMP、TCP、UDP,可指定某个或多个协议-T tcp -T udp
- 每两次突发间的间隔时间 -I, 单位ms,默认10ms、每秒突发100次,最小为5ms
- 每次突发新建的TCP会话数量 --burst_ct,默认TCP为1支持配置最大20,ICMP UDP为1且不可配置
- 保持的ICMP TCP UDP会话数量 --keep_ct,默认1,最大10
- 会话新建完成后保持时间 -K,单位ms,默认1ms,最大10ms
- 每会话发包间隔时间 -i, 单位ms,默认5ms,最小1ms
- 指定控制端口control port,需要安全组放通 --cp,默认3389为windows远程端口安全组默认放通
- 客户端监听端口,服务端测试流量目的端口 --listen,默认为80
- 服务端指定客户端IP地址+监听端口范围 --client,如 1.1.1.1,80
使用举例
- 服务端- Pv4单向会话: nsit -s -p80- IPv4双向会话、需指定客户端地址和端口: nsit -s -p80 --client 1.1.1.1,80- IPv4双向会话,并指定控制端口: nsit -s -p80 --client 1.1.1.1,80 --cp 88
- 客户端- 默认配置组合会话模型测试,带-Z即可: nsit -Z -c 1.1.1.2 -p 80- 配置新建会话的保持时间、间隔时间: nsit -Z -c 1.1.1.2 -p 80 -K 10000 -I 10000- 指定保持的会话数: nsit -Z -c 1.1.1.2 -p 80 --keep_ct 20- 指定新建的TCP会话数: nsit -Z -c 1.1.1.2 -p 80 --burst_ct 10- 指定单个协议: nsit -Z -c 1.1.1.2 -p 80 -T tcp- 指定多个协议: nsit -Z -c 1.1.1.2 -p 80 -T tcp -T udp- 双向会话: nsit -Z -c 1.1.1.2 -p 80 -T tcp --listen 80- 双向会话并指定控制端口: nsit -Z -c 1.1.1.2 -p 80 -T tcp --listen 80 --cp 88
四、注意事项
1、会话测试前必须在客户端、服务端执行以下参数调优命令
如下配置支持4百万连接,配置永久生效:
echo 'net.ipv4.ip_local_port_range=1024 65535'>>/etc/sysctl.conf
echo 'net.ipv4.tcp_tw_reuse=1'>>/etc/sysctl.conf
echo 'fs.file-max=4096000'>>/etc/sysctl.conf
echo 'fs.nr_open=4096000'>>/etc/sysctl.conf
echo 'net.core.somaxconn=65535'>>/etc/sysctl.conf
sysctl -p
echo 'ulimit -u unlimited -n 4096000' >> /etc/profile
source /etc/profile
2、机器有最大会话数量限制,测试大量会话时需要提前放开限制
3、Bad file descriptor
执行下面的命令后再次测试,num的值根据需要决定
num=1024000
echo "ulimit -u unlimited -n $num" >> /etc/profile
source /etc/profile
4、Resource temporarily unavailable
客户端发出报文后,超时时间内没有收到服务端返回的报文,出现丢包或超时。
5、-bash: fork: retry: Resource temporarily unavailable
创建线程数超过系统允许的最大数量,一般可通过echo 'ulimit -u unlimited -n 100000' >> /etc/profile && source /etc/profile解决,如果仍有问题需要根据操作系统查找解决方法。
6、安全组、ACL、iptable等需要放通测试流量
版权归原作者 changjiangshui1993 所有, 如有侵权,请联系我们删除。