第2章 - 网络分层模型
嗨,朋友!上一章我们了解了什么是计算机网络,这一章我要带你揭开网络分层的神秘面纱。
说实话,很多人一听到"OSI 七层模型"就头大,觉得这东西太抽象、太难理解。但其实,网络分层就像寄快递一样简单!我用一个生活中的例子,保证让你一听就懂。
🤔 为什么要分层?
寄快递的例子 📦
假设你要给远在北京的朋友寄一个礼物,整个过程是这样的:
你(发件人)
↓ ① 打包礼物,写收件人信息
快递员上门取件
↓ ② 送到本地快递站
本地快递站
↓ ③ 分拣,送到转运中心
转运中心
↓ ④ 装车,运输到北京
北京转运中心
↓ ⑤ 分拣,送到目标快递站
北京快递站
↓ ⑥ 派件员送货上门
朋友(收件人)
↓ ⑦ 拆包,拿到礼物
你发现没有?整个快递过程被分成了多个步骤,每个步骤有不同的人负责,互不干扰:
- 你只需要打包,不需要知道快递怎么运输
- 快递员只负责取件,不需要知道礼物是什么
- 转运中心只负责运输,不需要知道收件人是谁
这就是分层的好处:职责清晰,互不干扰,易于维护和升级。
网络分层的道理一样!
计算机网络也是这样:
- 应用层:就像你打包礼物(准备数据)
- 传输层:就像快递公司(保证送达)
- 网络层:就像物流路线(找到最佳路径)
- 数据链路层:就像具体的运输工具(火车、飞机、汽车)
- 物理层:就像实际的道路(光纤、网线、无线信号)
🏛️ OSI 七层模型
OSI(Open System Interconnection,开放式系统互联)是国际标准化组织(ISO)制定的一个网络分层标准,把网络分成了 7 层。
OSI 七层模型图解
┌─────────────────────────┐
│ 7. 应用层 (Application) │ ← 用户直接接触的层(浏览器、邮件)
├─────────────────────────┤
│ 6. 表示层 (Presentation)│ ← 数据格式转换(加密、压缩)
├─────────────────────────┤
│ 5. 会话层 (Session) │ ← 建立和管理会话
├─────────────────────────┤
│ 4. 传输层 (Transport) │ ← 端到端的数据传输(TCP、UDP)
├─────────────────────────┤
│ 3. 网络层 (Network) │ ← 路由选择(IP 地址)
├─────────────────────────┤
│ 2. 数据链路层 (Data Link)│ ← 相邻节点传输(MAC 地址)
├─────────────────────────┤
│ 1. 物理层 (Physical) │ ← 比特流传输(电信号、光信号)
└─────────────────────────┘
记忆口诀 🎯
从下往上记:物数网传会表应
从上往下记:应表会传网数物
更有趣的记法:Please Do Not Throw Sausage Pizza Away
(Physical、Data Link、Network、Transport、Session、Presentation、Application)
各层详解
1. 物理层(Physical Layer)⚡
作用:负责传输原始的比特流(0 和 1)
类比:快递运输的"道路"
设备:网线、光纤、集线器(Hub)、中继器
举例:
- 网线传输电信号
- 光纤传输光信号
- WiFi 传输无线电波
数据: Hello
转成二进制: 01001000 01100101 01101100 01101100 01101111
物理层: 通过电信号或光信号传输这些 0 和 1
2. 数据链路层(Data Link Layer)🔗
作用:在相邻的两个节点之间可靠地传输数据
类比:快递的"运输工具"(汽车、火车、飞机)
设备:交换机(Switch)、网卡、网桥
关键技术:
- MAC 地址(设备的物理地址)
- 帧(Frame)
- 差错检测
举例:
数据链路层给数据加上"信封":
┌──────────────────────────┐
│ 目标MAC地址 | 源MAC地址 │ ← 信封(帧头)
├──────────────────────────┤
│ 数据内容 │ ← 信件内容
├──────────────────────────┤
│ 校验码 │ ← 防止传输错误
└──────────────────────────┘
3. 网络层(Network Layer)🌐
作用:负责数据包从源地址到目的地址的路由和转发
类比:快递的"路线规划"
设备:路由器(Router)
关键技术:
- IP 地址(网络地址)
- 路由选择
- 数据包(Packet)
举例:
你在上海,朋友在北京:
路由器:分析目标 IP 地址 → 选择最佳路径
路径1: 上海 → 南京 → 北京(500公里)
路径2: 上海 → 西安 → 北京(1000公里)
选择路径1(更短、更快)
4. 传输层(Transport Layer)🚚
作用:提供端到端的可靠数据传输
类比:快递的"物流公司"(保证送达)
协议:TCP、UDP
关键技术:
- 端口号(区分不同应用)
- 流量控制
- 差错控制
举例:
TCP(可靠传输):
发送方: "我发了第1个包"
接收方: "收到第1个包"
发送方: "我发了第2个包"
接收方: "收到第2个包"
→ 确保每个包都送达
UDP(不可靠传输):
发送方: "我发了包,你收不收到我不管"
→ 速度快,但可能丢包
5. 会话层(Session Layer)🤝
作用:建立、管理和终止会话
类比:快递的"订单管理"
功能:
- 会话的建立
- 会话的维持
- 会话的终止
举例:
你登录网站的过程:
1. 建立会话:输入用户名密码
2. 维持会话:保持登录状态(Session/Cookie)
3. 终止会话:点击退出登录
6. 表示层(Presentation Layer)🎨
作用:数据格式转换、加密解密、压缩解压
类比:快递的"包装方式"
功能:
- 数据加密/解密
- 数据压缩/解压
- 格式转换
举例:
加密:
原始数据: "password123"
加密后: "a4f8d9e2b1c7..."
压缩:
原始大小: 10MB 的图片
压缩后: 2MB 的图片
7. 应用层(Application Layer)📱
作用:为用户提供网络服务
类比:快递的"寄件服务"(你直接接触的部分)
协议:HTTP、HTTPS、FTP、SMTP、DNS
举例:
浏览器访问网站:
1. 你在浏览器输入 www.baidu.com
2. 应用层使用 HTTP 协议
3. 发送请求给百度服务器
4. 接收响应并显示网页
📡 TCP/IP 四层模型
虽然 OSI 七层模型很完善,但实际应用中,TCP/IP 四层模型更常用。它把 OSI 的七层简化成了四层:
OSI 七层 TCP/IP 四层
┌──────────────┐ ┌──────────────┐
│ 7. 应用层 │ │ │
├──────────────┤ │ 应用层 │
│ 6. 表示层 │ → │ (Application)│
├──────────────┤ │ │
│ 5. 会话层 │ │ │
├──────────────┤ ├──────────────┤
│ 4. 传输层 │ → │ 传输层 │
├──────────────┤ │ (Transport) │
├──────────────┤ ├──────────────┤
│ 3. 网络层 │ → │ 网络层 │
├──────────────┤ │ (Internet) │
├──────────────┤ ├──────────────┤
│ 2. 数据链路层│ │ 网络接口层 │
├──────────────┤ → │ (Network │
│ 1. 物理层 │ │ Interface) │
└──────────────┘ └──────────────┘
TCP/IP 四层详解
| 层次 | 名称 | 功能 | 协议示例 |
|---|---|---|---|
| 第4层 | 应用层 | 用户应用程序 | HTTP、FTP、DNS、SMTP |
| 第3层 | 传输层 | 端到端通信 | TCP、UDP |
| 第2层 | 网络层 | 路由选择 | IP、ICMP、ARP |
| 第1层 | 网络接口层 | 硬件传输 | 以太网、WiFi |
🌟 数据封装过程(重要!)
当你在浏览器访问网站时,数据是如何一层层封装的?
发送数据的过程
┌─────────────────────────────────────┐
│ 你在浏览器输入 www.example.com │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 应用层: 生成 HTTP 请求 │
│ GET / HTTP/1.1 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 传输层: 加上 TCP 头部 │
│ [TCP头部] + HTTP请求 │
│ 包含源端口、目标端口 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 网络层: 加上 IP 头部 │
│ [IP头部] + [TCP头部] + HTTP请求 │
│ 包含源IP地址、目标IP地址 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 数据链路层: 加上帧头部和帧尾 │
│ [帧头] + [IP头] + [TCP头] + 数据 + [帧尾] │
│ 包含源MAC地址、目标MAC地址 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 物理层: 转成 0 和 1 的比特流 │
│ 010101010101... │
└─────────────────────────────────────┘
↓
通过网线/WiFi传输
接收数据的过程(反向解封装)
通过网线/WiFi接收
↓
┌─────────────────────────────────────┐
│ 物理层: 接收比特流 │
│ 010101010101... │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 数据链路层: 去掉帧头部和帧尾 │
│ 检查MAC地址,校验数据 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 网络层: 去掉 IP 头部 │
│ 检查IP地址,确定是发给自己的 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 传输层: 去掉 TCP 头部 │
│ 确认端口号,交给对应的应用程序 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 应用层: 解析 HTTP 响应 │
│ 浏览器显示网页内容 │
└─────────────────────────────────────┘
🎯 实际应用案例
案例1:浏览器访问网站(前端视角)
// 前端发送 HTTP 请求
fetch('https://api.example.com/users')
.then(response => response.json())
.then(data => console.log(data));
// 背后的分层过程:
// 应用层: HTTP 请求(GET /users)
// 传输层: TCP 连接(端口 443)
// 网络层: 找到服务器 IP 地址
// 数据链路层: 通过网卡发送
// 物理层: 网线或 WiFi 传输
案例2:Node.js 服务器(后端视角)
const express = require('express');
const app = express();
// 监听端口 3000(传输层)
app.listen(3000, () => {
console.log('服务器运行在 3000 端口');
});
// 处理 HTTP 请求(应用层)
app.get('/users', (req, res) => {
res.json({ message: 'Hello' });
});
// 背后的分层过程:
// 物理层: 接收网络信号
// 数据链路层: 解析帧
// 网络层: 检查 IP 地址
// 传输层: 检查端口 3000
// 应用层: Express 处理 HTTP 请求
案例3:运维配置防火墙
# 配置防火墙规则(网络层 + 传输层)
# 允许 80 端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许 443 端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 禁止其他所有入站连接
iptables -A INPUT -j DROP
这些规则工作在:
- 网络层:检查 IP 地址
- 传输层:检查 TCP 协议和端口号
📊 各层对比表
| 层次 | OSI模型 | TCP/IP模型 | 数据单位 | 关键设备 | 关键协议 |
|---|---|---|---|---|---|
| 7 | 应用层 | 应用层 | 消息 | - | HTTP、FTP、DNS |
| 6 | 表示层 | 应用层 | 消息 | - | SSL、JPEG |
| 5 | 会话层 | 应用层 | 消息 | - | RPC、SQL |
| 4 | 传输层 | 传输层 | 段/数据报 | 网关 | TCP、UDP |
| 3 | 网络层 | 网络层 | 数据包 | 路由器 | IP、ICMP |
| 2 | 数据链路层 | 网络接口层 | 帧 | 交换机、网桥 | 以太网、WiFi |
| 1 | 物理层 | 网络接口层 | 比特 | 集线器、网线 | - |
💡 长安的学习建议
- 理解最重要 - 不要死记硬背七层的名字,理解每层的作用
- 记住核心的 - TCP/IP 四层模型在实际工作中更常用
- 联系实际 - 想想你平时发 HTTP 请求,背后经历了哪些层
- 画图加深理解 - 试着自己画一遍数据封装的过程
📝 小结
这一章我们学习了:
✅ 为什么要分层:职责清晰、易于维护
✅ OSI 七层模型:物数网传会表应
✅ TCP/IP 四层模型:应用层、传输层、网络层、网络接口层
✅ 数据封装过程:一层层加头部,一层层去头部
✅ 实际应用:前端、后端、运维都在使用分层模型
🎯 下一步
现在你已经理解了网络分层,但是网络层的 IP 地址到底是什么?怎么用?下一章我们会详细讲解!
💪 练习题
- 用自己的话解释一下,为什么计算机网络要分层?
- 当你在浏览器输入网址按回车,数据会经过哪些层?
- TCP 协议工作在哪一层?HTTP 协议工作在哪一层?
答案提示
为什么要分层?
- 降低复杂度:每层只关注自己的职责
- 易于维护:某一层出问题,不影响其他层
- 易于升级:可以替换某一层的技术,而不影响其他层
- 便于标准化:不同厂商可以按照标准实现
数据经过的层次(从上到下):
- 应用层:浏览器生成 HTTP 请求
- 传输层:TCP 协议建立连接
- 网络层:IP 协议寻址和路由
- 数据链路层:封装成帧
- 物理层:转成比特流传输
协议所在层次:
- TCP 协议:传输层
- HTTP 协议:应用层
