当数据包从上层移动到下层时,OSI 模型中会发生什么?
当数据包(更准确地说,是协议数据单元 - PDU)从上层移动到下层(即从应用层向物理层方向传输)时,在 OSI 模型中发生的关键过程是封装。每一层都会为来自其上一层的数据添加本层特定的控制信息(主要是头部,有时还包括尾部),将其包装起来,以便执行本层的功能。
以下是每一步发生的详细过程:
-
应用层 (Layer 7):
- 起始点:用户或应用程序生成要发送的原始数据(Data)。例如,一封电子邮件的内容、一个网页请求。
- 动作:应用层协议(如 HTTP, FTP, SMTP)确定数据格式、语义并准备将其传递给表示层。
-
表示层 (Layer 6):
- 输入:来自应用层的数据(Data)。
- 动作:负责数据的表示方式。
- 翻译/转换:如果需要,将数据从一种格式(如 Unicode)转换为另一种格式(如 ASCII),确保接收方应用能理解。
- 加密/解密:如 TLS/SSL 的握手和密钥交换(虽然通常实现时与网络层绑定)。
- 压缩/解压缩:减少传输的数据量。
- 输出:将处理后的数据传递给会话层。表示层本身通常不添加明显的头部,但其转换/加密操作可以被视为对数据的“处理”。
-
会话层 (Layer 5):
- 输入:来自表示层的数据(Data)。
- 动作:建立、管理和终止应用程序之间的通信会话(对话)。
- 建立连接:协调不同设备上应用程序之间的通信通道。
- 管理对话:协调对话流程(谁在何时发送)、设置检查点(用于恢复)。
- 同步:管理数据交换的顺序和状态。
- 输出:将数据(有时可能带有会话控制信息)传递给传输层。会话层通常添加一个小的头部来管理会话。此时的数据单元常称为数据或会话 PDU。
-
传输层 (Layer 4):
- 输入:来自会话层的数据(Data)。
- 动作:提供端到端(源主机到目标主机上的应用程序)的可靠或不可靠数据传输服务。
- 分段与重组:将来自上层的大块数据分割成更小的、适合网络传输的段。在接收端再重组。
- 连接控制:面向连接(如 TCP)时建立、维护、终止连接;无连接(如 UDP)则直接发送。
- 端到端流量控制:确保发送方不会压垮接收方。
- 端到端错误控制:(主要在 TCP)通过序列号、确认和重传机制确保数据的可靠、按序交付。
- 端口寻址:通过端口号标识主机上的具体应用进程(服务)。
- 输出:为接收到的数据添加传输层头部(包含源端口、目标端口、序列号、确认号、控制标志、校验和等),形成段或数据报(Segment / Datagram)。这是封装的关键一步。将段传递给网络层。
-
网络层 (Layer 3):
- 输入:来自传输层的段(Segment)。
- 动作:负责数据在网络中的路由(选择最优路径)和逻辑寻址。
- 逻辑寻址:使用逻辑地址(如 IP 地址)唯一标识网络中的主机和设备。
- 路由:基于路由表确定数据包从源到目的地的最佳路径。
- 分组:网络层处理的数据单元称为数据包。
- 输出:为接收到的段添加网络层头部(如 IP 头部,包含源 IP 地址、目标 IP 地址、TTL、协议标识符等),形成数据包。将数据包传递给数据链路层。
-
数据链路层 (Layer 2):
- 输入:来自网络层的数据包(Packet)。
- 动作:负责在同一个物理网络段(局域网) 上的节点到节点(通常是相邻设备,如主机到交换机、交换机到路由器)的数据传输。
- 物理寻址:使用物理地址(如 MAC 地址)标识本地网络上的设备。
- 成帧:将网络层的数据包封装成帧(Frame),添加帧头和帧尾。
- 物理介质访问控制:控制设备何时可以在共享介质(如以太网)上发送数据(如 CSMA/CD)。
- 节点到节点的流量控制(可选)。
- 节点到节点的错误检测(通过帧尾的校验和)。
- 输出:
- 添加帧头(包含源 MAC 地址、目标 MAC 地址、类型字段等)。
- 添加帧尾(通常是校验和,如 FCS)。
- 将数据包封装在帧头和帧尾之间,形成帧。将帧传递给物理层。
-
物理层 (Layer 1):
- 输入:来自数据链路层的帧(Frame)。
- 动作:负责在物理介质(铜缆、光纤、无线电波)上透明地传输原始的比特流。
- 比特表示:定义电压电平、光脉冲、无线频率等如何表示二进制
0
和1
。 - 物理连接:定义连接器、线缆类型、引脚用途。
- 比特同步:确保发送方和接收方的时钟同步。
- 线路编码:将二进制数据转换为适合在物理线路上传输的信号(如曼彻斯特编码、NRZ)。
- 信号传输与接收:将数字比特流转换为物理信号并通过介质发送出去。在接收端,将物理信号转换回比特流。
- 比特表示:定义电压电平、光脉冲、无线频率等如何表示二进制
- 输出:将帧中的比特序列转换成适合在物理介质上传输的信号(电气、光、无线电波)。不再添加头部或尾部,是对比特流的物理表示。
总结关键点:
- 封装:当数据从上往下传递时,每一层都会在来自上层的数据前面(有时也在后面)添加自己的层特定头部信息。
- PDU 名称变化:
- 应用/表示/会话层:数据
- 传输层:段
- 网络层:数据包
- 数据链路层:帧
- 物理层:比特流
- 目的:每一层添加的控制信息(头部/尾部)是为了实现该层的特定功能(如寻址、路由、错误检测、流量控制、会话管理等),并让对端的同一层在接收数据后进行相应的处理(解封装)。
- 解封装:在接收端,数据从下往上传递时发生相反的过程——解封装。每一层读取并处理其自身的头部信息,执行必要的操作(如错误检查、路由查找、重组等),然后移除该层包头,将剩余的数据传递给其上层。
简单来说,就像寄信:你写好信(数据),放进信封(传输层头),写上收寄信人地址(网络层头),再放进邮袋写上本地邮局信息(数据链路层头/尾),最后由邮车(物理层)运走。每一层信封都是为了完成特定的传递步骤而添加的。