首页 > 其他分享 >数据 封装与解封装

数据 封装与解封装

时间:2022-10-09 16:00:25浏览次数:44  
标签:封装 MAC 传输层 报头 数据 链路层

封装:将数据变为比特流的过程中,在参考模型的每一层需要添加上特定的协议报头动作

动作:从高层往低层依次封装,在每一层使用特定的协议,对数据进行处理,在数据前添加特定的协议报头。

封装原则:

1:每一层在上一层数据前添加协议报头

2:添加完协议报头的整体,就是该层的PDU

3:每一层的PDU对于下一层来说就是上层数据(每一层的上层数据就是上层的PDU)

PDU(协议数据单元,也就是每层的数据单位)

应用层:APDU

表示层:PPDU

会话层:SPDU

传输层:段(segment)

网络层:包(packet)

数据链路层:帧(frame)

物理层:比特(bit)

封装由发送者发送出去,数据只有被封装以后才有可能被发送出去。

    封装过程

        应用层:原始数据被转换成二进制数据

        传输层:二进制数据被分割成小的数据段,并封装TCP头部 (数据段)
        (TCP头部的关键信息–端口号)

        网络层:传输层传来的数据被封装上IP头部 (数据包)
        (IP头部的关键信息–IP地址)

        数据链路层:网络层传来的数据被封装上MAC头部 (数据帧)
        (MAC头部的关键信息–MAC地址)

        物理层:二进制数据组成的比特流转化为电信号在网络中传输 (比特流)

 

 



主机在封装数据包之前,必须要知道目的端IP地址,在封装数据帧之前,必须要知道去往目的网络的路由以及下一跳的MAC地址。

    封装的必要参数

        传输层:源端口号 目标端口号

        网络层:源IP地址 目标IP地址

        数据链路层:源MAC地址 目标MAC地址

解封装 :封装的逆过程,数据从比特流还原为数据的过程

动作:从底层往高层依次解封装,每解封装一层,会将该层的忒点那个协议报头去掉

    解封过程
        物理层:将电号转化为二进制数据,并将其送至数据链路层
        数据链路层:查看MAC地址,地址是自己,就拆掉MAC头部,继续传输
        地址不是自己,就丢弃数据
        网络层:查看IP地址,地址是自己,就拆掉IP头部,继续传输
        如果IP地址不是自己,则会路由表查找去往该网段的下一跳地址。如果存在转发路径,会为数据包添加一个新的二层帧头和帧尾部。
        传输层:查看TCP头部,判断应该传到哪里,然后重组数据,传输到应用层
        应用层:二进制转化为原始数据

 

 



解封装原则:

1:必须从底层往高层解封装

2:解封装时,只有协议报头合理,才可以解封装。

3:解封装一旦停止,数据就会被丢弃

解封装由接收者触发,数据必须经过解封装才可以被接受

数据链路层分为两个子层:

LLC子层:逻辑链路控制子层–负责和上层协商,使用SAP来区分不同的上层协议

MAC子层:介质访问控制子层

数据链路层有FCS(帧检验字段)用于检测数据的完整性

LLC子层提供服务访问点(SAP),标识上层协议

1:每一层都需要利用下层的服务进行通信

2:每一层都需要为上层服务,所以需要标识上层所使用的协议或应用

传输层:使用端口号标识上层应用

网络层:使用协议号标识上层应用

(注:可能有部分内容参考于其他博主,仅用于个人学习。)
————————————————
版权声明:本文为CSDN博主「李林楠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lln1540295459/article/details/107335373/

标签:封装,MAC,传输层,报头,数据,链路层
From: https://www.cnblogs.com/jiguibu/p/16772397.html

相关文章

  • 开源直播课丨大数据集成框架ChunJun类加载器隔离方案探索及实践
    本期我们带大家回顾一下无倦同学的直播分享《ChunJun类加载器隔离》,ChunJun类加载器隔离的方案是我们近期探索的一个新方案,这个方案目前还不是非常成熟,希望能借由此次分享......
  • 二十三: 其他数据库日志
    其他数据库日志我们在讲解数据库事务时,讲过两种日志:重做日志回滚日志。对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。我......
  • redis中的zset数据类型的基本操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、zset相关操作说明:redis的zset是通过哈希表实现的,所以添加、删除、查找......
  • 二十五: 数据库备份与恢复
    数据库备份与恢复在任何数据库环境中,总会有不确定的意外情况发生,比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的,这些情况可能会......
  • openpyxl读取excel用例数据,并实现对需要执行的测试用例进行挑选
    1importjson2importos3fromopenpyxlimportload_workbook4fromcommon.path_handlerimporttestDatas_path56"""7需求:81-......
  • 如何查看 MySQL 数据库容量大小,表容量大小,索引容量大小?找到占用空间最大的表
    1.查看MySQL「所有库」的容量大小SELECTtable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',su......
  • 数据库概述
    1、为什么使用数据库持久性并且结构性得将数据保存起来2、数据库与数据库管理系统DB:存储数据得仓库本质是一个文件系统(mysql安装目录下得data目录中)DBMS:操作和管理数据库......
  • 4、security之自定义数据源
    security默认使用的就是内存方式定义数据源一、基于内存的数据源1、配置文件方式默认的用户定义在SecurityProperties里边,是一个静态内部类,如果要定义自己的用户名密码,必然......
  • docker镜像、容器数据卷
    一、docker镜像1、镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库......
  • mysql数据库目录
    一、mysql相关目录查看和mysql相关的目录命令find/-namemysql1、数据库文件存放路径其中/var/lib/mysql/就是mysql数据库文件存放路径,当然也可通过命令查看mysql>s......