☰
IxChariot 6.7端到端打流测试与网络验收基线实战
2026/11/2 4:21:24 网站建设 项目流程

简介:IxChariot 6.7 是一款面向无线网络测试与运维人员的专业打流测试软件,主要用于评估无线 AP 的极限性能。通过构造持续数据流,可测量 AP 的上行与下行吞吐能力,适合在 WLAN 选型、部署验收、故障定位和不同设备性能对比等场景中使用。压缩包为 rar 格式,体积约 171.95MB,包内文件总数与类型明细暂未提供;拿到软件后可按测试目标配置端点与数据流参数并记录结果。当前资源已有 645 人学习下载,说明其在无线 AP 吞吐测试话题下具有一定参考价值。对于需要验证 AP 极限吞吐、复现测试环境或补充打流测试工具的读者,这份资源可作为较直接的软件获取入口,配合实际拓扑设置上下行测试项,能够帮助形成可对比的吞吐数据,为无线网络容量评估与优化提供依据。

1. 双端打流这件事:IxChariot 6.7 到底在测什么

机房验收时最常见的画面,是两台笔记本插上网线,一端起服务、一端敲命令,跑出个九百多兆就收工签字。等真实业务上线,视频会议照样卡、文件传输照样慢,谁也说不清问题卡在哪一段。IxChariot 6.7 这类打流测试软件针对的就是这个断层:它在链路两端各部署一个 Endpoint 代理,由 Console 统一下发脚本、统一采样,跑出来的是端到端的吞吐、响应时间、抖动和丢包曲线。它适合做网络设备选型对比、无线覆盖验收、专线交付前的基线测量,也适合排查「带宽够但体验差」这类黑匣子问题。想靠它跑出能拿去对账的数据,前提是两端环境、脚本参数和时钟都对得上,缺一样,报告就只是好看。

2. 架构拆解:Console、Endpoint 与脚本的三层关系

2.1 为什么必须两端都装组件:控制面与数据面分离

IxChariot 的三层结构里,Console 是控制台,负责建测试、下发脚本、收结果、出报告;Endpoint 是装在被测两端机器上的常驻代理,真正发包收包、打时间戳的是它;脚本(.scr)则是这次测试要执行的动作描述。三者里 Console 不参与数据面转发,它只发指令、收汇总,这点很关键——意味着 Console 那台机器的网卡和 CPU 不会污染测量结果,你可以拿一台普通办公机当控制台,只要它能通过网络访问到两个端点。

这种「控制面与数据面分离」的设计,和单机 iperf3 对打的差别在于:iperf3 的客户端本身就是数据面的一部分,跑多流时客户端机器的中断处理和 CPU 调度会直接影响结果;而 Chariot 的两个 Endpoint 都是纯代理,脚本里写多少并发对、每个对传多大文件、什么方向、用什么协议,全由 Console 下发,端点照着执行。更实际的好处是,两端都记录时间戳,所以它能拆出单向延迟,而不只是往返 RTT——但代价是两端时钟必须对得上,这个坑后面单独讲。

选型上要有清醒认识:如果只是想验证一块网卡或一段链路的最大吞吐,iperf3 三五条命令就够,没必要上这套;如果是要出可归档的报告、要对比多台设备、要复现上一次的测试条件、或者要跑事务型脚本(模拟业务请求而不是纯灌包),Chariot 的脚本化和报告体系省下来的时间远超部署成本。6.7 属于比较老的一代产品,装在新系统上要留意兼容性,但它的脚本格式和报告字段多年稳定,不少验收模板至今还认这套输出,这也是它还在一线被反复翻出来的原因。

2.2 把 Endpoint 落到不同平台上:安装顺序与端口放行

部署顺序上,我一般先把两端 Endpoint 装好、确认服务在跑,再装 Console。原因是 Console 建测试时要扫描或手动添加端点,端点先就位能省掉一轮「添加失败再回头查」的往返。Windows 端以管理员身份运行安装包,安装过程会把它注册成系统服务;Linux 端通常是解压后跑安装脚本注册守护进程。下面这段是 Linux 端点落地时我常用的检查流程,包名和脚本名以你实际拿到的压缩包为准:

# 解压到固定目录,避免放在 /tmp 被清理 tar -xzf endpoint_linux_x64.tar.gz -C /opt cd /opt/endpoint # 注册为系统服务,老版本可能是 init 脚本而非 systemd sudo ./install.sh sudo systemctl start endpoint # 若无 systemd,用 service endpoint start # 确认控制端口与数据端口已监听,端口段以安装提示为准 ss -lntup | grep -E '1010[0-3]' # 确认进程常驻,重启机器后仍能自动拉起 systemctl is-enabled endpoint

这段逻辑不复杂,重点是最后两步。装完不看端口监听,很容易出现「Console 里端点显示在线,但一开始测试就超时」的情况——那是控制通道通了、数据通道被挡了。ss那行把 TCP 和 UDP 一起看,是因为控制流走 TCP、部分测量数据走 UDP,只放行 TCP 会在某些脚本上翻车。

Windows 端的防火墙要单独处理,尤其是域策略统一管控的机器,本地规则可能被组策略覆盖。下面这条 PowerShell 是按端口段一次性放行,端口范围按安装时提示的实际值调整:

# 控制流与数据流端口,TCP/UDP 都要放,方向为入站 New-NetFirewallRule -DisplayName "Chariot-EP-TCP" -Direction Inbound ` -Protocol TCP -LocalPort 10100-10103 -Action Allow -Profile Any New-NetFirewallRule -DisplayName "Chariot-EP-UDP" -Direction Inbound ` -Protocol UDP -LocalPort 10100-10103 -Action Allow -Profile Any # 确认规则生效,注意看 Enabled 和 Profile 两列 Get-NetFirewallRule -DisplayName "Chariot-EP-*" | Format-Table Name,Enabled,Profile

-Profile Any是故意写宽的,实验室机器经常在域网络、专用网络、公用网络之间来回切,只放行 Domain 配置,换根网线就失效。参数上真正要盯的是端口段和协议两处,其余保持默认即可。如果环境不允许开端口段,就逐个端口建规则,别图省事直接关防火墙——测试机上关防火墙,后面排查「到底是网络问题还是本机问题」时你会失去一个重要的对照变量。

2.3 脚本不是配置文件:.scr 里到底存了什么

很多人把 .scr 当成 ini 一样的配置文件,随手改两行就开跑,结果报告完全对不上。.scr 实际存的是一次测试的动作序列:有几个传输事务、每个事务的发收方向、传多大文件、用多大的发送和接收缓冲、持续多久、事务之间间隔多少、QoS 标记是什么。Console 打开脚本时给你改的只是「变量值」这一层,脚本结构本身不该动。

理解这一层的实际意义在于:同一个脚本换不同变量值,测出来的东西可能完全不是一回事。比如默认的吞吐脚本文件大小可能只有几十万字节,在千兆链路上几十毫秒就传完,测出来的是突发能力而不是持续吞吐;把它调到几十兆字节、持续几十秒,数据才有参考价值。这也是为什么同一份 .scr 在不同项目里传着用,结论却互相矛盾——脚本一样,变量早被改得面目全非。

我的习惯是给每个脚本配一份同名说明,记清楚文件大小、方向、时长、并发对数这四个值,以及当时用的端点 IP 和系统版本。听着土,但半年后要复现某个结论时,这份说明就是后悔药。脚本本身也要纳入版本管理,别只在某台 Console 的本地目录里留一份,机器一重装就全没了。

2.4 网络路径先自证:开测前的连通性检查清单

在 Console 里点下开始之前,先把路径自证一遍,能省掉后面大量「到底是工具问题还是网络问题」的扯皮。我固定查这几项:两端互相 ICMP 通不通;端点端口从 Console 侧能不能连上;两端路由是否对称(A 到 B 走一条路、B 到 A 走另一条路,单向延迟数据会非常诡异);链路 MTU 是否一致;网口协商速率和双工是否正常。

# 从 Console 侧验证端点端口可达,替代 telnet nc -zv 192.0.2.11 10100 nc -zv 192.0.2.12 10100 # 看路径和 MTU,注意两端回程是否一致 traceroute -n 192.0.2.12 ping -M do -s 1472 192.0.2.12 # 1472+28=1500,不通说明路径 MTU 小于 1500

nc -zv只建连不发数据,能快速区分「端口没开」和「端口开了但脚本跑不通」。ping -M do禁止分片,用来探路径 MTU,无线和隧道环境里这一项经常不是 1500,脚本里如果写死了大包,表现就是吞吐上不去还伴随大量重传。这几条命令都是几秒钟的事,但能把后面一半的排查工作挡在门外。

3. 第一条测试流怎么跑通:从端点注册到吞吐量出图

3.1 建测试要填的六个字段

Console 里新建一个 test,界面上字段不少,真正决定结果的就六个:两端端点、脚本、测试时长、传输方向、并发对数、采样间隔。端点填 IP 或主机名都行,跨网段时建议用 IP,避免 DNS 解析拖慢建连;脚本先选最基础的吞吐类;时长别用默认的短时间,至少 30 秒起步;方向分单向和双向,验收一般先跑单向再跑双向;并发对数从 1 开始,确认基线后再加;采样间隔决定报告曲线的颗粒度,默认值通常够用,测抖动类指标时调细。

第一次跑通的目标不是拿数据,是确认整条链路能走完「下发脚本—两端执行—结果回收—出报告」这个闭环。所以第一轮把并发设成 1、时长设成 30 秒、脚本用最基础的吞吐脚本,跑完能看到一条完整的吞吐曲线,就说明环境没问题了。这时候再去调参数,出问题也知道是参数的事,不是环境的事。

3.2 常用脚本类型的适用边界

脚本选错是结论失真的头号原因。下面这张表是我自己在用的对照,具体脚本名以安装包里实际提供的为准:

脚本类型数据流特征适用场景容易踩的点
基础吞吐单连接持续传大块数据链路带宽基线、设备转发能力文件太小测成突发,数值虚高
高性能吞吐多缓冲、大窗口,压满链路万兆及以上链路打流端点 CPU 先成瓶颈,误判为链路问题
事务型请求-响应式小包往返模拟业务交互、测响应时间事务间隔设太小,测的是端点处理能力
音视频类定速率、小包、带时序要求会议、直播类业务体验评估只看带宽不看抖动和丢包,结论乐观

基础吞吐脚本适合做设备选型和链路验收,因为它的行为最接近「把链路灌满」这个朴素目标;高性能吞吐脚本在万兆场景下更合适,但它对端点机器的要求也高,普通办公机跑这个脚本,CPU 先满载,你看到的数字是端点上限不是链路上限;事务型脚本测的不是带宽而是响应时间,用它来评估「业务卡不卡」比纯灌包有意义得多;音视频类脚本必须同时看抖动和丢包,只报一个平均带宽,等于什么都没说。

3.3 报告里五个指标的读法

报告出来一屏数字,真正需要先看的是五个:吞吐量、事务速率、响应时间、实测时长、丢包与抖动。吞吐量看的是稳定段的均值,不是峰值,曲线开头那一下冲高是缓冲区填满的过程,别拿峰值写进验收报告;事务速率只在事务型脚本里有意义,单位是每秒完成多少次请求响应;响应时间要看分位数而不是平均值,平均值会把长尾抹平;实测时长和你设的时长对不上,说明测试被提前终止了,报告不可用;丢包和抖动在 UDP 打流里是主角,TCP 场景下它们被重传掩盖,不能直接拿来判断体验。

有个细节容易被忽略:报告里的「字节数」是应用层还是链路层计数,不同脚本和端点平台的口径可能不一致,差的那几个百分点的头部开销,在接近线速的时候正好决定你是「跑满了」还是「差一点」。做对比测试时,同一批数据必须用同一口径,别拿 A 设备的应用层吞吐去比 B 设备的链路层吞吐。

3.4 用命令行把重复动作固化下来

同一批脚本要反复跑几十次的时候,图形界面点鼠标就成了体力活。Console 一般带命令行入口,常见做法是用批处理把目录下的脚本依次执行、结果统一落盘。下面这段是 Windows 侧的写法,开关名以装好后命令行帮助里的实际参数为准:

@echo off setlocal enabledelayedexpansion REM 批量执行 scripts 目录下的脚本,结果按脚本名落盘 set OUT=result if not exist "%OUT%" mkdir "%OUT%" for %%F in (scripts\*.scr) do ( echo [RUN] %%~nxF arun -f "%%~fF" -o "%OUT%\%%~nF.csv" -q if errorlevel 1 echo [FAIL] %%~nxF >> "%OUT%\failed.log" ) echo [DONE] 结果在 %OUT%

-f指定脚本文件,-o指定输出文件,-q静默模式减少刷屏;if errorlevel 1那段是把失败脚本单独记一份日志,批量跑最怕的就是中间某个脚本挂了、后面全在跑但没人发现。写批处理时路径一定用%%~fF取绝对路径,Console 的工作目录和脚本目录经常不是同一个,相对路径在双击运行时能找到文件,在计划任务里就找不到,这是很典型的一类翻车。

跑之前先把单脚本手工跑一遍,确认命令行入口、输出格式、退出码都符合预期,再上批量。批量的价值不在于快,而在于每次执行的条件完全一致——参数一样、顺序一样、环境一样,这样前后两次结果的差异才有解释空间。

4. 参数怎么调:脚本变量、并发对数与采样精度

4.1 文件大小与时长:测吞吐别用一秒的流量

吞吐类测试的核心变量是「传多大」和「传多久」。文件太小,测试在 TCP 慢启动还没结束时就完成了,测出来的是握手和突发能力;时长太短,端点缓存、网卡队列都还没进入稳态。经验值是单向测试时长不低于 30 秒,文件大小要保证在这个时长内链路始终有数据可发,千兆环境一般几十到几百兆字节,万兆环境往上加一个量级。

这两个参数是配套的:文件大、时长短,测试会在文件传完后提前结束,实测时长和设定时长对不上,报告直接作废;文件小、时长长,脚本会反复重传同一个文件,中间的空隙被平均掉,吞吐数字偏低而且抖动很大。调法是从一个明显偏大的文件起步,跑一次看实测时长,如果远小于设定时长就继续加大文件,直到两者基本吻合,这时候的吞吐数据才是稳态值。

还有个容易忽略的点:文件是从内存还是从磁盘读。脚本里的数据源如果是磁盘文件,慢速存储会成为瓶颈,尤其在小文件高并发场景下,你测的是磁盘 IOPS 不是网络。多数脚本支持用内存缓冲生成数据,打流测试优先用这个模式。

4.2 并发对数与网卡队列:加对流不一定更快

单对流跑不满链路时,第一反应是加并发对数,这个方向对,但加过头会反噬。每一对测试流在端点侧都要占用一个线程或进程、一份缓冲、一组端口,加到几十对以后,端点机器的上下文切换和内存拷贝开销会吃掉增益,曲线不升反降。判断方法是加对流的过程中盯着端点 CPU:单核跑满而总吞吐不再增长,说明瓶颈已经转移到端点,继续加没有意义。

网卡多队列在这里是个变量。开了 RSS 的网卡能把不同流的软中断分散到多个核上,并发对流更容易压满链路;队列数少或者中断绑核不合理时,所有流挤在一两个核上,加流只会让那一两个核更堵。老版本工具在多核机器上的线程调度未必理想,实测中常见「核很多但只用上一两个」的情况,这不是链路问题。

我的做法是先单流跑出基线,再按 2、4、8 的节奏加倍,每次记录吞吐和端点 CPU,找到吞吐不再增长的拐点就停。同时把双向测试单独做一轮——双向同时打流对端点缓冲和队列的压力比单向翻倍,单向能跑满不代表双向能跑满。

4.3 TCP 与 UDP 的取舍:UDP 打流要盯丢包和抖动

TCP 打流测的是「最多能塞多少」,因为有重传和拥塞控制兜底,丢包被掩盖成延迟和降速;UDP 打流测的是「给定速率下能送到多少」,丢包和抖动直接暴露。设备选型和链路验收一般用 TCP 看吞吐上限,业务体验评估要用 UDP 看质量下限,两者结论经常不一致,不是谁错了,是问的问题不同。

UDP 测试的关键参数是发送速率。设太高,端点拼命发、链路丢一半,你测到的是「发得出去但送不到」;设太低,链路空着跑,测不出拥塞点。做法是从低于链路带宽的速率起步,逐步加,记录每个速率下的丢包率和抖动,找到丢包开始明显上升的那个拐点,那才是这条路径的实际可用带宽。这个拐点通常比 TCP 吞吐低,低多少取决于链路质量和设备队列深度。

下面这张表是我常用的参数起点,实际值要按链路带宽和设备规格等比调整:

参数千兆链路起点万兆链路起点调整依据
单向测试时长30 秒60 秒实测时长须与设定值吻合
传输文件大小100 MB1 GB传输过程中链路不能空转
并发对数1 → 44 → 16端点 CPU 单核跑满即停
UDP 起始速率链路带宽 50%链路带宽 30%逐步逼近,观察丢包拐点
采样间隔1 秒1 秒或更细抖动分析需要足够颗粒度

4.4 时间同步:时钟偏了,延迟数据全是玄学

Chariot 的单向延迟是两端各自打时间戳算出来的,两端时钟差多少,延迟数据就偏多少。没有同步时,报告里出现负延迟、零延迟、或者几十毫秒的固定偏移,都是正常的「没同步」表现。这类数据拿去分析,越分析越糊涂。

处理办法不复杂:能接内网时间源就两端都同步,同步后校一次偏差;不能接的,用两端往返 RTT 的一半做近似,虽然精度差,但至少不会出现负值。测试期间别让端点机器休眠或调频,电源管理导致的时钟漂移比网络抖动大得多。还有一个隐性坑是虚拟化环境,虚拟机的时间戳精度受宿主调度影响,晚高峰跑出来的抖动数据里混着宿主负载的成分,这种数据只能做趋势参考,不能当绝对值用。

5. 避坑与排错:五类翻车现场的现象、原因与解法

5.1 端点注册不上,或显示在线但一测就超时

现象:Console 里添加端点时提示连接失败,或者端点显示为可用,点开始测试后几秒内报错退出。

原因:前者通常是控制端口被防火墙挡了,或者端点服务根本没起来;后者更隐蔽,控制通道走的是 TCP,数据通道可能走 UDP 或另一个端口,只放行了控制端口,建连成功、传数据失败,表现就是「在线但跑不了」。

解决:先在 Console 侧用nc -zv确认端口可达,再到端点机器上确认服务状态和监听端口;两端防火墙的 TCP 和 UDP 都按端口段放行;域环境里检查组策略有没有覆盖本地规则。如果端点装在 Windows 上且系统较新,还要确认端点服务是以兼容模式运行的,老版本代理在新系统上启动失败是常见情况,日志里一般能看到加载错误。

5.2 千兆链路只跑出百兆

现象:两端都是千兆网卡,报告里的吞吐稳定在九十多兆,曲线平得像画出来的。

原因:链路某一段协商成了百兆,或者双工不匹配;也可能是端点机器网卡驱动节能模式在限速;还有一种是单流加 TCP 窗口太小,长肥管道跑不满,但这种情况曲线会有明显爬升过程,不是一条平线。

解决:先看两端网口协商状态和错误计数,重点看 CRC 错误和丢包计数;关掉网卡的节能和中断合并做对照;单流跑不满就加并发再测一轮。平直的九十多兆曲线基本可以断定是百兆协商,物理层问题,调参数没用。

5.3 报告里延迟为负、为零或者大得离谱

现象:单向延迟数据出现负值,或者全程为零,或者比 RTT 还大一个数量级。

原因:两端时钟没同步是主因;其次是脚本里的时间戳精度设置和端点平台不匹配;虚拟化环境下宿主调度抖动也会造成异常值。

解决:两端接同一时间源后再测;不能接的改用 RTT 口径;测试期间禁用端点机器的休眠和动态调频;对虚拟化端点,把异常值当作趋势看,别写进绝对值结论里。这条属于典型的「数据看着有,但不能用」,宁可报告里不写,也别拿负延迟去汇报。

5.4 长时间测试跑到一半断流

现象:设定跑一小时,十几分钟后曲线中断,报告显示测试异常结束。

原因:中间设备或防火墙对长连接做了会话老化;端点机器进入睡眠或网卡被节能挂起;测试数据把端点磁盘写满,日志或临时文件写不进去。

解决:把测试时长拆成多轮短测试,中间留间隔,比一轮长测试更稳;端点电源计划设成高性能,网卡节能全关;跑之前清一遍端点磁盘,结果文件写本地另一块盘,别和系统盘抢空间。长测试中途断掉最麻烦的是前面几十分钟数据白跑,所以拆轮次跑反而更划算。

5.5 并发加到一定数量就报许可或资源错误

现象:并发对数加到某个值后,新建测试被拒绝,或者跑到一半报错退出。

原因:这类工具通常按并发端点或并发流数量授权,超过上限直接拒绝;另一种是端点侧的文件句柄或端口耗尽,报错信息看起来像网络问题,实际是本机资源问题。

解决:先确认授权允许的并发上限,把测试规模控制在范围内;确实需要更大规模时,用多轮分批跑再合并结果,而不是硬堆并发;端点侧调大文件句柄上限和临时端口范围,再复测。资源类报错要养成看端点本机日志的习惯,Console 上的报错信息往往只写了「连接失败」,真正的原因在端点那侧的日志里。

6. 把一次性测试变成基线:批处理与报告二次分析

单次跑通不难,难的是三个月后有人问你「上次那个数是怎么来的」,你还能原样复现。我的做法是把测试固化成两层:第一层是第 3 章那套批处理,脚本、参数、执行顺序全部落在目录里,换台机器拷过去就能跑;第二层是报告解析,把每次导出的结果统一成一张表,做横向对比。

Consosle 导出的报告头部通常带几行元信息,直接读会报列错,解析时要跳过。下面这段是我常用的归并脚本,列名以实际导出格式为准:

import glob import pandas as pd rows = [] for path in glob.glob("result/*.csv"): # 跳过报告头部的元信息行,行数以实际导出为准 df = pd.read_csv(path, skiprows=4) df.columns = [c.strip().lower() for c in df.columns] # 统一换算成 Mbps,避免不同报告单位混用 df["mbps"] = df["bytes"] * 8 / df["elapsed"] / 1e6 rows.append(df.assign(source=path)) all_df = pd.concat(rows, ignore_index=True) summary = ( all_df.groupby("source")["mbps"] .agg(mean="mean", p95=lambda s: s.quantile(0.95), low="min") .sort_values("mean", ascending=False) ) print(summary.round(2))

这段代码的关键不在语法,在三个口径统一:单位统一换算成 Mbps,避免有的报告给字节每秒、有的给比特每秒;统计口径用均值加 P95 加最小值,均值看整体、P95 看稳定段、最小值看掉速;来源文件名带进结果里,方便回溯到具体是哪个脚本、哪一轮。跑出来的表可以直接贴进对比文档,比手工抄数字可靠得多。

再补一个验证习惯:每批测试里故意留一轮「已知结果」的对照,比如两端直连、固定脚本、固定参数,这轮的数字应该和历史值高度接近。如果对照轮都偏了,说明环境变了(系统更新、驱动换了、交换机配置动了),这时候其他轮次的数据一律不能信。这个对照轮我吃过亏——有次批量跑了四十多组,结论都写完了才发现端点机器前一天被打了补丁,网卡驱动跟着升级,整批数据的基线全变了,只能推倒重来。从那以后我每次批量测试都强制先跑一轮对照,对不上就不往下跑。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询