引言
上一篇我们理解了为什么需要计算机网络。现在面临一个问题:如何设计一个网络系统,让全世界的计算机都能互相通信?
这是一个极其复杂的问题,需要解决:
- 🔌 如何连接?(物理层面)
- 📮 如何寻址?(找到目标计算机)
- 📦 如何传输?(可靠性、顺序)
- 💬 如何通信?(应用协议)
如果把所有功能混在一起,系统将变得无比复杂和脆弱。
解决方案:分层(Layering) - 这是软件工程中最重要的设计思想之一。
第一性原理:为什么要分层?
类比:寄快递的分层
假设你要从北京寄一本书到上海的朋友:
不分层的方式(自己全干)
你需要:
- 找个箱子,包装书
- 写收件人地址
- 开车送到物流中心
- 规划运输路线(走哪条高速?)
- 跟踪包裹位置
- 送到朋友家门口
问题:
- ❌ 太复杂了!你需要掌握所有技能
- ❌ 效率低!每个人都要重复这些工作
- ❌ 不专业!你规划的路线可能不是最优的
分层的方式(专业分工)
第1层:包装层(你)
- 职责:包装书,写地址
- 输出:打包好的快递
第2层:收件层(快递员)
- 职责:上门取件,送到网点
- 输出:快递到达网点
第3层:运输层(物流公司)
- 职责:规划路线,跨城运输
- 输出:快递到达目标城市
第4层:派送层(派送员)
- 职责:最后一公里配送
- 输出:快递送到收件人手中
优势:
- ✅ 简单:每层只关注自己的职责
- ✅ 高效:专业的人做专业的事
- ✅ 灵活:可以替换某一层(换物流公司)
分层的核心价值
降低复杂度
- 将大问题分解为小问题
- 每层只需关注自己的职责
- 上层不需要知道下层的实现细节
提高灵活性
- 可以独立修改某一层
- 只要接口不变,不影响其他层
- 容易替换和升级
促进标准化
- 每层有明确的标准和协议
- 不同厂商可以互操作
- 避免供应商锁定
OSI七层模型
OSI(Open Systems Interconnection)模型是**国际标准化组织(ISO)**在1984年提出的网络分层模型。
七层架构图
┌─────────────────────────────────────┐
│ 第7层:应用层 (Application Layer) │ HTTP, FTP, DNS, SMTP
├─────────────────────────────────────┤
│ 第6层:表示层 (Presentation Layer) │ 数据格式转换、加密
├─────────────────────────────────────┤
│ 第5层:会话层 (Session Layer) │ 会话管理、同步
├─────────────────────────────────────┤
│ 第4层:传输层 (Transport Layer) │ TCP, UDP
├─────────────────────────────────────┤
│ 第3层:网络层 (Network Layer) │ IP, 路由
├─────────────────────────────────────┤
│ 第2层:数据链路层 (Data Link Layer) │ 以太网, MAC
├─────────────────────────────────────┤
│ 第1层:物理层 (Physical Layer) │ 电信号、光信号
└─────────────────────────────────────┘
记忆口诀
从下到上:物链网传会表应 从上到下:应表会传网链物
英文口诀:
- All People Seem To Need Data Processing
- Application, Presentation, Session, Transport, Network, Data Link, Physical
每层详解
第1层:物理层(Physical Layer)
核心职责
将数字信号(0和1)转换为物理信号进行传输
关键问题
- 用什么介质传输?(网线、光纤、无线)
- 用什么信号?(电信号、光信号、无线电波)
- 如何表示0和1?(高电平/低电平)
- 传输速率是多少?(10Mbps, 100Mbps, 1Gbps)
典型设备
- 网线:Cat5e, Cat6, Cat7
- 光纤:单模光纤、多模光纤
- 无线:WiFi, 蓝牙, 5G
- 集线器(Hub):最简单的物理层设备
类比
想象一条马路,物理层定义:
- 马路的宽度(带宽)
- 马路的材质(铜线 vs 光纤)
- 限速多少(传输速率)
第2层:数据链路层(Data Link Layer)
核心职责
在直连的两个设备之间可靠传输数据帧(Frame)
关键功能
成帧(Framing)
- 将比特流组装成帧
- 定义帧的开始和结束
物理寻址(MAC地址)
- 每个网卡有唯一的MAC地址
- 格式:
AA:BB:CC:DD:EE:FF(48位)
错误检测
- CRC校验码
- 发现传输错误
流量控制
- 防止发送方发太快,接收方处理不过来
典型协议和设备
- 以太网(Ethernet):最常用的局域网协议
- 交换机(Switch):根据MAC地址转发帧
- 网桥(Bridge):连接两个局域网
类比
就像快递的包装层:
- 贴上标签(MAC地址)
- 打包成标准包裹(帧)
- 检查包裹完整性(CRC)
第3层:网络层(Network Layer)
核心职责
实现跨网络的数据传输,负责路由和寻址
关键功能
逻辑寻址(IP地址)
- 每个设备有全球唯一的IP地址
- IPv4:
192.168.1.1 - IPv6:
2001:0db8::1
路由选择
- 数据包如何从源到达目的地?
- 选择最优路径
分片和重组
- 大数据包拆分成小块
- 目标端重新组装
典型协议和设备
- IP协议:互联网协议(Internet Protocol)
- ICMP:ping命令使用的协议
- 路由器(Router):连接不同网络,转发IP数据包
类比
就像物流公司的运输网络:
- IP地址是收件地址
- 路由器是分拨中心
- 路由选择是规划最优路线
第4层:传输层(Transport Layer)
核心职责
提供端到端的可靠数据传输服务
关键功能
端口号(Port)
- 区分同一台机器上的不同应用
- HTTP: 80, HTTPS: 443, MySQL: 3306
可靠传输(TCP)
- 确保数据按顺序、无丢失地到达
- 三次握手、四次挥手
- 流量控制、拥塞控制
不可靠传输(UDP)
- 无连接,不保证可靠性
- 速度快,适合实时应用
典型协议
- TCP:可靠的、面向连接的协议
- UDP:不可靠的、无连接的协议
类比
就像快递的追踪系统:
- TCP像挂号信:确保送达,签收确认
- UDP像普通信:投递即可,不保证送达
第5层:会话层(Session Layer)
核心职责
建立、管理和终止会话(Session)
关键功能
会话建立
- 认证、授权
- 建立连接
会话管理
- 同步点设置
- 断点续传
会话终止
- 正常关闭
- 异常恢复
典型协议
- RPC:远程过程调用
- NetBIOS:网络基本输入输出系统
现状
在实际应用中,会话层功能往往被应用层或传输层吸收,很少单独使用。
第6层:表示层(Presentation Layer)
核心职责
数据格式转换、加密解密、压缩解压
关键功能
数据格式转换
- ASCII vs UTF-8
- 大端 vs 小端
- JSON vs XML vs Protobuf
加密解密
- SSL/TLS
- AES, RSA
压缩解压
- Gzip
- Deflate
现状
现代网络中,这些功能通常在应用层实现。
第7层:应用层(Application Layer)
核心职责
为用户应用提供网络服务
典型协议
- HTTP/HTTPS:Web浏览
- FTP:文件传输
- SMTP:邮件发送
- POP3/IMAP:邮件接收
- DNS:域名解析
- SSH:远程登录
实际应用
- 浏览器:使用HTTP协议
- 邮件客户端:使用SMTP/POP3
- 文件传输:使用FTP
- 视频通话:使用WebRTC
类比
就像快递送到家门口后:
- 你打开包裹(解密)
- 拆开包装(解压)
- 取出书本(应用数据)
数据封装与解封装
发送过程(封装 - Encapsulation)
应用层:生成数据
↓
[HTTP请求]
↓
传输层:添加TCP头部(包括端口号)
↓
[TCP头部 | HTTP请求]
↓
网络层:添加IP头部(包括IP地址)
↓
[IP头部 | TCP头部 | HTTP请求]
↓
数据链路层:添加以太网帧头和尾(包括MAC地址)
↓
[以太网头 | IP头部 | TCP头部 | HTTP请求 | 以太网尾]
↓
物理层:转换为电信号/光信号传输
接收过程(解封装 - Decapsulation)
物理层:接收电信号,转换为比特流
↓
数据链路层:去掉以太网头尾,检查MAC地址
↓
网络层:去掉IP头部,检查IP地址
↓
传输层:去掉TCP头部,检查端口号
↓
应用层:解析HTTP请求,处理业务逻辑
关键概念
每一层给数据添加自己的头部(Header),这个过程叫做封装:
- 应用层:数据(Data)
- 传输层:段(Segment)
- 网络层:包(Packet)
- 数据链路层:帧(Frame)
- 物理层:比特流(Bit Stream)
实战案例:浏览器访问网页的完整流程
假设你在浏览器输入 http://www.example.com:
1. 应用层(HTTP协议)
GET / HTTP/1.1
Host: www.example.com
2. 传输层(TCP协议)
- 查找80端口(HTTP默认端口)
- 建立TCP连接(三次握手)
- 添加TCP头部:
- 源端口:随机端口(如12345)
- 目标端口:80
3. 网络层(IP协议)
- DNS解析:
www.example.com→93.184.216.34 - 添加IP头部:
- 源IP:你的IP(如
192.168.1.100) - 目标IP:
93.184.216.34
- 源IP:你的IP(如
4. 数据链路层(以太网)
- ARP协议:查询路由器的MAC地址
- 添加以太网头部:
- 源MAC:你的网卡MAC
- 目标MAC:路由器MAC
5. 物理层
- 将帧转换为电信号
- 通过网线发送到路由器
6. 路由器转发
- 路由器根据IP地址查找路由表
- 转发到下一跳路由器
- 重复此过程,直到到达目标服务器
7. 目标服务器接收
- 物理层接收信号
- 数据链路层检查MAC地址
- 网络层检查IP地址
- 传输层检查端口号(80)
- 应用层处理HTTP请求,返回网页
OSI模型的局限性
优点
- ✅ 理论完整,概念清晰
- ✅ 层次分明,职责明确
- ✅ 便于理解和教学
缺点
- ❌ 过于复杂:7层太多,有些层功能重叠
- ❌ 不够实用:会话层和表示层很少独立使用
- ❌ 标准滞后:制定标准时,TCP/IP已经广泛使用
现实
OSI模型是理论模型,实际使用的是 TCP/IP模型(4层):
┌─────────────────────┐
│ 应用层 (HTTP) │ ← OSI 5/6/7层
├─────────────────────┤
│ 传输层 (TCP/UDP) │ ← OSI 第4层
├─────────────────────┤
│ 网络层 (IP) │ ← OSI 第3层
├─────────────────────┤
│ 链路层 (Ethernet) │ ← OSI 第1/2层
└─────────────────────┘
下一篇我们将详细学习 TCP/IP四层模型。
总结
核心要点
分层的价值
- 降低复杂度(分而治之)
- 提高灵活性(独立演进)
- 促进标准化(互操作性)
OSI七层
- 物理层:传输比特流
- 数据链路层:传输帧,MAC寻址
- 网络层:传输包,IP寻址,路由
- 传输层:端到端,TCP/UDP
- 会话层:会话管理
- 表示层:数据格式转换
- 应用层:应用协议
数据封装
- 发送:逐层添加头部
- 接收:逐层去掉头部
- 每层只关注自己的头部
理论 vs 实践
- OSI是理论模型
- TCP/IP是实际应用
下一篇预告
下一篇我们将学习 TCP/IP四层模型,理解它与OSI模型的对应关系,以及为什么实际使用4层而不是7层。
思考题:
- 为什么OSI模型要分成7层,而不是3层或10层?
- 如果让你设计一个网络模型,你会分几层?
- 在你的项目中,哪些功能属于应用层?哪些属于传输层?
欢迎在评论区分享你的思考!