PsPing 学习笔记(14.4):TCP/UDP 延迟测试------从单包 RTT 到抖动分析
- [PsPing 学习笔记(14.4):TCP/UDP 延迟测试------从单包 RTT 到抖动分析](#PsPing 学习笔记(14.4):TCP/UDP 延迟测试——从单包 RTT 到抖动分析)
-
- [一、TCP/UDP 延迟测试的几个典型需求](#一、TCP/UDP 延迟测试的几个典型需求)
- 二、前置:服务器模式再回顾一遍(很重要)
-
- [1. 远端:启动 TCP 测试服务器](#1. 远端:启动 TCP 测试服务器)
- [2. 远端:启动 UDP 测试服务器](#2. 远端:启动 UDP 测试服务器)
- [三、TCP 延迟测试:模拟"应用层"视角](#三、TCP 延迟测试:模拟“应用层”视角)
-
- [1. 最基础的 TCP 延迟测试命令](#1. 最基础的 TCP 延迟测试命令)
- [2. 和 ICMP ping 的对比](#2. 和 ICMP ping 的对比)
- [3. 合理控制测试"压力"](#3. 合理控制测试“压力”)
- [四、UDP 延迟测试:看到"最原始"的链路行为](#四、UDP 延迟测试:看到“最原始”的链路行为)
-
- [1. 远端开启 UDP 测试服务](#1. 远端开启 UDP 测试服务)
- [2. 本地发起 UDP 延迟测试](#2. 本地发起 UDP 延迟测试)
- [3. UDP 测试结果怎么解读?](#3. UDP 测试结果怎么解读?)
- [五、TCP vs UDP 延迟测试:一个"实验模板"](#五、TCP vs UDP 延迟测试:一个“实验模板”)
-
- [Step 1:ICMP 基线](#Step 1:ICMP 基线)
- [Step 2:TCP 延迟(服务器模式)](#Step 2:TCP 延迟(服务器模式))
- [Step 3:UDP 延迟](#Step 3:UDP 延迟)
- [Step 4:结果对比要点(写在文章里)](#Step 4:结果对比要点(写在文章里))
- [六、实战小技巧:静默模式 + 脚本化](#六、实战小技巧:静默模式 + 脚本化)
-
- [1. 用 `-q` 静默输出,方便写脚本](#1. 用
-q静默输出,方便写脚本) - [2. 用 PowerShell 做多目标测试](#2. 用 PowerShell 做多目标测试)
- [1. 用 `-q` 静默输出,方便写脚本](#1. 用
- 七、常见坑和排错方向
-
- [1. 明明服务器开着,UDP 测试却大量丢包?](#1. 明明服务器开着,UDP 测试却大量丢包?)
- [2. TCP 延迟比 ICMP 高一截,是正常的吗?](#2. TCP 延迟比 ICMP 高一截,是正常的吗?)
- [3. 多次测试结果差很大?](#3. 多次测试结果差很大?)
- 八、小结:把"感觉得慢"变成"数据说话"
PsPing 学习笔记(14.4):TCP/UDP 延迟测试------从单包 RTT 到抖动分析
适用场景:你想认真 搞清楚"这两台机器之间到底有多慢、多抖",而不是只看一眼
ping的"玄学平均值"。
在 14.1/14.2/14.3 里,我们已经用 PsPing 玩过:
- ICMP Ping(经典 ping)
- TCP Ping(针对端口/服务)
- 服务器模式(自建测试探针)
这一篇正式上强度:
用 PsPing + 服务器模式 做 TCP/UDP 延迟测试,看清:
- 单次 RTT(Round Trip Time,往返时延)
- 最小/最大/平均延迟
- 抖动(jitter)的直观感受(波动情况)
- TCP vs UDP 延迟特征差异
一、TCP/UDP 延迟测试的几个典型需求
比起"就 ping 一下看看"的场景,这几类更需要"严肃一点"的延迟测试:
- 跨机房 / 跨地域链路:专线、云间互联、生产 vs 灾备站点
- 延迟敏感业务:游戏、金融交易、语音/视频、实时监控
- 网络变更前后对比:改了路由/QoS/运营商之后,量化影响
- UDP 协议业务:自研 UDP 协议、实时推流等,想看"裸 UDP 链路"表现
PsPing 把这件事做得很简单:
一条命令,连打 N 个包,自动帮你做统计。
二、前置:服务器模式再回顾一遍(很重要)
TCP/UDP 延迟测试必须在 两端都配合 才能玩得尽兴:
- 远端:用 PsPing 开一个"测试服务器"
- 本地:用 PsPing 发起 TCP/UDP 测试
远端服务器模式的详细说明在 14.3 已经展开,这里只放必备命令。
1. 远端:启动 TCP 测试服务器
bash
:: 在远端服务器上执行
psping -accepteula -s 5000
-s:服务器模式5000:监听端口(可以换,但两端要对应)
2. 远端:启动 UDP 测试服务器
bash
:: 在远端服务器上执行
psping -accepteula -s -u 5000
- 多了一个
-u:表示使用 UDP 协议
小提示:
- TCP/UDP 测试最好分别开两个端口,避免搞混
- 生产环境推荐固定一组"测试端口"并在防火墙/安全组中显式放行
三、TCP 延迟测试:模拟"应用层"视角
1. 最基础的 TCP 延迟测试命令
假设远端已经执行了:
bash
psping -s 5000
在本地可以直接测:
bash
:: 往远端发 50 次 TCP 测试,每 100ms 一次
psping -n 50 -i 0.1 192.168.10.10:5000
常用参数:
-n 50:发送次数(默认 4 次,一般不够看波动)-i 0.1:发送间隔(单位秒),0.1 = 100msIP:port:目标地址和端口
输出里你会看到类似信息:
- 每次请求的 RTT(几 ms)
- 最小 / 最大 / 平均 RTT
- 总耗时、成功/失败统计
2. 和 ICMP ping 的对比
你可以先来一组对比:
bash
:: 传统 ICMP ping
psping -n 50 192.168.10.10
:: TCP ping 到同一台机器
psping -n 50 192.168.10.10:5000
差异点:
- TCP 需要握手 / 建立连接,延迟通常略大于 ICMP
- 某些网络设备对 TCP 流量的处理路径不同,能反映"真实应用"体验
- 若应用层本身也在该端口上(比如 443),会叠加应用处理时间
建议:
- 链路基线 用服务器模式 + TCP 测试
- "用户感觉慢" 时,再对真实业务端口做 TCP Ping,看应用层额外贡献了多少延迟
3. 合理控制测试"压力"
延迟测试如果发包太频繁,会变成本身在压网络:
bash
:: 不建议
psping -n 10000 -i 0.001 192.168.10.10:5000
更稳妥的习惯:
- 日常基线:
-n 100 -i 0.1或-n 200 -i 0.05 - 变更后短期观察:
-n 500 -i 0.02 - 尽量避开业务高峰;重要链路事先走审批
四、UDP 延迟测试:看到"最原始"的链路行为
很多低延迟业务走的是 UDP :
如自研协议、游戏同步、实时语音/视频等。
UDP 没有握手、没有重传、没有拥塞控制 →
非常适合拿来观察"链路的裸真实表现"。
1. 远端开启 UDP 测试服务
bash
:: 远端服务器
psping -accepteula -s -u 5000
注意 -u 和端口要对应。
2. 本地发起 UDP 延迟测试
bash
:: 本地测试端
psping -u -n 100 -i 0.05 192.168.10.10:5000
参数说明:
-u:使用 UDP 协议(客户端/服务端都要加)-n 100:发 100 次-i 0.05:50ms 一次
输出结果非常接近 TCP 测试格式,但含义上有几个差别:
- 没有 TCP 握手耗时 → RTT 更接近"纯链路 + 设备转发"时间
- 可能出现丢包,不会自动重传
- 抖动(每次 RTT 的波动)对实时业务影响更大
3. UDP 测试结果怎么解读?
可以重点关注三件事:
- 平均 RTT
- 基本延迟水平,跟物理距离和路径有关
- 最大 RTT
- 偶发高延迟:可能是排队、链路负载、QoS 抢占等
- 如果最大值明显远高于平均 → 对实时应用很致命
- 丢包率
- 即使总体丢包低(比如 1%),对实时语音/游戏也可能非常明显
- 可以多测几轮,确认是偶发还是稳定的结构性问题
五、TCP vs UDP 延迟测试:一个"实验模板"
建议在实验/排障时按下面节奏来走,你博客里可以直接作为"操作步骤"贴出去。
Step 1:ICMP 基线
bash
psping -n 100 192.168.10.10 > icmp.txt
Step 2:TCP 延迟(服务器模式)
远端:
bash
psping -s 5000
本地:
bash
psping -n 100 -i 0.05 192.168.10.10:5000 > tcp.txt
Step 3:UDP 延迟
远端:
bash
psping -s -u 5001
本地:
bash
psping -u -n 100 -i 0.05 192.168.10.10:5001 > udp.txt
Step 4:结果对比要点(写在文章里)
你可以给读者一个小 checklist:
- 三种测试平均 RTT 差异大不大?
- 最大 RTT 是否存在"突然飙高"的情况?
- UDP 是否出现明显丢包?丢包时 RTT 有什么特征?
- 不同时间段(白天/晚上、变更前/变更后)的指标对比如何?
六、实战小技巧:静默模式 + 脚本化
1. 用 -q 静默输出,方便写脚本
比如你只想要统计信息,不想看每一条 RTT:
bash
psping -q -n 200 -i 0.05 192.168.10.10:5000
配合重定向,可以做成定时任务:
bash
:: 定时任务里跑的批处理示例
psping -q -n 200 -i 0.05 192.168.10.10:5000 >> D:\netlog\tcp_lat_192.168.10.10.log
定时跑一遍,就有一条"链路体温曲线"。
2. 用 PowerShell 做多目标测试
powershell
$targets = @(
"192.168.10.10:5000",
"192.168.20.10:5000"
)
foreach ($t in $targets) {
Write-Host "=== Testing $t ==="
psping -q -n 100 -i 0.05 $t
Write-Host ""
}
你可以把这段放进博客,作为"日常巡检模板"。
七、常见坑和排错方向
1. 明明服务器开着,UDP 测试却大量丢包?
排查方向:
- 路由 / 防火墙 / 云安全组 是否对 UDP 做了限速/丢弃策略
- 某些设备对"高频 UDP 小包"非常敏感,会触发防护
- 间隔
-i是否太小(例如 0.001 秒狂轰乱炸)
2. TCP 延迟比 ICMP 高一截,是正常的吗?
多数情况下是正常的,原因包括:
- TCP 需要握手(视具体测试模式而定)
- 路由器/防火墙对 TCP 做的检查/队列更重
- 如果测的是真实业务端口,还叠加了应用处理时间
更重要的是看:
- 波动是否平稳(抖动小)
- 业务端口 vs 测试端口 的差异,有助于定位问题是在"线"还是在"业务"。
3. 多次测试结果差很大?
可能的原因:
- 网络本身有拥塞/调度(例如晚高峰 vs 凌晨)
- 路由在收敛/切换
- 云厂商/运营商等做了路径调整
建议:
- 不要只看一次结果,多拿几段不同时间的采样
- 保留日志(特别是变更前后),方便回溯和汇报
八、小结:把"感觉得慢"变成"数据说话"
这一篇的目的,就是帮你从"感觉这链路有点慢"升级到:
"这条链路的 TCP 平均 RTT 在 20ms 左右,
UDP 平均 15ms,但有 2--3 次抖到 60ms,且有 1% 丢包。"
关键记住几条命令:
bash
:: TCP 延迟(服务器模式)
psping -s 5000 # 远端
psping -n 100 -i 0.05 IP:5000 # 本地
:: UDP 延迟
psping -s -u 5001 # 远端
psping -u -n 100 -i 0.05 IP:5001 # 本地
:: 静默统计(方便脚本)
psping -q -n 200 -i 0.05 IP:PORT
在下一篇 14.5,我们会在这个基础上继续往前走,用 PsPing 做 TCP/UDP 带宽测试,看一看"这条线最多能跑多快"和"跑满的时候,它会怎么抖"。这样你就可以用一套工具,同时回答领导的两句灵魂拷问:
- "延迟怎么样?"
- "带宽够不够?"