Linux 网络管理

Administrator 3

Linux 网络管理


目录

  1. 查看本机网络:ip addr / ip route / hostname -I
  2. 网卡状态:ip link / ethtool
  3. 配置网络:nmcli / nmtui
  4. 查看端口与连接:ss / netstat
  5. 常见端口速查
  6. 连通性排障四件套:ping / traceroute / ss / curl
  7. DNS 排错:dig / nslookup / host
  8. 抓包分析:tcpdump
  9. 实战排障:服务连不上?运维排障四步法(踩坑文)
  10. 总结与练习

一、查看本机网络: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                  # 查看所有网卡状态
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 ipman 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 reloadsudo systemctl restart NetworkManager

参考:man 8 nmcliman 1 nmtuiRocky 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 -tnss -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
  • 服务没通先看 LISTENss -tlnp 看端口是否有进程监听;没监听说明服务没起来。
  • TIME_WAIT 多:通常是高并发短连接的正常现象,一般不慌。

参考:man 8 ssman 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),修改后记得放行防火墙。

参考:IANA 端口分配菜鸟教程 - 常用端口


六、连通性排障四件套: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 pingman 8 tracerouteman 1 curlman 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 digman 1 nslookupman 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 addrip route、网线
ping 通、端口连不上 服务没监听 / 防火墙 ss -tlnpsystemctlfirewall-cmd
本机通、远程不通 防火墙 / 监听 127.0.0.1 放行端口、改监听地址
端口通、应用无响应 应用本身问题 curl、看应用日志
都能通但很怪 数据包异常 tcpdump 抓包分析

一句话:连不上服务,先 ping 看网络 → traceroute 看路由 → ss/nc 看端口 → curl 看应用;最后用 tcpdump 抓包兜底。

参考:Red Hat - 网络排障DigitalOcean - 网络排障


十、总结与练习

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

提示:网络排障练习请在虚拟机/隔离环境进行。抓包涉及数据,注意只在测试环境抓取。


参考资料