作为一名运维工程师,你每天都在与网络打交道。但你有没有想过:当你在浏览器中输入
www.baidu.com并回车的那一瞬间,到底发生了什么?数据是如何从你的电脑,穿过层层网络设备,最终到达百度服务器的?要回答这些问题,你需要理解网络通信模型。本文将系统讲解 OSI 七层模型、TCP/IP 协议族、数据封装与解封装过程,以及网络通信中必不可少的进制转换基础知识。这些看似”理论”的知识,实际上是你排查网络故障、理解协议行为的底层逻辑。
文章表述可能难懂,可以做个了解之后跳过再深入学习
OSI 七层模型
简介
OSI(Open System Interconnection):开放系统互联模型,由国际标准化组织(ISO) 制定。
OSI 模型的核心价值:
- 定义了不同计算机互联的标准
- 提供了设计和描述计算机网络通信的框架
- 将全世界网络通信的工作划分为 7 个层次
OSI 七层结构
┌─────────────────────────────────────┐
│ ⑦ 应用层 Application │ ← 应用程序/原始数据
├─────────────────────────────────────┤
│ ⑥ 表示层 Presentation │ ← 格式/压缩/加密
├─────────────────────────────────────┤
│ ⑤ 会话层 Session │ ← 会话/全双工/半双工
├─────────────────────────────────────┤
│ ④ 传输层 Transport │ ← 分段/重组/端口号
├─────────────────────────────────────┤
│ ③ 网络层 Network │ ← IP地址/寻址/路由
├─────────────────────────────────────┤
│ ② 数据链路层 Data Link │ ← MAC地址/局域网
├─────────────────────────────────────┤
│ ① 物理层 Physical │ ← 传输介质/比特流
└─────────────────────────────────────┘
我个人有个谐音记忆的方法:应表会传往树屋
制定 OSI 模型的优势
| 优势 | 说明 |
|---|---|
| 开放 | 标准公开,任何厂商都可以遵循 |
| 厂商兼容性 | 不同厂商的设备可以互联互通 |
| 易于理解、学习 | 分层结构清晰,便于教学 |
| 模块化工程 | 各层独立开发,互不影响 |
| 故障排除 | 可以逐层排查,定位问题所在 |
各层功能详解
第 7 层:应用层(Application Layer)
功能:为用户的应用程序提供网络服务接口。
关键词:应用程序、原始数据
典型应用:
| 应用 | 协议 | 场景 |
|---|---|---|
| QQ、微信 | 即时通信协议 | 聊天、视频 |
| 爱奇艺、优酷 | HTTP/HTTPS | 视频流媒体 |
| 吃鸡、王者荣耀 | 游戏协议 | 网络游戏 |
通俗理解:你打开的所有应用——浏览器、QQ、游戏——都属于应用层。
第 6 层:表示层(Presentation Layer)
功能:处理数据的格式转换、压缩和解压缩、加密和解密。
关键词:格式、压缩、加密
核心功能:
| 功能 | 说明 | 类比 |
|---|---|---|
| 格式转换 | 不同系统之间的数据格式统一 | 翻译官 |
| 数据压缩 | 减小数据体积,加快传输速度 | 打包行李 |
| 数据加密 | 保障数据传输安全 | 鸡毛信 |
简单比喻:古代送信时,重要情报会写在绢布上,卷成小筒藏在鸡毛里——这就是最早的”加密+压缩”。表示层做的事类似:让数据传得更快、更安全。
第 5 层:会话层(Session Layer)
功能:建立、管理和终止应用程序之间的会话连接。
关键词:会话、全双工/半双工、身份信息
通信模式:
| 模式 | 说明 | 类比 |
|---|---|---|
| 全双工 | 双方可以同时发送和接收数据 | 打电话(双方可以同时说话) |
| 半双工 | 同一时间只能一方发送数据 | 对讲机(按住说话,松开收听) |
| 单工 | 只能单向传输数据 | 广播/电视(只能接收,不能发送) |
电话 vs 对讲机的比喻:打电话时双方可以同时说话(全双工),对讲机只能一方说一方听(半双工)。会话层决定了通信的”对话模式”。
第 4 层:传输层(Transport Layer)
功能:提供端到端的数据传输服务,负责数据的分段、重组和端口号管理。
关键词:分段、重组、端口号、传输效率
核心职责:
| 职责 | 说明 |
|---|---|
| 分段 | 将大数据拆分成适合传输的小段 |
| 重组 | 在接收端将数据段还原为完整数据 |
| 端口号 | 标识数据应该交给哪个应用程序 |
| 可靠性 | 确保数据完整、有序到达 |
通俗理解:传输层就像快递员——把你的大包裹拆分成小包裹(分段),贴上标签(端口号),送到对方后再重新组装(重组)。
第 3 层:网络层(Network Layer)
功能:负责数据包从源到目的地址的传输路径选择(路由)和逻辑寻址。
关键词:IP 地址、寻址、路由
核心职责:
| 职责 | 说明 |
|---|---|
| IP 地址 | 全球唯一的逻辑地址 |
| 寻址 | 确定数据包的目标地址 |
| 路由 | 选择最优传输路径 |
总目标:全球地址——让世界上任何两台设备都能互相通信。
通俗理解:网络层就像邮局的分拣系统——根据信封上的地址(IP 地址),决定包裹应该走哪条路线到达目的地。
第 2 层:数据链路层(Data Link Layer)
功能:负责同一局域网内的数据传输,使用物理地址(MAC)进行设备识别。
关键词:MAC 地址、局域网、帧
核心职责:
| 职责 | 说明 |
|---|---|
| MAC 地址 | 网卡唯一的物理地址(如 00:50:56:C0:00:08) |
| 帧封装 | 将网络层的数据包封装为帧 |
| 错误检测 | 检查传输过程中的数据错误 |
分段目标:局部地址——在局域网范围内找到正确的设备。
邮递员的比喻:数据链路层就像小区的邮递员——他知道每栋楼、每户人家的具体位置(MAC 地址),负责把包裹从小区门口送到你家门口。
第 1 层:物理层(Physical Layer)
功能:定义物理传输介质的电气、机械、过程和功能规范,负责比特流的物理传输。
关键词:传输介质、比特流
传输介质:
| 介质类型 | 示例 |
|---|---|
| 有线 | 网线(双绞线)、光纤 |
| 无线 | Wi-Fi 信号、4G/5G、蓝牙 |
| 电信号 | 电流、光信号 |
通俗理解:物理层就是”路”——公路、航道、光纤,数据就是路上跑的车。没有路,车就跑不起来。
TCP/IP 模型
TCP/IP 五层模型
TCP/IP(Transmission Control Protocol/Internet Protocol):传输控制协议/网际协议。
与 OSI 模型的对比:
| OSI 七层模型 | TCP/IP 五层模型 | 说明 |
|---|---|---|
| ⑦ 应用层 | 应用层 | 合并了 OSI 的应用层、表示层、会话层 |
| ⑥ 表示层 | ↑ | ↑ |
| ⑤ 会话层 | ↑ | ↑ |
| ④ 传输层 | 传输层 | 相同 |
| ③ 网络层 | 网络层 | 相同 |
| ② 数据链路层 | 数据链路层 | 相同 |
| ① 物理层 | 物理层 | 相同 |
TCP/IP 四层模型
在实际应用中,TCP/IP 通常被描述为四层模型:
| 四层模型 | 包含的 OSI 层 | 说明 |
|---|---|---|
| 应用层 | 应用层 + 表示层 + 会话层 | 所有应用相关协议 |
| 传输层 | 传输层 | TCP、UDP |
| 网络层(互联网层) | 网络层 | IP、ICMP |
| 网络接口层 | 数据链路层 + 物理层 | 硬件和介质相关 |
OSI vs TCP/IP 模型对比
| 对比维度 | OSI 模型 | TCP/IP 模型 |
|---|---|---|
| 推出时间 | 稍晚(1984 年) | 更早(1974 年开始发展) |
| 理论基础 | 先有理论,后有实现 | 先有实践,后总结理论 |
| 层级数量 | 7 层 | 4 层或 5 层 |
| 实际应用 | 理论模型,用于教学居多 | 当今互联网通信的实际标准 |
| 背景 | 国际标准化组织(ISO)制定 | 美国军方 ARPANET 实践中总结 |
数据单元(PDU)
在网络通信中,每一层对数据都有不同的称呼,这些称呼统称为协议数据单元(PDU, Protocol Data Unit)。
打个比方:牛奶从鲜奶变成奶粉,要经历很多道工序。信息从产生到接收,也会经历不同的”变身”。为了方便交流,通信模型对不同阶段的信息进行了统一命名。
各层数据单元
| 层级 | 数据单元名称 | 英文 | 简称 | 类比 |
|---|---|---|---|---|
| 应用层 | 应用协议数据单元 | Application Protocol Data Unit | APDU | 鲜牛奶 |
| 传输层 | 数据段 | Segment | Segment | 桶装牛奶 |
| 网络层 | 数据包/数据报 | Packet/Datagram | Packet | 装箱的桶 |
| 数据链路层 | 数据帧 | Frame | Frame | 装车发运 |
| 物理层 | 比特流 | Bit | Bit | 公路上的运输过程 |
数据封装与解封装
简介
信息从一台计算机产生,经过 TCP/IP 模型各层加工,最终传递到另一台计算机。这个通信过程就像快递从厂家包装到顾客收到货物拆包一样。
- 封装:发送数据时,从上到下逐层添加头部信息
- 解封装:接收数据时,从下到上逐层剥离头部信息
数据封装过程(发送端)
┌──────────────────────────────────────────────┐
│ ⑤ 应用层:用户信息转换为数据 │
│ 数据 = 用户原始信息 │
├──────────────────────────────────────────────┤
│ ④ 传输层:数据 → 数据段 │
│ + 源端口号 + 目标端口号 │
│ + 序号 + 校验和 │
│ 建立可靠连接 │
├──────────────────────────────────────────────┤
│ ③ 网络层:数据段 → 数据包 │
│ + 源 IP 地址 + 目标 IP 地址 │
│ + TTL + 协议类型 │
│ 数据包可通过互联网络传输 │
├──────────────────────────────────────────────┤
│ ② 数据链路层:数据包 → 数据帧 │
│ + 源 MAC 地址 + 目标 MAC 地址 │
│ + 帧校验序列(FCS) │
│ 在本地网段传输,硬件地址标识主机 │
├──────────────────────────────────────────────┤
│ ① 物理层:数据帧 → 比特流 │
│ 数字编码和时钟方案 │
│ 通过传输介质(网线/光纤/无线)发送 │
└──────────────────────────────────────────────┘
数据封装步骤总结
| 步骤 | 层级 | 操作 | 主要添加的信息 |
|---|---|---|---|
| 1 | 应用层 | 用户信息转换为数据 | 应用层协议头 |
| 2 | 传输层 | 数据 → 数据段,建立可靠连接 | 源/目标端口号 |
| 3 | 网络层 | 数据段 → 数据包,添加逻辑地址 | 源/目标 IP 地址 |
| 4 | 数据链路层 | 数据包 → 帧,添加硬件地址 | 源/目标 MAC 地址 |
| 5 | 物理层 | 帧 → 比特流,通过介质发送 | 无(直接传输) |
封装与解封装示意
发送端(封装) 网络传输 接收端(解封装)
----------------------------------------------------------------------
应用层数据 ────────────────────────────────────────> 应用层数据
↓ 加TCP/UDP头 ↑ 剥TCP/UDP头
传输层段 ────────────────────────────────────────> 传输层段
↓ 加IP头 ↑ 剥IP头
网络层分组 ────────────────────────────────────────> 网络层分组
↓ 加MAC头+FCS尾 ↑ 剥MAC头+FCS尾
链路层帧 ────────────────────────────────────────> 链路层帧
↓ 转换为比特流 ↑ 还原为帧
物理层比特流 →→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→ 物理层比特流
----------------------------------------------------------------------
TCP/IP 协议族
应用层协议
| 协议 | 全称 | 用途 | 典型场景 | 端口号 |
|---|---|---|---|---|
| HTTP | HyperText Transfer Protocol | 超文本传输 | 浏览网页(淘宝、百度) | 80 |
| HTTPS | HTTP Secure | 加密的 HTTP | 安全网页访问 | 443 |
| SSH | Secure Shell | 安全远程登录 | 远程控制服务器(远程桌面等) | 22 |
| FTP | File Transfer Protocol | 文件传输 | 文件上传下载(电影天堂) | 21 |
| SMTP | Simple Mail Transfer Protocol | 邮件传输 | 发送电子邮件(QQ 邮箱) | 25 |
| DNS | Domain Name System | 域名解析 | 将域名转换为 IP(baiyun.com → 1.2.3.4) | 53 |
传输层协议
TCP vs UDP 对比
| 对比维度 | TCP | UDP |
|---|---|---|
| 全称 | Transmission Control Protocol | User Datagram Protocol |
| 可靠性 | 可靠(有确认、重传、排序) | 不可靠(发出去就不管了) |
| 连接 | 面向连接(三次握手建立连接) | 无连接(直接发送) |
| 速度 | 较慢(需要确认和重传) | 更快(无需等待确认) |
| 流量控制 | 有(滑动窗口机制) | 无 |
| 适用场景 | 网页浏览、文件传输、邮件 | 视频直播、在线游戏、DNS 查询 |
| 类比 | 挂号信(有签收、可追踪) | 普通信(寄出去就不管了) |
挂号信 vs 普通信的比喻:
- TCP 像挂号信:寄出去后你能知道对方是否收到,如果丢失了会重新寄送
- UDP 像普通信:寄出去就不管了,到不到看运气,但速度快、成本低
网络层协议
| 协议 | 全称 | 用途 | 典型场景 |
|---|---|---|---|
| IP | Internet Protocol | 互联网协议,负责寻址和路由 | 每台设备的 IP 地址(192.168.1.1) |
| ICMP | Internet Control Message Protocol | 网络消息管理,用于测试和诊断 | ping 命令 |
通信兵的比喻:ICMP 就像军队中的通信兵——负责探测线路是否通畅、报告网络状态。
ping命令就是派出一个通信兵去探测目标是否可达。
数据链路层与物理层
| 层级 | 核心概念 | 类比 |
|---|---|---|
| 数据链路层 | MAC 地址 | 家到邮局的地址(本地地址) |
| 物理层 | 网线、光纤、无线信号 | 公路、航道(传输通道) |
协议族概览
┌─────────────────────────────────────────────────┐
│ 应用层 │
│ HTTP SSH FTP SMTP DNS DHCP Telnet ... │
├─────────────────────────────────────────────────┤
│ 传输层 │
│ TCP UDP │
├─────────────────────────────────────────────────┤
│ 网络层 │
│ IP ICMP IGMP ARP │
├─────────────────────────────────────────────────┤
│ 数据链路层 │
│ Ethernet PPP PPPoE WiFi │
├─────────────────────────────────────────────────┤
│ 物理层 │
│ 网线 光纤 无线信号 4G/5G 蓝牙 │
└─────────────────────────────────────────────────┘
进制转换基础
网络地址(尤其是 IP 地址和子网掩码)的本质是二进制数。理解进制转换是理解 IP 地址、子网划分、路由计算的基础。
十进制(Decimal)
我们日常使用的数字系统。
| 概念 | 说明 | 示例 |
|---|---|---|
| 数值 | 0 ~ 9(共 10 个符号) | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 |
| 数位 | 数字的位置 | 123 中的 1、2、3 |
| 位权 | 每个位置代表的权重 | 百位、十位、个位(100, 10, 1) |
数位能不能随便调整? 当然不能!
123和321是完全不同的数。
二进制(Binary)
计算机使用的数字系统。
| 概念 | 说明 | 示例 |
|---|---|---|
| 数值 | 0 ~ 1(共 2 个符号) | 0, 1 |
| 数位 | 每一位只能是 0 或 1 | 101 中的 1、0、1 |
| 位权 | 2 的幂次 | 128, 64, 32, 16, 8, 4, 2, 1 |
二进制位权表
| 位权 | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
|---|---|---|---|---|---|---|---|---|
| 值 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
记住这 8 个数字:128-64-32-16-8-4-2-1,它们是二进制和十进制互转的关键!
十六进制(Hexadecimal)
编程和网络中常用的紧凑表示法。
| 概念 | 说明 |
|---|---|
| 数值 | 0~9, A(10), B(11), C(12), D(13), E(14), F(15) |
| 数位 | 每一位可以是 0-F |
| 位权 | 16 的倍数(… 256, 16, 1) |
十六进制对照表:
| 十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
二进制与十进制互转
十进制 → 二进制
方法:位权加减法
- 写出 8 位二进制的位权:128, 64, 32, 16, 8, 4, 2, 1
- 通过加减法,从大到小凑出目标数字
- 用到的位权标记为 1,没用到的标记为 0
示例:
| 十进制 | 计算过程 | 二进制 |
|---|---|---|
| 129 | 128 + 1 | 1000 0001 |
| 192 | 128 + 64 | 1100 0000 |
| 130 | 128 + 2 | 1000 0010 |
| 67 | 64 + 2 + 1 | 0100 0011 |
| 33 | 32 + 1 | 0010 0001 |
一、核心方法 1:除 2 取余法(通用方法)
示例 1:十进制 129 → 二进制
129 ÷ 2 = 64 余 1 ← 最低位
64 ÷ 2 = 32 余 0
32 ÷ 2 = 16 余 0
16 ÷ 2 = 8 余 0
8 ÷ 2 = 4 余 0
4 ÷ 2 = 2 余 0
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1 ← 最高位
结果:从下往上读余数 → 10000001
示例2:十进制 192 → 二进制示例 1:十进制 129 → 二进制
192 ÷ 2 = 96 余 0 ← 最低位
96 ÷ 2 = 48 余 0
48 ÷ 2 = 24 余 0
24 ÷ 2 = 12 余 0
12 ÷ 2 = 6 余 0
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1 ← 最高位
结果:从下往上读余数 → 11000000
示例 3:十进制 33 → 二进制
33 ÷ 2 = 16 余 1 ← 最低位
16 ÷ 2 = 8 余 0
8 ÷ 2 = 4 余 0
4 ÷ 2 = 2 余 0
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1 ← 最高位
结果:从下往上读余数 → 100001(补成 8 位标准字节格式:00100001)
二、核心方法 2:8421 权值法(8 位以内快速计算)
示例 1:十进制 129 → 二进制
| 权值 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 判断 | 129≥128 | 1<64 | 1<32 | 1<16 | 1<8 | 1<4 | 1<2 | 1≥1 |
| 结果 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
示例 2:十进制 192 → 二进制
| 权值 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 判断 | 192≥128 | 64≥64 | 0<32 | 0<16 | 0<8 | 0<4 | 0<2 | 0<1 |
| 结果 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
示例 3:十进制 33 → 二进制
| 权值 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 判断 | 33<128 | 33<64 | 33≥32 | 1<16 | 1<8 | 1<4 | 1<2 | 1≥1 |
| 结果 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
二进制 → 十进制
方法:将每一位的位权值相加
示例:
1010 1010
= 128 + 0 + 32 + 0 + 8 + 0 + 2 + 0
= 170
练习:
1111 1110
= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 0
= 254
常用二进制/十进制对照表
| 十进制 | 二进制 | 说明 |
|---|---|---|
| 0 | 0000 0000 | 全 0 |
| 1 | 0000 0001 | 最低位为 1 |
| 127 | 0111 1111 | 7 个 1 |
| 128 | 1000 0000 | 最高位为 1 |
| 192 | 1100 0000 | 2 个 1(常见子网掩码) |
| 224 | 1110 0000 | 3 个 1 |
| 240 | 1111 0000 | 4 个 1 |
| 248 | 1111 1000 | 5 个 1 |
| 252 | 1111 1100 | 6 个 1 |
| 254 | 1111 1110 | 7 个 1 |
| 255 | 1111 1111 | 全 1 |
这些数字在网络配置中经常出现,特别是子网掩码的计算。建议记下来!
存储单位换算
| 单位 | 全称 | 换算关系 | 说明 |
|---|---|---|---|
| bit (b) | 比特 | 1 bit = 1/0 | 最小信息单位 |
| Byte (B) | 字节 | 1 Byte = 8 bits | 基本存储单位 |
| KB | Kilobyte | 1 KB = 1024 Bytes | |
| MB | Megabyte | 1 MB = 1024 KB | |
| GB | Gigabyte | 1 GB = 1024 MB | |
| TB | Terabyte | 1 TB = 1024 GB |
我们习惯性的以1G=1000MB的说法,也是没多大问题的
ASCII 编码
ASCII(American Standard Code for Information Interchange):美国信息交换标准代码。
- 1 个英文字母 = 1 个字节 = 8 个比特
- 1 个中文字符 = 2~4 个字节(取决于编码方式:GBK=2 字节,UTF-8=3 字节)
感兴趣的可以看看这个对照表:ASCII码对照表,ASCII码一览表(非常详细) – C语言中文网
网络速度 vs 存储速度
注意区分:
- 网络速度单位:Mbps(Megabits per second,兆比特每秒)
- 下载速度单位:MB/s(Megabytes per second,兆字节每秒)
100 Mbps ÷ 8 = 12.5 MB/s
1 Gbps ÷ 8 = 125 MB/s
为什么你的 100M 宽带下载速度只有 12.5 MB/s? 因为运营商说的是”比特”,而下载软件显示的是”字节”,差了 8 倍!
总结
通过本章节的学习,你应该掌握了:
- 理解 OSI 七层模型的层级结构和各层功能
- 理解 TCP/IP 五层/四层模型及其与 OSI 模型的对应关系
- 掌握各层的核心概念(应用层→原始数据、传输层→端口号、网络层→IP 地址、链路层→MAC 地址、物理层→比特流)
- 理解数据单元(PDU)的概念(APDU、Segment、Packet、Frame、Bit)
- 理解数据封装(发送端逐层加头)和解封装(接收端逐层去头)的过程
- 熟悉常见的应用层协议(HTTP、SSH、FTP、SMTP、DNS)
- 理解 TCP(可靠、面向连接)和 UDP(不可靠、无连接)的区别
- 理解 IP 和 ICMP 协议的作用
- 掌握二进制与十进制的互转方法
- 熟悉常用二进制数值(特别是子网掩码相关数值)
- 掌握存储单位换算(bit → Byte → KB → MB → GB → TB)
学习建议:网络基础看似理论,但它是你理解一切网络行为的基石。建议将 OSI 七层模型和 TCP/IP 协议族的知识与你之前学过的网络配置实践结合起来理解——IP 地址属于哪一层?端口号又是谁负责的?ping 命令用的是哪个协议?多问多想,理论与实践结合,才能真正掌握。