排查网络问题的一些工具的作用和常用使用方法
一,ping
核心原理便是通过发送 ICMP(Internet 控制消息协议)回声请求包到目标主机,若目标主机可达且响应,会返回 ICMP 回声应答包,以此判断网络链路是否通畅。
常见用法如下
ping -c 4 baidu.com #表示给百度发4个数据包
ping 8.8.8.8 #表示给8.8.8.8持续发送数据包
64bytes:是数据包的大小
seq:是数据包的序列号
ttl:生存时间(可大致判断目标主机类型,Linux 通常默认 64,Windows 通常 128)
time:往返延迟(RTT),数值越小,网络链路越通畅。
常见异常:
- 输出
Request timeout:目标主机可达但未响应 ICMP(可能被防火墙拦截),或网络延迟过高。 - 输出
Destination Host Unreachable:目标主机不可达(可能 IP / 域名错误、路由故障、目标主机下线)。 - 输出
unknown host:域名无法解析(DNS 配置问题)。
二,telnet
核心原理:
- Telnet 基于 TCP 三次握手:本地主机向目标主机的指定 TCP 端口发送连接请求,若目标端口处于 “监听状态” 且无防火墙拦截,会完成三次握手建立连接;若端口未开放或被拦截,连接会失败。
- 无加密传输:Telnet 传输的数据(包括用户名、密码)是明文的,安全性极差,因此现在几乎不用它做远程登录,仅用于网络排查(端口测试)。
- 依赖 TCP 协议:仅支持测试 TCP 端口(如 80、443、3306),不支持 UDP 端口(如 53、161)
常见用法如下:
telnet [参数] 目标主机(IP/域名) 目标端口(必填)
telnet baidu.com 80 #测试百度的80端口是否可达常见错误及排查步骤:
| 错误提示 | 核心原因 | 排查步骤 | |
|---|---|---|---|
Connection refused(连接被拒绝) | 1. 目标端口未开放(服务未启动);2. 服务绑定了特定 IP(非当前访问 IP) | 1. 检查目标服务状态(如 systemctl status mysqld);2. 用 `netstat -tuln grep 端口确认服务监听地址;3. 测试服务是否仅本地可访问(登录目标主机用telnet 127.0.0.1 端口 ` 验证) | |
No route to host(无路由到主机) | 1. 目标 IP / 域名错误;2. 本地与目标主机不在同一子网;3. 路由故障 | 1. 验证目标 IP 正确性(ping 目标IP);2. 用 ip route show 查看本地路由表;3. 排查网关是否可达(ping 网关IP) | |
Timeout(超时) | 1. 防火墙拦截(本地、目标主机或中间路由);2. 网络链路中断;3. 目标主机离线 | 1. 关闭本地防火墙测试(sudo systemctl stop firewalld);2. 登录目标主机关闭防火墙;3. 用 traceroute 目标IP 排查路由中断节点;4. 确认目标主机是否在线 | |
Escape character is '^]'(无后续响应) | 连接成功,但目标服务未返回数据(如 HTTPS 端口,需用 TLS 协议握手) | 1. 确认端口类型:HTTPS(443)需用 openssl s_client -connect 目标:443 测试,Telnet 无法处理 TLS 加密;2. 检查服务是否正常响应(如重启服务) |
三,mtr和traceroute
mtr和traceroute都是用于查询本地服务器到目标服务器的链路路径的工具,二者最大的区别就是mtr是持续地向目标路径发送探测包,而traceroute则是只会发出一次包。
traceroute的使用及输出如下
$ traceroute google.com
traceroute to google.com (142.251.42.78), 30 hops max, 60 byte packets1 router.local (192.168.1.1) 1.123 ms 1.456 ms 1.789 ms2 10.10.10.1 (10.10.10.1) 10.234 ms 10.567 ms 10.890 ms3 ae-12-345.edge4.london1.Level3.net (4.53.216.101) 15.678 ms 16.012 ms 16.345 ms4 * * *5 108.170.248.161 (108.170.248.161) 20.123 ms 20.456 ms 20.789 ms...
14 lhr48s22-in-f14.1e100.net (142.251.42.78) 25.123 ms 25.456 ms 25.789 ms每一行代表一跳(一个路由器)。
第一列是跳数。
第二列是路由器的 IP 地址和(如果可解析)主机名。
后面三个时间值是三次探测包的往返延迟。这有助于判断网络延迟的稳定性。
* * *表示该路由器没有在超时时间内响应。这可能是由于防火墙丢弃了数据包或阻止了 ICMP 回复。
traceroute只代表着瞬间的网络状况,因为他只会到达目标ip一次
mtr则是在使用后持续不断地向目标ip发送探测。
mtr使用之后的界面如下
My traceroute [v0.93]
Hostname.com (192.168.1.1) Sun Jun 9 12:00:00 2024
Keys: Help Display mode Restart statistics Order of fields quitPackets PingsHost Loss% Snt Last Avg Best Wrst StDev1. router.local 0.0% 10 1.2 1.3 1.1 1.8 0.22. 10.10.10.1 0.0% 10 10.1 10.5 9.8 12.1 0.73. ae-12-345.edge4.london1.Level3.net 20.0% 10 15.6 16.2 15.6 18.9 1.14. (waiting for reply)5. 108.170.248.161 0.0% 10 20.1 20.3 19.9 21.0 0.3
...
14. lhr48s22-in-f14.1e100.net 0.0% 10 25.0 25.2 24.8 26.1 0.4Loss%:这是最关键的一列。它显示了到该跳为止的累计丢包率。例如,如果第三跳显示 20% 的丢包率,但后续跳的丢包率为 0%,那么问题很可能就出在第三跳的路由器上。
Snt:已发送的探测包数量。
Last, Avg, Best, Wrst:延迟统计。
StDev:标准偏差,值越大说明延迟越不稳定(网络抖动大)。
mtr的界面会实时的更新。
四,netstat
netstat是一个用于显示网络连接、路由表、接口统计等网络相关信息的命令行工具。
基本语法:
netstat [选项]
常用选项:
-a, --all:显示所有选项,默认不显示LISTEN相关的。
-t, --tcp:显示TCP相关选项。
-u, --udp:显示UDP相关选项。
-l, --listening:仅显示监听状态的套接字。
-n, --numeric:不解析服务名称,直接显示数字端口和IP。
-p, --programs:显示套接字所属的进程ID和程序名称。
-r, --route:显示路由表。
-i, --interfaces:显示网络接口统计信息。
-s, --statistics:显示每个协议的统计信息(如TCP、UDP等)。
常用组合拳 netstat -tulpn

连接信息字段:
Proto:协议类型(tcp, udp, raw)
Recv-Q:接收队列中尚未被应用程序读取的数据大小
Send-Q:发送队列中尚未被远程主机确认的数据大小
Local Address:本地地址和端口
Foreign Address:远程地址和端口
State:连接状态(仅TCP)
PID/Program name:使用该连接的进程ID和程序名
此外还有 netstat -i ,用于统计接口信息

接口统计字段:
RX-OK/TX-OK:成功接收/发送的数据包数
RX-ERR/TX-ERR:接收/发送错误的数据包数
RX-DRP/TX-DRP:接收/发送时丢弃的数据包数
RX-OVR/TX-OVR:接收/发送时因溢出丢失的数据包数
五,nslookup
nslookup(Name Server Lookup)是一个用于查询域名系统(DNS)记录的网络管理工具。它可以用来诊断 DNS 问题、获取域名的 IP 地址、查询各种 DNS 记录等。
nslookup 有两种工作模式:
非交互模式:直接在命令行中执行单个查询
交互模式:进入一个交互式环境,可以执行多个查询
常用用法就是nslookup example.com

以上我指定了用114.114.114.114作为DNS服务器
以下为一些其他的用法
# A记录(IPv4地址)
nslookup -type=A google.com# AAAA记录(IPv6地址)
nslookup -type=AAAA google.com# MX记录(邮件交换记录)
nslookup -type=MX gmail.com# NS记录(域名服务器记录)
nslookup -type=NS google.com# CNAME记录(别名记录)
nslookup -type=CNAME www.github.com# TXT记录(文本记录)
nslookup -type=TXT google.com# SOA记录(起始授权机构)
nslookup -type=SOA google.com当然,也可以进入交互模式进行查询,直接在命令行输入nslookup即可。

总的来说就是以下常用用法
# 进入交互模式
nslookup# 基本查询
> google.com# 设置查询类型
> set type=MX
> gmail.com# 设置查询类型为A记录
> set type=A
> facebook.com# 指定使用特定的DNS服务器
> server 8.8.8.8
> google.com# 查询域名服务器记录
> set type=NS
> baidu.com# 反向DNS查询(通过IP查域名)
> set type=PTR
> 8.8.8.8# 退出交互模式
> exit