适用对象 : 实施工程师、运维工程师、技术支持人员
适用系统 : 麒麟V10(银河麒麟/中标麒麟)、Ubuntu 20.04/22.04/24.04、CentOS/RHEL、统信UOS
目标: 建立标准化网络排查流程,支撑日常巡检、故障定位与研发日志反馈
目录
- 第一部分:网络基础原理(小白必读)
- [1.1 为什么需要网络分层?](#1.1 为什么需要网络分层?)
- [1.2 OSI七层模型详解](#1.2 OSI七层模型详解)
- [1.3 TCP/IP四层模型详解](#1.3 TCP/IP四层模型详解)
- [1.4 两模型对照关系](#1.4 两模型对照关系)
- [1.5 数据封装与解封装](#1.5 数据封装与解封装)
- [1.6 关键协议速查表](#1.6 关键协议速查表)
- 第二部分:网络排查标准化流程
- [第三部分:麒麟V10 专项运维指令](#第三部分:麒麟V10 专项运维指令)
- [第四部分:Ubuntu 专项运维指令](#第四部分:Ubuntu 专项运维指令)
- 第五部分:通用核心排查命令
- 第六部分:日志抓取与反馈研发
- 第七部分:常见问题排查手册
- 第八部分:日常巡检方案
- 第九部分:实用工具与脚本
- 第十部分:关键注意事项
- 第十一部分:推荐学习路径
- 附录:核心概念速查表
第一部分:网络基础原理(小白必读)
1.1 为什么需要网络分层?
想象你要寄一封快递:
- 你只需要写好地址和信件内容(应用层)
- 快递公司负责分拣、选择运输路线(网络层)
- 货车司机负责把包裹从A点运到B点(数据链路层/物理层)
每一层只关心自己的职责,层与层之间通过标准接口交互。这就是网络分层 的核心思想:复杂问题简单化,每层各司其职。
如果没有分层,寄快递时你得同时操心:用什么笔写信、走哪条路、开什么车------这显然不合理。网络分层让每一层专注做好一件事,上层不用关心下层的实现细节。
1.2 OSI七层模型详解
OSI(Open Systems Interconnection,开放系统互连)是国际标准化组织(ISO)提出的理论模型,共7层:
| 层级 | 名称 | 核心功能 | 生活类比 | 典型协议/设备 |
|---|---|---|---|---|
| 第7层 | 应用层 | 为应用程序提供网络服务接口 | 你写的信件内容 | HTTP、HTTPS、FTP、SMTP、DNS、SSH |
| 第6层 | 表示层 | 数据格式转换、加密解密、压缩解压 | 把中文信翻译成英文、装进信封加密 | TLS/SSL、JPEG、MPEG、ASCII |
| 第5层 | 会话层 | 建立、管理、终止会话连接 | 打电话时的拨号、通话、挂断 | NetBIOS、RPC、SQL会话 |
| 第4层 | 传输层 | 端到端可靠/不可靠传输、流量控制 | 快递公司的分拣中心,确保包裹完整送达 | TCP、UDP、SCTP |
| 第3层 | 网络层 | 逻辑寻址、路由选择、分组转发 | 快递公司的全国分拣中心,看地址决定走哪条路 | IP、ICMP、ARP、路由器 |
| 第2层 | 数据链路层 | 帧封装、MAC寻址、差错检测、介质访问 | 同城快递站,按门牌号送货 | 以太网、Wi-Fi、PPP、交换机、网卡 |
| 第1层 | 物理层 | 比特流传输、电气/机械特性 | 公路、铁路、飞机等物理运输通道 | 网线、光纤、集线器、RJ45、光模块 |
名词解释:
- 协议(Protocol):就像人类语言的语法规则,网络协议是设备之间通信的"约定"。比如HTTP协议规定了浏览器和服务器如何请求和响应网页。
- 寻址(Addressing):就像快递需要收件地址,网络中的数据也需要"地址"才能找到目的地。IP地址是"逻辑地址"(类似省市区街道),MAC地址是"物理地址"(类似门牌号)。
- 路由(Routing):数据从A到B可能经过很多中间节点,路由就是选择最佳路径的过程。
1.3 TCP/IP四层模型详解
TCP/IP模型是互联网实际使用的标准,比OSI更简洁,共4层:
| TCP/IP 层级 | 名称 | 对应 OSI 层级 | 核心功能 | 典型协议/设备 |
|---|---|---|---|---|
| 第4层 | 应用层 | OSI 5-7层 | 为应用程序提供网络服务 | HTTP、HTTPS、FTP、SMTP、DNS、SSH |
| 第3层 | 传输层 | OSI 4层 | 端到端连接、可靠/不可靠传输 | TCP、UDP、SCTP |
| 第2层 | 网络层(网际层) | OSI 3层 | 逻辑寻址、路由、分组转发 | IP、ICMP、ARP、路由器 |
| 第1层 | 网络接口层(链路层) | OSI 1-2层 | 帧封装、MAC寻址、物理传输 | 以太网、Wi-Fi、交换机、网卡、网线 |
为什么TCP/IP把OSI的7层合并成4层?
因为实际应用中,应用层、表示层、会话层的界限很模糊。比如你用浏览器访问HTTPS网站时,HTTP是应用层协议,TLS加密是表示层功能,TCP连接管理是会话层功能------这三者通常由同一个软件(浏览器)处理,强行分开反而增加复杂度。所以TCP/IP把它们合并为"应用层"。
1.4 两模型对照关系


对照表:
| OSI 七层模型 | TCP/IP 四层模型 | 核心功能 | 典型协议/设备 |
|---|---|---|---|
| 7. 应用层 (Application) | |||
| 6. 表示层 (Presentation) | 4.应用层 | 为用户应用程序提供网络服务 | HTTP、HTTPS、FTP、SMTP、DNS、SSH |
| 5. 会话层 (Session) | |||
| 4. 传输层 (Transport) | 3.传输层 | 端到端连接、可靠/不可靠传输 | TCP、UDP、SCTP |
| 3. 网络层 (Network) | 2.网络层 (网际层) | 寻址、路由、分组转发 | IP、ICMP、ARP、OSPF、BGP、路由器 |
| 2. 数据链路层 (Data Link) | 1.网络接口层 (链路层) | 帧封装、MAC寻址、差错检测 | 以太网、Wi-Fi、PPP、交换机、网卡 |
| 1. 物理层 (Physical) | 比特流传输、电气/机械特性 | 网线、光纤、集线器、RJ45、光模块 |
1.5 数据封装与解封装
想象你发一封快递,每一层都会给包裹加一个"标签":
发送端(从上到下封装):
应用层数据(比如"你好")
↓ 加上HTTP头部(表示这是一个网页请求)
传输层数据段(TCP头部 + HTTP数据)
↓ 加上TCP头部(包含源端口、目标端口、序列号)
网络层数据包(IP头部 + TCP段)
↓ 加上IP头部(包含源IP、目标IP)
数据链路层帧(MAC头部 + IP包 + MAC尾部)
↓ 加上MAC头部(源MAC、目标MAC)和CRC校验尾部
物理层比特流(01010101...)
↓ 变成电信号/光信号在网线/光纤中传输
接收端(从下到上解封装):
物理层比特流(01010101...)
↓ 还原成电信号
数据链路层帧
↓ 去掉MAC头部,检查CRC校验
网络层数据包
↓ 去掉IP头部,检查目标IP
传输层数据段
↓ 去掉TCP头部,按端口号交给对应应用
应用层数据("你好")
↓ 交给浏览器显示
名词解释:
- 封装(Encapsulation):就像 Russian Doll(俄罗斯套娃),每一层把自己的控制信息(头部)包在数据外面。
- 头部(Header):每一层添加的控制信息。比如IP头部包含源IP、目标IP、TTL(生存时间)等。
- 帧(Frame):数据链路层的传输单元。
- 包/分组(Packet):网络层的传输单元。
- 段(Segment):传输层的传输单元。
1.6 关键协议速查表
| 协议 | 层级 | 全称 | 作用 | 类比 |
|---|---|---|---|---|
| HTTP | 应用层 | HyperText Transfer Protocol | 传输网页内容 | 寄送普通信件 |
| HTTPS | 应用层 | HTTP Secure | 加密传输网页 | 寄送密封信件 |
| FTP | 应用层 | File Transfer Protocol | 文件传输 | 寄送包裹 |
| SSH | 应用层 | Secure Shell | 安全远程登录 | 加密电话 |
| DNS | 应用层 | Domain Name System | 域名→IP地址转换 | 电话簿查询 |
| TCP | 传输层 | Transmission Control Protocol | 可靠、面向连接的传输 | 挂号信(有回执) |
| UDP | 传输层 | User Datagram Protocol | 快速、不可靠的传输 | 普通明信片(无回执) |
| IP | 网络层 | Internet Protocol | 逻辑寻址和路由 | 全国快递地址系统 |
| ICMP | 网络层 | Internet Control Message Protocol | 网络诊断和差错报告 | 快递公司的查询/投诉电话 |
| ARP | 网络层 | Address Resolution Protocol | IP地址→MAC地址转换 | 根据姓名查门牌号 |
| 以太网 | 链路层 | Ethernet | 有线局域网标准 | 同城快递网络 |
| Wi-Fi | 链路层 | Wireless Fidelity | 无线局域网标准 | 同城快递无人机 |
第二部分:网络排查标准化流程
实施工程师面对网络问题时,建议遵循 "由近及远、分层排查" 的原则:
物理层 → 链路层 → 网络层 → 传输层 → 应用层
↓ ↓ ↓ ↓ ↓
网线 网卡状态 IP/路由 端口/DNS 服务/防火墙
2.1 快速诊断四步法
| 步骤 | 命令 | 目的 | 正常预期 | 对应层级 |
|---|---|---|---|---|
| Step 1 | ping 127.0.0.1 |
检查本地TCP/IP栈 | 100%通,延迟<1ms | 传输层+网络层(本机) |
| Step 2 | ping <网关IP> |
检查本地网络连通性 | 100%通,延迟<5ms | 网络层+链路层 |
| Step 3 | ping 223.5.5.5 |
检查外网连通性 | 100%通,延迟<100ms | 网络层(跨网段) |
| Step 4 | ping www.baidu.com |
检查DNS解析能力 | 能解析且能ping通 | 应用层(DNS) |
💡 实施建议: 在客户现场首先执行这四步,可快速定位问题层级,避免盲目排查。
第三部分:麒麟V10 专项运维指令
麒麟V10基于RHEL/CentOS生态,使用yum包管理,默认启用firewalld防火墙,同时保留了iptables底层支持。部分版本还集成了麒麟安全机制(Kysec),需特别注意。
3.1 网络基础检查
bash
# 1. 查看系统版本(确认是服务器版还是桌面版)
cat /etc/os-release
# 输出示例: Kylin Linux Advanced Server V10 (Tercel)
# 2. 查看网卡状态(简洁版)
ip -br link show
ip -br addr show
# 3. 查看网卡详细统计(关注errors/dropped)
ip -s link show eth0
# 4. 查看路由表
ip route show
# 或查看默认网关
ip route show default
# 5. 查看DNS配置
cat /etc/resolv.conf
# 注意:若使用NetworkManager或systemd-resolved,此文件可能是软链接
名词解释:
- 网卡(Network Interface Card, NIC):计算机连接网络的硬件接口,也叫网络适配器。常见的有以太网卡(插网线)和无线网卡(Wi-Fi)。
- 路由表(Routing Table):就像导航地图,记录了到达不同目的地的最佳路径。系统根据路由表决定数据包从哪个网卡发出、发给哪个网关。
- DNS(Domain Name System):互联网的"电话簿",把人类易读的域名(如www.baidu.com)转换成机器可读的IP地址(如14.215.177.38)。
3.2 防火墙管理(firewalld)
麒麟V10服务器版默认使用firewalld,桌面版可能同时存在图形化安全中心。
bash
# 查看防火墙状态
sudo systemctl status firewalld
sudo firewall-cmd --state
# 查看当前区域配置
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --zone=public --list-all
# 开放端口(永久生效)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
# 开放服务(如http, ssh, mysql)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
# 查看已开放端口/服务
sudo firewall-cmd --zone=public --list-ports
sudo firewall-cmd --zone=public --list-services
# 富规则(限制特定IP访问)
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
名词解释:
- 防火墙(Firewall):网络安全的"门卫",根据预设规则决定哪些数据可以进出系统。就像小区门口的保安,检查每个进出人员的身份。
- 端口(Port):传输层的逻辑通道编号(0-65535),用于区分同一台机器上的不同服务。比如HTTP用80端口,SSH用22端口,HTTPS用443端口。
- 区域(Zone):firewalld的概念,把网络接口划分到不同安全级别的区域(如public、trusted、block),每个区域有不同的默认规则。
3.3 iptables备用方案
当firewalld规则不生效或需要更精细控制时,直接使用iptables:
bash
# 查看当前规则
sudo iptables -L -n -v --line-numbers
# 开放22端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 保存规则(防止重启失效)
sudo iptables-save > /etc/sysconfig/iptables
# 注意:麒麟V10桌面版可能通过安全中心管理iptables,命令行配置后可能被覆盖
名词解释:
- iptables :Linux内核自带的防火墙工具,工作在网络层 和传输层,通过规则链(Chain)和表(Table)管理数据包过滤。
- 规则链(Chain):数据包经过的"检查站",常见的有INPUT(进入本机)、OUTPUT(本机发出)、FORWARD(转发)。
- ACCEPT/DROP/REJECT:iptables的三种处理动作。ACCEPT=放行,DROP=静默丢弃(对方不知道),REJECT=明确拒绝(对方会收到错误通知)。
3.4 麒麟安全机制检查
bash
# 查看Kysec状态(部分版本存在)
sudo kysec_status
# 查看安全日志
sudo cat /var/log/kylin/sec.log
# 若存在安全拦截,可能需要调整安全策略或临时关闭测试
3.5 网络服务管理
bash
# 查看网络管理服务状态
sudo systemctl status NetworkManager
sudo systemctl status systemd-networkd
sudo systemctl status systemd-resolved
# 重启网络服务
sudo systemctl restart NetworkManager
# 或
sudo systemctl restart systemd-networkd
# 查看网络连接配置
nmcli device show
nmcli connection show --active
名词解释:
- NetworkManager:Linux桌面系统常用的网络管理服务,可以自动管理有线、无线、VPN等连接,提供图形化配置界面。
- systemd-networkd:systemd项目提供的轻量级网络管理服务,常用于服务器环境,通过配置文件管理网络。
- systemd-resolved:systemd提供的DNS解析服务,可以缓存DNS查询结果,提高解析速度。
第四部分:Ubuntu 专项运维指令
Ubuntu使用apt包管理,网络配置方式因版本而异:Ubuntu Server 默认使用Netplan+systemd-networkd,Ubuntu Desktop 默认使用NetworkManager。
4.1 网络基础检查
bash
# 查看版本
lsb_release -a
# 查看网络接口
ip -br addr show
# 查看路由
ip route show
# 查看DNS(注意软链接指向)
ls -l /etc/resolv.conf
cat /etc/resolv.conf
4.2 Netplan配置(Ubuntu Server 18.04+)
bash
# 查看Netplan配置文件
ls /etc/netplan/
# 编辑配置(YAML格式,注意缩进必须是空格)
sudo nano /etc/netplan/00-installer-config.yaml
示例:静态IP配置
yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 223.5.5.5
- 8.8.8.8
bash
# 应用配置
sudo netplan apply
# 验证配置
sudo netplan try # 若20秒内无确认,自动回滚
名词解释:
- Netplan :Ubuntu 18.04+引入的网络配置抽象层,统一了NetworkManager和systemd-networkd的配置方式。使用YAML格式,语法简洁但对缩进极其敏感(必须用空格,不能用Tab)。
- DHCP(Dynamic Host Configuration Protocol):动态主机配置协议,自动分配IP地址、子网掩码、网关、DNS等网络参数。就像酒店前台自动给你分配房间号。
- 静态IP:手动配置的固定IP地址,不会变化。适合服务器等需要固定地址的场景。
- CIDR表示法 :如
192.168.1.100/24,其中/24表示子网掩码有24个1(即255.255.255.0)。
4.3 NetworkManager配置(Ubuntu Desktop)
bash
# 查看设备状态
nmcli device status
# 查看连接配置
nmcli connection show
# 修改DNS(通过NetworkManager)
nmcli connection modify "Wired connection 1" ipv4.dns "223.5.5.5 8.8.8.8"
nmcli connection up "Wired connection 1"
# 图形界面配置
nmtui # 文本界面
nm-connection-editor # GUI界面
4.4 systemd-resolved DNS管理
Ubuntu默认启用systemd-resolved管理DNS, /etc/resolv.conf通常是软链接。
bash
# 查看systemd-resolved状态
systemctl status systemd-resolved
resolvectl status
# 修改DNS服务器
sudo nano /etc/systemd/resolved.conf
添加以下内容:
ini
[Resolve]
DNS=223.5.5.5 8.8.8.8
FallbackDNS=114.114.114.114
bash
# 重启服务
sudo systemctl restart systemd-resolved
# 验证DNS解析
resolvectl query www.baidu.com
dig www.baidu.com
名词解释:
- 软链接(Symbolic Link) :类似Windows的快捷方式,是一个指向另一个文件的特殊文件。
/etc/resolv.conf在Ubuntu上通常是软链接,指向/run/systemd/resolve/stub-resolv.conf。 - FallbackDNS:备用DNS服务器,当主DNS不可用时自动切换。
4.5 UFW防火墙(Ubuntu默认)
bash
# 查看UFW状态
sudo ufw status verbose
# 允许SSH
sudo ufw allow 22/tcp
# 允许特定IP访问
sudo ufw allow from 192.168.1.0/24 to any port 3306
# 启用/禁用
sudo ufw enable
sudo ufw disable
# 查看编号规则
sudo ufw status numbered
# 删除规则
sudo ufw delete 3
名词解释:
- UFW(Uncomplicated Firewall):Ubuntu的简化防火墙工具,底层仍然是iptables,但提供了更友好的命令行接口,适合新手使用。
第五部分:通用核心排查命令
以下命令适用于所有Linux发行版,是实施工程师必须掌握的基础工具。
5.1 连通性测试
bash
# 基础ping测试
ping -c 4 192.168.1.1
# 指定间隔和包大小
ping -i 0.2 -s 1400 www.baidu.com
# 路由追踪
traceroute www.baidu.com
# 或使用mtr(更强大)
mtr --report --report-cycles 10 www.baidu.com
# 端口测试
nc -zv 192.168.1.1 22
# 或
telnet 192.168.1.1 80
# 或
curl -v telnet://192.168.1.1:22
名词解释:
- ping:利用ICMP协议测试网络连通性的工具。发送"回声请求"包,等待对方返回"回声应答"。就像你喊一声"喂",对方回"在呢"。
- traceroute:追踪数据包从源到目的经过的所有路由器(跳)。就像快递追踪,显示包裹经过的每个中转站。
- mtr:My Traceroute的缩写,结合了ping和traceroute的功能,可以持续测试并统计每跳的丢包率和延迟。
- nc(netcat):网络界的"瑞士军刀",可以读写网络连接,常用于端口测试、文件传输、简单服务器搭建。
5.2 连接状态查看
bash
# 查看所有监听端口(推荐ss,替代netstat)
sudo ss -tulnp
# 查看所有TCP连接
ss -tan
# 查看连接统计
ss -s
# 查看特定端口占用
sudo lsof -i :8080
# 查看进程网络占用
sudo lsof -i -sTCP:LISTEN
名词解释:
- ss(Socket Statistics) :新一代socket统计工具,比传统的
netstat更快更高效,直接从内核获取信息。 - socket:套接字,是传输层连接的抽象表示,包含IP地址+端口的组合。就像电话线的两端插口。
- LISTEN:监听状态,表示服务正在等待客户端连接。
- ESTABLISHED:已建立连接,表示双方正在通信。
- lsof(List Open Files):列出系统打开的文件。在Linux中,网络连接也被视为"文件"(一切皆文件哲学)。
5.3 DNS排查
bash
# 查看DNS配置
cat /etc/resolv.conf
# DNS查询
nslookup www.baidu.com
dig www.baidu.com
dig @223.5.5.5 www.baidu.com
# 追踪DNS解析过程
dig +trace www.baidu.com
# 查看本地DNS缓存(systemd-resolved)
resolvectl statistics
名词解释:
- nslookup :简单的DNS查询工具,但功能较基础,已逐渐被
dig取代。 - dig(Domain Information Groper):功能强大的DNS诊断工具,可以显示完整的DNS查询过程和响应详情。
- +trace:追踪DNS解析的完整链条,从根域名服务器到顶级域服务器再到权威服务器,适合排查DNS解析异常。
5.4 路由排查
bash
# 查看路由表
ip route show
route -n
# 追踪到目标的路由
ip route get 223.5.5.5
# 添加临时路由
sudo ip route add 192.168.10.0/24 via 192.168.1.1
# 删除路由
sudo ip route del 192.168.10.0/24
名词解释:
- 路由表(Routing Table):系统维护的一张"导航地图",记录了到达不同网络目的地的路径。包含目标网络、网关、接口、度量值等信息。
- 默认路由(Default Route) :目标为
0.0.0.0/0或default的路由,当没有更精确的路由匹配时,数据包走默认路由。就像"其他都往这边送"。 - CIDR(Classless Inter-Domain Routing) :无类别域间路由,用"/数字"表示子网掩码长度。如
/24表示前24位是网络位,后8位是主机位。
5.5 网卡深度诊断
bash
# 查看网卡驱动和速率
ethtool eth0
ethtool -i eth0 # 驱动信息
# 查看网卡统计
ethtool -S eth0
# 查看网卡中断
cat /proc/interrupts | grep eth0
# 查看网卡队列
ethtool -l eth0
名词解释:
- ethtool:用于查询和设置网卡参数的工具,可以查看网卡速率、双工模式、驱动信息、统计计数器等。
- 双工模式(Duplex) :
- 全双工(Full Duplex):可以同时发送和接收,像双向车道。
- 半双工(Half Duplex):同一时间只能发送或接收,像单车道。
- MTU(Maximum Transmission Unit):最大传输单元,以太网默认1500字节。超过MTU的数据包会被分片。
第六部分:日志抓取与反馈研发
当需要向研发团队反馈网络问题时,完整的日志和抓包文件是定位问题的关键。
6.1 系统日志收集
bash
# 1. 收集网络相关内核日志
dmesg | grep -i "network\|eth\|tcp\|drop" > /tmp/kernel_net.log
# 2. 收集NetworkManager日志
journalctl -u NetworkManager --since "1 hour ago" --no-pager > /tmp/nm.log
# 3. 收集防火墙日志
journalctl -u firewalld --since "1 hour ago" --no-pager > /tmp/firewall.log
# 4. 收集所有网络错误日志
journalctl --since "1 hour ago" | grep -i "error\|fail\|timeout" > /tmp/errors.log
# 5. 收集socket统计
cat /proc/net/sockstat > /tmp/sockstat.log
ss -s > /tmp/ss_stats.log
名词解释:
- dmesg:显示内核环形缓冲区的消息,包含硬件检测、驱动加载、内核错误等信息。
- journalctl:systemd的日志管理工具,可以按时间、服务、优先级等条件查询系统日志。
- /proc/net/sockstat:内核暴露的socket统计信息伪文件,包含TCP、UDP、RAW等协议的连接统计。
6.2 tcpdump抓包指南
bash
# 基础抓包(所有接口)
sudo tcpdump -i any -w /tmp/capture_all.pcap
# 抓特定接口
sudo tcpdump -i eth0 -w /tmp/capture_eth0.pcap
# 抓特定主机
sudo tcpdump -i any host 192.168.1.100 -w /tmp/capture_host.pcap
# 抓特定端口
sudo tcpdump -i any port 8080 -w /tmp/capture_port.pcap
# 抓特定协议
sudo tcpdump -i any icmp -w /tmp/capture_icmp.pcap
# 抓特定网段
sudo tcpdump -i any net 192.168.1.0/24 -w /tmp/capture_net.pcap
# 限制抓包数量(1000个包后停止)
sudo tcpdump -i any -c 1000 -w /tmp/capture_limit.pcap
# 轮转抓包(每100MB一个文件,保留5个文件)
sudo tcpdump -i any -C 100 -W 5 -w /tmp/capture_rotate.pcap
# 只抓SYN包(排查连接建立问题)
sudo tcpdump 'tcp[tcpflags] & tcp-syn != 0' -w /tmp/capture_syn.pcap
名词解释:
- tcpdump :强大的网络抓包工具,直接从网卡捕获数据包,保存为
.pcap格式,可用Wireshark分析。 - pcap(Packet Capture):标准的抓包文件格式,可以被Wireshark、tcpdump等工具读取分析。
- 过滤表达式:tcpdump支持BPF(Berkeley Packet Filter)语法,可以精确过滤感兴趣的数据包。
- SYN包:TCP三次握手的第一个包,用于发起连接。只抓SYN包可以快速分析连接建立情况。
6.3 问题反馈清单
向研发反馈时,请提供以下信息:
| 信息项 | 说明 | 重要性 |
|---|---|---|
| 问题现象 | 具体报错信息、超时时间、发生频率 | ⭐⭐⭐ |
| 发生时间 | 精确到秒的问题发生时间点 | ⭐⭐⭐ |
| 环境信息 | OS版本、内核版本、网络拓扑 | ⭐⭐⭐ |
| 复现步骤 | 如何稳定复现该问题 | ⭐⭐⭐ |
| 巡检报告 | 使用脚本生成的完整巡检报告 | ⭐⭐⭐ |
| 抓包文件 | .pcap格式,包含问题发生时段 |
⭐⭐⭐ |
| 系统日志 | journalctl或/var/log相关日志 |
⭐⭐⭐ |
| 已尝试措施 | 已尝试的排查步骤和结果 | ⭐⭐ |
第七部分:常见问题排查手册
7.1 物理层/链路层问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 网卡灯不亮 | ethtool eth0查看Link detected |
更换网线、更换交换机端口、检查网卡驱动 | 物理层 |
| 网卡状态DOWN | ip link show查看状态 |
ip link set eth0 up启用;检查NetworkManager是否禁用 |
链路层 |
| 无IP地址 | ip addr show查看;cat /var/log/messages |
检查DHCP服务;手动配置静态IP | 网络层 |
| 频繁丢包 | ip -s link show查看errors/dropped |
更换网线、检查网卡驱动版本、调整MTU | 链路层 |
| 双工不匹配 | ethtool eth0查看Speed/Duplex |
强制指定速率:ethtool -s eth0 speed 1000 duplex full |
链路层 |
7.2 网络层问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 无法ping通网关 | 检查网线→ip route show→检查子网掩码 |
修正网关配置;检查交换机VLAN | 网络层 |
| 无法ping通外网 | traceroute定位断点;检查NAT |
检查路由器/NAT配置;检查防火墙出站规则 | 网络层 |
| 路由不可达 | ip route get <dest> |
添加静态路由;检查动态路由协议 | 网络层 |
| IP地址冲突 | arping -I eth0 <ip>检测重复MAC |
更换IP;检查DHCP服务器配置 | 网络层 |
| 间歇性断网 | mtr --report查看哪一跳丢包 |
定位故障节点(交换机/路由器);联系运营商 | 网络层 |
名词解释:
- VLAN(Virtual Local Area Network):虚拟局域网,把一个物理交换机逻辑上划分成多个独立的广播域。不同VLAN之间默认不通,需要三层设备(路由器/三层交换机)转发。
- NAT(Network Address Translation):网络地址转换,把私有IP地址转换成公网IP地址。家庭路由器就是典型的NAT设备,让多台设备共享一个公网IP上网。
- arping:发送ARP请求探测IP是否被占用,可以检测IP地址冲突。
7.3 传输层问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 端口不通 | nc -zv <ip> <port>;ss -tulnp |
启动服务;开放防火墙端口 | 传输层 |
| 连接被拒绝 | ss -tulnp查看监听地址 |
修改服务绑定地址为0.0.0.0而非127.0.0.1 |
传输层 |
| 连接超时 | tcpdump抓包看三次握手 |
检查中间防火墙;检查服务端是否过载 | 传输层 |
| 大量TIME_WAIT | ss -tan统计 |
调整tcp_tw_reuse=1;优化应用连接池 |
传输层 |
| 大量CLOSE_WAIT | ss -tan统计 |
检查应用程序是否及时关闭连接;修复代码bug | 传输层 |
| SYN Flood攻击 | netstat -n统计各状态数量 |
启用SYN Cookies;调整tcp_max_syn_backlog |
传输层 |
名词解释:
- 三次握手(Three-way Handshake) :TCP建立连接的过程:
- 客户端发送SYN(请求建立连接)
- 服务端回复SYN+ACK(同意建立连接)
- 客户端发送ACK(确认收到)
- 四次挥手(Four-way Handshake):TCP断开连接的过程,比建立连接多一步是因为TCP是全双工的,双方都需要确认关闭。
- TIME_WAIT:连接关闭后,主动关闭方保持的状态,持续2MSL(最大段生存时间,通常60秒),确保最后的ACK能被对方收到。
- CLOSE_WAIT:被动关闭方收到FIN后进入的状态,表示等待本地应用关闭连接。如果大量存在,通常是应用程序没有正确关闭socket。
- SYN Flood:一种DoS攻击,攻击者发送大量SYN包但不完成三次握手,耗尽服务器的连接队列资源。
7.4 DNS问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 域名无法解析 | dig <domain>;cat /etc/resolv.conf |
检查DNS配置;更换DNS服务器 | 应用层 |
| 解析结果错误 | dig +trace追踪解析链 |
检查hosts文件;清除DNS缓存 | 应用层 |
| 解析速度慢 | dig @<dns> <domain>对比 |
更换就近DNS;检查网络延迟 | 应用层 |
| 间歇性解析失败 | 对比多个DNS服务器解析结果 | 检查DNS服务器负载;配置多个DNS备用 | 应用层 |
名词解释:
- hosts文件 :本地静态域名解析表,优先级高于DNS。位于
/etc/hosts,格式为IP地址 域名。 - DNS缓存 :本地保存的DNS查询结果,避免重复查询。可以手动清除:
sudo systemd-resolve --flush-caches。
7.5 防火墙问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 规则不生效 | firewall-cmd --reload;iptables -L |
重载防火墙;检查规则顺序(iptables按顺序匹配) | 网络层/传输层 |
| 端口已开放但外部不通 | iptables -L -n -v查看计数器 |
检查INPUT链是否DROP;检查默认策略 | 网络层/传输层 |
| 远程操作断连 | 谨慎操作22端口规则 | 使用screen/tmux;先添加允许规则再删除旧规则 |
传输层 |
| 安全软件拦截 | kysec_status(麒麟);getenforce(SELinux) |
调整安全策略;临时设置为permissive模式测试 | 应用层 |
名词解释:
- SELinux(Security-Enhanced Linux):美国NSA开发的安全机制,通过强制访问控制(MAC)限制进程权限。有三种模式:Enforcing(强制)、Permissive(宽容,只记录不拦截)、Disabled(关闭)。
- screen/tmux:终端复用工具,可以在SSH断开后保持会话不中断,远程操作防火墙时强烈建议使用。
7.6 性能问题
| 问题现象 | 排查步骤 | 解决方案 | 对应层级 |
|---|---|---|---|
| 网络延迟高 | mtr定位延迟节点 |
优化路由;更换链路;就近部署 | 网络层 |
| 带宽不达标 | iperf3 -c <server>测试 |
检查网卡协商速率;检查交换机端口 | 物理层/链路层 |
| 连接数耗尽 | cat /proc/net/sockstat |
调整ulimit;调整内核nf_conntrack_max |
传输层 |
| 网卡软中断高 | cat /proc/interrupts |
开启RPS/XPS;调整中断亲和性(smp_affinity) |
物理层 |
| TCP重传率高 | tc -s qdisc show;tcpdump |
检查拥塞控制算法;检查物理链路质量 | 传输层 |
名词解释:
- iperf3:网络带宽测试工具,可以在客户端和服务器之间测试实际传输速率。
- RPS/XPS(Receive/Transmit Packet Steering):Linux内核特性,将网卡中断处理分散到多个CPU核心,提高多核系统的网络性能。
- 拥塞控制(Congestion Control):TCP防止网络过载的机制,包括慢启动、拥塞避免、快速重传、快速恢复等算法。
第八部分:日常巡检方案
8.1 每日巡检(5分钟)
bash
#!/bin/bash
# daily_check.sh - 每日快速巡检
echo "=== $(date) 网络巡检 ==="
ip -br link show
ip -br addr show
ping -c 2 $(ip route | awk '/default/{print $3}') && echo "网关正常" || echo "网关异常"
ping -c 2 223.5.5.5 && echo "外网正常" || echo "外网异常"
ss -s
df -h | grep -E "Filesystem|/dev/"
8.2 每周巡检(15分钟)
bash
#!/bin/bash
# weekly_check.sh - 每周深度巡检
# 1. 接口统计
ip -s link show | grep -E "RX:|TX:|errors|dropped"
# 2. 路由检查
ip route show
# 3. DNS测试
for dns in 223.5.5.5 114.114.114.114 8.8.8.8; do
dig @$dns www.baidu.com +short +time=2 >/dev/null && echo "$dns OK" || echo "$dns FAIL"
done
# 4. 防火墙检查
firewall-cmd --list-all 2>/dev/null || iptables -L -n
# 5. 日志检查
journalctl --since "1 week ago" | grep -i "error\|fail\|drop" | tail -20
# 6. 性能基线
ss -s
cat /proc/net/sockstat
8.3 月度巡检(30分钟)
- 执行完整巡检脚本(见下方下载链接)
- 对比历史巡检数据,发现趋势变化
- 检查网卡驱动版本是否需要更新
- 验证备份链路可用性
- 更新网络拓扑文档
第九部分:实用工具与脚本
我已为您准备了三份实用文件,可直接用于生产环境:
9.1 综合巡检脚本 (linux_network_inspect.sh):一键执行完整网络巡检,自动生成报告和原始数据备份。
bash
#!/bin/bash
###############################################################################
# Linux网络运维巡检与故障排查脚本
# 适用系统: 麒麟V10 / Ubuntu / CentOS / 统信UOS
# 作者: 实施运维团队
# 用途: 日常巡检、网络故障排查、日志抓取反馈研发
###############################################################################
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 输出目录
OUTPUT_DIR="/tmp/network_inspect_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"
REPORT_FILE="$OUTPUT_DIR/network_report.txt"
# 获取系统信息
get_os_info() {
echo -e "${BLUE}========== 系统信息 ==========${NC}"
echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo "内核版本: $(uname -r)"
echo "架构: $(uname -m)"
echo ""
}
# 网络接口检查
check_interfaces() {
echo -e "${BLUE}========== 网络接口状态 ==========${NC}"
ip -br link show
echo ""
echo "详细接口信息:"
ip -br addr show
echo ""
echo "网卡统计信息(关注errors/dropped):"
for iface in $(ip -br link show | awk '{print $1}' | grep -v lo); do
echo "--- $iface ---"
ip -s link show $iface 2>/dev/null | grep -E "(RX:|TX:|errors|dropped|overrun)"
done
echo ""
}
# 路由表检查
check_routes() {
echo -e "${BLUE}========== 路由表 ==========${NC}"
ip route show
echo ""
echo "默认网关:"
ip route show default
echo ""
}
# DNS配置检查
check_dns() {
echo -e "${BLUE}========== DNS配置 ==========${NC}"
echo "resolv.conf内容:"
cat /etc/resolv.conf 2>/dev/null || echo "文件不存在"
echo ""
# 检查systemd-resolved
if systemctl is-active systemd-resolved &>/dev/null; then
echo "systemd-resolved状态: 运行中"
resolvectl status 2>/dev/null || systemd-resolve --status 2>/dev/null || echo "无法获取resolvectl状态"
else
echo "systemd-resolved状态: 未运行"
fi
echo ""
# DNS解析测试
echo "DNS解析测试:"
for dns in "223.5.5.5" "114.114.114.114" "8.8.8.8"; do
if dig @$dns www.baidu.com +short +time=2 &>/dev/null; then
echo " DNS $dns: ${GREEN}正常${NC}"
else
echo " DNS $dns: ${RED}异常${NC}"
fi
done
echo ""
}
# 连通性测试
check_connectivity() {
echo -e "${BLUE}========== 网络连通性测试 ==========${NC}"
# 本地回环
if ping -c 2 127.0.0.1 &>/dev/null; then
echo "本地回环(127.0.0.1): ${GREEN}正常${NC}"
else
echo "本地回环(127.0.0.1): ${RED}异常${NC}"
fi
# 网关
gateway=$(ip route show default | awk '{print $3}' | head -1)
if [ -n "$gateway" ]; then
if ping -c 2 $gateway &>/dev/null; then
echo "网关($gateway): ${GREEN}正常${NC}"
else
echo "网关($gateway): ${RED}异常${NC}"
fi
fi
# 外网
if ping -c 2 223.5.5.5 &>/dev/null; then
echo "外网(223.5.5.5): ${GREEN}正常${NC}"
else
echo "外网(223.5.5.5): ${RED}异常${NC}"
fi
# DNS解析
if ping -c 2 www.baidu.com &>/dev/null; then
echo "DNS解析(www.baidu.com): ${GREEN}正常${NC}"
else
echo "DNS解析(www.baidu.com): ${RED}异常${NC}"
fi
echo ""
}
# 端口监听检查
check_ports() {
echo -e "${BLUE}========== 端口监听状态 ==========${NC}"
echo "监听端口列表:"
ss -tulnp 2>/dev/null || netstat -tulnp 2>/dev/null || echo "ss/netstat命令不可用"
echo ""
echo "连接状态统计:"
ss -s 2>/dev/null || echo "ss命令不可用"
echo ""
}
# 防火墙检查
check_firewall() {
echo -e "${BLUE}========== 防火墙状态 ==========${NC}"
# firewalld
if systemctl is-active firewalld &>/dev/null; then
echo "firewalld: ${GREEN}运行中${NC}"
echo "默认区域: $(firewall-cmd --get-default-zone 2>/dev/null)"
echo "开放端口:"
firewall-cmd --list-ports 2>/dev/null
echo "开放服务:"
firewall-cmd --list-services 2>/dev/null
else
echo "firewalld: 未运行"
fi
echo ""
# iptables
echo "iptables规则:"
iptables -L -n -v --line-numbers 2>/dev/null | head -30 || echo "iptables未配置或无规则"
echo ""
}
# 网络服务检查
check_services() {
echo -e "${BLUE}========== 网络服务状态 ==========${NC}"
services=("NetworkManager" "systemd-networkd" "systemd-resolved" "sshd" "nginx" "httpd" "docker")
for svc in "${services[@]}"; do
status=$(systemctl is-active $svc 2>/dev/null || echo "unknown")
if [ "$status" = "active" ]; then
echo "$svc: ${GREEN}运行中${NC}"
elif [ "$status" = "inactive" ]; then
echo "$svc: ${YELLOW}未运行${NC}"
else
echo "$svc: 未安装/未知"
fi
done
echo ""
}
# 日志检查
check_logs() {
echo -e "${BLUE}========== 网络相关日志 ==========${NC}"
# 内核网络日志
echo "--- 内核网络日志(最近50条) ---"
dmesg | grep -i "network\|eth\|net\|tcp\|udp" | tail -50 2>/dev/null || echo "无相关内核日志"
echo ""
# systemd日志
if command -v journalctl &>/dev/null; then
echo "--- systemd网络服务日志(最近30条) ---"
journalctl -u NetworkManager --no-pager -n 30 2>/dev/null || echo "无NetworkManager日志"
echo ""
echo "--- 内核网络错误日志 ---"
journalctl -k --no-pager -n 30 | grep -i "error\|fail\|drop" 2>/dev/null || echo "无相关错误日志"
echo ""
fi
# 传统日志
if [ -f /var/log/messages ]; then
echo "--- /var/log/messages网络相关 ---"
grep -i "network\|eth\|firewall" /var/log/messages | tail -20 2>/dev/null || echo "无相关日志"
echo ""
fi
if [ -f /var/log/syslog ]; then
echo "--- /var/log/syslog网络相关 ---"
grep -i "network\|eth\|firewall" /var/log/syslog | tail -20 2>/dev/null || echo "无相关日志"
echo ""
fi
}
# 性能指标检查
check_performance() {
echo -e "${BLUE}========== 网络性能指标 ==========${NC}"
# 网卡速率
echo "网卡速率信息:"
for iface in $(ip -br link show | awk '{print $1}' | grep -v lo); do
if command -v ethtool &>/dev/null; then
echo "--- $iface ---"
ethtool $iface 2>/dev/null | grep -E "Speed|Duplex|Link detected" || echo "无法获取ethtool信息"
fi
done
echo ""
# 网络连接数
echo "TCP连接统计:"
cat /proc/net/sockstat 2>/dev/null || echo "无法获取sockstat"
echo ""
# 路由缓存
echo "路由缓存统计:"
ip route show cache 2>/dev/null | wc -l | xargs -I{} echo "路由缓存条目数: {}"
echo ""
}
# 抓包功能
capture_packets() {
echo -e "${BLUE}========== 网络抓包 ==========${NC}"
echo "如需抓包,请使用以下命令:"
echo " 抓取特定接口所有流量: sudo tcpdump -i eth0 -w $OUTPUT_DIR/capture_all.pcap"
echo " 抓取特定端口: sudo tcpdump -i any port 80 -w $OUTPUT_DIR/capture_http.pcap"
echo " 抓取特定主机: sudo tcpdump -i any host 192.168.1.1 -w $OUTPUT_DIR/capture_host.pcap"
echo " 抓取特定进程: sudo tcpdump -i any -Z root -w $OUTPUT_DIR/capture_proc.pcap"
echo ""
echo "注意: 抓包需要root权限,且可能产生大文件,请按需使用"
echo ""
}
# 生成巡检报告
generate_report() {
echo -e "${GREEN}========== 巡检完成 ==========${NC}"
echo "报告保存位置: $OUTPUT_DIR"
echo ""
echo "打包命令:"
echo " tar czvf $OUTPUT_DIR.tar.gz $OUTPUT_DIR"
echo ""
echo "反馈研发时,请提供以下信息:"
echo " 1. 本报告文件"
echo " 2. 如有时序问题,提供tcpdump抓包文件(.pcap)"
echo " 3. 问题发生时间点和现象描述"
}
# 主函数
main() {
echo "Linux网络运维巡检脚本"
echo "========================"
echo ""
get_os_info | tee -a "$REPORT_FILE"
check_interfaces | tee -a "$REPORT_FILE"
check_routes | tee -a "$REPORT_FILE"
check_dns | tee -a "$REPORT_FILE"
check_connectivity | tee -a "$REPORT_FILE"
check_ports | tee -a "$REPORT_FILE"
check_firewall | tee -a "$REPORT_FILE"
check_services | tee -a "$REPORT_FILE"
check_logs | tee -a "$REPORT_FILE"
check_performance | tee -a "$REPORT_FILE"
capture_packets | tee -a "$REPORT_FILE"
generate_report | tee -a "$REPORT_FILE"
# 保存原始命令输出(不带颜色)
{
echo "========== 原始数据备份 =========="
echo "--- ip addr ---"
ip addr show
echo "--- ip route ---"
ip route show
echo "--- ss -tulnp ---"
ss -tulnp 2>/dev/null || true
echo "--- iptables ---"
iptables -L -n 2>/dev/null || true
echo "--- /etc/resolv.conf ---"
cat /etc/resolv.conf 2>/dev/null || true
} > "$OUTPUT_DIR/raw_data.txt" 2>&1
}
# 执行
main
使用方法:
bash
chmod +x linux_network_inspect.sh
sudo ./linux_network_inspect.sh
9.2 排查速查表 (linux_network_cheatsheet.md):涵盖7大场景的快速参考。
一、物理层/链路层问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 网卡不亮灯 | ethtool eth0 / ip link show |
检查网线、交换机端口、驱动 |
| 网卡状态DOWN | ip link set eth0 up |
启用网卡,检查NetworkManager |
| 无IP地址 | ip addr show / dhclient -v eth0 |
检查DHCP或手动配置静态IP |
| 丢包严重 | ip -s link show eth0 |
检查网线质量、网卡驱动、MTU设置 |
| 双工模式不匹配 | ethtool eth0 |
强制指定速率/双工模式 |
二、网络层问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 无法ping通网关 | ip route show / ping <gateway> |
检查路由表、网关配置、子网掩码 |
| 无法ping通外网 | traceroute 223.5.5.5 |
检查默认路由、NAT配置、防火墙 |
| 路由不可达 | ip route get <dest> |
添加静态路由或检查动态路由 |
| IP冲突 | arping -I eth0 <ip> |
更换IP或检查DHCP服务器 |
三、传输层问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 端口不通 | nc -zv <ip> <port> / telnet <ip> <port> |
检查服务是否启动、防火墙规则 |
| 连接被拒绝 | ss -tulnp / lsof -i :<port> |
确认服务监听地址(0.0.0.0 vs 127.0.0.1) |
| 连接超时 | tcpdump -i any host<ip> and port <port> |
抓包分析三次握手是否完成 |
| 大量TIME_WAIT | ss -s / netstat -an |
调整tcp_tw_reuse/recycle参数 |
| 大量CLOSE_WAIT | ss -tan |
检查应用程序是否及时关闭连接 |
四、应用层/DNS问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 域名无法解析 | dig <domain> / nslookup <domain> |
检查DNS配置、DNS服务器状态 |
| 解析结果错误 | dig +trace <domain> |
检查DNS缓存、hosts文件 |
| 解析慢 | dig @<dns-server> <domain> |
更换DNS服务器、检查网络延迟 |
| 部分网站打不开 | curl -v <url> |
检查HTTP代理、HTTPS证书 |
五、防火墙问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 端口已开放但外部不通 | iptables -L -n / firewall-cmd --list-all |
检查INPUT链、区域设置 |
| 防火墙规则不生效 | iptables-save / firewall-cmd --reload |
保存规则、重载防火墙 |
| 安全软件拦截 | kysec_status (麒麟) |
检查麒麟安全机制、SELinux |
| 连接被重置 | iptables -L -n -v |
检查REJECT/DROP规则 |
六、性能问题
| 现象 | 排查命令 | 解决思路 |
|---|---|---|
| 网络延迟高 | mtr --report <target> |
定位延迟节点、检查带宽 |
| 带宽不足 | iperf3 -c <server> |
检查网卡速率、交换机端口 |
| 连接数过多 | ss -s / cat /proc/net/sockstat |
调整内核参数、优化应用 |
| 网卡软中断高 | cat /proc/interrupts |
开启RPS/XPS、调整中断亲和性 |
七、日志定位
| 场景 | 命令 |
|---|---|
| 查看网络服务日志 | journalctl -u NetworkManager -f |
| 查看内核网络日志 | `dmesg |
| 查看防火墙日志 | journalctl -u firewalld -f |
| 查看认证日志 | journalctl -u sshd -f |
| 实时跟踪所有日志 | journalctl -f |
| 查看历史网络错误 | `journalctl --since "1 hour ago" |
八、抓包分析
| 场景 | 命令 |
|---|---|
| 抓取所有流量 | sudo tcpdump -i any -w capture.pcap |
| 抓取特定端口 | sudo tcpdump -i any port 80 -w http.pcap |
| 抓取特定主机 | sudo tcpdump -i any host 192.168.1.1 |
| 抓取特定网段 | sudo tcpdump -i any net 192.168.1.0/24 |
| 只抓SYN包 | sudo tcpdump 'tcp[tcpflags] & tcp-syn != 0' |
| 抓取ICMP | sudo tcpdump -i any icmp |
| 限制抓包大小 | sudo tcpdump -i any -s 0 -w full.pcap |
| 轮转抓包(按大小) | sudo tcpdump -i any -C 100 -W 5 -w rotate.pcap |
9.3 巡检报告模板 (network_inspection_report_template.md):标准化报告格式,便于归档和反馈。
Linux网络运维巡检报告
基本信息
- 巡检时间: {datetime}
- 主机名: {hostname}
- 操作系统: {os_version}
- 内核版本: {kernel}
- 巡检人: _____________
- 业务系统: _____________
一、网络接口状态
1.1 接口列表
bash
ip -br link show
结果记录:
| 接口名 | 状态 | MAC地址 | 备注 |
|---|---|---|---|
| eth0 | UP | xx:xx:xx:xx:xx:xx | |
| lo | UP | 00:00:00:00:00:00 |
1.2 IP地址配置
bash
ip -br addr show
结果记录:
| 接口名 | IP地址 | 子网掩码 | 状态 |
|---|---|---|---|
| eth0 | 192.168.1.100/24 | 255.255.255.0 | 正常 |
1.3 网卡统计信息
bash
ip -s link show eth0
关注指标:
| 指标 | RX值 | TX值 | 是否正常 |
|---|---|---|---|
| errors | 0 | 0 | ✓ |
| dropped | 0 | 0 | ✓ |
| overrun | 0 | - | ✓ |
二、路由与DNS
2.1 路由表
bash
ip route show
关键路由:
| 目标网络 | 网关 | 接口 | 备注 |
|---|---|---|---|
| default | 192.168.1.1 | eth0 | 默认路由 |
2.2 DNS配置
bash
cat /etc/resolv.conf
resolvectl status
DNS服务器:
| 优先级 | DNS地址 | 状态 |
|---|---|---|
| 1 | 223.5.5.5 | 正常 |
| 2 | 114.114.114.114 | 正常 |
三、连通性测试
3.1 基础连通性
| 测试目标 | 命令 | 结果 | 延迟 |
|---|---|---|---|
| 本地回环 | ping 127.0.0.1 | ✓通 | <1ms |
| 网关 | ping 192.168.1.1 | ✓通 | 1ms |
| 外网IP | ping 223.5.5.5 | ✓通 | 15ms |
| 外网域名 | ping www.baidu.com | ✓通 | 20ms |
3.2 端口连通性
| 目标地址 | 端口 | 协议 | 结果 | 备注 |
|---|---|---|---|---|
| 192.168.1.10 | 22 | TCP | ✓通 | SSH服务 |
| 192.168.1.10 | 80 | TCP | ✓通 | HTTP服务 |
| 192.168.1.10 | 443 | TCP | ✓通 | HTTPS服务 |
四、服务与端口
4.1 监听端口
bash
ss -tulnp
| 协议 | 端口 | 服务 | 进程 | 状态 |
|---|---|---|---|---|
| TCP | 22 | sshd | 1234 | LISTEN |
| TCP | 80 | nginx | 5678 | LISTEN |
4.2 连接状态统计
bash
ss -s
| 状态类型 | 数量 | 是否正常 |
|---|---|---|
| ESTAB | 45 | ✓ |
| TIME-WAIT | 120 | 关注 |
| CLOSE-WAIT | 5 | ✓ |
五、防火墙状态
5.1 firewalld状态
bash
systemctl status firewalld
firewall-cmd --list-all
状态: running / stopped
开放端口: _____________
开放服务: _____________
5.2 iptables规则
bash
iptables -L -n -v
关键规则记录: _____________
六、日志检查
6.1 内核日志
bash
dmesg | grep -i network | tail -20
异常记录: _____________
6.2 服务日志
bash
journalctl -u NetworkManager --no-pager -n 30
异常记录: _____________
七、性能指标
7.1 网卡性能
bash
ethtool eth0
| 指标 | 当前值 | 期望值 | 状态 |
|---|---|---|---|
| Speed | 1000Mb/s | 1000Mb/s | ✓ |
| Duplex | Full | Full | ✓ |
| Link detected | yes | yes | ✓ |
7.2 连接统计
bash
cat /proc/net/sockstat
| 类型 | 数量 | 状态 |
|---|---|---|
| TCP inuse | 50 | ✓ |
| UDP inuse | 10 | ✓ |
八、问题记录与处理
| 序号 | 问题描述 | 发现时间 | 处理措施 | 处理结果 | 备注 |
|---|---|---|---|---|---|
| 1 | |||||
| 2 |
九、巡检结论
网络状态正常,无需处理
发现轻微异常,已处理/需跟进
发现严重异常,已上报/紧急处理
巡检结论: _____________
下一步建议: _____________
十、附件清单
巡检脚本输出日志
tcpdump抓包文件(.pcap)
系统日志导出
其他: _____________
巡检人签字: _____________ 日期: _____________
审核人签字: _____________ 日期: _____________
第十部分:关键注意事项
- 权限要求 : 大部分网络排查命令需要
root权限,建议实施工程师使用sudo或在客户授权下操作 - 生产环境谨慎操作: 修改防火墙规则、路由表前,务必确认有备用访问通道(如IPMI、Console)
- 及时备份 : 修改网络配置前,备份原配置文件(如
/etc/netplan/*.yaml、/etc/sysconfig/network-scripts/ifcfg-*) - 记录基线: 系统正常运行时记录网络性能基线,便于故障时对比
- 版本差异: 麒麟V10桌面版与服务器版网络管理工具可能不同,先确认系统版本再执行命令
- 安全机制: 国产系统可能集成额外安全模块(如Kysec),排查时需综合考虑
第十一部分:推荐学习路径
- 基础: 掌握TCP/IP协议栈、OSI七层模型
- 工具 : 熟练使用
ip/ss/tcpdump/wireshark - 进阶 : 理解Linux内核网络参数调优(
sysctl) - 实战: 建立个人故障案例库,积累排查经验
🎯 核心原则 : "先连通、后优化;先抓包、后猜测" ------ 任何网络问题,用
tcpdump抓包分析永远是最直接有效的手段。
附录:核心概念速查表
| 概念 | 一句话解释 |
|---|---|
| 协议 | 设备间通信的"语法规则" |
| IP地址 | 网络中的逻辑地址,类似"省市区街道" |
| MAC地址 | 网卡的物理地址,类似"门牌号" |
| 端口 | 区分同一主机不同服务的逻辑通道 |
| 路由 | 选择数据包最佳传输路径的过程 |
| DNS | 互联网的"电话簿",域名↔IP转换 |
| 防火墙 | 网络安全的"门卫",控制数据进出 |
| NAT | 私有IP↔公网IP的地址转换 |
| VLAN | 把物理交换机逻辑划分成多个独立网络 |
| 三次握手 | TCP建立连接的三个步骤(SYN→SYN+ACK→ACK) |
| 四次挥手 | TCP断开连接的四个步骤 |
| MTU | 最大传输单元,以太网默认1500字节 |
| CIDR | 用"/数字"表示子网掩码的简洁写法 |
| DHCP | 自动分配IP地址等网络参数的协议 |
| ICMP | 网络诊断和差错报告的协议(ping用它) |
| ARP | IP地址→MAC地址的查询协议 |
| TCP | 可靠、面向连接的传输协议(挂号信) |
| UDP | 快速、不可靠的传输协议(明信片) |
| socket | 传输层连接的抽象,= IP+端口 |
| pcap | 标准网络抓包文件格式 |
本文档基于麒麟V10、Ubuntu 22.04等主流系统实践整理,结合OSI七层与TCP/IP四层模型,从零基础到实战排查,适合实施工程师系统学习。