Linux 网络管理
Linux 网络管理
内容基于 man 手册(
man 8 ip、man 8 nmcli、man 8 ss、man 8 tcpdump、man 1 dig等)、Red Hat 官方文档与权威资料整理 涉及命令中,ip、ss、hostname、ping、traceroute、curl为系统自带;nmcli/nmtui来自 NetworkManager;netplan来自 Ubuntu 的 netplan.io 包;dig/nslookup/host来自 bind-utils 包;tcpdump需单独安装。
目录
- 查看本机网络:ip addr / ip route / hostname -I
- 网卡状态:ip link / ethtool
- 配置网络:nmcli / nmtui / netplan(Rocky 与 Ubuntu)
- 查看端口与连接: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 / netplan(Rocky 与 Ubuntu)
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
DNS 地址怎么选? 上面示例用了
8.8.8.8(Google 公共 DNS),但在国内它并不是好选择(见下文 7.5 节)。在国内配置 DNS 时,更推荐用阿里223.5.5.5、腾讯119.29.29.29或114.114.114.114,解析国内网站更快更稳。
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
3.6 Ubuntu / Debian 系配置:netplan
Ubuntu 18.04+ 用 netplan 管理网络:它把配置写在 YAML 文件(/etc/netplan/*.yaml)里,再交给后端的 networkd(服务器默认)或 NetworkManager(桌面版)生效。
- Ubuntu 服务器:默认 netplan + networkd(
nmcli不常用)。 - Ubuntu 桌面 / Debian 部分版本:可能用 NetworkManager,此时
nmcli/nmtui同样可用(和 Rocky 一样)。 - 一句话:服务器版记住
netplan,桌面版才用nmcli。
配置静态 IP(编辑 /etc/netplan/ 下的 .yaml 文件,文件名后缀带 .yaml):
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 223.5.5.5
- 119.29.29.29
配置 DHCP(自动获取):把 dhcp4 改为 true,删掉 addresses/routes/nameservers 即可。
network:
version: 2
ethernets:
eth0:
dhcp4: true
生效命令(改完 YAML 后):
ls /etc/netplan/ # 先看有哪些配置文件
sudo netplan try # ★先试 120 秒,断网会自动回滚(安全)
sudo netplan apply # 正式应用(持久化,重启不丢)
ip addr show eth0 # 查看生效后的 IP
建议用
netplan try而不是直接apply:若配置写错导致连不上,120 秒后自动回滚,不会把自己锁死在 SSH 外。
旧式 /etc/network/interfaces(老版 Debian / Ubuntu < 18.04):
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 223.5.5.5 119.29.29.29
# DHCP:把上面 inet static 换成 inet dhcp,并去掉下面三行
sudo systemctl restart networking # 老式接口配置生效
Rocky(nmcli)与 Ubuntu(netplan)对照:
| 功能 | Rocky / Red Hat | Ubuntu(netplan) |
|---|---|---|
| 配置文件 | /etc/NetworkManager/system-connections/ |
/etc/netplan/*.yaml |
| 配静态 IP | nmcli connection modify eth0 ipv4.addresses ... |
改 YAML addresses / routes |
| 配 DHCP | nmcli ... ipv4.method auto |
YAML dhcp4: true |
| 配 DNS | nmcli ... ipv4.dns 223.5.5.5 |
YAML nameservers |
| 应用配置 | nmcli connection up eth0 |
sudo netplan apply / try |
参考:
man 5 netplan、Ubuntu - Netplan、netplan 官方示例
四、查看端口与连接: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。
7.5 公共 DNS 选择:8.8.8.8 在国内还可用吗?
排障时常拿 8.8.8.8(Google 公共 DNS)当"标准答案"来对照。但在国内网络环境下,它并不是一个好选择:
- 能用但慢:
8.8.8.8服务器在境外,DNS 查询要走跨境链路。国内实测平均延迟常在 200~300ms 左右,且存在一定比例的查询超时/失败;高峰期还会丢包、超时。 - 解析国内网站变慢:通过
8.8.8.8解析国内域名,CDN 通常会把流量调度到海外节点,导致访问国内网站(如各类视频、云盘)反而更慢甚至失败。 - 可能受干扰:部分域名在境外 DNS 上可能被污染或劫持,返回错误结果。
- 定位:
8.8.8.8更适合作为备用或专门解析海外域名,国内日常上网不建议设为首选。
在国内,推荐使用以下公共 DNS作为主力(解析国内网站更快、更稳、更安全):
| 提供方 | IPv4 地址 | 加密支持 | 特点 |
|---|---|---|---|
| 阿里云 AliDNS | 223.5.5.5 / 223.6.6.6 |
DoH/DoT | 国内覆盖广、速度快,支持 DNSSEC 防劫持,综合推荐首选 |
| 腾讯 DNSPod | 119.29.29.29 |
DoH/DoT | 节点密集、国内外站点都较快,抗劫持强 |
| 114 DNS | 114.114.114.114 |
不支持加密 | 老牌稳定,另有 114.114.114.119 恶意网站拦截版 |
加密 DNS(DoH / DoT)端点(防运营商劫持、防止 DNS 被篡改):
- 阿里:DoH 用
dns.alidns.com,DoT 用dns.alidns.com:853(对应223.5.5.5)。 - 腾讯:DoH 用
doh.pub,DoT 用dot.pub:853(对应119.29.29.29)。
推荐配置组合:主用阿里 223.5.5.5,备用腾讯 119.29.29.29(或 114.114.114.114);需要防劫持时改用 DoH/DoT。
# 用国内公共 DNS 对比解析(排障时优先用它俩)
dig @223.5.5.5 example.com
dig @119.29.29.29 example.com
# 想验证某个域名在 8.8.8.8 与国内 DNS 下解析结果的差异
dig @8.8.8.8 baidu.com +short
dig @223.5.5.5 baidu.com +short
改完 DNS 记得清缓存:
sudo systemd-resolve --flush-caches(systemd 系统)或sudo killall -HUP dnsmasq(用 dnsmasq 时)。
参考:阿里云 PublicDNS 官方页面、DNSPod 官网、Red Hat 文档关于 DNS 配置说明。
八、抓包分析: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 |
| 配置网络(持久化,Rocky) | nmcli connection modify eth0 ... |
| 配置网络(持久化,Ubuntu) | 改 /etc/netplan/*.yaml + sudo netplan apply |
| 查看监听端口 | ss -tulnp |
| 查看连接 | ss -tn |
| 测试通不通 | ping |
| 追踪路由 | traceroute |
| 测端口 | nc -vz IP 端口 |
| 测服务 | curl -v http://IP:端口/ |
| DNS 查询 | dig / nslookup / host |
| 国内推荐公共 DNS | 223.5.5.5 / 119.29.29.29 / 114.114.114.114 |
| 抓包 | 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
- 阿里云公共 DNS(AliDNS):https://www.alidns.com/ 与 https://dns.alidns.com/
- 腾讯 DNSPod 公共 DNS:https://www.dnspod.cn/(DoH: doh.pub)
- Ubuntu / Netplan 网络配置:https://netplan.io/(`man 5 netplan`)
