Linux 网络管理
Linux 网络管理
目录
- 查看本机网络:ip addr / ip route / hostname -I
- 网卡状态:ip link / ethtool
- 配置网络:nmcli / nmtui
- 查看端口与连接:ss / netstat
- 常见端口速查
- 连通性排障四件套:ping / traceroute / ss / curl
- DNS 排错:dig / nslookup / host
- 抓包分析:tcpdump
- 实战排障:服务连不上?运维排障四步法(踩坑文)
- 总结与练习
一、查看本机网络:ip addr / ip route / hostname -I
1.1 ip addr —— 查看 IP 地址与掩码
ip addr(或 ip a)查看所有网卡的 IP 地址、掩码、MAC 等信息。
ip addr # 查看所有网卡地址
ip addr show eth0 # 只查看 eth0
ip -4 addr # 只看 IPv4
输出示例:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86394sec preferred_lft 86394sec
inet6 fe80::5054:ff:fe12:3456/64 scope link
读懂关键信息:
| 项 | 含义 |
|---|---|
link/ether 52:54:00:... |
MAC 地址 |
inet 192.168.1.100/24 |
IPv4 地址 + 掩码(/24 = 255.255.255.0) |
/24 |
CIDR 前缀长度,表示网络位位数 |
inet6 fe80::.../64 |
IPv6 地址 |
UP |
网卡已启用 |
mtu 1500 |
最大传输单元(默认 1500 字节) |
掩码速记(CIDR 与点分十进制对照):
| CIDR | 掩码 | 可用 IP 数(该网段) |
|---|---|---|
| /24 | 255.255.255.0 | 254 |
| /16 | 255.255.0.0 | 65534 |
| /8 | 255.0.0.0 | 16777214 |
1.2 ip route —— 查看路由表(网关)
ip route(或 ip r)查看路由表,决定数据包发往哪个网关。
ip route
# 输出示例:
# default via 192.168.1.1 dev eth0
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
读懂路由:
default via 192.168.1.1:默认网关(默认路由),发往其他网段的数据走 192.168.1.1。192.168.1.0/24 dev eth0:本网段直连路由(同一网段不需网关)。default:没有其他路由匹配时走这条(兜底)。
判断本机所在网段:IP 与掩码按位与即网络地址。例如 192.168.1.100/24 → 网段 192.168.1.0,广播 192.168.1.255。
1.3 hostname -I —— 快速查看本机 IP
hostname -I # 列出本机所有 IP 地址(不含回环)
hostname # 主机名
hostname -i # 主机名对应的 IP
hostname -I适合快速看"本机是什么 IP",ip addr看详细信息,ip route看网关。
参考:
man 8 ip、菜鸟教程 - Linux 网络配置
二、网卡状态:ip link / ethtool
2.1 ip link —— 网卡启停与状态
ip link # 查看所有网卡状态
ip link show eth0 # 查看指定网卡
# 临时启停网卡(重启失效)
sudo ip link set eth0 up # 启用网卡
sudo ip link set eth0 down # 停用网卡
UP/DOWN表示网卡是否启用。LOWER_UP表示物理链路已连接(网线/交换机)。- 若网卡显示
DOWN或没有LOWER_UP,说明物理连接或配置有问题。
2.2 ethtool —— 查看网卡速率等硬件信息
ethtool 查看网卡硬件参数(速率、双工、驱动等),需 root。
sudo ethtool eth0 # 查看网卡速率/双工/链路状态
# 输出中 Speed: 1000Mb/s 表示千兆,Link detected: yes 表示已连
sudo ethtool -i eth0 # 查看网卡驱动信息
sudo ethtool -S eth0 # 查看网卡统计(收发包数、错误)
Speed:网卡协商速率(如 100Mb/s、1000Mb/s)。Link detected: yes/no:物理链路是否连通。- 网速异常时(如 1000 变 100),用 ethtool 检查速率协商。
参考:
man 8 ip、man 8 ethtool
三、配置网络:nmcli / nmtui
Rocky/RHEL 用 NetworkManager 管理网络,命令行工具为 nmcli(文本界面 nmtui)。
3.1 nmcli 查看网络状态
nmcli device status # 查看网卡设备状态
nmcli connection show # 查看所有连接(配置)
nmcli connection show eth0 # 查看某连接详情
nmcli device show eth0 # 查看设备详情
3.2 nmcli 配置静态 IP(持久化,重启不丢)
# 给 eth0 连接配置静态 IP
sudo nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
# 生效(应用配置)
sudo nmcli connection up eth0
# 改为 DHCP(自动获取)
sudo nmcli connection modify eth0 ipv4.method auto
sudo nmcli connection up eth0
# 查看生效后的 IP
ip addr show eth0
3.3 临时 vs 持久化(区别)
| 方式 | 命令 | 是否重启保留 |
|---|---|---|
| 临时 | ip addr add 192.168.1.100/24 dev eth0 |
否,重启丢失 |
| 临时 | ip route add default via 1.1.1.1 |
否,重启丢失 |
| 持久化 | nmcli connection modify ... |
是,重启保留 |
| 持久化 | 编辑 /etc/NetworkManager/system-connections/* |
是 |
注意:
ip命令的改动是临时的,重启丢失;要让配置"重启不丢",必须用nmcli修改连接,或直接改网络配置文件。
3.4 nmtui —— 文本图形界面
sudo nmtui # 打开文本图形界面
- 通过菜单"Edit a connection"配置 IP、网关、DNS;"Activate a connection"启用。
- 适合不熟悉命令行的人,效果与 nmcli 相同(都持久化)。
3.5 网络配置文件
- NetworkManager 连接文件:
/etc/NetworkManager/system-connections/(keyfile 格式,RHEL 9 默认)。 - 旧式 ifcfg:
/etc/sysconfig/network-scripts/(RHEL 7/8 早期,已弃用)。
ls /etc/NetworkManager/system-connections/
cat /etc/NetworkManager/system-connections/eth0.nmconnection
改配置文件后重启网络:
sudo nmcli connection reload或sudo systemctl restart NetworkManager。
参考:
man 8 nmcli、man 1 nmtui、Rocky Linux - 网络配置、菜鸟教程 - nmcli
四、查看端口与连接:ss / netstat
4.1 ss —— 现代套接字查看工具(推荐)
ss(socket statistics)是查看网络连接与监听端口的现代工具,比 netstat 更快更准。
ss -tulnp # ★查看所有监听端口(-t tcp -u udp -l listening -n 数字 -p 进程)
ss -tulnp | grep :80 # 查找监听 80 端口的服务
ss -tn # 查看所有 TCP 连接(含 ESTABLISHED 等状态)
ss -tn state established # 只看 ESTABLISHED 连接
ss -un # 查看 UDP 连接
ss -tulnp -p # 显示占用端口的进程
ss -s # 查看套接字统计汇总
-tulnp 各参数:-t TCP、-u UDP、-l 只显示监听(listening)、-n 显示数字端口不解析服务名、-p 显示进程。
输出列:State(状态)、Local Address:Port(本地)、Peer Address:Port(对端)、Process(进程)。
4.2 netstat —— 传统工具
netstat -tulnp # 查看监听端口(与 ss 等价)
netstat -anp # 查看所有连接
netstat -r # 查看路由表
netstat -i # 查看网卡统计
netstat用法与 ss 类似,功能重叠;现代系统推荐ss(netstat 在新系统可能未装)。
4.3 识别监听端口、ESTABLISHED、TIME_WAIT(TCP 状态)
TCP 连接有多种状态,用 ss -tn 或 ss -tn state <状态> 查看:
| 状态 | 含义 |
|---|---|
| LISTEN | 服务在监听端口,等待连接(正常) |
| ESTABLISHED | 已建立的连接(正常通信中) |
| TIME_WAIT | 连接已关闭,等待超时(大量出现属正常,是主动关闭方进入的状态) |
| SYN_SENT | 发出连接请求等待应答(若一直停留,可能对端不通) |
| SYN_RECV | 收到连接请求 |
| FIN_WAIT / CLOSE_WAIT | 连接关闭过程中的状态 |
# 查看监听端口(服务是否在监听)
ss -tlnp | grep :3306
# 查看到某服务器的连接数
ss -tn state established | wc -l
# 统计各种 TCP 状态数量
ss -tan | awk '{print $1}' | sort | uniq -c
- 服务没通先看 LISTEN:
ss -tlnp看端口是否有进程监听;没监听说明服务没起来。 - TIME_WAIT 多:通常是高并发短连接的正常现象,一般不慌。
参考:
man 8 ss、man 8 netstat、菜鸟教程 - Linux ss/netstat
五、常见端口速查
牢记常用服务的默认端口,排障时能快速判断。
| 端口 | 协议 | 服务 |
|---|---|---|
| 22 | TCP | SSH(远程登录) |
| 80 | TCP | HTTP(网页) |
| 443 | TCP | HTTPS(加密网页) |
| 21 | TCP | FTP(文件传输) |
| 25 | TCP | SMTP(发邮件) |
| 110 / 143 | TCP | POP3 / IMAP(收邮件) |
| 53 | TCP/UDP | DNS(域名解析) |
| 3306 | TCP | MySQL / MariaDB 数据库 |
| 5432 | TCP | PostgreSQL 数据库 |
| 6379 | TCP | Redis 缓存 |
| 27017 | TCP | MongoDB |
| 8080 | TCP | HTTP 备用端口(Tomcat、Docker 映射常用) |
| 9000 | TCP | 常用应用端口(如 PHP-FPM、部分容器服务) |
| 2375 / 2376 | TCP | Docker API(2376 为 TLS) |
| 3000 | TCP | 常用开发/管理端口(如 Grafana、Node 应用) |
判断本机端口占用:
ss -tlnp | grep -E ':(22|80|443|3306|6379)' # 一次查多个端口
sudo lsof -i :3306 # 查 3306 端口被谁占用
端口可在服务配置里修改(如 nginx.conf 的 listen、MySQL 的 port),修改后记得放行防火墙。
六、连通性排障四件套:ping / traceroute / ss / curl
排查"网络不通/服务连不上"时,按这四个工具层层递进:
6.1 ping —— 通不通(网络层)
ping -c 4 192.168.1.1 # 发 4 个包测试到网关
ping -c 4 baidu.com # 测试到外网
ping -c 4 example.com # 测试到目标域名
ping通 → 网络层可达(IP 层面能到)。ping不通 → 本机网卡/网关/路由问题,或目标禁 ping、防火墙拦截。
6.2 traceroute —— 哪一跳断了(路由追踪)
traceroute -n 8.8.8.8 # 追踪到目标的每一跳路由
traceroute -n -T -p 80 baidu.com # 用 TCP 追踪(更接近真实)
- 显示数据包经过的每一跳(路由器)IP 和延迟。
- 若某一段之后全部
*超时,说明断在这一跳(目标或中间节点)。 - 用于定位"是网络中间断了,还是目标主机问题"。
6.3 ss —— 端口通不通(端口/服务层)
# 本机看:目标服务端口是否在监听
ss -tlnp | grep :80
# 从远程看:能否连上目标端口
nc -vz 192.168.1.50 80 # nc 测试端口连通(有 nc 时)
timeout 3 bash -c "</dev/tcp/192.168.1.50/80" && echo open || echo closed
ss看本机哪些端口在监听。- 用
nc(netcat)或/dev/tcp测远程端口通不通。
6.4 curl —— 服务通不通(应用层)
curl -v http://example.com/ # 访问网页并显示详细过程
curl -I http://example.com/ # 只取响应头
curl -o /dev/null -w "%{http_code}\n" http://example.com/ # 只看状态码
curl -v http://192.168.1.50:8080/ # 测试非标准端口
curl通且返回 HTTP 状态码 → 应用层服务正常。- 返回连接超时/拒绝 → 服务或端口问题。
四件套总结:
| 工具 | 测什么 | 定位 |
|---|---|---|
| ping | 网络层(IP) | 网络通不通 |
| traceroute | 路由路径 | 断在哪一跳 |
| ss / nc | 端口 | 端口是否监听/可达 |
| curl | 应用层 | 服务是否正常响应 |
参考:
man 8 ping、man 8 traceroute、man 1 curl、man 8 ss
七、DNS 排错:dig / nslookup / host
域名解析(把域名换成 IP)出问题时,用 DNS 工具排查。三者的区别:dig 最详细、nslookup 常用、host 最简洁。
7.1 dig —— 最详细的 DNS 查询
dig example.com # 查询 A 记录(IP)
dig @8.8.8.8 example.com # 指定 DNS 服务器查询
dig example.com A # 显式查询 A 记录
dig example.com MX # 查询 MX(邮件)记录
dig example.com +short # 只显示简洁结果
dig -x 192.168.1.100 # 反向解析(IP 转域名)
读懂 dig 输出:主要看 ANSWER SECTION(答案区),里面有解析到的 IP;status: NOERROR 表示查询成功,NXDOMAIN 表示域名不存在。
7.2 nslookup —— 传统查询
nslookup example.com
nslookup example.com 8.8.8.8 # 指定 DNS
nslookup -type=mx example.com # 查询 MX 记录
7.3 host —— 简洁查询
host example.com # 快速查 A 记录
host -t MX example.com # 查 MX
host 8.8.8.8 # 反向解析
7.4 DNS 排错流程
# 1. 看本机 DNS 配置
cat /etc/resolv.conf # 本机使用的 DNS 服务器
nmcli dev show eth0 | grep DNS
# 2. 用 dig 直接问本机 DNS
dig example.com
# 3. 换公共 DNS 对比(排除本机 DNS 服务器故障)
dig @8.8.8.8 example.com
dig @114.114.114.114 example.com
# 4. 测试能否解析到 IP
getent hosts example.com # 查看系统解析结果
- 若
dig @8.8.8.8能解析而本机 DNS 不行 → 本机 DNS 服务器或配置有问题。 - 若能解析到 IP 但访问不了 → 问题在网络/端口/服务,不是 DNS。
参考:
man 1 dig、man 1 nslookup、man 1 host
八、抓包分析:tcpdump
tcpdump 抓取网卡上的数据包,用于**深入分析"端口通但服务不通"**等疑难问题(看数据包是否真的来回)。需 root,未装可用 dnf install tcpdump。
8.1 基本用法
sudo tcpdump -i eth0 # 抓取 eth0 所有包
sudo tcpdump -i any # 抓所有网卡
sudo tcpdump -nn -i eth0 # -nn 不解析端口/主机名(更快更清晰)
sudo tcpdump -c 10 # 只抓 10 个包就停
sudo tcpdump -w capture.pcap # 保存到文件(-w write)
sudo tcpdump -r capture.pcap # 读取文件分析(-r read)
8.2 按端口 / 主机过滤
# 抓取到目标 80 端口的流量
sudo tcpdump -nn -i any port 80
# 抓取与某主机的通信
sudo tcpdump -nn -i any host 192.168.1.50
# 抓取特定源/目标
sudo tcpdump -nn -i any src 192.168.1.50
sudo tcpdump -nn -i any dst 192.168.1.50
# 组合:某主机 + 某端口
sudo tcpdump -nn -i any host 192.168.1.50 and port 8080
# 只抓 TCP(含 TCP 标志)
sudo tcpdump -nn -i any tcp port 443
8.3 配合排查"端口通但服务不通"
# 在服务端抓包,看是否收到请求
sudo tcpdump -nn -i any port 8080
# 客户端连过去,观察抓到的包
curl -v http://服务端:8080/
- 若服务端收到 SYN 但没回 SYN-ACK:可能是服务没监听该端口、防火墙丢包、或半连接队列满。
- 若只有 SYN,没有响应:多半是防火墙(firewalld/iptables)拦截或服务未启动。
- 若有完整握手但应用无响应:是应用层问题,与网络无关。
常见排查组合:
# 看防火墙是否拦截(Red Hat 系)
sudo firewall-cmd --list-all
# 抓包看是否有 SYN-ACK 回来
sudo tcpdump -nn -i any tcp port 8080
参考:
man 8 tcpdump、菜鸟教程 - Linux tcpdump
九、实战排障:服务连不上?运维排障四步法
别人连不上你的服务,或你连不上别人的服务。按下面四步,从"网络通不通"一路排查到"应用正不正常"。
9.1 第一步:先确认"网通不通"(ping)
ping -c 4 目标IP # 通不通
ping -c 4 网关IP # 本机到网关
hostname -I # 确认本机 IP 对不对
ip route # 确认网关对不对
- 本机 ping 网关不通 → 网卡/网关配置问题。
- 能到网关但 ping 不通目标 → 可能是目标禁 ping 或中间网络问题。
9.2 第二步:确认"路由通不通"(traceroute)
traceroute -n -T -p 8080 目标IP # TCP 追踪,模拟真实访问
- 若在某一段后全部超时,断点就在那一跳。
- 能追踪到目标 IP,说明路由层没问题,进入下一步。
9.3 第三步:确认"端口通不通"(ss / nc)
# 服务端:端口是否在监听
ss -tlnp | grep :8080
# 客户端:端口是否可达
nc -vz 目标IP 8080
timeout 3 bash -c "</dev/tcp/目标IP/8080" && echo open || echo closed
# 若服务端没监听,看服务状态和防火墙
sudo systemctl status 服务名
sudo firewall-cmd --list-all | grep 8080
- 服务端端口没监听 → 服务没起来,先
systemctl start/ 看服务日志。 - 端口监听中但连不上 → 多半是防火墙拦截,检查 firewalld 是否放行该端口。
9.4 第四步:确认"服务通不通"(curl / 抓包)
# 本机测试服务是否正常
curl -v http://localhost:8080/
# 远程测试
curl -v http://目标IP:8080/
# 若本机通、远程不通:大概率是防火墙或监听地址绑定问题
ss -tlnp | grep :8080 # 看监听地址是 0.0.0.0 还是 127.0.0.1
# 疑难时抓包确认数据包是否真的来回
sudo tcpdump -nn -i any port 8080
- 本机 curl 通、远程不通:常见原因是——防火墙未放行、服务只监听在 127.0.0.1(只允许本机)、或监听在错误网卡。
ss -tlnp看监听地址:0.0.0.0:8080表示所有地址,127.0.0.1:8080表示仅本机。- 仍然诡异就抓包:看 SYN 是否到达、SYN-ACK 是否返回。
9.5 踩坑小结
| 现象 | 原因定位 | 处理 |
|---|---|---|
| ping 不通 | 网卡/网关/路由 | 检查 ip addr、ip route、网线 |
| ping 通、端口连不上 | 服务没监听 / 防火墙 | ss -tlnp、systemctl、firewall-cmd |
| 本机通、远程不通 | 防火墙 / 监听 127.0.0.1 | 放行端口、改监听地址 |
| 端口通、应用无响应 | 应用本身问题 | curl、看应用日志 |
| 都能通但很怪 | 数据包异常 | tcpdump 抓包分析 |
一句话:连不上服务,先 ping 看网络 → traceroute 看路由 → ss/nc 看端口 → curl 看应用;最后用 tcpdump 抓包兜底。
十、总结与练习
10.1 核心速查
| 需求 | 命令 |
|---|---|
| 查看 IP | ip addr / hostname -I |
| 查看网关/路由 | ip route |
| 查看网卡状态 | ip link / ethtool eth0 |
| 配置网络(持久化) | nmcli connection modify eth0 ... |
| 查看监听端口 | ss -tulnp |
| 查看连接 | ss -tn |
| 测试通不通 | ping |
| 追踪路由 | traceroute |
| 测端口 | nc -vz IP 端口 |
| 测服务 | curl -v http://IP:端口/ |
| DNS 查询 | dig / nslookup / host |
| 抓包 | tcpdump -nn -i any port 80 |
| 防火墙放行 | firewall-cmd --add-port=8080/tcp |
10.2 动手练习建议
# 1. 查看本机网络
ip addr; ip route; hostname -I
# 2. 查看监听端口
ss -tulnp
# 3. 连通性测试
ping -c 4 127.0.0.1
ping -c 4 网关IP
curl -v http://127.0.0.1/ # 本机 web 是否通
# 4. DNS 测试
dig baidu.com +short
nslookup baidu.com
# 5. 抓包练习
sudo tcpdump -nn -i any port 80 &
curl http://example.com/
sudo pkill tcpdump
# 6. 模拟"端口不通"排障
ss -tlnp | grep :12345 # 确认未监听
nc -vz 127.0.0.1 12345 # 应显示 closed
提示:网络排障练习请在虚拟机/隔离环境进行。抓包涉及数据,注意只在测试环境抓取。
参考资料
- man 手册:
man 8 ip、man 8 ss、man 8 netstat、man 8 nmcli、man 1 nmtui、man 8 ethtool、man 8 ping、man 8 traceroute、man 1 curl、man 1 dig、man 1 nslookup、man 1 host、man 8 tcpdump - Red Hat 官方文档:https://docs.redhat.com/
- Rocky Linux 官方文档 - 网络:https://docs.rockylinux.org/books/admin_guide/09-network/
- DigitalOcean - 网络排障:https://www.digitalocean.com/community/tutorials/network-troubleshooting
- 菜鸟教程 - Linux 网络配置与命令:https://www.runoob.com/linux/linux-system-network.html
