计算机网络涉及网卡、交换机、路由器、IP、TCP、HTTP 等大量概念。如果把所有内容混在一起学习,很容易只记住一个个协议,却无法理解它们之间的关系。
网络分层模型就是用来解决这个问题的:把复杂的网络通信拆分成多个相对独立的层次,每一层负责不同的问题,并通过明确的接口与上下层协作。
本文只关注网络分层本身,重点介绍 OSI 七层模型、TCP/IP 模型、数据封装与解封装、层与层之间的关系,以及实际网络设备和协议大致位于什么位置。这些概念足以帮助你理解常见网络故障的排查顺序。
为什么需要网络分层
如果不进行分层,网络通信可以被想象成一个巨大而复杂的系统:
网卡交换机路由器MACARPIPICMPTCPUDPDNSHTTPTLS应用程序...这些技术之间存在大量依赖关系。
例如:
HTTP ↓TCP ↓IP ↓Ethernet ↓物理介质如果所有概念都放在同一层理解,就很难回答:
HTTP 和 TCP 是什么关系?
IP 和 MAC 为什么同时存在?
交换机和路由器为什么做的事情不同?
一个数据包从应用程序到网线,经过了什么?
为什么同一个应用可以运行在不同网络上?于是网络体系采用:
分层(Layering)
的思想。
网络分层的基本思想
网络分层就是把通信过程拆成多个层次。
每一层:
负责自己的任务+向上层提供服务+使用下层提供的服务可以简单理解为:
应用 ↑ │ 使用 │ 传输层 ↑ │ 使用 │ 网络层 ↑ │ 使用 │ 链路层 ↑ │ 使用 │ 物理层每一层不需要知道所有底层实现细节。
例如:
HTTP 不需要知道网卡是如何把比特转换成电信号或无线信号的。
HTTP 更关心:
请求响应方法状态头部数据而底层则负责:
如何传输这些数据这就是分层的核心价值。
分层带来的好处
降低复杂度
一个网络通信问题可以拆成:
应用问题传输问题网络问题链路问题物理问题这样比研究整个系统简单得多。
模块化
某一层发生变化时,不一定需要修改整个网络体系。
例如:
应用层HTTP可以运行在不同的底层网络之上。
同样:
TCP也不需要知道具体应用是:
Web数据库SSH还是其他程序。
标准化
不同厂商只要遵循相同的协议标准,就可以互相通信。
例如:
厂商 A 的网卡 ↕ 标准网络协议 ↕厂商 B 的交换机不需要所有设备都来自同一家厂商。
便于故障排查
分层模型对运维尤其重要。
例如:
网站打不开不能直接得出:
“网络坏了”而应该逐层思考:
应用层↓HTTP 服务正常吗?
传输层↓TCP 连接建立了吗?
网络层↓IP 路由正常吗?
链路层↓网卡 / 交换网络正常吗?
物理层↓链路是否真的存在?这也是后续学习网络故障排查时非常重要的思维方式。
OSI 七层模型
最经典的网络分层模型是:
OSI(Open Systems Interconnection)参考模型
它定义了七个层次:
┌────────────────────┐│ 7 应用层 │├────────────────────┤│ 6 表示层 │├────────────────────┤│ 5 会话层 │├────────────────────┤│ 4 传输层 │├────────────────────┤│ 3 网络层 │├────────────────────┤│ 2 数据链路层 │├────────────────────┤│ 1 物理层 │└────────────────────┘从上到下:
应用表示会话传输网络数据链路物理第一层:物理层
物理层:
Physical Layer
负责最底层的比特传输。
它关注的是:
信号电气特性光信号无线信号连接介质接口比特传输例如:
铜缆光纤无线电波连接器信号电平物理层关心的问题类似:
如何把 0 和 1 变成可以传输的信号?可以简单表示:
比特 ↓信号 ↓物理介质 ↓信号 ↓比特第二层:数据链路层
数据链路层:
Data Link Layer
主要负责:
在直接相连的网络节点之间传输数据。
这一层通常涉及:
MAC 地址帧交换链路错误检测典型的数据单位:
Frame(帧)
例如:
Ethernet Frame属于这一层非常典型的内容。
可以简单理解:
网络层数据 ↓封装 ↓数据链路层帧 ↓通过局域网传输第三层:网络层
网络层:
Network Layer
主要解决:
不同网络之间的数据转发问题。
这一层的核心概念包括:
IP 地址路由路由表数据包典型协议:
IPv4IPv6ICMP网络层数据通常称为:
Packet(数据包)
例如:
主机 A ↓路由器 ↓路由器 ↓主机 B数据能够跨越多个网络,就是网络层解决的重要问题。
后续会单独介绍:
IP 地址子网CIDR路由路由表第四层:传输层
传输层:
Transport Layer
主要负责:
端到端的传输。
典型协议:
TCPUDP它解决的问题包括:
端到端通信端口可靠传输顺序流量控制不同协议的设计不同。
例如:
TCP↓可靠、面向连接
UDP↓无连接、开销较低传输层会进一步使用:
Port(端口)
区分同一台主机上的不同网络应用。
例如:
192.168.1.10:22192.168.1.10:80192.168.1.10:443第五层:会话层
会话层:
Session Layer
主要负责管理应用程序之间的:
会话(Session)
例如:
建立会话维护会话恢复会话结束会话在 OSI 模型中,它被定义为独立的一层。
但在今天常见的 TCP/IP 网络栈中:
会话层通常不会作为一个独立的协议层明显存在。
很多会话功能实际上由:
应用层传输层具体协议共同实现。
因此学习现代互联网协议时,不应该机械地寻找:
“第五层对应某一个具体协议”第六层:表示层
表示层:
Presentation Layer
主要负责:
数据表示和转换。
例如:
编码数据格式压缩加密其核心思想是:
应用看到的数据 ↓表示层进行转换 ↓网络传输数据传统 OSI 模型将这些功能单独定义为一层。
但现代互联网协议中:
编码压缩加密往往由具体应用协议、库或者独立协议完成,而不是存在一个统一的“表示层协议”。
例如:
TLS提供加密能力,但不能简单地说:
TLS = OSI 第六层因为现实协议栈与 OSI 七层模型并不是一一对应的。
第七层:应用层
应用层:
Application Layer
最接近用户和应用程序。
常见协议包括:
HTTPHTTPSDNSDHCPSSHFTPSMTP应用层负责的是:
具体应用之间如何通信。
例如 HTTP 定义:
请求响应方法状态码HeaderBodyDNS 定义:
域名查询响应资源记录SSH 定义:
远程登录安全通道认证因此:
应用层↓直接服务于具体网络应用OSI 七层模型总览
| 层 | 名称 | 主要关注内容 | 典型数据单位 |
|---|---|---|---|
| 7 | 应用层 | 网络应用 | 数据 |
| 6 | 表示层 | 数据表示、转换 | 数据 |
| 5 | 会话层 | 会话管理 | 数据 |
| 4 | 传输层 | 端到端传输 | Segment / Datagram |
| 3 | 网络层 | IP、路由 | Packet |
| 2 | 数据链路层 | 帧、MAC、局域网 | Frame |
| 1 | 物理层 | 信号、介质、比特 | Bit |
需要注意:
“Segment / Datagram / Packet / Frame / Bit”是常见教学上的数据单位称呼,现实协议栈中具体命名会根据协议有所不同。
TCP/IP 模型
实际互联网并不是直接按照 OSI 七层模型实现的。
互联网协议体系更常见的是:
TCP/IP 模型
教材中常见的表达方式有不同版本,其中一种经典的四层划分是:
┌────────────────────┐│ 应用层 │├────────────────────┤│ 传输层 │├────────────────────┤│ 网际层 │├────────────────────┤│ 网络接口层 │└────────────────────┘也可以写成:
ApplicationTransportInternetNetwork AccessOSI 与 TCP/IP 的对应关系
可以进行大致映射:
OSI TCP/IP
应用层 ───────┐表示层 ───────┼────→ 应用层会话层 ───────┘
传输层 ───────────→ 传输层
网络层 ───────────→ 网际层
数据链路层 ────┐物理层 ────────┴────→ 网络接口层因此:
OSI 7 层 ↓更多是参考模型
TCP/IP ↓互联网协议体系中更加实际的模型为什么 OSI 与 TCP/IP 不完全一样
OSI 是:
参考模型
它重点描述:
网络功能应该如何分层而 TCP/IP 是一个真实存在并长期使用的协议体系。
所以实际互联网:
HTTPTCPIPEthernet并不会严格按照:
7 → 6 → 5 → 4 → 3 → 2 → 1分别对应七个独立协议层。
现代网络协议的实际结构更加灵活。
因此学习分层模型时:
不要执着于“每一个协议必须准确属于 OSI 某一层”。
更重要的是理解:
谁负责应用通信?谁负责端到端传输?谁负责跨网络转发?谁负责局域网传输?谁负责物理信号?数据封装
网络分层最重要的概念之一:
Encapsulation(封装)
假设应用程序产生一段数据:
Application Data向下经过协议栈时,每一层都可以增加自己的控制信息。
例如:
应用层┌────────────────────┐│ Application Data │└────────────────────┘ ↓传输层┌──────────┬─────────┐│ TCP Header│ Data │└──────────┴─────────┘ ↓网络层┌────────────┬──────────────┐│ IP Header │ TCP + Data │└────────────┴──────────────┘ ↓链路层┌────────┬─────────────────┬──────┐│ Header │ IP + TCP + Data │ FCS │└────────┴─────────────────┴──────┘ ↓物理层 ↓ 比特 / 信号这个过程就是:
逐层封装。
数据解封装
接收端则进行相反过程:
物理层 ↓链路层 ↓网络层 ↓传输层 ↓应用层可以表示成:
比特 / 信号 ↓ Frame ↓ Packet ↓ Segment ↓Application Data这就是:
解封装(Decapsulation)
一个完整通信过程
假设:
浏览器访问:
https://example.com应用产生:
HTTP Data然后:
HTTP ↓TCP ↓IP ↓Ethernet ↓物理介质发送端:
应用数据 ↓TCP 封装 ↓IP 封装 ↓Ethernet 封装 ↓物理传输接收端:
物理信号 ↓Ethernet 解封装 ↓IP 解封装 ↓TCP 解封装 ↓HTTP 数据 ↓浏览器这就是网络分层最直观的体现。
每一层都在解决什么问题
可以把几层最核心的问题简化为:
应用层↓“应用之间怎么交流?”
传输层↓“两个程序怎么可靠 / 高效地通信?”
网络层↓“数据怎么从一个网络到另一个网络?”
链路层↓“相邻节点怎么传输?”
物理层↓“比特怎么真正传出去?”这是一种非常适合学习和排障的思维方式。
地址也具有层次性
网络中存在多种不同类型的地址。
例如:
MAC 地址IP 地址端口它们解决的问题不同。
可以先粗略理解:
MAC↓局部链路中的设备标识
IP↓网络层中的主机 / 接口寻址
Port↓区分一台主机上的不同应用因此:
MAC+IP+Port并不是三个重复的概念。
它们分别服务于不同层次的问题。
网络设备与分层
网络设备也可以从分层角度理解。
集线器
传统 Hub 主要在物理层工作:
Layer 1它不会理解:
MACIPTCPHTTP交换机
传统以太网交换机主要工作在:
Layer 2关注:
MAC 地址以太网帧交换表现代交换机也可能具备:
Layer 3路由能力。
因此不能简单认为:
所有交换机永远只工作在第二层。
路由器
路由器主要关注:
Layer 3核心工作:
IP路由数据包转发可以简单理解:
交换机↓主要解决“局域网内部怎么传”
路由器↓主要解决“不同网络之间怎么走”防火墙
防火墙比较特殊。
现代防火墙可能同时检查:
二层信息三层 IP四层 TCP / UDP甚至应用层内容因此不应该强行给防火墙贴一个固定的:
“第几层设备”更准确的是看:
它实际检查和控制哪些协议字段。
网络分层与故障排查
分层模型最实用的地方之一:
帮助建立故障排查顺序。
例如:
浏览器打不开网站可以逐层思考。
应用层
Web 服务正常吗?HTTP 响应是什么?传输层
TCP 三次握手成功了吗?目标端口监听了吗?网络层
IP 地址正确吗?有没有路由?数据包能到目标吗?链路层
网卡是否正常?交换网络是否正常?MAC 是否可达?物理层
网线是否连接?光模块是否正常?链路是否 Up?这样:
“网站打不开”就会变成:
应用? ↓传输? ↓网络? ↓链路? ↓物理?而不是一上来就:
“网络有问题”分层不是严格的“盒子”
学习网络分层时需要注意:
现实协议栈并不是严格互不重叠的五个或七个盒子。
实际协议可能:
跨层复用嵌套提供多个层次的功能例如:
TLS既和应用通信密切相关,又提供加密和身份认证能力。
再比如:
ICMP虽然通常归入网络层相关协议,但在实际实现中与 IP 协议栈关系非常紧密。
因此学习模型的目的不是:
背协议属于第几层而是:
理解不同功能之间的边界和协作关系。
OSI 与 TCP/IP 的核心区别
| 对比 | OSI | TCP/IP |
|---|---|---|
| 定位 | 参考模型 | 实际互联网协议体系 |
| 层数 | 7 层 | 常见教材模型为 4 层,也有 5 层划分 |
| 应用 / 表示 / 会话 | 分开 | 通常合并为应用层 |
| 网络层 | Network Layer | Internet Layer |
| 链路 + 物理 | 分开 | 常合并为网络接口层 |
| 学习价值 | 理解分层思想 | 理解实际互联网协议体系 |
因此可以记住:
OSI↓帮助理解“网络应该怎样分层”
TCP/IP↓帮助理解“互联网实际上怎样组织协议”数据封装的完整视图
把整个过程串起来:
发送端
Application │ │ Data ▼Transport │ │ Segment / Datagram ▼Network │ │ Packet ▼Data Link │ │ Frame ▼Physical │ │ Bits / Signals ▼==================== 网络 ==================== │ │ Bits / Signals ▼Physical │ ▼Data Link │ ▼Network │ ▼Transport │ ▼Application
接收端可以概括成:
发送:上 → 下 → 封装 → 传输
接收:下 → 上 → 解封装从分层进入后续网络知识
建立分层模型之后,后续网络知识就可以按照层次逐步展开。
网络分层模型 │ ├── 物理 / 链路层 │ └── 以太网、MAC、ARP、VLAN │ ├── 网络层 │ └── IP、CIDR、路由、ICMP │ ├── 传输层 │ └── TCP、UDP、端口 │ └── 应用层 ├── DNS ├── DHCP ├── HTTP └── HTTPS再往后:
网络基础 ↓Linux 网络管理 ↓Linux 网络诊断 ↓iptables / nftables ↓NAT ↓网络故障排查这样网络系列就可以做到:
先建立模型,再逐层学习协议,最后回到 Linux 运维实践。
外部参考
- RFC 1122 — Requirements for Internet Hosts: Communication Layers
- RFC 8200 — Internet Protocol, Version 6 (IPv6) Specification
- ISO/IEC 7498-1 — OSI Basic Reference Model
- IETF — Internet Standards