网络分层模型(5 层 / 7 层)

- 物理层(Physical):负责比特流的传输与电气/光学信号转换。典型硬件包括网线、光纤、网络接口卡、集线器等;软件层面主要由驱动程序与固件控制信号发送。
- 数据链路层(Data Link):在同一局域网内建立可靠链路,处理 MAC 地址、帧校验。硬件设备如交换机、网桥;对应软件是网卡驱动、内核中的以太网协议栈(如 Linux 的 eth 、bridge 模块)。
- 网络层(Network):负责跨网络的寻址与路由(IP 协议)。硬件侧通常是三层交换机、路由器;软件侧包括操作系统的 IP 协议栈、路由表、ip 命令、iptables 等。
- 传输层(Transport):提供端到端的传输控制(TCP、UDP)。主要由操作系统内核中的传输层实现,常见软件组件包括 socket API、netstat 、ss 。
- 会话层(Session):管理会话、连接维护与同步,在现代实现里多由应用协议或中间件处理,如 RPC 框架、会话管理库。
- 表示层(Presentation):负责数据格式、加密与解密,如 TLS/SSL、字符编码转换。对应软件包括OpenSSL、GnuTLS、序列化库(JSON、ProtoBuf)。
- 应用层(Application):直接面向用户的网络应用协议,如 HTTP、SSH、FTP;对应软件是浏览器、SSH 客户端、数据库客户端等。
说明:实际工程常使用 TCP/IP 5 层模型,将会话层与表示层合并到应用层。理解各层能帮助在故障排查时快速定位是物理问题、网络层问题还是应用配置问题。
上网原理概述
- 网络接口:设备的有线网卡或无线网卡负责发送与接收数据,必须具备正确的硬件状态与驱动支持。
- 数据链路:层通过网线、无线电波连接交换机、路由器等网络设备,形成局域网。
- 网络层:使用 IP 协议,设备需要正确的 IP 地址、子网掩码和默认网关,才能与其他主机通信。
- 传输层:常见的 TCP、UDP 协议负责提供可靠或快速的数据传输通道。
- 应用层:浏览器、SSH、数据库客户端等具体应用通过网络协议访问远程服务。
- DNS 与路由:DNS 负责将域名解析为 IP 地址;路由器根据路由表决定数据包转发路径,最终达到目标服务器或互联网。
各层常见故障与排查
物理层
- 可能故障:电源中断、网线损坏、光模块松动、接口未插紧、无线开关关闭。
- 观察与判定:
电源灯常亮或缓慢闪烁代表供电稳定;熄灭或快速闪烁为异常。
网卡 Link/Act 灯常亮并伴随闪烁表示接通且有流量;全暗或变红说明物理链路断开。

常见指示规律:“常亮=链路建立、闪烁=有流量”。百兆网口多为黄色/橙色常亮表示 100 Mbps 链路、绿色闪烁代表数据传输;千兆网口通常绿灯常亮表示 1000 Mbps 正常联通、黄灯/另一盏灯闪烁表示实时流量。
若网线内部双绞对接错(例如部分线芯反接),常见现象是指示灯间歇亮灭、链路速率降到 10/100 Mbps、ethtool 显示大量 Tx/Rx errors 或 CRC 错误,数据传输极慢。标准 T568B 线序由 1 到 8 依次为:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕;T568A 则为白绿、绿、白橙、蓝、白蓝、橙、白棕、棕。可使用网线测试仪检测八芯对应关系,或更换一根合格网线验证。 - 排查步骤:重新插拔电源、确认插座或 UPS 供电;检查网线卡扣并尝试更换另一根线或端口;无线适配器按下硬件开关或功能键(如 Fn+F5)。
- 解决建议:替换损坏线缆/光纤、修复或更换异常端口;必要时重启交换机/路由器;为易松动的接口配固定卡扣。
数据链路层
- 可能故障:网卡未启用、驱动缺失、MAC 地址冲突、交换机 VLAN 配置错误。
- 观察与判定:
ip link show 显示接口 state DOWN 或接口未列出。
dmesg 出现 device not found 、firmware missing 、Tx timeout 等信息。
局域网内其他主机的 arp -a 中没有该主机 MAC,或提示冲突。 - 排查步骤:
sudo ip link set <接口> up 尝试启用;若失败继续排查。
lspci | grep -i ethernet 、lsusb | grep -i wireless 确认硬件被识别。
dmesg | grep -i <接口> 检查驱动加载消息,必要时安装/更新内核模块(如 sudo modprobe e1000e )。
与网络管理员核实交换机端口 VLAN/Trunk 配置是否正确。 - 解决建议:重新安装驱动或固件、升级内核、调整 VLAN;若网卡故障则更换硬件。
网络层
-
可能故障:IP/子网掩码/网关配置错误、DHCP 故障、路由缺失或错误、IP 冲突。
-
观察与判定:
- ip addr show 无 inet 地址或出现 169.254.x.x 。
- ip route 缺少 default 网关或指向无效接口。
- ping 同网段设备失败但物理层正常。
- 能 ping 小包却无法传输大报文、HTTPS/SSH 连接容易超时,常见于 MTU 设置过小或被PPPoE/隧道额外封装压缩。
- ip netns list 显示存在网络命名空间,或 ip -br addr 只在特定命名空间内可见接口,提示可能被容器/虚拟化隔离导致主命名空间无法访问。
-
排查步骤:
-
确认网络管理工具:
- NetworkManager: systemctl is-active NetworkManager 为 active ; nmcli general status 能返回状态。
- Netplan: ls /etc/netplan/ 有 YAML 文件; sudo netplan status 可查看当前配置。
- systemd-networkd: systemctl is-active systemd-networkd 为 active ;配置在/etc/systemd/network/ 。
- ifupdown(传统脚本):Debian/旧版 Ubuntu 使用 /etc/network/interfaces ,可用ifquery –list 查看。
- 多个工具同时运行:如果 systemctl 显示 NetworkManager 和 systemd-networkd 均为active ,或 Netplan 配置与 NetworkManager 同时存在,可能出现互相覆盖,应决定保留其一,并停用/禁用其他服务(如 sudo systemctl disable –now systemd-networkd )。
- 都未运行:若所有管理工具均显示 inactive ,网络接口可能由手工脚本或容器化平台接管。可临时使用 sudo ip addr add 、sudo ip route add 手动设定,并确认是否有网管脚本(如/etc/rc.local 、/usr/local/bin/*.sh )或云平台代理。
- DHCP 请求被拒绝: sudo dhclient -v 输出包含 DHCPREQUEST on <接口> 后接 DHCPNAK 、No DHCPOFFERS received ,或 NetworkManager 日志出现 dhcp4 (接口): request denied 。此时说明网络联通正常但服务器拒绝分配地址,可临时配置静态 IP 保持通信,并将日志截图、MAC 地址与所需网段提交给 DHCP 管理员排查(检查地址池、认证策略、保留 IP 冲突等)。
-
针对工具核对配置:
-
NetworkManager: nmcli dev show <接口> 、nmcli connection show 查看 IP、网关、DNS;必要时用 nm-connection-editor 或 nmcli connection edit 调整。
- 命令方式设置静态 IP,参考脚本:
1 2 3 4 5 6nmcli connection modify <连接名> \ ipv4.method manual \ ipv4.addresses 192.168.1.10/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8 114.114.114.114" nmcli connection up <连接名> - 配置文件方式:编辑 /etc/NetworkManager/system-onnections/<连接名>.nmconnection ,可参考模板:
保存后执行 sudo nmcli connection reload && sudo nmcli connection up <连接名> 。
1 2 3 4 5 6 7 8 9[connection] id=<连接名> type=ethernet [ipv4] method=manual addresses1=192.168.1.10/24,192.168.1.1 dns=8.8.8.8;114.114.114.114 [ipv6] method=ignore
- 命令方式设置静态 IP,参考脚本:
-
Netplan:编辑 /etc/netplan/*.yaml 中的 addresses 、gateway4 、nameservers ,执行 sudo netplan apply 或 sudo netplan try 。
- 命令方式,参考脚本:
1 2 3 4 5 6sudo netplan set \ network.ethernets.eth0.addresses=[192.168.1.10/24] \ network.ethernets.eth0.gateway4=192.168.1.1 \ network.ethernets.eth0.nameservers.addresses= [8.8.8.8,114.114.114.114] sudo netplan apply - 配置文件方式:在 YAML 中手工填写,模板示例:
保存后运行 sudo netplan apply 。
1 2 3 4 5 6 7 8 9 10 11 12network: version: 2 renderer: NetworkManager ethernets: eth0: addresses: - 192.168.1.10/24 gateway4: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 114.114.114.114
- 命令方式,参考脚本:
-
ifupdown:查看 /etc/network/interfaces ,用 sudo ifdown <接口> && sudo ifup <接口> 让配置生效
- 命令方式:临时运行 sudo ip addr add 192.168.1.10/24 dev eth0 、sudo ip route add default via 192.168.1.1 、在 /etc/resolv.conf 中写入 nameserver 8.8.8.8 ,重启后需重新配置。
- 配置文件方式:在 /etc/network/interfaces 中添加,模板示例:
保存后执行 sudo ifdown eth0 && sudo ifup eth0 。
1 2 3 4 5 6auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 114.114.114.114
-
-
DHCP: sudo dhclient -v <接口> ,关注是否收到 bound 日志;若 No DHCPOFFERS received ,检查 DHCP 服务或接入网络。若需恢复自动获取,可按所用工具配置成 DHCP 模式:
- NetworkManager:编辑 /etc/NetworkManager/system-connections/<连接名>.nmconnection ,在 [ipv4] 段写入:
保存后执行 sudo nmcli connection reload && sudo nmcli connection up <连接名> 。
1 2 3[ipv4] method=auto ignore-auto-dns=false - Netplan:
保存后 sudo netplan apply 。
1 2 3 4 5 6network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true - systemd-networkd:
保存到 /etc/systemd/network/10-eth0.network 后 sudo systemctl restart systemdnetworkd
1 2 3 4 5[Match] Name=eth0 [Network] DHCP=yes - ifupdown:
写入 /etc/network/interfaces ,执行 sudo ifdown eth0 && sudo ifup eth0
1 2auto eth0 iface eth0 inet dhcp
- NetworkManager:编辑 /etc/NetworkManager/system-connections/<连接名>.nmconnection ,在 [ipv4] 段写入:
-
静态 IP:结合上一步确认的管理工具核对配置文件;应用后再查 ip addr 确认生效。
-
路由: ip route get 8.8.8.8 确认出接口;必要时 sudo ip route add default via <网关> 。
-
MTU:使用 ping -M do -s 1472 8.8.8.8 测试是否出现 Frag needed ,或对比 ip link show <接口> 的 mtu 值;若存在隧道/PPPoE,可将 MTU 调小(如 1492/1450)并在配置文件中同步更新。
-
命名空间隔离:若接口位于容器或 ip netns 环境,需进入对应命名空间( ip netns exec
bash )检查配置,或调整 CNI/容器网络策略将接口暴露到宿主。 -
IP 冲突: arping <本机IP> 或 ip monitor neigh 观察是否收到冲突提示。
-
DHCP 被拒场景:联系 DHCP 管理员检查地址池是否耗尽、MAC 是否被限制、租约是否过期;必要时先配置临时静态 IP 保持联通,并记录 dhclient 输出、交换机端口信息,便于服务器侧解除限制或调整策略。
-
传输层
- 可能故障:防火墙阻断、端口未监听或被占用、NAT 映射异常、连接被中途重置。
- 观察与判定:
- ss -tulpn / netstat -tulpn 查看监听端口与进程。
- ufw status 、sudo iptables -L -n -v 显示有拒绝策略。
- telnet / nc 到目标端口失败,但 ping 正常。
- 排查步骤:
- 临时关闭/放宽防火墙( sudo ufw disable 、sudo systemctl stop firewalld )验证是否为规则引起。
- 检查 NAT/端口映射设置;在路由器或防火墙控制台查看转发表。
- 使用 nc -vz <主机> <端口> 或 curl -I 验证端口连通;关注服务器日志是否出现 connectionreset
- 解决建议:开放必要端口、调整 NAT 映射、释放被占用端口或修改服务端口、对路由器升级固件或重启。
- 观察与判定:
会话层
- 可能故障:会话超时、认证失败、VPN 隧道未建立、会话保持配置错误。
- 观察与判定:
- PN 客户端提示 auth failed 、 TLS handshake failed 或频繁掉线。
- SSH、数据库等长连接频繁中断并报 connection reset by peer 。
- 日志出现 session expired 、 token invalid 、 keepalive timeout 。
- 排查步骤:
-
确认系统时间与服务器同步( timedatectl 、 ntpstat )。若需要手动调整,可使用:
1 2sudo timedatectl set-timezone Asia/Shanghai sudo timedatectl set-time "2025-01-01 12:00:00"判断当前 NTP 服务由谁管理,可通过:
1 2 3 4 5 6timedatectl | grep "System clock synchronized" timedatectl show --property=NTPSynchronized systemctl list-units | grep -E 'ntp|chrony|timesync' systemctl status systemd-timesyncd systemctl status chronyd systemctl status ntpd哪个服务处于
active (running)状态,通常即为当前同步源。
检查时间服务器可达性,可以先ping ntp.aliyun.com、dig ntp.aliyun.com验证解析,再用ntpdate -q ntp.aliyun.com或chronyc sources -n观测延迟/偏差;必要时确认防火墙已放行UDP/123。
systemd-timesyncd 正常与否可通过timedatectl timesync-status或journalctl -u systemd-timesyncd查看;chrony 使用chronyc tracking、chronyc sources;若是传统 ntpd,可运行ntpq -p。
将系统加入 NTP 同步,步骤示例(systemd-timesyncd):1 2 3 4 5 6 7 8sudo timedatectl set-ntp true # 或编辑 /etc/systemd/timesyncd.conf 指定上游: sudo tee /etc/systemd/timesyncd.conf <<'EOF' [Time] NTP=ntp.aliyun.com ntp.tencent.com FallbackNTP=time.windows.com time.google.com EOF sudo systemctl restart systemd-timesyncd对使用 chrony 的系统,可在 /etc/chrony.conf 添加:
1 2server ntp.aliyun.com iburst server ntp.tencent.com iburst保存后
sudo systemctl restart chronyd。完成后再次运行timedatectl或chronyc sources验证同步状态。
传统 ntpd (ntpq) 配置示例可编辑/etc/ntp.conf:1 2 3 4 5 6 7driftfile /var/lib/ntp/ntp.drift restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 server ntp.aliyun.com iburst server ntp.tencent.com iburst server time.google.com iburst保存后执行
sudo systemctl restart ntpd,再通过ntpq -p检查对时状态。
常用时间服务器示例:- 国内:
ntp.aliyun.com、ntp.tencent.com、ntp.ntsc.ac.cn(授时中心)、cn.pool.ntp.org - 海外:
time.google.com、time.cloudflare.com、time.windows.com、pool.ntp.org
- 国内:
-
查看 VPN/SSH/中间件日志(如
/var/log/openvpn.log、journalctl -u sshd)。 -
检查会话保持配置:TCP keepalive、反向代理的超时时间、负载均衡的健康检查。
-
若涉及安全设备策略,与管理员确认会话时长限制。
-
- 解决建议:同步时间、更新凭证或口令、调高超时阈值、修正 VPN/代理配置。
表示层
- 可能故障:证书过期/不受信任、加密套件不匹配、字符编码错误、压缩包损坏。
- 观察与判定:
- HTTPS 或 TLS 客户端报
SSL certificate problem、浏览器提示证书无效。 - 日志包含
unsupported cipher、bad record mac、编码转换异常。
- HTTPS 或 TLS 客户端报
- 排查步骤:
openssl s_client -connect <主机>:443检查证书链、有效期、协商的加密套件。- 确认系统信任库(
/etc/ssl/certs)中存在根证书;必要时更新 CA 包。 - 针对数据交换格式,使用
iconv、jq、xmllint等工具验证内容合法性。
- 解决建议:续签或替换证书、统一 TLS 版本与加密套件、修正编码/序列化逻辑、确保双方使用兼容的压缩方案。
应用层
- 可能故障:服务未启动、配置错误、资源耗尽、依赖不可用、程序 BUG。
- 观察与判定:
systemctl status <服务>显示failed、inactive或进程不断重启。- 应用日志出现
connection refused、permission denied、cannot connect to database等。 top/htop显示 CPU、内存或磁盘耗尽。
- 排查步骤:
- 查看 journalctl -u <服务> 与应用自身日志(如
/var/log/nginx/error.log、/var/log/mysql/error.log)。 - 使用应用提供的自检命令( nginx -t 、 named-checkconf 、 mysqladmin ping )。
- 检查配置文件语法、路径、权限;确认依赖服务是否可达。
- 通过 systemctl restart <服务> 测试恢复情况,必要时启用 debug 日志。
- 查看 journalctl -u <服务> 与应用自身日志(如
- 解决建议:修正配置或权限、扩容资源、更新或回滚软件版本、修复程序 BUG、保障依赖组件稳定。
综合排查流程(按层推进)
- 明确故障现象:记录目标地址、时间点、错误提示,确保排查有方向。
- 物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层,逐级排除,勿跳层。
- 每完成一层排查即进行测试(如重新 ping、访问服务),若问题解决及时记录;若未解决,再进入上一层。
- 过程中保留命令输出与日志截图,方便回溯或向同事/厂商求助。
常用命令速查
- 物理/链路:
ip link show、ethtool <接口>、lspci、lsusb、dmesg - 网络层:
ip addr、ip route、arp -a、dhclient - 传输层:
ss -tulpn、netstat -an、ufw status、iptables -L -n -v - 会话层:
journalctl -u sshd、VPN客户端日志、timedatectl、ntpstat - 表示层:
openssl s_client、curl -v、iconv - 应用层:
systemctl status、nginx -t、mysqladmin ping、tail -f <日志>
故障分析习惯与建议
- 先处理最可能的简单问题,再深入复杂层级,避免误判。
- 每次仅修改一项并立即验证,防止连续改动导致问题叠加。
- 将排查过程、结果与最终方案记录成文档或脚本,方便下次复用。
- 对关键服务建立监控、日志告警与定期巡检,提前发现异常。
常见“假性故障”示例
- 无法 SSH:误以为网络断开,实则服务器未安装或未启动
sshd,或禁止密码登录。可通过进程与端口(systemctl status sshd、ss -tnlp | grep 22) 验证。 - PING不通:部分服务器禁用 ICMP 或被防火墙丢弃,但 TCP/HTTP 访问正常。遇到
ping超时时,可以改用curl、nc、traceroute检查。 - DNS 解析失败:手动修改
/etc/resolv.conf后仍被 NetworkManager/Netplan覆盖,看似DNS不可用。- JelinaOS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15cat >$ROOTFS/etc/resolvconf.conf <<EOF resolv_conf=/etc/resolv.conf resolvconf=NO EOF chmod 644 $ROOTFS/etc/resolvconf.conf # avoid dhclient edit resolv.conf mkdir -p $ROOTFS/etc/dhcp/dhclient-enter-hooks.d/ cat >$ROOTFS/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate <<EOF make_resolv_conf() { : } EOF chmod 755 $ROOTFS/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate ln -sf '../run/systemd/resolve/stub-resolv.conf' $rootfs/etc/resolv.conf ln -srf /run/systemd/resolve/stub-resolv.con
- JelinaOS:
- 网页打不开:浏览器提示证书错误或 403,误判为网络故障。实际是 HTTPS 证书过期、自签名未导入、或账号权限不足。
- 端口扫描无响应:认为目标离线,但服务绑定在特定内网 IP 或只允许白名单访问。核对服务监听列表与防火墙规则。