帮你快速理解、总结文档立即下载

网络诊断指南

最近更新时间:2026-08-27 18:07:00
我的收藏

使用 ping 命令测试网络连接

在 Linux 中,可使用 ping 命令测试网络连接。该命令向指定 IP 地址或域名发送 ICMP 请求,并显示响应时间与丢包率等信息。以测试与 www.example.com 的网络连接为例:
ping www.tencent.com
网络连接正常时,输出示例如下:
PING www.tencent.com.eo.dnse5.com (61.170.66.121) 56(84) bytes of data.
64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=1 ttl=50 time=10.3 ms
64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=2 ttl=50 time=10.1 ms
64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=3 ttl=50 time=9.77 ms
64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=4 ttl=50 time=10.1 ms
...
网络连接异常时,输出示例如下:
ping: www.example.com: Name or service not known
或者:
ping: connect: Network is unreachable

使用 traceroute 命令跟踪网络路径

在 Linux 中,可使用 traceroute 命令跟踪网络路径。该命令显示从本地主机到目标主机的网络路径,以及每个路由器的 IP 地址与响应时间等信息。以跟踪到 www.example.com 的网络路径为例:
traceroute www.example.com
网络连接正常时,输出示例如下:
traceroute to www.example.com (172.217.6.196), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 1.000 ms 1.000 ms 1.000 ms
2 10.10.10.1 (10.10.10.1) 10.000 ms 10.000 ms 10.000 ms
3 172.16.1.1 (172.16.1.1) 20.000 ms 20.000 ms 20.000 ms
4 172.16.2.1 (172.16.2.1) 30.000 ms 30.000 ms 30.000 ms
5 172.16.3.1 (172.16.3.1) 40.000 ms 40.000 ms 40.000 ms
6 172.16.4.1 (172.16.4.1) 50.000 ms 50.000 ms 50.000 ms
......
网络连接异常时,输出示例如下:
traceroute to www.example.com (172.217.6.196), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 1.000 ms 1.000 ms 1.000 ms
2 * * *
3 * * *
4 * * *
5 * * *

使用 netstat 命令查看网络连接状态

在 Linux 中,可使用 netstat 命令查看网络连接状态。该命令显示当前系统中的网络连接信息,包括本地 IP 地址、远程 IP 地址与连接状态等。以显示当前系统中的网络连接信息为例:
netstat -a
网络连接正常时,输出示例如下:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.100:22 192.168.1.101:12345 ESTABLISHED
tcp 0 0 192.168.1.100:22 192.168.1.102:54321 ESTABLISHED
...
网络连接异常时,输出示例如下:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 1 192.168.1.100:22 192.168.1.101:12345 SYN_SENT
tcp 0 0 192.168.1.100:22 192.168.1.102:54321 CLOSE_WAIT
...
说明:
SYN_SENT:表示连接请求已发出但未收到对端应答,通常意味着目标不可达或对端服务未启动。
CLOSE_WAIT:大量堆积通常表示对端已关闭连接,而本端应用程序未及时关闭对应的套接字。
TIME_WAIT:连接正常关闭后的过渡状态,出现少量 TIME_WAIT 属于正常现象,不代表网络异常。

使用 ss 命令查看网络连接状态

ss(socket statistics,套接字统计)是 Linux 系统下的网络连接监控与调试工具。与传统的 netstat 命令相比,ss 在性能和信息展示方面更具优势。
常用命令如下:
显示所有当前连接:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 25077 * 24218
u_str ESTAB 0 0 * 20557 * 592
u_dgr ESTAB 0 0 * 23602 * 13633
......
显示所有 TCP 连接:
ss -t
显示所有 UDP 连接:
ss -u
显示所有监听中的套接字:
ss -l
显示所有已建立(ESTABLISHED)的连接:
ss -t state established
按多个状态过滤(例如:已建立且正在关闭的连接):
ss -t state established state closing
显示进程信息。如需查看使用套接字的对应进程,请使用 -p 选项:
ss -t -p
显示更多详细信息,使用 -e 选项显示扩展信息(例如滑动窗口大小、丢包统计等):
ss -t -e
显示套接字摘要统计信息,使用 -s 选项显示套接字摘要统计信息,如 TCP/UDP/RAW 以及连接数量等:
ss -s
结合常用过滤器,如需查看特定端口的连接情况,可结合 grep 命令进行过滤。以查看端口 80 上的所有连接为例:
ss -t -a | grep ':80'
在日常网络监控与故障排查中,可根据实际需求灵活组合各选项。如需查看完整的选项列表及详细说明,请参考 ss 命令的手册页(man page)。

使用 ethtool 查询和控制网络设备驱动和硬件设置

ethtool 是一个用于查询和控制网络设备驱动和硬件设置的实用工具。若系统未安装 ethtool,请执行以下命令安装该软件包。
dnf install ethtool
以下介绍在其他网络工具中不常见或无法被替代的 ethtool 的高级功能和硬件设置。

网络设备速度、双工模式和自动协商查询与设置

查询网络设备速度、双工模式和自动协商查询与设置(以网卡 ens18 示例):
ethtool ens18 #以网卡 ens18 举例
输出示例:
Settings for ens18:
......
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
......
修改网络设备速度、双工模式和自动协商设置:
ethtool -s ens18 speed 100 duplex full autoneg off

流量控制设置

查看网络设备的流量控制设置
ethtool -a ens18
Pause parameters for eno1:
Autonegotiate: on
RX: off
TX: off
修改网络的流量控制设置:
ethtool -A ens18 rx on tx off

Wake-on-LAN 功能设置

查询网络设备的 Wake-on-LAN 功能:
ethtool ens18
输出示例:
Settings for ens18:
......
Wake-on: g
.....
开启网络设备的 Wake-on-LAN 功能:
ethtool -s ens18 wol g
关闭网络设备的 Wake-on-LAN 功能:
ethtool -s ens18 wol d

网络设备的硬件特性

查看网络设备的硬件特性:
ethtool -k ens18
输出示例:
Features for ens18:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
......
更改网络设备的硬件特性,如启用通用接收分散,通用分组传输:
ethtool -K ens18 tso on gso on

网络设备的统计信息

查看网络设备的统计信息:
ethtool -S ens18
输出示例:
NIC statistics:
rx_packets: 399566
tx_packets: 257685
rx_bytes: 215936573
tx_bytes: 55115699
rx_broadcast: 9854
tx_broadcast: 92
......

网络设备自检

执行网络设备的自检:
ethtool -t ens18
输出示例:
The test result is PASS
The test extra info:
Register test (offline) 0
Eeprom test (offline) 0
Interrupt test (offline) 0
Loopback test (offline) 0
Link test (on/offline) 0
如果自检中出现故障,可以根据显示的错误信息检查相应的驱动程序、固件和硬件,以便解决问题。

使用 tcpdump 命令诊断网络问题

tcpdump 是一款功能强大的网络抓包工具,可用于捕获网络数据包并显示其内容。以下为 tcpdump 的常用使用示例:

按目标主机捕获数据包

使用以下命令捕获特定目标主机的数据包:
tcpdump -i eth0 host www.example.com
其中, -i 参数指定要捕获的网络接口, host 参数指定要捕获的目标主机。
网络连接正常时,输出示例如下:
tcpdump -i eth0 src host 192.168.1.100 and dst host www.example.com
输出示例:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:23:45.678901 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [S], seq 123456789, win 65535, options [mss 1460,nop,nop,sackOK], length 0
14:23:45.789012 IP 93.184.216.34.80 > 192.168.1.100.12345: Flags [S.], seq 987654321, ack 123456790, win 65535, options [mss 1460,nop,nop,sackOK], length 0
14:23:45.890123 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [.], ack 1, win 65535, length 0
14:23:45.901234 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [P.], seq 1:101, ack 1, win 65535, length 100
14:23:46.012345 IP 93.184.216.34.80 > 192.168.1.100.12345: Flags [.], ack 101, win 65535, length 0
...
网络连接异常时,输出示例如下:
tcpdump -i eth0 src host 192.168.1.100 and dst host www.example.com
输出示例:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:23:45.678901 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [S], seq 123456789, win 65535, options [mss 1460,nop,nop,sackOK], length 0
14:23:45.789012 IP 93.184.216.34.80 > 192.168.1.100.12345: Flags [R.], seq 0, ack 123456790, win 0, length 0
其中,R 标志表示连接被重置,这意味着网络连接存在问题。

按网段捕获数据包

使用以下命令捕获指定网段的数据包:
tcpdump -i eth0 net 192.168.1.0/24
此命令将仅捕获通过 eth0 的 192.168.1.0/24 网络的数据包。

按端口捕获数据包

使用以下命令捕获通过 eth0 的 HTTP(端口 80)流量:
tcpdump -i eth0 port 80
可以将 80 替换为要监视的其他端口号。

按指定协议捕获数据包

使用以下命令捕获 icmp 协议的流量:
tcpdump -i eth0 'icmp'
可以将 icmp 替换为要监视的其他协议(如 tcpudp)。

指定协议和端口捕获 DNS 或 DHCP 数据包

DNS 通常使用 UDP 协议的 53 端口进行请求。要捕获 DNS 数据包,可以运行以下命令:
tcpdump -i eth0 'udp port 53'
DHCP 请求和响应通常使用 UDP 协议的 67 和 68 端口进行通信。如需捕获与 DHCP 相关的数据包,可执行以下命令:
tcpdump -i eth0 'udp port 67 or udp port 68'

捕获 TCP 三次握手的数据包

可以使用以下命令捕获 TCP 三次握手(SYN、SYN-ACK、ACK)过程中的数据包:
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
该命令的-i 参数指定要捕获的网络接口为 eth0,过滤器部分 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' 用于检测具有 “SYN” 和 “ACK” 标志的 TCP 数据包。

限制捕获的数据包数量

使用 -c 参数指定要捕获的数据包数量:
tcpdump -i eth0 -c 10
此命令将仅捕获通过 eth0 的前 10 个数据包。

保存或读取数据包

将捕获的数据包保存到 .pcap 格式文件:
tcpdump -i eth0 -w output.pcap
.pcap 格式文件中读取数据包:
tcpdump -r output.pcap

检测 IP 和 MAC 地址冲突

IP 地址冲突指同一局域网内两个或多个设备被分配了相同的 IP 地址。该问题通常由以下原因引起:
静态 IP 地址设置错误:当一个或多个设备静态指定了相同的 IP 地址时,会发生 IP 地址冲突。
动态主机控制协议(DHCP)问题:例如多个 DHCP 服务器分配相同的地址。
IP 地址冲突会导致如下问题:
影响设备之间的通信,出现连接问题和丢包现象。
局域网中的两个设备无法同时访问网络。
网络速度变慢、性能降低。
使用 arping 命令检测局域网中其他服务器的 IP 是否存在地址冲突:
arping -c 2 192.168.1.110
输出示例:
ARPING 192.168.1.110
42 bytes from 02:99:96:xx:xx:xx (192.168.1.110): index=0 time=128.403 usec
42 bytes from 62:10:6d:xx:xx:xx (192.168.1.110): index=1 time=168.765 usec
该命令向指定 IP 地址发送两个 ARP 请求(-c 2 指定发送 2 次)。若收到回复,则显示目标设备的 MAC 地址。通过观察响应结果,可判断是否存在多个 MAC 地址对应同一 IP 地址的情况。如上所示,192.168.1.110 对应两个不同的 MAC 地址,表明存在 IP 地址冲突。
如需检测当前服务器的某个网络接口的 IP 是否存在地址冲突,请使用如下命令:
arping -I ens18 -D 192.168.1.110
输出示例:
ARPING 192.168.1.110 from 0.0.0.0 ens18
Unicast reply from 192.168.1.110 [02:99:96:xx:xx:xx] 0.803ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
示例中,ens18 为待检测的网络接口,192.168.1.110 为待检测的 IP 地址。若响应中显示 1 response(s),表示有 1 个设备与该 IP 地址冲突,冲突设备的 MAC 地址为 02:99:96:xx:xx:xx。若返回 0 response(s),则表示无 IP 地址冲突。

ARP 老化和永久条目

ARP 老化时间决定 ARP 缓存中 IP 地址与 MAC 地址映射关系的保留时长。当 ARP 条目的存在时间超过老化时间后,系统将自动从 ARP 缓存中移除该条目,以清除无效或不活跃的地址映射,保持 ARP 缓存的有效性与稳定性。系统默认 ARP 老化时间为 60s。
sysctl net.ipv4.neigh.default.gc_stale_time
输出示例:
net.ipv4.neigh.default.gc_stale_time = 60
永久 ARP 条目由手动创建,不受 ARP 老化机制影响,不会被自动清除。该机制可为 IP 地址和 MAC 地址稳定不变的设备提供持久的地址映射,避免重复发送 ARP 请求获取相同映射。
在大多数场景下,默认的 ARP 老化设置即可满足网络需求。永久 ARP 条目应在特定场景下谨慎使用,且须确保对应设备的 IP 地址与 MAC 地址不会发生变化。
可使用以下命令查看当前的 ARP 缓存:
arp -n
输出示例:
Address HWtype HWaddress Flags Mask Iface
192.168.1.111 ether 02:99:96:a7:27:43 CM ens18
192.168.2.1 ether c2:fd:0b:bb:a6:9c C ens19
192.168.1.1 ether 86:7a:1c:87:a8:35 C ens18
192.168.2.111 ether 02:1e:16:7d:cc:50 C ens19
命令输出显示 IP 地址与 MAC 地址的映射关系及 ARP 条目状态。其中,Flags Mask 字段中 C 表示完全可用,M 表示正在使用的永久条目。
若发现 ARP 条目因错误配置为永久条目导致映射不正确,或需重新获取某个 IP 地址与 MAC 地址的映射关系,可使用以下命令删除该 ARP 条目:
sudo arp -d 192.168.1.111
其中,192.168.1.111 即从 ARP 缓存中删除的设备的 IP 地址。
如需创建永久条目, 可使用以下命令:
arp -s 192.168.1.111 02:99:96:xx:xx:xx
以上示例为 IP 地址 192.168.1.111 和 MAC 地址 02:99:96:xx:xx:xx 创建永久 ARP 条目。
创建完成后,可使用 arp -n 命令查看 ARP 缓存,该设备的条目标记为 M,表示永久条目。