当前位置: 首页 > news >正文

当数据包从上层移动到下层时,OSI 模型中会发生什么?

当数据包(更准确地说,是协议数据单元 - PDU)从上层移动到下层(即从应用层向物理层方向传输)时,在 OSI 模型中发生的关键过程是封装。每一层都会为来自其上一层的数据添加本层特定的控制信息(主要是头部,有时还包括尾部),将其包装起来,以便执行本层的功能。

以下是每一步发生的详细过程:

  1. 应用层 (Layer 7)

    • 起始点:用户或应用程序生成要发送的原始数据(Data)。例如,一封电子邮件的内容、一个网页请求。
    • 动作:应用层协议(如 HTTP, FTP, SMTP)确定数据格式、语义并准备将其传递给表示层。
  2. 表示层 (Layer 6)

    • 输入:来自应用层的数据(Data)。
    • 动作:负责数据的表示方式。
      • 翻译/转换:如果需要,将数据从一种格式(如 Unicode)转换为另一种格式(如 ASCII),确保接收方应用能理解。
      • 加密/解密:如 TLS/SSL 的握手和密钥交换(虽然通常实现时与网络层绑定)。
      • 压缩/解压缩:减少传输的数据量。
    • 输出:将处理后的数据传递给会话层。表示层本身通常不添加明显的头部,但其转换/加密操作可以被视为对数据的“处理”。
  3. 会话层 (Layer 5)

    • 输入:来自表示层的数据(Data)。
    • 动作:建立、管理和终止应用程序之间的通信会话(对话)。
      • 建立连接:协调不同设备上应用程序之间的通信通道。
      • 管理对话:协调对话流程(谁在何时发送)、设置检查点(用于恢复)。
      • 同步:管理数据交换的顺序和状态。
    • 输出:将数据(有时可能带有会话控制信息)传递给传输层。会话层通常添加一个小的头部来管理会话。此时的数据单元常称为数据会话 PDU
  4. 传输层 (Layer 4)

    • 输入:来自会话层的数据(Data)。
    • 动作:提供端到端(源主机到目标主机上的应用程序)的可靠或不可靠数据传输服务。
      • 分段与重组:将来自上层的大块数据分割成更小的、适合网络传输的。在接收端再重组。
      • 连接控制:面向连接(如 TCP)时建立、维护、终止连接;无连接(如 UDP)则直接发送。
      • 端到端流量控制:确保发送方不会压垮接收方。
      • 端到端错误控制:(主要在 TCP)通过序列号、确认和重传机制确保数据的可靠、按序交付。
      • 端口寻址:通过端口号标识主机上的具体应用进程(服务)。
    • 输出:为接收到的数据添加传输层头部(包含源端口、目标端口、序列号、确认号、控制标志、校验和等),形成数据报(Segment / Datagram)。这是封装的关键一步。将段传递给网络层。
  5. 网络层 (Layer 3)

    • 输入:来自传输层的(Segment)。
    • 动作:负责数据在网络中的路由(选择最优路径)和逻辑寻址。
      • 逻辑寻址:使用逻辑地址(如 IP 地址)唯一标识网络中的主机和设备。
      • 路由:基于路由表确定数据包从源到目的地的最佳路径。
      • 分组:网络层处理的数据单元称为数据包
    • 输出:为接收到的段添加网络层头部(如 IP 头部,包含源 IP 地址、目标 IP 地址、TTL、协议标识符等),形成数据包。将数据包传递给数据链路层。
  6. 数据链路层 (Layer 2)

    • 输入:来自网络层的数据包(Packet)。
    • 动作:负责在同一个物理网络段(局域网) 上的节点到节点(通常是相邻设备,如主机到交换机、交换机到路由器)的数据传输。
      • 物理寻址:使用物理地址(如 MAC 地址)标识本地网络上的设备。
      • 成帧:将网络层的数据包封装成(Frame),添加帧头和帧尾。
      • 物理介质访问控制:控制设备何时可以在共享介质(如以太网)上发送数据(如 CSMA/CD)。
      • 节点到节点的流量控制(可选)。
      • 节点到节点的错误检测(通过帧尾的校验和)。
    • 输出
      • 添加帧头(包含源 MAC 地址、目标 MAC 地址、类型字段等)。
      • 添加帧尾(通常是校验和,如 FCS)。
      • 将数据包封装在帧头和帧尾之间,形成。将帧传递给物理层。
  7. 物理层 (Layer 1)

    • 输入:来自数据链路层的(Frame)。
    • 动作:负责在物理介质(铜缆、光纤、无线电波)上透明地传输原始的比特流。
      • 比特表示:定义电压电平、光脉冲、无线频率等如何表示二进制 01
      • 物理连接:定义连接器、线缆类型、引脚用途。
      • 比特同步:确保发送方和接收方的时钟同步。
      • 线路编码:将二进制数据转换为适合在物理线路上传输的信号(如曼彻斯特编码、NRZ)。
      • 信号传输与接收:将数字比特流转换为物理信号并通过介质发送出去。在接收端,将物理信号转换回比特流。
    • 输出:将帧中的比特序列转换成适合在物理介质上传输的信号(电气、光、无线电波)。不再添加头部或尾部,是对比特流的物理表示。

总结关键点:

  • 封装:当数据从上往下传递时,每一层都会在来自上层的数据前面(有时也在后面)添加自己的层特定头部信息
  • PDU 名称变化
    • 应用/表示/会话层:数据
    • 传输层:
    • 网络层:数据包
    • 数据链路层:
    • 物理层:比特流
  • 目的:每一层添加的控制信息(头部/尾部)是为了实现该层的特定功能(如寻址、路由、错误检测、流量控制、会话管理等),并让对端的同一层在接收数据后进行相应的处理(解封装)。
  • 解封装:在接收端,数据从下往上传递时发生相反的过程——解封装。每一层读取并处理其自身的头部信息,执行必要的操作(如错误检查、路由查找、重组等),然后移除该层包头,将剩余的数据传递给其上层。

简单来说,就像寄信:你写好信(数据),放进信封(传输层头),写上收寄信人地址(网络层头),再放进邮袋写上本地邮局信息(数据链路层头/尾),最后由邮车(物理层)运走。每一层信封都是为了完成特定的传递步骤而添加的。

相关文章:

  • Qt/C++学习系列之Excel使用记录
  • xctf-weak_auth(弱口令)
  • 初探Succinct Jagged稀疏多项式承诺方案
  • Go语言堆内存管理
  • Scade 语言概念 - 方程(equation)
  • BeckHoff--MES数据交互 MQ TRANCE API (MQ 追溯 API - 系统概述和命令参考)
  • STM32开发中,线程启动异常问题排查简述
  • Linux下的fuser用法简析
  • Qt(part 2)1、Qwindow(菜单栏,工具栏,状态栏),铆接部件,核心部件 ,2、添加资源文件 3、对话框
  • 2025年AI编程工具推荐
  • linux设备重启后时间与网络时间不同步怎么解决?
  • Bootstrap Blazor中实现富文本框Editor组件的内容导出为docx格式的Word文档
  • Spring Security深度解析:构建企业级安全框架
  • CCPC chongqing 2025 H
  • c++ 静态成员变量
  • xss漏洞学习
  • 什么是可恢复保险丝
  • ELF文件,静态链接(Linux)
  • 关于 ​​Thread 与 Runnable​​ 以及 ​​线程生命周期​​ 的详细说明与示例
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 上海网站建设企/seo基础教程
  • 微软网站开发工具/管理人员课程培训
  • 网站建设征求意见表/国际新闻最新消息十条摘抄
  • 大观网站建设/百度免费下载安装
  • 有免费网站服务器吗/seo云优化如何
  • 网站建设最贵多少钱/重庆seo外包平台