排查网络问题的一些工具的作用和常用使用方法

一,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

核心原理:

  1. Telnet 基于 TCP 三次握手:本地主机向目标主机的指定 TCP 端口发送连接请求,若目标端口处于 "监听状态" 且无防火墙拦截,会完成三次握手建立连接;若端口未开放或被拦截,连接会失败。
  2. 无加密传输:Telnet 传输的数据(包括用户名、密码)是明文的,安全性极差,因此现在几乎不用它做远程登录,仅用于网络排查(端口测试)。
  3. 依赖 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 packets
 1  router.local (192.168.1.1)  1.123 ms  1.456 ms  1.789 ms
 2  10.10.10.1 (10.10.10.1)  10.234 ms  10.567 ms  10.890 ms
 3  ae-12-345.edge4.london1.Level3.net (4.53.216.101)  15.678 ms  16.012 ms  16.345 ms
 4  * * *
 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   quit
                                                                               Packets               Pings
 Host                                                                        Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. router.local                                                              0.0%    10    1.2   1.3   1.1   1.8   0.2
 2. 10.10.10.1                                                                0.0%    10   10.1  10.5   9.8  12.1   0.7
 3. ae-12-345.edge4.london1.Level3.net                                       20.0%    10   15.6  16.2  15.6  18.9   1.1
 4. (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.4
  • Loss% :这是最关键的一列。它显示了到该跳为止的累计丢包率。例如,如果第三跳显示 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 有两种工作模式:

  1. 非交互模式:直接在命令行中执行单个查询

  2. 交互模式:进入一个交互式环境,可以执行多个查询

常用用法就是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
相关推荐
撒币使我快乐2 小时前
Windows安装Claude Code全流程
linux·windows·claude
塔能物联运维2 小时前
物联网异构协议自适应转换与网络集成优化
网络·物联网
Fanmeang2 小时前
华为SRv6技术:引领IP网络进入新时代的智能导航系统
运维·网络·华为·vpn·ipv6·srv6
longerxin20203 小时前
ubuntu所有版本镜像下载链接
linux·运维·ubuntu
数据雕塑家3 小时前
Linux下的花式「隔空」文件传输魔法
linux·运维·服务器
uoscn3 小时前
链接脚本(Linker Scripts)
linux·arm开发·arm
雍凉明月夜3 小时前
Ⅱ人工智能学习之深度学习(deep-learning)概述
人工智能·深度学习·学习
d111111111d3 小时前
STM32外设学习--USART串口外设--学习笔记。
笔记·stm32·单片机·嵌入式硬件·学习
亚远景aspice3 小时前
亚远景-ISO 26262与ISO 21434:未来汽车安全标准的发展趋势
网络