1. Linux网络连接状态查看基础
作为一名Linux系统管理员,每天最常被问到的问题之一就是"网络怎么不通了?"。要快速定位网络问题,首先需要掌握查看网络连接状态的各种方法。不同于Windows系统的图形化界面,Linux主要通过命令行工具来获取网络状态信息,这种方式虽然学习曲线略陡,但一旦掌握就会发现其强大之处。
在Linux系统中,网络连接状态的查看可以分为几个层次:物理层连接状态、网络接口配置、活动连接状态以及路由信息。每个层次都对应不同的命令和工具,我们需要根据具体问题选择适当的工具组合。比如当网线被拔出时,我们需要查看物理层状态;当IP地址配置错误时,需要检查接口配置;当某个服务无法连接时,则需要查看活动连接和路由表。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础命令工具解析
2.1 ifconfig命令的使用
ifconfig是最传统的网络接口配置工具,虽然在一些新发行版中已被ip命令取代,但仍然是检查网络接口状态的利器。执行简单的ifconfig命令(可能需要sudo权限),可以看到所有网络接口的详细信息:
code复制$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe5e:8d6a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5e:8d:6a txqueuelen 1000 (Ethernet)
RX packets 123456 bytes 98765432 (94.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 654321 bytes 123456789 (117.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
输出中几个关键信息值得关注:
- UP标志表示接口已启用
- RUNNING表示接口处于活动状态
- inet行显示IPv4地址和子网掩码
- RX/TX packets显示接收和发送的数据包统计
- errors/dropped计数可以帮助诊断网络问题
注意:在一些新版本Linux中,ifconfig可能默认未安装,可以安装net-tools包来获取这个命令。
2.2 ip命令的现代替代
iproute2套件中的ip命令是新式Linux发行版推荐使用的工具,它提供了更强大和统一的接口来管理网络。查看接口状态可以使用:
code复制$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5e:8d:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86388sec preferred_lft 86388sec
inet6 fe80::20c:29ff:fe5e:8d6a/64 scope link
valid_lft forever preferred_lft forever
ip命令输出的state字段非常有用:
- UP/LOWER_UP表示接口物理连接正常
- UNKNOWN通常用于环回接口
- DOWN表示接口被禁用或物理连接断开
3. 网络连接状态深度查看
3.1 netstat命令详解
netstat是查看网络连接状态的瑞士军刀,可以显示各种网络相关信息。最常用的几个组合:
查看所有活动连接:
code复制$ netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp6 0 0 :::80 :::* LISTEN 5678/nginx
udp 0 0 0.0.0.0:68 0.0.0.0:* 91011/dhclient
参数说明:
- -t 显示TCP连接
- -u 显示UDP连接
- -l 仅显示监听端口
- -n 以数字形式显示地址和端口
- -p 显示进程信息
查看路由表:
code复制$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt 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
3.2 ss命令的高效替代
ss命令是netstat的现代替代品,来自iproute2套件,速度更快,功能更强大。基本用法与netstat类似:
code复制$ ss -tulnp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:68 *:* users:(("dhclient",pid=91011,fd=6))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 128 :::80 :::* users:(("nginx",pid=5678,fd=6)))
ss命令特别适合查看大量连接时的状态,因为它比netstat处理得更快。此外,ss提供了更详细的连接状态信息:
code复制$ ss -o state established '( dport = :http or sport = :http )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 192.168.1.100:57432 203.0.113.45:http timer:(keepalive,4.452ms,0)
4. 高级网络诊断工具
4.1 ethtool查看物理连接状态
当怀疑网线或物理层有问题时,ethtool是检查网卡物理状态的最佳工具:
code复制$ sudo ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: on (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
关键信息:
- Link detected: yes 表示物理连接正常
- Speed和Duplex显示当前协商的速率和双工模式
- Auto-negotiation显示是否启用自动协商
4.2 mtr实时路由跟踪
mtr结合了traceroute和ping的功能,可以实时显示到目标主机的路由情况和网络质量:
code复制$ mtr -n 8.8.8.8
Start: 2023-04-01T10:00:00+0800
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 1.2 1.5 1.1 2.3 0.4
2.|-- 10.0.0.1 0.0% 10 5.6 6.2 5.1 8.9 1.2
3.|-- 203.0.113.45 0.0% 10 15.3 16.7 15.1 20.3 1.8
4.|-- 72.14.194.25 0.0% 10 18.9 19.8 18.5 22.1 1.1
5.|-- 8.8.8.8 0.0% 10 20.1 21.3 19.8 25.6 1.9
输出中可以看到每一跳的丢包率(Loss%)和延迟(Last/Avg/Best/Wrst),这对诊断网络延迟和丢包问题非常有帮助。
5. 网络连接状态监控实践
5.1 持续监控网络接口
使用watch命令可以持续监控网络状态变化,这对诊断间歇性网络问题很有帮助:
code复制$ watch -n 1 "ip addr show eth0; echo; ip route show; echo; ping -c 1 8.8.8.8"
这个命令会每秒刷新一次,显示:
- 接口状态和配置
- 当前路由表
- 到8.8.8.8的ping测试结果
5.2 使用tcpdump进行包捕获
当需要深入分析网络问题时,tcpdump是最强大的工具之一。基本用法:
捕获所有经过eth0的HTTP流量:
code复制$ sudo tcpdump -i eth0 -n port 80 -w http.pcap
捕获与特定主机的所有通信:
code复制$ sudo tcpdump -i eth0 -n host 192.168.1.100
捕获TCP三次握手过程:
code复制$ sudo tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
提示:tcpdump输出可能很详细,建议使用-w保存到文件,然后用Wireshark等工具分析。
6. 常见网络问题排查指南
6.1 网络接口未激活
症状:ifconfig或ip addr show中看不到预期的接口
解决方法:
- 检查接口是否存在:
ip link show - 激活接口:
sudo ip link set eth0 up - 检查驱动是否加载:
lsmod | grep eth - 检查硬件是否被识别:
lspci | grep -i ethernet
6.2 能ping通IP但无法解析域名
症状:ping 8.8.8.8成功但ping google.com失败
解决方法:
- 检查DNS配置:
cat /etc/resolv.conf - 测试DNS解析:
nslookup google.com或dig google.com - 检查防火墙是否拦截DNS请求:
sudo iptables -L -n - 临时修改DNS测试:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
6.3 连接被拒绝(Connection refused)
症状:telnet或nc连接时收到"Connection refused"
解决方法:
- 检查服务是否在运行:
sudo systemctl status nginx - 检查服务是否监听正确端口:
sudo ss -tulnp | grep :80 - 检查本地防火墙规则:
sudo iptables -L -n - 检查应用层配置(如nginx的listen指令)
6.4 网络连接间歇性中断
症状:网络时通时断,特别是无线网络
解决方法:
- 检查物理连接状态:
sudo ethtool eth0 - 检查系统日志:
journalctl -f或dmesg -w - 更换网线或尝试不同网络端口
- 对于无线网络,检查信号强度:
iwconfig wlan0 - 检查是否有IP地址冲突
7. 网络性能调优技巧
7.1 TCP参数调优
查看当前TCP参数:
code复制$ sysctl -a | grep tcp
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_timestamps = 1
常用调优参数(添加到/etc/sysctl.conf):
code复制net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
应用修改:sudo sysctl -p
7.2 中断亲和性设置
对于高流量服务器,设置中断亲和性可以提高网络性能:
- 找出网络接口的中断号:
code复制$ grep eth0 /proc/interrupts
- 设置中断处理CPU:
code复制$ echo 2 > /proc/irq/123/smp_affinity
- 对于多队列网卡,可以设置不同的队列到不同的CPU:
code复制$ ethtool -L eth0 combined 4
$ for i in {0..3}; do echo $(($i+1)) > /proc/irq/$((123+i))/smp_affinity; done
7.3 网络缓冲区调整
根据应用需求调整socket缓冲区大小:
code复制$ sysctl -w net.core.rmem_default=262144
$ sysctl -w net.core.wmem_default=262144
$ sysctl -w net.core.rmem_max=16777216
$ sysctl -w net.core.wmem_max=16777216
对于特定应用,也可以在代码中设置:
c复制int sock, rcvbuf = 1024*1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf));
8. 容器环境网络诊断
8.1 Docker容器网络检查
查看Docker网络配置:
code复制$ docker network ls
$ docker inspect <container_id> | grep -i network
进入容器检查网络:
code复制$ docker exec -it <container_id> ip addr
$ docker exec -it <container_id> ping 8.8.8.8
8.2 Kubernetes Pod网络诊断
检查Pod网络状态:
code复制$ kubectl get pods -o wide
$ kubectl describe pod <pod_name>
进入Pod诊断:
code复制$ kubectl exec -it <pod_name> -- ip addr
$ kubectl exec -it <pod_name> -- ping <service_name>
检查Service和Endpoint:
code复制$ kubectl get svc,ep
$ kubectl describe svc <service_name>
8.3 容器网络常见问题
-
容器无法访问外部网络:
- 检查主机iptables规则
- 检查Docker/CNI网络插件配置
- 验证主机路由表
-
容器间无法通信:
- 检查是否在同一网络
- 检查防火墙规则
- 验证DNS解析
-
端口映射不工作:
- 检查-p参数是否正确
- 验证主机端口是否被占用
- 检查安全组/防火墙设置
9. 无线网络特殊诊断
9.1 无线接口状态检查
使用iwconfig查看无线接口状态:
code复制$ iwconfig wlan0
wlan0 IEEE 802.11 ESSID:"MyWiFi"
Mode:Managed Frequency:2.437 GHz Access Point: 00:11:22:33:44:55
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=70/70 Signal level=-40 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
关键指标:
- Link Quality/Signal level:信号强度
- Tx excessive retries:重传次数,高值表示信号问题
- Bit Rate:当前连接速率
9.2 无线网络扫描
扫描可用无线网络:
code复制$ sudo iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 00:11:22:33:44:55
ESSID:"MyWiFi"
Protocol:IEEE 802.11bgn
Mode:Master
Frequency:2.437 GHz (Channel 6)
Encryption key:on
Bit Rates:54 Mb/s
Extra:rsn_ie=30140100000fac040100000fac040100000fac020000
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
Quality=48/70 Signal level=-62 dBm
Extra:fm=0003
9.3 无线网络连接问题排查
常见问题及解决方法:
-
无法扫描到无线网络:
- 检查无线硬件开关
- 验证驱动是否加载:
lsmod | grep iwl - 检查RFKill状态:
rfkill list
-
连接频繁断开:
- 尝试固定信道而非自动选择
- 调整电源管理设置:
iwconfig wlan0 power off - 检查是否有信号干扰
-
连接速度慢:
- 尝试使用5GHz频段
- 检查是否使用了较旧的加密方式(如WEP)
- 调整MTU大小:
sudo ifconfig wlan0 mtu 1400
10. 网络安全状态检查
10.1 防火墙状态检查
查看iptables规则:
code复制$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1234 98765 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
56 4321 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
查看nftables规则:
code复制$ sudo nft list ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
ct state established,related accept
iif "lo" accept
ip protocol icmp accept
tcp dport { ssh, http, https } accept
drop
}
}
10.2 开放端口检查
使用nmap扫描本地开放端口:
code复制$ sudo nmap -sS -p- 127.0.0.1
Starting Nmap 7.80 ( https://nmap.org ) at 2023-04-01 10:00 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Not shown: 65532 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
10.3 异常连接检查
检查异常外连:
code复制$ sudo netstat -tunap | grep ESTABLISHED
tcp 0 0 192.168.1.100:54322 203.0.113.45:443 ESTABLISHED 1234/curl
检查DNS查询:
code复制$ sudo tcpdump -i any -n port 53
10:00:00.123456 IP 192.168.1.100.43210 > 8.8.8.8.53: 12345+ A? google.com. (28)
11. 网络连接日志分析
11.1 系统日志查看
查看网络相关系统日志:
code复制$ journalctl -u NetworkManager --since "1 hour ago"
$ journalctl -u systemd-networkd --since "1 hour ago"
$ dmesg | grep -i eth0
11.2 连接跟踪日志
启用conntrack日志:
code复制$ sudo iptables -I INPUT -j LOG --log-prefix "INPUT: "
$ sudo tail -f /var/log/kern.log
查看现有连接跟踪:
code复制$ sudo conntrack -L
tcp 6 431999 ESTABLISHED src=192.168.1.100 dst=203.0.113.45 sport=54322 dport=443 src=203.0.113.45 dst=192.168.1.100 sport=443 dport=54322 [ASSURED] mark=0 use=1
11.3 流量统计
使用vnstat查看接口流量统计:
code复制$ vnstat -i eth0
Database updated: 2023-04-01 10:00:00
eth0 since 2023-03-01
rx: 12.34 GiB tx: 5.67 GiB total: 18.01 GiB
monthly
rx | tx | total | avg. rate
----------------------+-------------+-------------+---------------
Mar '23 12.34 GiB| 5.67 GiB| 18.01 GiB| 0.05 Mbit/s
----------------------+-------------+-------------+---------------
estimated 14 GiB| 6 GiB| 20 GiB|
12. 网络配置持久化
12.1 传统ifconfig配置持久化
在Debian系系统中,编辑/etc/network/interfaces:
code复制auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
在RHEL系系统中,编辑/etc/sysconfig/network-scripts/ifcfg-eth0:
code复制DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
12.2 新式networkd配置
使用systemd-networkd的配置文件(如/etc/systemd/network/20-wired.network):
code复制[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
12.3 NetworkManager配置
使用nmcli进行持久化配置:
code复制$ sudo nmcli con add con-name "MyConnection" ifname eth0 type ethernet ip4 192.168.1.100/24 gw4 192.168.1.1
$ sudo nmcli con mod "MyConnection" ipv4.dns "8.8.8.8 8.8.4.4"
$ sudo nmcli con up "MyConnection"
13. 网络连接状态自动化监控
13.1 使用Prometheus监控网络
配置node_exporter收集网络指标,Prometheus配置示例:
yaml复制scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
Grafana仪表板可以监控:
- 网络接口流量
- TCP连接状态
- 网络错误计数
- 带宽利用率
13.2 自定义监控脚本
示例脚本监控网络连通性:
bash复制#!/bin/bash
TARGETS=("8.8.8.8" "192.168.1.1" "google.com")
LOG_FILE="/var/log/network_monitor.log"
for target in "${TARGETS[@]}"; do
if ! ping -c 1 -W 1 "$target" &> /dev/null; then
echo "$(date): $target unreachable" >> "$LOG_FILE"
fi
done
设置cron定时执行:
code复制* * * * * /path/to/network_monitor.sh
13.3 使用Smokeping监控网络质量
Smokeping配置示例:
conf复制*** Targets ***
probe = FPing
+ MyNetwork
menu = My Network
title = Network Latency
++ GoogleDNS
host = 8.8.8.8
可以监控:
- 网络延迟
- 丢包率
- 抖动情况
14. 网络连接状态可视化
14.1 使用iftop查看实时流量
按连接查看实时带宽使用:
code复制$ sudo iftop -i eth0 -n
界面显示:
code复制 12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb
└───────────────────────┴────────────────┴────────────────┴────────────────┴────────────────
192.168.1.100:ssh => 192.168.1.1:56789 2.5Kb 2.5Kb 2.5Kb
<= 1.2Kb 1.2Kb 1.2Kb
192.168.1.100:http => 203.0.113.45:80 10Kb 10Kb 10Kb
<= 50Kb 50Kb 50Kb
14.2 使用nload查看接口流量
简洁的接口流量显示:
code复制$ nload eth0
Device eth0 [192.168.1.100]
=====================================================================================
Incoming: Curr: 1.23 Mbit/s Avg: 1.05 Mbit/s Min: 0.00 Mbit/s Max: 2.34 Mbit/s Ttl: 1.23 GByte
Outgoing: Curr: 456.78 kbit/s Avg: 432.10 kbit/s Min: 0.00 kbit/s Max: 1.23 Mbit/s Ttl: 456.78 MByte
14.3 使用vnstati生成流量报告
生成每日流量图:
code复制$ vnstati -d -i eth0 -o /var/www/html/eth0_daily.png
生成月度流量摘要:
code复制$ vnstati -m -i eth0 -o /var/www/html/eth0_monthly.png
15. 网络连接状态扩展工具
15.1 使用iperf3测试带宽
服务器端:
code复制$ iperf3 -s
客户端测试:
code复制$ iperf3 -c server_ip -t 30 -i 5
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.00 sec 586 MBytes 983 Mbits/sec 0 sender
[ 5] 0.00-5.00 sec 585 MBytes 981 Mbits/sec receiver
15.2 使用nethogs按进程查看流量
查看每个进程的网络使用:
code复制$ sudo nethogs eth0
NetHogs version 0.8.5
PID USER PROGRAM DEV SENT RECEIVED
1234 root sshd eth0 0.053 0.107 KB/sec
5678 www-data nginx eth0 1.234 5.678 KB/sec
15.3 使用bmon查看详细统计
交互式网络监控:
code复制$ bmon -p eth0
[RX: 1.23 Mbit/s] [TX: 456.78 kbit/s] [Rate: 10.00 Hz]
Interface RX bps RX pps TX bps TX pps RX Rate TX Rate
eth0 1.23M 123.4 456.78k 45.6 1.23M 456.78k
16. 网络连接状态脚本示例
16.1 网络连通性检查脚本
bash复制#!/bin/bash
# 检查网络接口状态
check_interface() {
local iface=$1
if ! ip link show "$iface" | grep -q "state UP"; then
echo "接口 $iface 未启用"
return 1
fi
return 0
}
# 检查默认网关
check_gateway() {
if ! ip route | grep -q "^default"; then
echo "未设置默认网关"
return 1
fi
return 0
}
# 检查DNS解析
check_dns() {
if ! nslookup google.com &> /dev/null; then
echo "DNS解析失败"
return 1
fi
return 0
}
# 检查外网连通性
check_internet() {
if ! ping -c 1 -W 1 8.8.8.8 &> /dev/null; then
echo "无法访问外网"
return 1
fi
return 0
}
# 主检查流程
main() {
local iface=${1:-eth0}
echo "检查网络接口 $iface 状态..."
check_interface "$iface" || return 1
echo "检查默认网关..."
check_gateway || return 1
echo "检查DNS解析..."
check_dns || return 1
echo "检查外网连通性..."
check_internet || return 1
echo "网络连接状态正常"
return 0
}
main "$@"
16.2 网络连接监控脚本
bash复制#!/bin/bash
# 监控网络连接状态并记录变化
LOG_FILE="/var/log/network_status.log"
INTERFACE="eth0"
CHECK_INTERVAL=60
monitor_network() {
while true; do
local current_gw=$(ip route | awk '/^default/ {print $3}')
local current_ip=$(ip -4 addr show "$INTERFACE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
local current_dns=$(grep nameserver /etc/resolv.conf | awk '{print $2}' | tr '\n' ' ')
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
local status_line="$timestamp | IP: $current_ip | GW: $current_gw | DNS: $current_dns"
if ! ping -c 1 -W 1 8.8.8.8 &> /dev/null; then
status_line="$status_line | 外网: 断开"
else
status_line="$status_line | 外网: 连通"
fi
echo "$status_line" >> "$LOG_FILE"
sleep "$CHECK_INTERVAL"
done
}
monitor_network
17. 网络连接状态最佳实践
17.1 定期网络健康检查
建议定期执行以下检查:
- 接口状态和错误计数:
ip -s link show eth0 - ARP表状态:
ip neigh show - 路由表一致性:
ip route show - DNS响应时间:
dig google.com | grep "Query time" - 关键端口可用性:
nc -zv example.com 443
17.2 网络配置文档化
维护网络配置文档应包括:
- 接口配置(IP、子网、网关)
- DNS服务器列表
- 静态路由表
- 防火墙规则摘要
- 关键网络设备信息(交换机、路由器IP)
17.3 变更管理流程
网络配置变更时应遵循:
- 变更前备份当前配置:
ip addr save > network_backup.txt - 记录变更原因和预期影响
- 在非业务高峰时段实施变更
- 变更后验证基本功能
- 准备回滚方案
18. 网络连接状态进阶主题
18.1 网络命名空间隔离
创建和使用网络命名空间:
code复制$ sudo ip netns add testns
$ sudo ip netns exec testns ip link set lo up
$ sudo ip link add veth0 type veth peer name veth1
$ sudo ip link set veth1 netns testns
$ sudo ip netns exec testns ip addr add 192.168.100.1/24 dev veth1
$ sudo ip netns exec testns ip link set veth1 up
18.2 虚拟网络设备
创建桥接设备:
code复制$ sudo ip link add br0 type bridge
$ sudo ip link set eth0 master br0
$ sudo ip link set br0 up
创建VLAN接口:
code复制$ sudo ip link add link eth0 name eth0.100 type vlan id 100
$ sudo ip addr add 192.168.100.1/24 dev eth0.100
$ sudo ip link set eth0.100 up
18.3 网络策略路由
设置多路由表:
code复制$ echo "100 custom" >> /etc/iproute2/rt_tables
$ ip rule add from 192.168.1.100 lookup custom
$ ip route add default via 192.168.1.254 dev eth0 table custom
19. 网络连接状态参考速查表
19.1 常用命令速查
| 功能 | 命令 |
|---|---|
| 接口状态 | ip addr show 或 ifconfig |
| 路由表 | ip route show 或 netstat -rn |
| 活动连接 | ss -tulnp 或 netstat -tulnp |
| DNS测试 | dig google.com 或 nslookup google.com |
| 连通性测试 | ping 8.8.8.8 或 traceroute google.com |
| 带宽测试 | iperf3 -c server_ip |
| 实时流量 | `iftop |
