引言

上一篇我们理解了为什么需要计算机网络。现在面临一个问题:如何设计一个网络系统,让全世界的计算机都能互相通信?

这是一个极其复杂的问题,需要解决:

  • 🔌 如何连接?(物理层面)
  • 📮 如何寻址?(找到目标计算机)
  • 📦 如何传输?(可靠性、顺序)
  • 💬 如何通信?(应用协议)

如果把所有功能混在一起,系统将变得无比复杂和脆弱。

解决方案分层(Layering) - 这是软件工程中最重要的设计思想之一。

第一性原理:为什么要分层?

类比:寄快递的分层

假设你要从北京寄一本书到上海的朋友:

不分层的方式(自己全干)

你需要:

  1. 找个箱子,包装书
  2. 写收件人地址
  3. 开车送到物流中心
  4. 规划运输路线(走哪条高速?)
  5. 跟踪包裹位置
  6. 送到朋友家门口

问题

  • ❌ 太复杂了!你需要掌握所有技能
  • ❌ 效率低!每个人都要重复这些工作
  • ❌ 不专业!你规划的路线可能不是最优的

分层的方式(专业分工)

第1层:包装层(你)

  • 职责:包装书,写地址
  • 输出:打包好的快递

第2层:收件层(快递员)

  • 职责:上门取件,送到网点
  • 输出:快递到达网点

第3层:运输层(物流公司)

  • 职责:规划路线,跨城运输
  • 输出:快递到达目标城市

第4层:派送层(派送员)

  • 职责:最后一公里配送
  • 输出:快递送到收件人手中

优势

  • 简单:每层只关注自己的职责
  • 高效:专业的人做专业的事
  • 灵活:可以替换某一层(换物流公司)

分层的核心价值

  1. 降低复杂度

    • 将大问题分解为小问题
    • 每层只需关注自己的职责
    • 上层不需要知道下层的实现细节
  2. 提高灵活性

    • 可以独立修改某一层
    • 只要接口不变,不影响其他层
    • 容易替换和升级
  3. 促进标准化

    • 每层有明确的标准和协议
    • 不同厂商可以互操作
    • 避免供应商锁定

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 光纤)
  • 限速多少(传输速率)

核心职责

在直连的两个设备之间可靠传输数据帧(Frame)

关键功能

  1. 成帧(Framing)

    • 将比特流组装成帧
    • 定义帧的开始和结束
  2. 物理寻址(MAC地址)

    • 每个网卡有唯一的MAC地址
    • 格式:AA:BB:CC:DD:EE:FF(48位)
  3. 错误检测

    • CRC校验码
    • 发现传输错误
  4. 流量控制

    • 防止发送方发太快,接收方处理不过来

典型协议和设备

  • 以太网(Ethernet):最常用的局域网协议
  • 交换机(Switch):根据MAC地址转发帧
  • 网桥(Bridge):连接两个局域网

类比

就像快递的包装层:

  • 贴上标签(MAC地址)
  • 打包成标准包裹(帧)
  • 检查包裹完整性(CRC)

第3层:网络层(Network Layer)

核心职责

实现跨网络的数据传输,负责路由和寻址

关键功能

  1. 逻辑寻址(IP地址)

    • 每个设备有全球唯一的IP地址
    • IPv4: 192.168.1.1
    • IPv6: 2001:0db8::1
  2. 路由选择

    • 数据包如何从源到达目的地?
    • 选择最优路径
  3. 分片和重组

    • 大数据包拆分成小块
    • 目标端重新组装

典型协议和设备

  • IP协议:互联网协议(Internet Protocol)
  • ICMP:ping命令使用的协议
  • 路由器(Router):连接不同网络,转发IP数据包

类比

就像物流公司的运输网络:

  • IP地址是收件地址
  • 路由器是分拨中心
  • 路由选择是规划最优路线

第4层:传输层(Transport Layer)

核心职责

提供端到端的可靠数据传输服务

关键功能

  1. 端口号(Port)

    • 区分同一台机器上的不同应用
    • HTTP: 80, HTTPS: 443, MySQL: 3306
  2. 可靠传输(TCP)

    • 确保数据按顺序、无丢失地到达
    • 三次握手、四次挥手
    • 流量控制、拥塞控制
  3. 不可靠传输(UDP)

    • 无连接,不保证可靠性
    • 速度快,适合实时应用

典型协议

  • TCP:可靠的、面向连接的协议
  • UDP:不可靠的、无连接的协议

类比

就像快递的追踪系统:

  • TCP像挂号信:确保送达,签收确认
  • UDP像普通信:投递即可,不保证送达

第5层:会话层(Session Layer)

核心职责

建立、管理和终止会话(Session)

关键功能

  1. 会话建立

    • 认证、授权
    • 建立连接
  2. 会话管理

    • 同步点设置
    • 断点续传
  3. 会话终止

    • 正常关闭
    • 异常恢复

典型协议

  • RPC:远程过程调用
  • NetBIOS:网络基本输入输出系统

现状

在实际应用中,会话层功能往往被应用层或传输层吸收,很少单独使用。

第6层:表示层(Presentation Layer)

核心职责

数据格式转换、加密解密、压缩解压

关键功能

  1. 数据格式转换

    • ASCII vs UTF-8
    • 大端 vs 小端
    • JSON vs XML vs Protobuf
  2. 加密解密

    • SSL/TLS
    • AES, RSA
  3. 压缩解压

    • 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.com93.184.216.34
  • 添加IP头部:
    • 源IP:你的IP(如192.168.1.100
    • 目标IP:93.184.216.34

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四层模型

总结

核心要点

  1. 分层的价值

    • 降低复杂度(分而治之)
    • 提高灵活性(独立演进)
    • 促进标准化(互操作性)
  2. OSI七层

    • 物理层:传输比特流
    • 数据链路层:传输帧,MAC寻址
    • 网络层:传输包,IP寻址,路由
    • 传输层:端到端,TCP/UDP
    • 会话层:会话管理
    • 表示层:数据格式转换
    • 应用层:应用协议
  3. 数据封装

    • 发送:逐层添加头部
    • 接收:逐层去掉头部
    • 每层只关注自己的头部
  4. 理论 vs 实践

    • OSI是理论模型
    • TCP/IP是实际应用

下一篇预告

下一篇我们将学习 TCP/IP四层模型,理解它与OSI模型的对应关系,以及为什么实际使用4层而不是7层。


思考题

  1. 为什么OSI模型要分成7层,而不是3层或10层?
  2. 如果让你设计一个网络模型,你会分几层?
  3. 在你的项目中,哪些功能属于应用层?哪些属于传输层?

欢迎在评论区分享你的思考!