PsPing 学习笔记(14.7):一条龙网络体检脚本------连通性、延迟、带宽全都要
- [PsPing 学习笔记(14.7):一条龙网络体检脚本------连通性、延迟、带宽全都要](#PsPing 学习笔记(14.7):一条龙网络体检脚本——连通性、延迟、带宽全都要)
-
- 一、我们已经有什么?先盘一下本章能力树
- 二、网络体检的一般流程怎么设计?
- [三、示例:一个"轻量级"网络体检脚本(ICMP + TCP + 延迟)](#三、示例:一个“轻量级”网络体检脚本(ICMP + TCP + 延迟))
-
- [3.1 脚本示例:`psping_healthcheck.ps1`](#3.1 脚本示例:
psping_healthcheck.ps1)
- [3.1 脚本示例:`psping_healthcheck.ps1`](#3.1 脚本示例:
- 四、带宽测试怎么安全地加进去?
-
- [4.1 服务器端(接收端)启动 PsPing server](#4.1 服务器端(接收端)启动 PsPing server)
- [4.2 客户端发起带宽测试](#4.2 客户端发起带宽测试)
- 五、如何把日志变成"可读"的结果?
-
- [5.1 最重要的几行](#5.1 最重要的几行)
- [5.2 建议在博客中这样呈现](#5.2 建议在博客中这样呈现)
- [六、把 PsPing 体检融入日常运维](#六、把 PsPing 体检融入日常运维)
- [七、你可以写在 CSDN 文章里的"收尾段"](#七、你可以写在 CSDN 文章里的“收尾段”)
PsPing 学习笔记(14.7):一条龙网络体检脚本------连通性、延迟、带宽全都要
适用人群:想把前面 14.1--14.6 全部串起来,做一个**"一键网络体检脚本"**的运维 / 测试 / 开发同学。
你会收获:
- 一套从 ICMP、TCP 到延迟分布、带宽压测的完整流程;
- 可直接改名上岗的 PsPing 网络巡检脚本;
- 如何把结果留痕,用于排障报告 & 性能基线。
一、我们已经有什么?先盘一下本章能力树
前面几篇已经分别把 PsPing 拆开讲过:
| 小节 | 能力点 | 说明 |
|---|---|---|
| 14.1 | ICMP Ping | 基础连通性与 RTT 观测(类似系统 ping,但更可控) |
| 14.2 | TCP Ping | 指定端口的连通性 & 应用栈可达性检查 |
| 14.3 | 服务器模式 | 一端作为"回声服务器",配合延迟/带宽测试 |
| 14.4 | TCP/UDP 延迟测试 | 更贴近真实请求链路的 RTT 测试 |
| 14.5 | TCP/UDP 带宽测试 | 单条链路吞吐能力评估 |
| 14.6 | 延迟直方图 | 延迟分布 + 抖动可视化分析 |
本篇就是把这些能力打包成一个核心目标:
一条命令 / 一个脚本,给出一段时间内的网络体检报告:
"通不通?多快?稳不稳?能跑多少带宽?"
二、网络体检的一般流程怎么设计?
为了避免"测着测着就把自己打死",先设计一个合理流程:
- 基础连通性
- ICMP Ping:能不能到?丢包率、最小/最大/平均延迟如何?
- 服务可达性
- TCP Ping 指定端口:80/443/1433/3306 等,确认"应用栈"也通。
- 延迟质量
- TCP 延迟测试(固定端口),配合直方图看抖动 & 长尾。
- 带宽能力(可选,高风险)
- 在可控时间窗口,对指定端口做 TCP 带宽压测。
- 留档 & 对比
- 输出写入日志文件,按日期 / 环境保留,便于之后 Compare。
三、示例:一个"轻量级"网络体检脚本(ICMP + TCP + 延迟)
下面是一个示例 PowerShell 版(你也可以改成 .bat),对单个目标做基础巡检。
3.1 脚本示例:psping_healthcheck.ps1
powershell
param(
[string]$Target = "www.example.com",
[int]$TcpPort = 443,
[int]$Count = 100
)
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$logDir = ".\psping_logs"
$newDir = New-Item -ItemType Directory -Path $logDir -Force
$logFile = Join-Path $logDir "psping_${Target}_$timestamp.log"
Write-Host "== PsPing 网络体检 =="
Write-Host "目标: $Target, TCP 端口: $TcpPort, 次数: $Count"
Write-Host "日志: $logFile"
Write-Host ""
# 1. ICMP Ping
"===== ICMP Ping ($Target) =====" | Tee-Object -FilePath $logFile
psping -n $Count $Target | Tee-Object -FilePath $logFile -Append
# 2. TCP Ping
"`n===== TCP Ping ($Target:$TcpPort) =====" | Tee-Object -FilePath $logFile -Append
psping -n $Count $Target:$TcpPort | Tee-Object -FilePath $logFile -Append
# 3. TCP 延迟 + 直方图
"`n===== TCP 延迟 + 直方图 ($Target:$TcpPort) =====" | Tee-Object -FilePath $logFile -Append
psping -n $Count -h $Target:$TcpPort | Tee-Object -FilePath $logFile -Append
Write-Host "`n检测完成,可查看日志:$logFile"
使用方法:
powershell
# 默认目标
.\psping_healthcheck.ps1
# 指定目标与端口
.\psping_healthcheck.ps1 -Target "10.0.0.5" -TcpPort 1433 -Count 200
你会在 .\psping_logs 下得到一份按时间戳命名的 log,里面包含:
- ICMP 结果(丢包、min/max/avg RTT)
- TCP 结果(端口可达性 & RTT)
- TCP 延迟直方图(抖动 & 长尾分布)
四、带宽测试怎么安全地加进去?
带宽压测天然有一点"暴力",要加几道保险:
- 只在测试环境或变更窗口使用;
- 限制压测时间(比如 10 秒 / 30 秒);
- 提前告知网络团队:要冲一冲。
4.1 服务器端(接收端)启动 PsPing server
在目标机器上(比如 10.0.0.10):
bash
# 启动 TCP 端口 5001,作为带宽测试服务器
psping -s 10.0.0.10:5001
保持窗口不关。
4.2 客户端发起带宽测试
在你的运维机上:
bash
# 压测 30 秒 TCP 带宽
psping -b -t -n 30 10.0.0.10:5001
组合含义:
-b:带宽模式(bandwidth)-t:持续模式(直到计数或时间结束)-n 30:持续 30 秒(在带宽模式中,-n变成"持续时间")
你可以把这个也包装到巡检脚本中,加一个开关参数,比如:
powershell
param(
[switch]$DoBandwidthTest
)
if ($DoBandwidthTest) {
"`n===== TCP 带宽测试 ($Target:$TcpPort) =====" | Tee-Object -FilePath $logFile -Append
psping -b -t -n 30 $Target:$TcpPort | Tee-Object -FilePath $logFile -Append
}
五、如何把日志变成"可读"的结果?
体检脚本出来的是一大坨文本,怎么快速理解?
5.1 最重要的几行
在每段 PsPing 输出中,重点看这些信息:
Lost = x (y% loss)→ 丢包率Minimum = ...ms, Maximum = ...ms, Average = ...ms→ 延迟基线- 直方图中:
- 0--20ms 区间占比?
- 50ms 以上区间的样本数?
对于带宽测试:
- 输出中通常会有类似
x.x Mbytes/sec、x.x Mbits/sec的统计; - 作为链路能力的一个"下限参考"。
5.2 建议在博客中这样呈现
你在 CSDN 写"实战总结"类文章时,可以:
-
从日志中摘出摘要数字,整理成表格:
markdown| 场景 | 丢包率 | 最小延迟 | 最大延迟 | 平均延迟 | 备注 | |--------------|--------|----------|----------|----------|------| | 办公网 -> STL | 0% | 3ms | 15ms | 5ms | 白天高峰 | | 办公网 -> BJ | 0% | 10ms | 80ms | 25ms | 有长尾 | -
用一张图描述直方图分布(手画/Excel/脚本画图都行);
-
带宽测试结果可以单独给一张图,配一句结论:
在 30 秒压测期间,稳定在 90~95 Mbps 左右,接近百兆上限,适合备份/同步业务。
六、把 PsPing 体检融入日常运维
一些建议,方便你写在文章结尾当"最佳实践":
- 固定脚本 + 固定参数:同一个环境用一套固定脚本,方便长期对比。
- 按时间档收集:早高峰、午间、夜间各跑一次,观察抖动差异。
- 配合监控系统 :
- 可以用计划任务定时跑
psping -q,把 summary 结果采集进监控; - 或者用日志采集器把日志打到 ELK / Loki / Splunk 里分析。
- 可以用计划任务定时跑
- 出问题先跑一遍 :
- 发现服务"偶发卡顿"时,先跑一轮体检;
- 后续排查可以拿这次结果和"健康时期"的结果对比。
七、你可以写在 CSDN 文章里的"收尾段"
示例收尾话术,方便你直接复用/改写:
这一篇我把 PsPing 在第 14 章拆散的几种能力------ICMP、TCP、延迟测试、带宽测试、直方图------重新装进一个"网络体检脚本"里。
在日常运维里,我更推荐把这套脚本当成"温度计":环境一有异常,不要先吵"是网的问题还是应用的问题",先用 PsPing 量一量------通不通、多快、稳不稳,数据会说话。
到这里,第 14 章围绕 PsPing 的学习笔记就完全闭环了。
下一步,你可以考虑把这些脚本接到 PowerShell、批处理、甚至 Ansible / SaltStack 里,变成真正可复用的网络诊断工具箱。