一句话总结:
数据传递就像“套娃快递”——发送端层层加包装,接收端层层拆包裹,每层只关心自己的任务,最终把数据准确送到目的地!
一、发送端:层层加包装(封装)
假设你用微信发送消息“你好”:
1. 应用层(用户界面)
- 任务:把“你好”按协议(如HTTP)打包成应用数据。
- 动作:相当于你写好信,塞进信封,写上“收件人:微信服务器”。
- 数据单元:消息(Message)
2. 传输层(快递员)
-
任务:确保消息可靠传输(TCP)或快速发送(UDP)。
-
动作:给信封贴上“运输标签”(TCP头),包含:
- 源端口(你的微信端口,如5000)
- 目标端口(微信服务器端口,如80)
- 序列号(防止乱序,比如标记这是第1个包裹)
-
数据单元:段(Segment,TCP)/ 数据报(Datagram,UDP)
3. 网络层(物流公司)
-
任务:规划路线,找到对方的IP地址。
-
动作:再套一个大箱子,贴上“物流标签”(IP头),包含:
- 源IP(你的手机IP,如192.168.1.100)
- 目标IP(微信服务器IP,如106.11.22.33)
-
数据单元:包(Packet)
4. 链路层(货车司机)
-
任务:把包裹送到下一站(如路由器)。
-
动作:再套一个本地运输箱,贴上“本地地址标签”(MAC头),包含:
- 源MAC(你的手机Wi-Fi MAC地址)
- 目标MAC(路由器MAC地址)
-
数据单元:帧(Frame)
5. 物理层(高速公路)
- 任务:把帧变成电信号/光信号,通过网线或Wi-Fi发送。
- 动作:货车把箱子搬上高速,变成一串0和1的信号流。
- 数据单元:比特流(Bits)
二、接收端:层层拆包裹(解封装)
微信服务器收到信号后反向操作:
1. 物理层
- 任务:把电信号/光信号还原成比特流。
- 动作:高速公路卸货,把信号转成0和1的序列。
2. 链路层
- 任务:检查MAC地址,确认是发给自己的。
- 动作:拆掉最外层的本地运输箱(去掉MAC头),留下IP包。
3. 网络层
- 任务:检查IP地址,确认目标正确。
- 动作:拆掉物流箱(去掉IP头),留下TCP段。
4. 传输层
- 任务:检查端口号,把数据交给对应的应用(如微信服务程序)。
- 动作:拆掉运输标签(去掉TCP头),留下原始消息。
5. 应用层
- 任务:解析消息内容,显示“你好”到对方手机。
- 动作:拆开信封,读取信件内容。
三、关键比喻
| 层级 | 发送端动作 | 接收端动作 | 核心关注点 |
|---|---|---|---|
| 应用层 | 写内容,装信封 | 读内容,显示给用户 | 数据内容(HTTP/消息) |
| 传输层 | 贴运输标签(端口号) | 拆标签,确认交给哪个程序 | 端到端可靠传输(TCP) |
| 网络层 | 贴物流标签(IP地址) | 拆标签,规划全局路线 | 跨网络寻址(IP) |
| 链路层 | 贴本地地址(MAC地址) | 拆标签,送下一站 | 相邻节点传输(MAC) |
| 物理层 | 装箱上高速(转信号) | 卸货还原信号 | 物理介质(网线/Wi-Fi) |
四、为什么分层设计?
- 各司其职:修路(物理层)的不用管物流(网络层)怎么规划路线。
- 灵活升级:Wi-Fi 6(物理层)升级不影响微信(应用层)的使用。
- 简化问题:程序员只需关注某一层的实现(如写APP不用懂网卡驱动)。
五、总结口诀
“数据传递像套娃,发送层层加标签。
物理通电发信号,链路MAC送隔壁。
网络IP找全局,传输端口保送达。
应用拆包读内容,分层协作真高效!”