Skip to content

Menu
Menu

排查网络故障常用命令

Posted on 2024年10月20日2024年10月20日 by zhezimi

在排查网络故障时,网络管理员和技术人员常常需要依赖一系列命令来迅速定位问题。以下是一些常用的网络故障排查命令,它们各自有特定的用途,可以帮助有效诊断和解决网络问题:

  1. ping
  2. traceroute
  3. netstat
  4. telnet

1:ping

ping 命令在 Linux 中主要用于测试网络的连通性,它通过发送一个称为 ICMP(Internet Control Message Protocol)回显请求的数据包到目标主机,并等待目标主机回应,从而检查两者之间的网络连接状况。它还可以报告数据包传输的延迟时间,以及数据包丢失的情况。

ping 的基本原理是使用 ICMP 协议发送回显请求(Echo Request)和接收回显应答(Echo Reply)。当 ping 发送回显请求到目标 IP 地址时,目标设备会接收到该请求,并返回一个应答包。如果网络正常,发送方就会收到这个应答并计算往返的时间(称为 RTT,Round-Trip Time)。同时,ping 还可以显示网络中是否存在丢包的情况。

具体步骤如下:

1:发送 ICMP Echo Request: 本地主机向目标主机发送回显请求包。

2:等待响应: 本地主机等待目标主机的回应。

3:接收 ICMP Echo Reply: 如果目标主机正常并且网络畅通,它会返回回显应答包。

4:显示结果: ping 命令显示发送的包的数量、响应时间和丢包率等信息

举例:

使用 ping 命令测试 baidu.com 的网络连通性,可以输入以下命令:

[test@iZ2zex0j12ahfhZ ~]# ping baidu.com

示例输出:

PING baidu.com (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18: icmp_seq=1 ttl=54 time=36.5 ms
64 bytes from 39.156.66.18: icmp_seq=2 ttl=54 time=37.1 ms
64 bytes from 39.156.66.18: icmp_seq=3 ttl=54 time=36.8 ms
64 bytes from 39.156.66.18: icmp_seq=4 ttl=54 time=36.6 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 36.532/36.768/37.124/0.219 ms

解释:

  1. PING baidu.com (39.156.66.18): ping 命令将主机名 baidu.com 解析为 IP 地址 39.156.66.18,表明要向这个 IP 地址发送 ICMP 回显请求。
  2. 发送的 ICMP 包:
    • 56(84) bytes of data.:默认情况下,ping 发送一个 56 字节的数据包(加上 IP 和 ICMP 头的 28 字节,总计 84 字节)。
  3. 响应数据:
    • 64 bytes from 39.156.66.18: 收到了从 baidu.com 返回的数据包,大小为 64 字节。
    • icmp_seq=1: 这是第 1 个 ICMP 包的序列号。
    • ttl=54: TTL(Time To Live)是一个防止数据包无限循环的机制,表示数据包在网络中的剩余跳数。
    • time=36.5 ms: 数据包从发送到收到的往返时间(Round Trip Time,RTT),单位为毫秒。
  4. 统计信息:
    • 4 packets transmitted, 4 received: 共发送了 4 个包,并成功接收到 4 个包,没有丢包。
    • 0% packet loss: 表示没有数据包丢失。
    • rtt min/avg/max/mdev: 这是 RTT 的最小值、平均值、最大值和标准差,分别为 36.532 ms、36.768 ms、37.124 ms 和 0.219 ms。

这个输出表明从本地主机到 baidu.com 的网络连接畅通,数据包的往返时间较低,且没有丢包,网络质量良好。

2: traceroute

traceroute 是一个网络诊断工具,用于跟踪从本地主机到目标主机的数据包经过的路径,显示数据包在每一跳(即经过的每一个路由器)的延迟时间。

在实际工作中,traceroute 命令通常用于排查网络连接问题,特别是在以下几种情况下非常有用:

1. 网络连接不通

当无法访问某个服务器或网站时,可能的原因很多,如服务器不可用、网络配置错误或路由问题。使用 traceroute 可以帮助判断问题发生在哪个网络节点。例如:

  • 你试图访问某个外部服务(如 API 服务器或远程服务器)却无法连接,通过 traceroute 可以查明数据包在哪一跳被阻止,帮助判断是本地网络问题还是服务器所在的网络或中间路由问题。
  • 应用场景:公司的服务突然无法访问,使用 ping 发现超时,可以使用 traceroute 来查看具体在哪一跳失败,排查中间网络路由是否存在问题。

2. 高延迟(网络慢)

当网络访问速度异常缓慢时,可能是某个路由器或路径上的某台设备响应时间过长,导致网络延迟。通过 traceroute 可以逐跳查看延迟,找出哪一跳的延迟异常高,从而帮助定位网络瓶颈。

  • 应用场景:你发现从公司网络访问某个远程服务器的响应速度很慢,通过 traceroute,你可以检测到某个路由器或 ISP 网络延迟过高,帮助向相关方(如网络供应商)报告问题。

3. 中间路由丢包或阻塞

有时数据包可能在某一跳的路由器上被丢弃或阻塞,导致连接不稳定。通过 traceroute,你可以发现数据包在哪一跳开始丢失,帮助你确定是本地网络问题还是某个外部网络的问题。

  • 应用场景:如果客户反馈访问公司的服务偶尔会中断,你可以使用 traceroute 查看是否某些路由器在某些情况下会丢包。

4. 防火墙或网络配置问题

如果公司内部网络或客户的网络中部署了防火墙,防火墙可能会阻止某些数据包的传输。使用 traceroute 可以帮你找出数据包是否在防火墙处被阻止,并帮助排查防火墙配置是否有误。

  • 应用场景:公司新部署了一台防火墙后,发现部分客户无法访问公司的服务,使用 traceroute 能确认是否是防火墙配置阻止了数据包的通过。

5. ISP 或 CDN 问题

有时候,网络问题可能发生在互联网服务提供商(ISP)或内容分发网络(CDN)之间。通过 traceroute,你可以看到数据包经过的每个节点,判断问题是否出在某个运营商或 CDN 的路由问题上。

  • 应用场景:你的服务依赖于多个地理位置的 CDN,但某些区域的用户无法正常加载资源文件,traceroute 可以帮你追踪这些用户访问 CDN 的路径,找出是否是某个 CDN 节点出现了问题。

6. 网络路径优化

有时,你可能想分析数据包的传输路径,查看网络是否选择了最佳路径,尤其是当你使用多条线路或者多运营商的网络环境时。通过 traceroute 可以看到数据包的具体跳数和路径,帮助你优化网络拓扑结构。

  • 应用场景:你发现通过某条网络访问目标服务器的路径比预期的长,想要优化网络路由,可以通过 traceroute 分析当前的路径并与运营商沟通改进。

工作原理:

  1. TTL(Time To Live)机制:traceroute 利用 IP 协议的 TTL(生存时间)字段。TTL 是一个数字,表示数据包在网络中允许经过的最大跳数。当数据包经过每一个路由器时,TTL 会减 1。当 TTL 减为 0 时,路由器会丢弃该数据包,并返回一个 “超时” 信息给发送方。
  2. 逐步增加 TTL:traceroute 会发送带有不同 TTL 值的数据包。第一次发送 TTL 为 1,目的是只经过第一个路由器,然后收到该路由器的返回信息。接着,traceroute 将 TTL 设置为 2,这样数据包会经过两个路由器,依此类推,直到到达目标主机或者达到最大 TTL。
  3. 显示每跳信息:每次收到路由器的返回信息时,traceroute 记录该路由器的 IP 地址,并测量从发送数据包到收到返回信息所花费的时间。通过逐步增加 TTL,traceroute 可以显示出到目标主机经过的每一个路由器。

举例:

假设你想追踪到 baidu.com 的路径,可以运行以下命令:

traceroute baidu.com

示例输出:

traceroute to baidu.com (39.156.66.18), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  1.232 ms  1.099 ms  1.073 ms
 2  10.0.0.1 (10.0.0.1)  2.304 ms  2.278 ms  2.259 ms
 3  203.0.113.1 (203.0.113.1)  10.432 ms  10.412 ms  10.388 ms
 4  198.51.100.1 (198.51.100.1)  20.532 ms  20.512 ms  20.497 ms
 5  39.156.66.18 (39.156.66.18)  35.743 ms  35.721 ms  35.694 ms

解释:

  1. 1st hop:
    • 192.168.1.1: 这是本地主机与互联网之间的第一个路由器(通常是你的家庭或公司网络中的路由器)。
    • 1.232 ms:表示从本地主机到该路由器的往返时间,单位为毫秒。三次时间表示 traceroute 向同一目标发送了 3 个数据包。
  2. 2nd hop:
    • 10.0.0.1:这是第二跳的路由器的 IP 地址。
    • 2.304 ms:显示到第二跳路由器的延迟。
  3. 其他 hops:
    • 每一跳的路由器 IP 地址和延迟都显示在输出中,直到最终达到目标主机 baidu.com(IP 地址:39.156.66.18),延迟为 35.743 ms

常见的 traceroute 输出解释:

  1. * * *:如果某一跳的路由器不返回信息,traceroute 将显示 * * *。这可能是由于路由器禁止 ICMP 数据包(如防火墙配置所致),或者是路由器不响应 TTL 超时的数据包。
  2. 延迟较大的 hop:如果某一跳的延迟明显比其他的高,可能说明该路由器或网络路径存在问题。
  3. 无响应的目标:如果目标主机不可达,traceroute 会在某一跳停止,通常会出现多次 * * *,表示数据包无法进一步传递。

3: netstat

netstat 是一个网络统计工具,用于显示网络连接、路由表、接口统计信息、伪连接以及网络协议的使用情况。

netstat 命令通过读取操作系统的网络协议栈(如 TCP/IP 协议栈)中的信息,收集当前网络状态和活动连接的信息。它可以提供当前的网络连接、路由表、网络接口统计等信息,这些数据通常保存在内核的网络数据结构中。

在网络管理和故障排查中,netstat 是非常有用的工具。以下是其使用场景、基本原理和示例

使用场景

1:查看网络连接状态

  • 检查当前系统上有哪些网络连接是活动的,以及连接的状态(如 ESTABLISHED、LISTENING 等)。
  • 应用场景:你想知道当前与某个外部服务器的连接是否正常,或者是否有异常的连接。

2:排查网络故障

  • 当遇到网络问题时,可以使用 netstat 来查看活动的连接,判断是本地网络问题还是远程服务的问题。
  • 应用场景:某个应用无法访问网络,通过 netstat 确认是否有连接被拒绝或处于 TIME_WAIT 状态。

3:查看监听的端口

  • 查看哪些程序正在监听特定端口,可以帮助判断是否有服务在运行。
  • 应用场景:在服务器上确认你的 Web 服务器(如 Apache 或 Nginx)是否在监听正确的端口。

4:监控网络流量

  • 可以使用 netstat 查看网络接口的流量统计,监控网络性能。
  • 应用场景:在性能调优过程中,监测某个网络接口的流量使用情况。

5:查看路由表

  • 检查当前的路由表配置,判断数据包的转发路径。
  • 应用场景:调试网络时,确认路由配置是否正确。

举例

1. 查看网络连接状态

场景:你想检查与外部服务器的活动连接,以确保你的应用能够正常通信。

netstat -an | grep ESTABLISHED

解释:

  • -a:显示所有连接和监听端口。
  • -n:以数字形式显示地址和端口号,避免进行 DNS 查找,提高显示速度。
  • grep ESTABLISHED:过滤出状态为 ESTABLISHED 的连接,表示这些连接是活跃的。

示例输出:

tcp        0      0 192.168.1.5:49542       93.184.216.34:80        ESTABLISHED
tcp        0      0 192.168.1.5:49543       93.184.216.34:443       ESTABLISHED

说明:输出显示与远程 IP 地址(例如 93.184.216.34)的多个活跃连接,确认与服务器的通信正常。


2. 排查网络故障

场景:某个应用无法访问互联网,可能是由于连接被拒绝或丢失。

netstat -ant

解释:

  • -a:显示所有连接和监听端口。
  • -n:以数字形式显示地址和端口号。
  • -t:仅显示 TCP 连接。

示例输出:

tcp        0      0 192.168.1.5:49542       0.0.0.0:*               TIME_WAIT
tcp        0      0 192.168.1.5:49543       0.0.0.0:*               TIME_WAIT

说明:如果很多连接处于 TIME_WAIT 状态,可能意味着应用频繁建立和关闭连接,需检查连接管理策略或网络配置。


3. 查看监听的端口

场景:你想确认 Web 服务器是否在正确的端口上监听,以确保能够接收请求。

netstat -tuln

解释:

  • -t:仅显示 TCP 连接。
  • -u:仅显示 UDP 连接。
  • -l:只显示监听中的连接。
  • -n:以数字形式显示地址和端口号。

示例输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      

说明:输出显示 Web 服务器在 80 端口(HTTP)和 443 端口(HTTPS)上监听,确保 Web 服务正常运行。


4. 监控网络流量

场景:你需要检查特定网络接口的流量统计,以评估网络负载。

netstat -i

解释:

  • -i:显示网络接口的信息,包括接收和发送的包数、错误和丢包情况。

示例输出:

Kernel Interface table
Iface   MTU   RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0    1500  1000   0      0      0      1200   0      0      0      BMRU
lo      65536 5000   0      0      0      5000   0      0      0      LRU

说明:通过监控 eth0 接口的 RX-OK 和 TX-OK(接收和发送成功的包数),可以评估网络流量和接口性能,确保网络负载在合理范围内。


5. 查看路由表

场景:你想检查当前的路由配置,判断数据包的转发路径是否正确。

netstat -rn

解释:

  • -r:显示路由表。
  • -n:以数字形式显示地址,避免 DNS 解析。

示例输出:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0        255.255.255.0   U     0      0        0 eth0

说明:输出显示目标地址、网关、子网掩码等信息。0.0.0.0 的路由表项指向默认网关 192.168.1.1,确保数据包能够正确转发到外部网络

4:telnet

telnet 是一个网络协议和命令行工具,用于在计算机之间建立远程连接。

telnet 协议允许用户通过网络与远程计算机进行交互。它使用 TCP 协议,通常默认连接到 23 端口。通过 telnet,用户可以连接到远程主机并在其上执行命令。虽然现在很多系统更倾向于使用更安全的 SSH 协议,但 telnet 仍然在某些场景下被使用。

它通常用于测试网络服务的可达性以及进行远程登录。以下是 telnet 的详细解释,包括其工作原理、使用场景和示例。

使用场景

1:测试网络连接

  • 使用 telnet 可以检查指定端口上的服务是否可用。
  • 应用场景:确认 Web 服务器是否在 80 端口监听。

2:远程登录

  • 在某些旧的或不需要安全性的系统中,telnet 可以用作远程登录工具。
  • 应用场景:访问旧版设备或服务,这些设备可能不支持 SSH。

3:调试服务

  • 可以手动发送命令到服务端,帮助调试应用程序和协议。
  • 应用场景:测试 SMTP 邮件服务器的邮件发送功能。

4:检查防火墙设置

  • 确认特定端口是否开放,以检测防火墙配置。
  • 应用场景:检查防火墙是否阻止某个服务的访问

举例

1. 测试连接到 Web 服务器

telnet www.example.com 80

解释:

  • 连接到 www.example.com 的 80 端口(HTTP)。

示例输出:

Trying 93.184.216.34...
Connected to www.example.com.
Escape character is '^]'.

说明:如果看到 “Connected”,表示 Web 服务器在该端口上正常监听。此时可以输入 HTTP 请求,例如 GET / HTTP/1.1。

2. 测试连接到 SMTP 服务器

telnet smtp.example.com 25

示例输出:

Trying 192.0.2.1...
Connected to smtp.example.com.
220 smtp.example.com ESMTP Postfix

说明:输出显示 SMTP 服务器的欢迎信息,表示连接成功。可以继续发送 SMTP 命令(如 EHLO)进行测试。

3. 远程登录到设备

如果设备支持 telnet,可以使用以下命令:

telnet 192.168.1.10

示例输出:

Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
Login: 
Password: 

说明:连接到设备后,需要输入用户名和密码进行登录。

注意事项

  • 安全性:telnet 不加密数据,任何经过网络的明文信息都可能被窃听,因此在现代环境中,建议使用 SSH 作为更安全的替代方案。
  • 兼容性:某些系统或防火墙可能会阻止 telnet 连接,尤其是在生产环境中。

telnet 是一个方便的工具,用于快速测试和调试网络服务,但使用时需注意安全性和适用场景

相关文章

  • Linux 性能问题排查思路

  • 网络I/O模型

  • grep

  • 《shell脚本攻略》笔记

  • vim常规使用

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

近期文章

  • 排查网络故障常用命令
  • PHP-FPM异常问题
  • RabbitMQ 1:介绍
  • 观察者模式
  • 装饰者模式

近期评论

没有评论可显示。

分类

  • cdn
  • css
  • docker
  • git
  • http
  • javascript
  • linux
  • mysql
  • nginx
  • php
  • RabbitMQ
  • 代码规范
  • 性能
  • 正则表达式
  • 网络协议
  • 设计模式
© 2025 | Powered by Minimalist Blog WordPress Theme