先问你一个场景:早上到公司,内网系统卡到点个按钮都要转三圈,有人说是服务器IP不行;晚上在家打游戏,延迟飘到200多,你怀疑是路由器的问题;新买的云主机下载东西速度上不去,客服让你先测一下“IP速度”。这时候大多数人会打开一个测速网站,点一下“开始测速”,然后看着数字一脸懵——到底哪个数才算快?哪个数说明有问题?
干了十多年网络和运维,我见过太多人把“测IP速度”当成一个黑盒操作。“IP”本身只是网络层的一个地址标识,它不像带宽那样自带速率属性。所谓“测IP速度”,真正测的是从你的设备到这个IP的网络路径质量,而这个质量包含延迟、抖动、丢包、带宽、吞吐量、端口连通性等好几个完全不同的维度。你今天是要看这台服务器通不通,还是看下载文件能跑多快,还是看某一台云主机到用户的延迟高不高,用的工具和方法完全不一样。
这篇文章我就把“测试IP速度”这件事拆开揉碎,从最基础的ping、traceroute、telnet,到能测真实带宽的iperf3、speedtest-cli,再到自动化场景下的批量端口连通性检测,一步步给你讲清楚每个工具解决什么问题、结果怎么看、有哪些坑。无论你是运维、开发、测试,还是普通网民,都能照着操作,搞清楚那一堆数字到底在说什么。
1. 先拆清楚:测IP速度,你到底在测什么?
1.1 “IP速度”不是一个指标,而是五个指标
我经常被人问“这个IP速度快不快”,每次都要反问回去:你说的“快”是指点一下网页就打开,还是下载文件很快?这两个感觉对应的网络指标差别很大。
一个完整的网络质量评估,通常要看下面这五个指标:
- 延迟(Latency):数据包从本机发出到目标IP返回应答所花的时间,单位是毫秒(ms)。游戏卡不卡、远程操作顺不顺,主要看这个数。局域网内延迟一般低于1ms,跨省骨干网可能在20-50ms,跨国链路100-200ms也不算异常。
- 抖动(Jitter):多次延迟测量的波动幅度。延迟忽高忽低,就是抖动大。视频通话和VoIP语音最怕抖动。
- 丢包率:发送出去的数据包丢失的比例。丢包超过1%,实时交互类应用就会有明显体感问题。
- 带宽(Bandwidth):链路理论上能承载的最大传输速率,比如运营商说的“百兆宽带”就是100Mbps。带宽决定你下载文件的理论上限。
- 吞吐量(Throughput):实际传输数据的速率,通常受限于两端设备的CPU性能、网卡、TCP窗口大小、中间设备策略等,往往低于理论带宽。
后面还有一类和“业务速度”直接相关的指标:TCP握手耗时、HTTP响应时间(TTFB)、接口返回时长。这类指标更多在Web性能测试里用,本文也会提到。
把概念理清之后,“IP速度”的问题就变成了一个选择题:你到底要测哪个指标?目标IP是通不通、延迟高不高,还是要测它能跑多少带宽?不同答案对应完全不同的工具。
1.2 先分清目标IP的类型,再定测试方案
拿过一个IP地址,第一件事不是急着敲命令,而是判断它是什么类型的IP。至少分三类:
- 公网IP:如云主机、网站服务器、公司专线的公网出口IP。从你家宽带去测,测的是“本地到该公网地址的互联网链路质量”。
- 内网IP:如路由器管理地址(192.168.x.1)、NAS、打印机、公司内网服务器。这类测的是局域网链路质量,通常延迟、带宽都远超公网测试结果。
- 本机IP:用ipconfig或ifconfig查出来的本机地址。它只代表你这台设备在当前网络里的标识,单独测它没有多少意义,真正要测的是它到网关或目标主机的链路。
测试对象不同,方案也不同。我做个简单的决策表,你照着选就行:
| 你的目标 | 需要看的指标 | 推荐工具 |
|---|---|---|
| 判断目标IP通不通 | 连通性、丢包率 | Ping、Telnet、NC |
| 看网络延迟高不高 | 延迟、抖动、路径质量 | Ping、Traceroute |
| 测出口带宽是否达标 | 带宽、吞吐量 | Speedtest、iperf3 |
| 测某个服务端口是否开放 | TCP端口连通性 | Telnet、NC、curl |
| 测Web服务响应快不快 | HTTP响应时间、TTFB | curl、ab、wrk |
| 批量巡检多个IP | 连通性、端口状态 | 脚本(Python等) |
按照这个表选定方向,后面每一步才知道自己在干什么。下面从最基础的命令开始,逐一展开。
2. 基础三件套:Ping、Traceroute、Telnet——先判断通不通和延迟高低
2.1 Ping:第一板斧,看连通性、延迟和丢包
Ping是基于ICMP协议的工具,向目标IP发送回显请求,目标主机应答后统计往返时间。它简单、系统自带,是所有IP测试的第一步。
Windows下的命令格式是:
ping -n 10 目标IPLinux和macOS下是:
ping -c 10 目标IP参数里的数字代表发送10个包,比默认的4个包更能反映真实情况。实测结果里重点关注三列:time(单次往返时间)、packet loss(丢包率)、rtt min/avg/max/mdev(最短、平均、最长延迟和平均偏差)。
举个例子,公司内网服务器如果ping平均延迟超过10ms,那肯定有问题——正常内网应该在1ms以内。跨公网ping云主机,20-50ms属于正常范围,如果你的物理位置和服务器区域相隔很远,100ms也没什么好惊讶的。
实际经验:ping的第一个包往往比后面的包慢很多,特别是跨三层设备时,第一个包要触发ARP解析或路由查找,这是正常现象,别被第一行数据误导。另外,很多服务器默认禁ping(把ICMP回显关了),这时候ping会显示100%丢失,但并不意味着服务器挂了。判断一台服务器是否活着,单纯依赖ping是不严谨的,还得配合端口测试。
2.2 Traceroute:看每一跳路径,找出延迟瓶颈
如果ping的延迟很高,下一步就要用traceroute看数据包到底绕了哪条路,瓶颈卡在哪一跳。
命令同样分平台:
- Windows:
tracert 目标IP - Linux/macOS:
traceroute 目标IP
运行结果会列出从本机到目标IP经过的每一跳路由器的IP和延迟,通常测三次。如果某一跳连续显示* * *,说明这一跳设备不响应ICMP,或者路径上有限流策略,不一定代表线路断了。真正要关注的是延迟的“跳变点”:前面几跳都是几毫秒,突然某一跳变成60ms,那这一跳很可能就是跨区域或跨运营商的交换节点,之后延迟在这个水平上维持,说明瓶颈主要集中在这个节点。
在判断“到某台云主机的线路质量”时,tracert非常有用。比如本地到云主机的延迟是80ms,但tracert显示从第5跳开始就已经80ms了,说明本地出口链路或中间长途线路就是瓶颈,而不是云主机本身响应慢。这样你就知道该找谁——该找运营商或调整部署区域,而不是反复重启云主机。
2.3 Telnet与NC:测试“IP+端口”通不通
日常工作中最常见的需求就是“telnet ip 端口命令怎么看通不通”。先给结论:telnet测试的是目标IP的某个TCP端口是否可连接,它测出来的是“端口状态”,不是速度。
Windows上面敲:
telnet 192.168.10.10 8080回车后如果屏幕变成全黑,或者光标在一个新窗口里闪动,说明端口通;如果提示“正在连接...无法打开到主机的连接”,说明端口不通或IP不可达。退出telnet的话,先按Ctrl+]进入转义模式,再输入quit回车。
在Linux上,我更推荐用nc(netcat),更方便加超时参数:
nc -vz -w 3 192.168.10.10 8080-v显示详细信息,-z表示只扫描端口不发送数据,-w 3是3秒超时。返回Connection to 192.168.10.10 8080 port [tcp/8080] succeeded就是通,返回Connection refused则是目标主机的端口没有服务监听,返回timed out则是防火墙丢弃了数据包。
帮你区分一下这三个状态,很多人栽在这:
| 现象 | 含义 | 后续操作 |
|---|---|---|
| 连接成功 | 端口开放,有服务在监听 | 检查服务状态、响应速度 |
| Connection refused | 主机可达,但端口没有服务监听 | 启动服务或检查服务绑定的IP是否为本机所有地址 |
| timed out / no response | 防火墙丢弃或IP不可达 | 检查安全组、防火墙规则、IP路由 |
补充一个实用技巧:如果目标是Web服务的80或443端口,直接用telnet连上去之后可以手动输入HTTP请求看响应,但更高效的是用curl:
curl -v telnet://192.168.10.10:8080连接成功后会打印出连接信息,配合-v能看到完整的握手过程。这一步能帮你确认TCP三次握手的时间,也就是从发出请求到连接建立花了多少毫秒,这本身就是一种“速度”指标。
3. 进阶测试:Speedtest、iperf3、curl——测真实带宽与HTTP性能
3.1 用Speedtest快速测“到测速服务器的带宽”
ping和telnet只能回答“通不通”和“延迟高不高”,回答不了“这条链路最多能跑多少带宽”。这时候需要专门的测速工具。
最简单的是Speedtest的CLI版本,在Linux服务器上安装很快:
speedtest-cli如果是Debian/Ubuntu系统,可以直接apt install speedtest-cli,或者用Python的pip安装。运行后它会自动找最近的测速节点,分别测下载和上传速率,输出形如Download: 432.57 Mbit/s和Upload: 98.34 Mbit/s的结果。
使用时有几个细节要注意:
- 在线测速本质上测的是“本机到该测速节点”之间的带宽,换成另一个节点结果可能差很多。想评估家庭宽带质量,选本地运营商的节点更接近真实水平。
- 测速时要关掉其他占用网络的应用,特别是视频流和云盘同步,否则结果会严重偏低。
- 无线网络测速波动极大,想要可重复的数据,尽量用网线直连路由器。
- 云主机上跑speedtest-cli,测出来的是“这台云主机到公网测速节点的带宽”,可以作为出口带宽的参考值,但云主机服务商通常有带宽上限,结果会被限速策略影响。
如果只是想在浏览器里快速测一遍,Speedtest网页版(speedtest.net)、Fast.com这类服务已经够用。但我个人习惯还是用CLI,因为它能出结构化文本,方便记录到日志里做趋势对比。
3.2 iperf3:自己搭服务端,测点对点最大吞吐量
speedtest只能测到公共测速节点,但很多时候我想测的是两台主机之间的实际最大带宽,比如NAS到电脑、两台云主机之间、本机到公司内网服务器。这时候就用iperf3。
iperf3是C/S架构工具,需要一台作为服务端,另一台作为客户端。基本用法很简单。
服务端(目标IP所在主机)执行:
iperf3 -s -p 5201-s表示服务端模式,-p指定监听端口,默认就是5201。注意放行防火墙或云安全组的这个端口。
客户端执行:
iperf3 -c 目标IP -p 5201 -t 30-c指定目标IP,-t 30表示测试30秒。结束后会打印带宽报告,关键看SUM行的Receiver接收速率,这就是这条链路能达到的实际吞吐量。
实际测试中,我建议加两个参数:
iperf3 -c 目标IP -t 30 -P 4-P 4表示同时用4个并发连接。原因是iperf3默认单线程,非常受两端设备的CPU性能影响。如果你的电脑CPU比较弱,单线程可能只跑到几十兆,多线程才能逼近链路真实上限。测千兆内网时,-P 4基本是标配。还想看反方向带宽(从服务端下载数据到客户端),加-R参数。
比如你有一台NAS,觉得拷贝文件速度慢。先用iperf3测一下电脑到NAS的纯网络吞吐量:如果iperf3能跑到900Mbps,说明网卡、交换机、网线都没问题,慢的瓶颈在NAS的磁盘阵列或SMB协议;如果iperf3只有300Mbps,那就得先查网络链路,别急着折腾磁盘。这个思路能帮你快速划清问题边界。
3.3 用curl/ab/wrk测HTTP服务的“应用层速度”
还有很多场景,目标是一个Web接口,你想知道的是“用户从点击到看到内容需要多久”,这测的是HTTP应用层性能。最轻量的办法是curl。
curl -o /dev/null -s -w "DNS: %{time_namelookup}s\n连接: %{time_connect}s\n首字节(TTFB): %{time_starttransfer}s\n总耗时: %{time_total}s\n下载速度: %{speed_download} B/s\n" https://你的目标URL这条命令把下载内容丢弃到/dev/null,同时输出每个阶段的耗时。连接时间和TTFB能直观反映网络往返和服务端处理速度。注意:如果目标IP是IP地址而非域名,DNS耗时会是0,这个没关系。
如果要对一个接口做并发压测,可以用Apache Bench(ab)或wrk。ab的典型用法:
ab -n 1000 -c 20 http://目标IP:8080/api/test-n总请求数,-c并发数。结束后会输出每个请求平均时间、吞吐率(Requests per second)、90%响应时间等。这类指标对于评估Web服务容量很有用。
但提醒一句:压测工具会真实地打流量到目标服务上,未经授权的压测会给别人带来麻烦,甚至可能触发安全告警。我只建议对自己负责的、有测试权限的目标做这类操作。
4. 不同场景下的IP速度测试实战方案
4.1 家庭宽带和局域网:先外网后内网,逐层排查
家庭网络最常见的困惑是“明明办了千兆宽带,下载才几十兆”。按照我的习惯,会按外网、局域网两层来测。
外网测速用speedtest-cli或浏览器在线测速,注意选离你最近的测速节点。如果外网测速能达到运营商承诺的80%以上(比如千兆宽带测出900Mbps),说明宽带线路本身没问题。如果只有200Mbps,那就该查猫和路由器了。一个隐蔽的坑是:很多老路由器有线端口只有百兆,你办的千兆宽带从它这里就废了一半。用网线直连光猫拨号上网再测一次,就能判断是路由器瓶颈还是运营商线路问题。
内网速度测试更适合用iperf3。找两台电脑,一台接路由器LAN口跑iperf3服务端,另一台也插网线跑客户端。如果内网能跑接近千兆,而外网只有几百兆,问题大概率在运营商侧或光猫;如果内网iperf3都跑不满,那就要检查网线是不是只接了4芯、交换机端口协商速率是否掉到100Mbps、网卡驱动是否异常。
无线网络的“速度”另当别论,受信道干扰、距离、终端天线影响太大。我的建议是:无线测速结果仅供参考,所有结论性的带宽测试都要走有线。
4.2 虚拟机与Docker容器:注意NAT模式的带宽瓶颈
不少人在虚拟化环境里测速,发现虚拟机里的网速总比宿主机慢一截。这很正常,取决于虚拟机的网络模式。
VMware的NET模式或VirtualBox的NAT模式下,虚拟机访问外网要经过宿主机的NAT进程转发,会引入延迟和吞吐消耗;桥接模式则让虚拟机直接挂在物理网络上,性能更接近真实物理机。测试方法:
- 在宿主机上跑iperf3服务端。
- 在虚拟机里跑iperf3客户端,测到宿主机IP的吞吐量。
- 同样条件下,在宿主机自身执行iperf3测回环或到局域网其他主机,对比数据。
如果NAT模式下虚拟机到宿主机能跑到接近800Mbps以上,基本也够用;如果只有100-200Mbps,优先检查虚拟网卡类型(换virtio或VMXNET3通常比e1000性能好)、宿主机CPU核心数分配、虚拟机内网卡协商速率。Docker默认的bridge网络也是NAT模式,大量跨容器传输时,Docker宿主机的iptables转发能力会成为瓶颈,必要时可以改用host网络模式或者自建的overlay网络。
4.3 云主机/VPS:到手先跑三个测试
刚拿到一台云主机或VPS,我建议按顺序跑三个测试:ping测延迟丢包、speedtest-cli测出口带宽、traceroute测线路路径。
ping -c 20 你的云主机IP speedtest-cli traceroute 你的云主机IPping看的是从你当前网络到云主机的延迟和稳定性。speedtest-cli跑在云主机上,看的是这台机器的公网出口带宽是否和供应商宣传一致。traceroute的重点是看线路绕得厉不厉害——某些“低价”云主机虽然延迟看着不高,但traceroute会发现数据包绕了很远,高峰期丢包严重。
如果要验证两台云主机之间、或者云主机和本地机房之间的实际传输速度,iperf3比speedtest更可信,因为它完全走你自己的点对点链路。操作方法和前面一样,服务端跑在云主机上,本地客户端执行iperf3。注意云平台的安全组一定要放行iperf3的监听端口,否则会一直超时。
另外提一句,很多云主机默认CPU带宽受限(比如突发性能实例),iperf3多线程测出来依然不高时,要看是不是触发了CPU积分耗尽或带宽策略限制,这属于平台层面的问题,和网络链路无关。
4.4 自动化测试与安全测试中的IP连通性验证
在自动化测试环境里,测试用例跑之前最怕的就是某个依赖服务IP不可达,报错报得莫名其妙。我习惯在测试框架启动阶段加一个“环境预检”,批量检测所有依赖IP的连通性和关键端口状态。
安全测试(渗透测试)中同样有大量“IP+端口”探测的需求,第一步往往就是确认目标开放了哪些服务。nmap是最常用的工具,比如:
nmap -Pn -p 1-1000 目标IP但必须强调:未经授权对不属于自己的IP做扫描,在很多国家地区是违法行为,在职场内也极有可能触碰合规红线。只允许对自己负责的、已经获得书面授权的目标这么做。学习阶段想练手,可以在pikachu这类本地漏洞靶场、虚拟机环境里进行,不要拿公网真实IP练手。
自动化脚本批量测IP时,系统自带的ping和telnet逐个跑太慢,第二段我会给出一个Python实现的多线程检测工具,更适合批量场景。
4.5 嵌入式与车载场景:连通性测试要配合业务协议
工业设备、车载网络这类场景也会遇到IP测速问题,但更关注的是IP层连通性、端口可达性和固定延迟,而不是吞吐量。比如车载诊断中现在常用DoIP(基于TCP/IP的以太网诊断),测试人员需要验证ECU的IP地址能否ping通、诊断端口(通常是13400)能否TCP连接。这种情况下,用telnet或nc测端口连通性就非常关键,同时还要确认设备IP是否和诊断仪在同一网段、防火墙是否拦截了诊断流量。
这类场景和普通互联网测速有个很大区别:不能简单用“延迟低就是好”来判断,还得结合诊断协议报文响应时间、丢包重传情况来综合评估。EMC测试等硬件环节如果发现网络异常,也未必是协议栈问题,可能是物理层干扰,需要配合专用的网络分析仪定位。这里点到为止,更深的内容属于另一个专题了。
5. 自动化与脚本化:用Python批量测IP连通性和延迟
手动敲命令适合临时查一两个IP,一旦IP数量上到几十个,比如自动化测试环境巡检、公司服务器列表健康检查,就得靠脚本了。下面是我常用的一个轻量级Python实现,功能包括:批量ping测延迟,再检测指定TCP端口是否可连接,最后输出汇总表格。
import socket import subprocess import sys import time from concurrent.futures import ThreadPoolExecutor def ping_test(ip, count=3): """调用系统ping命令,返回平均延迟和丢包率""" param = "-n" if sys.platform == "win32" else "-c" cmd = ["ping", param, str(count), ip] result = subprocess.run( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) output = result.stdout if "TTL=" not in output.upper() and "ttl=" not in output: return None, 100 # 解析Linux/macOS和Windows两个版本的输出 if "avg" in output: avg_str = output.split("=")[-1].split("/")[0] avg = float(avg_str) else: avg_str = output.split("平均 = ")[-1].split("ms")[0] avg = float(avg_str) loss = 0 if (result.returncode == 0) else 100 return avg, loss def tcp_test(ip, port, timeout=3): """测试TCP端口是否可连接,返回耗时和状态""" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) start = time.time() try: sock.connect((ip, port)) cost = (time.time() - start) * 1000 return "open", round(cost, 1) except socket.timeout: return "filtered", None except ConnectionRefusedError: return "closed", None except Exception: return "unreachable", None finally: sock.close() def check_target(target): ip = target["ip"] port = target.get("port") avg, loss = ping_test(ip) port_state = "" tcp_cost = None if port: port_state, tcp_cost = tcp_test(ip, port) return { "ip": ip, "port": port, "ping_avg_ms": avg, "loss": loss, "port_state": port_state, "tcp_ms": tcp_cost, } def main(): targets = [ {"ip": "192.168.1.1", "port": 80}, {"ip": "192.168.1.2", "port": 22}, {"ip": "10.10.10.10", "port": 8080}, ] with ThreadPoolExecutor(max_workers=10) as executor: results = list(executor.map(check_target, targets)) print(f"{'IP':<16}{'Port':<8}{'Ping(ms)':<12}{'Loss':<8}{'TCP状态':<10}") for r in results: ping_str = f"{r['ping_avg_ms']:.1f}" if r["ping_avg_ms"] else "N/A" print( f"{r['ip']:<16}{str(r['port']):<8}{ping_str:<12}" f"{r['loss']:<8}{r['port_state']:<10}" ) if __name__ == "__main__": main()这个脚本有几个设计点值得说一下:
- 用ThreadPoolExecutor并发执行,10个IP不到几秒就能出结果,比逐个串行快一个量级。
- ping解析兼容了Windows和Linux输出格式,避免换台机器就跑不了的尴尬。
- TCP测试区分了三种状态:port_state为“open”说明端口开放,“filtered”说明防火墙丢包或超时,“closed”说明服务未开启。这三种状态对应前面telnet部分说的三种场景。
- 超时设成3秒,避免个别不可达IP拖垮整个巡检任务。
实际使用时,你可以把targets列表改成从文件或数据库里读取,每天自动巡检并输出结果。这已经是自动化测试框架里“环境预检”模块的雏形了。当然,生产环境可以直接用nmap、fping等现成工具,但自己写脚本的好处是能把结果格式和上游系统做对接,灵活度更高。
6. 常见问题速查与避坑经验
6.1 现象到原因的速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| ping通,但telnet端口不通 | 目标主机防火墙/云安全组未放行 | 检查目标服务器防火墙,确认服务监听在0.0.0.0或对应网卡 |
| telnet显示Connection refused | 端口没有服务监听 | 启动对应服务,检查服务监听IP是否有误 |
| 下载速度远低于iperf3测速结果 | 下载源服务器限速、或源站在公网线路上有拥塞 | 更换多个下载源对比,或使用多线程下载工具 |
| 内网iperf3测速正常,文件拷贝慢 | 磁盘IO、协议栈、SMB/NFS性能瓶颈 | 换用大文件连续读写测试,先排除磁盘因素 |
| 测速结果忽快忽慢 | 无线干扰、运营商高峰期拥塞、本机有后台任务 | 改用有线网线,关闭后台上传任务,错峰再测 |
| 虚拟机内网速远低于宿主机 | NAT模式转发瓶颈、虚拟网卡类型较差 | 改桥接模式,或换用virtio/VMXNET3网卡 |
| 云主机ping正常但speedtest很慢 | 服务商出口带宽限制或突发带宽耗尽 | 查看云平台监控数据,确认是否触发限速策略 |
| 换电脑后同一IP测速结果差异大 | 网卡性能、网线接口协商速率、TCP窗口配置差异 | 分别查两端网卡协商速率,统一测速工具参数 |
6.2 我踩过几次坑之后总结的一些经验
第一,测速之前先确认本机网卡协商速率。Windows下右键网卡看状态,或者ipconfig /all,Linux下用ethtool eth0看Speed字段。如果协商只有100Mbps,却测千兆宽带,那这个问题不用找运营商,换网线或重新插拔让链路协商到1Gbps再说。
第二,同一组测试至少做三次取中位数。网络本身就有随机抖动,一次测速结果说明不了问题。我自己会记录“第一次和第三次差异大”的情况,然后去看后台是不是有定时任务在跑,比如Windows更新、云盘同步、系统备份,这些都会把测速结果拉低。
第三,ICMP被禁不等于主机挂了。这个前面反复强调过。很多生产服务器出于安全考虑会丢弃ping请求,这时候你只能通过TCP端口、HTTP响应来确认存活。记住了:ping这套测试,测的是“允不允许你测”,而不是“主机是否存在”。
第四,安全合规是红线。用nmap、masscan这类工具做端口扫描,或者对一个IP做压测,一定要先确认你拥有这个IP,或获得了主机的书面授权。我自己在写任何自动化扫描脚本时,都会在注释里明确写上“仅限授权目标”,这种职业习惯关键时刻能保护自己。
第五,测速结果记得留档。时间、源IP、目标IP、工具命令、结果数值,按表格记录下来。很多网络故障不是持续性的,而是间歇性的,没有历史数据对比,你很难向运营商或云服务商证明“今天比上周慢了一半”。有了数据,沟通效率会高很多。
最后分享一个我在实际工作中养成的习惯:接手一个“网络慢”的故障,从来不会上来就开speedtest。先问自己三个问题——目标是哪个IP?端口通不通?延迟有没有明显变化?然后从ping和telnet开始,一步步定位。等你熟练了,会发现“测IP速度”几分钟就能完成,难的不是敲命令,而是根据结果判断问题出在哪一层。希望这篇文章能让你少走一些我已经走过的弯路。