使用 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 ms64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=2 ttl=50 time=10.1 ms64 bytes from 61.170.66.121 (61.170.66.121): icmp_seq=3 ttl=50 time=9.77 ms64 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 packets1 gateway (192.168.1.1) 1.000 ms 1.000 ms 1.000 ms2 10.10.10.1 (10.10.10.1) 10.000 ms 10.000 ms 10.000 ms3 172.16.1.1 (172.16.1.1) 20.000 ms 20.000 ms 20.000 ms4 172.16.2.1 (172.16.2.1) 30.000 ms 30.000 ms 30.000 ms5 172.16.3.1 (172.16.3.1) 40.000 ms 40.000 ms 40.000 ms6 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 packets1 gateway (192.168.1.1) 1.000 ms 1.000 ms 1.000 ms2 * * *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 Statetcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 192.168.1.100:22 192.168.1.101:12345 ESTABLISHEDtcp 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 Statetcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 1 192.168.1.100:22 192.168.1.101:12345 SYN_SENTtcp 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 在性能和信息展示方面更具优势。常用命令如下:
显示所有当前连接:
ssNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 /run/systemd/journal/stdout 25077 * 24218u_str ESTAB 0 0 * 20557 * 592u_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/sDuplex: FullAuto-negotiation: on......
修改网络设备速度、双工模式和自动协商设置:
ethtool -s ens18 speed 100 duplex full autoneg off
流量控制设置
查看网络设备的流量控制设置
ethtool -a ens18Pause parameters for eno1:Autonegotiate: onRX: offTX: 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: ontx-checksumming: ontx-checksum-ipv4: off [fixed]tx-checksum-ip-generic: ontx-checksum-ipv6: off [fixed]......
更改网络设备的硬件特性,如启用通用接收分散,通用分组传输:
ethtool -K ens18 tso on gso on
网络设备的统计信息
查看网络设备的统计信息:
ethtool -S ens18
输出示例:
NIC statistics:rx_packets: 399566tx_packets: 257685rx_bytes: 215936573tx_bytes: 55115699rx_broadcast: 9854tx_broadcast: 92......
网络设备自检
执行网络设备的自检:
ethtool -t ens18
输出示例:
The test result is PASSThe test extra info:Register test (offline) 0Eeprom test (offline) 0Interrupt test (offline) 0Loopback test (offline) 0Link 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 decodelistening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes14: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 014: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 014:23:45.890123 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [.], ack 1, win 65535, length 014:23:45.901234 IP 192.168.1.100.12345 > 93.184.216.34.80: Flags [P.], seq 1:101, ack 1, win 65535, length 10014: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 decodelistening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes14: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 014: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 替换为要监视的其他协议(如 tcp 或 udp)。指定协议和端口捕获 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.11042 bytes from 02:99:96:xx:xx:xx (192.168.1.110): index=0 time=128.403 usec42 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 ens18Unicast reply from 192.168.1.110 [02:99:96:xx:xx:xx] 0.803msSent 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 Iface192.168.1.111 ether 02:99:96:a7:27:43 CM ens18192.168.2.1 ether c2:fd:0b:bb:a6:9c C ens19192.168.1.1 ether 86:7a:1c:87:a8:35 C ens18192.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,表示永久条目。