写在前面
网络是后端、云原生、分布式都绕不开的地基,可它偏偏是那种"天天用、却很少系统学"的东西——出问题时抓包看不懂、调内核参数不知道原理、被人问"TCP 为什么是三次握手"答不完整。
这个系列从分层模型开始,自底向上把 TCP/IP 讲透。第一篇先回答最基础也最重要的问题:网络为什么要分层 ,以及 OSI、TCP/IP、平时说的"五层"这三种模型到底什么关系、怎么对应。
一、为什么需要分层
先想象不分层的网络是什么样:一个大程序要同时管电缆上的电信号、怎么给数据编址、怎么保证可靠、要不要加密、网页是什么格式……只要换一个环节(比如从有线换成无线),整个程序都得重写。
分层把这套极复杂的问题切成互不干扰的几层,每层只解决一件事,对上提供接口、对下使用下层服务。这样换来四个好处:
- 解耦 —— 换网卡、换链路(有线 / 无线)不影响上面的 HTTP;
- 复用 —— TCP 这一套可靠性机制,HTTP、SSH、数据库协议都能直接用;
- 标准化 —— 不同厂商的设备能互通,因为大家都按同一套分层与接口来实现;
- 可排查 —— 出问题时能按层定位(是物理断了?链路冲突?路由不通?端口被占?还是应用 bug?)。
一句话:分层把"两台机器上的程序互相通信"这件极复杂的事,拆成若干个可独立设计、可替换的简单问题 。
二、OSI 七层模型
OSI(Open Systems Interconnection)是 ISO 在 1984 年提出的参考模型,把网络通信分成七层。它是"教科书标准",概念清晰,但现实里的协议很少严格按七层实现。
自底向上:
| 层 | 名称 | 负责什么 | 典型协议 / 设备 |
|---|---|---|---|
| 7 | 应用层 Application | 为用户程序提供网络服务接口 | HTTP、DNS、SMTP、SSH |
| 6 | 表示层 Presentation | 数据格式转换、编码、加解密、压缩 | TLS、JPEG、ASCII |
| 5 | 会话层 Session | 建立 / 管理 / 断开会话 | (少有独立的会话层协议) |
| 4 | 传输层 Transport | 端到端通信、可靠性与分段 | TCP、UDP |
| 3 | 网络层 Network | 跨网络寻址与路由 | IP、ICMP、路由器 |
| 2 | 数据链路层 Data Link | 相邻节点间成帧、差错检测 | 以太网、Wi-Fi、交换机 |
| 1 | 物理层 Physical | 比特在介质上的传输 | 电缆、光纤、集线器 |
记忆顺序(自底向上):物理、链路、网络、传输、会话、表示、应用。
一个常见疑问:会话层、表示层为什么"没什么存在感"?因为在工程实践中,它们的功能往往被应用层或 TLS 顺手做掉了,没有单独的协议实体。这也是 OSI 在工程上不如 TCP/IP 贴合实际的原因之一。
三、TCP/IP 四层模型
TCP/IP 模型是伴随互联网(ARPANET)一起成长起来的工程模型(也叫 DoD 模型),RFC 1122 把它划成四层。它先有协议、再归纳模型,所以和实际协议贴得很紧——这一点和 OSI 正好相反。
| TCP/IP 层 | 对应 OSI | 负责什么 | 典型协议 |
|---|---|---|---|
| 应用层 Application | 5 / 6 / 7 | 应用逻辑 + 表示 + 会话全部合并 | HTTP、DNS、SMTP、TLS |
| 传输层 Transport | 4 | 端到端通信(端口、可靠性) | TCP、UDP |
| 网际层 Internet | 3 | 跨网寻址与路由 | IP、ICMP |
| 网络接口层 Network Access(Link) | 1 / 2 | 物理传输 + 成帧 | 以太网、Wi-Fi、PPP |
最容易混的是命名:TCP/IP 的网际层(Internet layer)对应 OSI 的网络层,别和"网络接口层"搞混——前者管 IP 路由,后者管链路成帧。最底下那层在不同教材里叫法不一(Network Access / Link / Network Interface),指的都是同一层。
四、实际用的五层模型
OSI 太细(会话 / 表示层实际很少单独存在),TCP/IP 太粗(把物理和链路合在一起,不好分开讲)。教学和工程里常用一个折中的五层模型,既好理解,又能一一对应到真实协议:
| 五层 | PDU 名称 | 典型协议 / 设备 |
|---|---|---|
| 应用层 | 报文 Message / Data | HTTP、DNS |
| 传输层 | 段 Segment(TCP)/ 数据报 Datagram(UDP) | TCP、UDP |
| 网络层 | 包 Packet(IP 数据报) | IP、ICMP、路由器 |
| 数据链路层 | 帧 Frame | 以太网、Wi-Fi、交换机 |
| 物理层 | 比特 Bit | 电缆、光纤、集线器 |
本系列后面的篇幅就按五层来展开(链路 → 网络 → 传输 → 应用),既保留 TCP/IP 的工程视角,又不丢 OSI 的概念清晰度。
三者怎么对应?一句话:TCP/IP 把 OSI 的 5/6/7 合成应用层、把 1/2 合成网络接口层;五层模型再把 TCP/IP 的网络接口层拆回物理和链路 。
五、封装与解封装:数据是怎么一层层"穿上"的
分层不是"各干各的就完了"——数据发送时,每一层都会在上层数据外面套一个自己的头部(链路层还会加尾部),这叫封装(encapsulation);接收端再逐层拆掉,叫解封装。
一次 HTTP 请求从你的机器发出去,要经历:
| |
每一层只认自己的头部,不关心(也看不懂)上层的载荷——这就是"解耦"在数据层面的体现。比如路由器只看到网络层的 IP 头就能决定往哪转发,完全不必读懂 TCP 或 HTTP。
这里出现的 PDU(Protocol Data Unit,协议数据单元)就是每一层处理后产生的数据单元:应用层叫报文、传输层叫段 / 数据报、网络层叫包、链路层叫帧、物理层叫比特。
六、每层靠什么"认人":地址
各层有各自的寻址方式,互不替代:
| 层 | 地址 | 说明 |
|---|---|---|
| 传输层 | 端口号 | 区分同一台机器上的不同进程(如 80 = HTTP) |
| 网络层 | IP 地址 | 跨网络定位主机,可路由 |
| 链路层 | MAC 地址 | 同一链路上定位网卡,出厂固化 |
后面几篇会分别展开:IP 地址怎么划分、路由怎么走(网络层),TCP 怎么用端口建立连接(传输层),ARP 怎么把 IP 翻译成 MAC(链路层)。
小结
- 分层是为了解耦、复用、标准化、可排查;
- OSI 七层是概念参考模型,TCP/IP 四层贴合实际协议,五层模型是教学折中;
- 数据发送时逐层封装(加头 / 尾),接收时逐层解封装;每层都有自己的 PDU 名称和地址体系。
下一篇:TCP/IP(二):以太网与链路层 —— MAC 地址、帧结构、交换机怎么转发、ARP 怎么把 IP 变成 MAC。
参考: