# Win11（192.168.x外部电脑）测试TCP丢包，4套方案（按推荐优先级排序）

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

## ✅ 方案1：iperf3（首选，直接统计TCP重传，最权威）

原理：两端建立TCP长连接，持续传输数据，**直接输出TCP重传次数**，重传&gt;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数据流重传测试吗？