这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 分层模型是计算机网络的地图。它把一个复杂问题拆成职责清晰的层次:物理层负责信号,链路层负责同一局域网内的帧传输,网络层负责跨网络寻址,传输层负责进程到进程的通信,应用层负责业务语义。
本章重点不是背 OSI 七层名字,而是理解每层解决什么问题、数据如何穿过协议栈、排障时应该在哪一层找证据。
2.1 OSI 与 TCP/IP 模型
| OSI 层 | TCP/IP 常见层 | 核心问题 | 典型协议 |
|---|---|---|---|
| 应用层 | 应用层 | 业务语义、请求响应 | HTTP、DNS、SMTP、RPC |
| 表示层 | 应用层 | 编码、压缩、加密 | JSON、Protobuf、TLS |
| 会话层 | 应用层 | 会话与状态 | Cookie、Token、WebSocket |
| 传输层 | 传输层 | 端口、可靠或低延迟传输 | TCP、UDP、QUIC |
| 网络层 | 网络层 | 寻址与路由 | IPv4、IPv6、ICMP |
| 数据链路层 | 链路层 | 相邻设备帧传输 | Ethernet、ARP、VLAN |
| 物理层 | 物理层 | 信号与介质 | 光纤、双绞线、无线 |
工程中常用五层视角:
Application 业务协议、编码、安全语义
Transport 端口、连接、可靠性和流控
Network IP 寻址、路由、分片
Link MAC、帧、VLAN、ARP
Physical 信号、接口、线路
分层不是物理隔离。现代系统里,TLS 在协议上位于传输层之上,但常被归入应用层安全协议;QUIC 基于 UDP,却在用户态实现了可靠传输、流多路复用和加密。
2.2 封装与解封装
发送方逐层加头,接收方逐层去头:
应用数据
+ TCP Header
= TCP Segment
+ IP Header
= IP Packet
+ Ethernet Header / Trailer
= Frame
接收过程相反:
Frame
-> IP Packet
-> TCP Segment
-> Application Data
各层地址:
| 层 | 地址 |
|---|---|
| 应用层 | URL、域名、用户 ID |
| 传输层 | 端口号 |
| 网络层 | IP 地址 |
| 链路层 | MAC 地址 |
| 物理层 | 接口、端口、信号 |
一个常见误区是认为 MAC 和 IP 谁替代谁。MAC 标识同一链路上的接口,IP 支持跨网络路由;跨网段通信中,目的 IP 通常不变,而下一跳 MAC 会逐跳变化。
2.3 每层的故障特征
| 层 | 典型现象 | 排查工具 |
|---|---|---|
| 物理层 | 接口 down、丢包、速率异常 | ethtool、交换机端口 |
| 链路层 | ARP 失败、VLAN 错、MAC 冲突 | arp、ip neigh、tcpdump |
| 网络层 | 无路由、TTL 超时、丢包 | ping、traceroute、mtr |
| 传输层 | 端口不通、握手失败、重传高 | ss、nmap、tcpdump |
| 应用层 | 404、证书错误、超时、语义错误 | curl、日志、trace |
示例:
ip link
ip addr
ip route
ip neigh
ss -ntp
curl -v https://www.example.com
排障时先确认范围:单个服务、单台机器、一个子网,还是全网。再从底层往上验证,能显著减少无效猜测。
2.4 协议演进与分层弹性
传统 HTTP/1.1 over TCP over IP 的结构清晰,但性能瓶颈也明显:
HTTP/1.1:队头阻塞
TCP:单一字节流,丢包影响所有请求
TLS:握手带来额外 RTT
现代方案:
| 方案 | 变化 |
|---|---|
| HTTP/2 | 二进制分帧、多路复用,仍基于 TCP |
| TLS 1.3 | 握手更短、前向安全更强 |
| HTTP/3 | 基于 QUIC,集成可靠传输、流复用和 TLS 1.3 |
| QUIC | 运行在 UDP 上,在用户态实现传输能力 |
这说明分层模型是分析工具,而不是僵化架构。工程中仍会按职责分层,但实现边界可以根据性能、安全和演进需求调整。
2.5 用分层模型做架构设计
设计一个后端服务时,每层都有决策:
应用层:接口语义、幂等、错误码、压缩、认证
传输层:TCP/UDP、连接池、超时、心跳
网络层:VPC、子网、路由、可用区
链路层:VLAN、网卡、bond
物理层:机房、带宽、拓扑
示例:跨机房调用 RTT 高,应用层应减少请求次数;网卡丢包,应用层重试只能止血,根因仍要修网络;证书配置错误,换 HTTP 短连接无法解决问题。
本章小结
分层模型把网络拆成物理、链路、网络、传输和应用职责,数据通过封装和解封装穿过协议栈。MAC 用于链路内通信,IP 用于跨网络路由,端口用于进程通信,应用协议承载业务语义。现代 QUIC 和 HTTP/3 说明分层边界可以演进,但分析问题时应继续按职责分层定位。
思考题
- OSI 七层和 TCP/IP 五层分别适合什么场景?
- 发送一个 HTTP POST 时,数据经历了哪些封装过程?
- 为什么跨网段通信中目的 IP 常不变而下一跳 MAC 变化?
- “端口不通”和“无路由”分别对应哪一层?
- 用分层模型写一份服务访问失败的排查清单。