Skip to main content

Win11(192.168.x外部电脑)测试TCP丢包,4套方案(按推荐优先级排序)

目标:172.16.62.60虚拟机,全部走纯TCP流量,不受ICMP被网关拦截影响,适配你的5G专网场景。

✅ 方案1:iperf3(首选,直接统计TCP重传,最权威)

原理:两端建立TCP长连接,持续传输数据,直接输出TCP重传次数,重传>0=真实TCP丢包。

  1. 在远端虚拟机172.16.62.60(Linux)启动服务端:
iperf3 -s

默认监听TCP 5201端口,虚拟机防火墙放行5201端口 2. Win11电脑下载Windows版iperf3,CMD执行客户端测试,持续60秒:

iperf3.exe -c 172.16.62.60 -t 60

看输出里的Retransmits,只要这个数字持续增加,就代表TCP报文丢失、触发重传。 -t 60:测试时长60秒,可以改成-t 300做5分钟长时间压力测试,模拟业务长连接。

补充:5G无线容易单向丢包,增加-R反向测试,测试上行方向TCP质量

iperf3.exe -c 172.16.62.60 -t 60 -R

✅ 方案2:微软PsPing(Sysinternals,微软官方工具,不用装复杂软件)

PsPing是微软工具,可以TCP模式做长探测,统计TCP时延、超时,不是ICMP ping。 下载:微软Sysinternals官网 psping.exe

:: TCP探测目标业务端口(比如业务端口8080,改成你实际业务端口)
psping 172.16.62.60:8080 -n 1000
  • -n 1000:发送1000次TCP连接探测
  • 输出里的丢包是TCP层面连接失败/超时,不受ICMP策略影响。

    注意:PsPing的TCP模式是短连接探测;如果要看长连接数据传输丢包,优先iperf3。

✅ 方案3:Wireshark抓包(最底层,定位重传发生在哪一侧)

Win11上安装Wireshark,选择网卡,设置过滤:

ip.addr == 172.16.62.60 and tcp

抓包观察:

  • [TCP Retransmission]:TCP重传包,确认报文丢失
  • [Dup ACK]:重复ACK,接收方没有收到数据包,触发快速重传

    适合故障复现时抓包,用来区分:是Win11发出去就丢,还是回程报文在5G网关丢失。

✅ 方案4:Windows内置 pktmon(不用装任何软件,Win11自带)

微软原生数据包监控,可直接查看本机网卡的TCP丢包原因,适合快速排查Windows协议栈侧丢包:

# 管理员CMD,启动捕获,过滤目标IP
pktmon filter add -ip 172.16.62.60
pktmon start --capture

测试完成后停止捕获,查看丢包统计

pktmon stop
pktmon format PktMon.etl -o pktlog.txt

❗ 避坑重点(适配你的5G场景)

  1. tcping 只能测端口连通性,不能测数据传输过程中的TCP丢包,只能看端口通不通,不能检测传输中途报文丢失。
  2. WinMTR / pathping / ping 全部基于ICMP,10.5.1.1网关会拦截ICMP,测出来的丢包是假的,不能用来判断TCP业务。
  3. 5G链路有单向丢包特性:下行正常、上行丢包。iperf3 加 -R 反向测试,单独测试上行方向。

推荐现场操作顺序

  1. 优先iperf3跑长时间测试,看Retransmits,判断是否存在TCP重传(真实TCP丢包)
  2. 如果有重传,用Wireshark在Win11抓包,同时在虚拟机宿主机tcpdump双向抓包,定位丢包是在5G链路还是内网。
  3. 只有业务端口连通性验证场景,才用PsPing。

业务模拟小建议

iperf是满压测试;如果你的业务是低速率长连接(工控/物联网类),可以限制带宽,更贴近真实业务流量:

iperf3.exe -c 172.16.62.60 -t 300 -b 10M

-b 10M限制带宽10M,模拟业务流量,避免压满链路。

 

 

问题根源

PsPing 参数顺序有要求:选项(-accepteula、-n)放前面,目标IP:端口放命令最后。 你现在命令:

psping -accepteula www.shuncom.com:443 -n 10

❌ 错误:把目标域名端口放在 -n 参数前面,psping识别语法异常,直接输出帮助文档。

✅ 正确命令(参数在前,目标放末尾)

psping -accepteula -n 10 www.shuncom.com:443

规则:所有 -开头的参数写在最前面,最后面才写目标地址:端口。

测试你的虚拟机目标(172.16.62.60:业务端口)

psping -accepteula -4 -n 100 172.16.62.60:8080
    -4:强制IPv4,避免域名解析到IPv6干扰(5G场景强烈推荐) -n 100:测试100次TCP握手 末尾才写IP:端口

    持续长测(类似ping -t,Ctrl+C停止)

    psping -accepteula -4 -t 172.16.62.60:8080
    

    带时延直方图(方便看5G抖动)

    psping -accepteula -4 -h -n 50 172.16.62.60:8080
    

    第一次运行说明

    第一次运行,-accepteula 只需要执行一次,后续再跑同机器不用再加 -accepteula。

    重要再次提醒(你5G业务场景)

    psping 只是 TCP三次握手短连接探测,只能看端口握手成功率; 就算psping显示0%丢包,不代表业务长连接传输数据的时候没有TCP丢包/重传。 想要真正验证数据流TCP丢包,仍然需要 iperf3。

    备选方案:tcping(如果你不想折腾psping参数顺序)

    tcping参数顺序简单,不容易踩坑:

    tcping www.shuncom.com 443
    tcping -t 172.16.62.60 8080
    

    执行成功后,结果样例参考

    TCP connect to xxx:443:
    10 iterations (warmup 1) ping test:
    Connecting to xxx:443: 0.53ms
    Connecting to xxx:443: 0.51ms
    ...
    TCP connect statistics for xxx:443:
      Sent = 10, Received = 10, Lost = 0 (0% loss),
      Minimum = 0.51ms, Maximum = 0.77ms, Average = 0.60ms
    

    你直接复制上面正确的命令到CMD试一下,看看能不能正常跑起来。

    需要我顺便给你一条iperf3的Windows客户端命令,用来做真实TCP数据流重传测试吗?