数据封包与拆包

189 阅读4分钟

概述

  • 数据封包是指数据在发送前,经过网络模型各个分层,数据封装的过程;
  • 数据拆包是指数据在接收后,经过网络模型各个分层,拆除多余数据还原原始数据的过程;

同网络下

image.png

发送方主机

  • 应用层:将原始数据转为二进制,调用网络接口传入,并将数据进行加密、压缩等格式处理,创建会话,进行会话控制;
  • 传输层:确定传输方式,将源端口和目标端口信息添加到原始数据前的TCP(UDP)头部,形成数据段;
  • 网络层:将源IP和目标IP等信息添加到TCP(UDP)头部前(IP头部),形成数据包,确定传输路径(路由选择);
  • 数据链路层:将源MAC和目标MAC等信息添加到IP头部前(MAC头部),生成校验值(差错校验),形成数据帧;
  • 物理层:将二进制转为物理信号(比特流)通过传输介质发送;

交换机

  • 物理层:将物理信号(比特流)转为二进制数据;
  • 查看MAC头,检查源MAC是否存在于自己的MAC表中,如果不存在,则将源MAC与对应物理接口建立对应关系写入到自己的MAC表中;
  • 检查目标MAC是否存在于自己的MAC表中,如果不存在,则将该数据包从所有接口转发(广播),否则,将该数据包从自己MAC表中记录的对应物理接口转发(单播);

接收方主机

  • 物理层:将物理信号(比特流)转为二进制数据;
  • 数据链路层:检查目标MAC是否为自己的MAC地址,如果不是,则丢包,否则,拆除MAC头部,将数据交给上层(网络层)处理;
  • 网络层:检查目标IP是否为自己的IP地址,如果不是,则丢包,否则,拆除IP头部,将数据交给上层(传输层)处理;
  • 传输层:检查目标端口,查询目标端口对应服务程序,拆除TCP头部(或UDP),将数据交给对应服务程序处理;
  • 应用层:将数据进行解压、解密等格式处理,把二进制数据转为原始数据;

不同网络下

image.png

发送方主机

  • 应用层:将原始数据转为二进制,调用网络接口传入,并将数据进行加密、压缩等格式处理,创建会话,进行会话控制;
  • 传输层:确定传输方式,将源端口和目标端口信息添加到原始数据前的TCP(UDP)头部,形成数据段;
  • 网络层:将源IP和目标IP等信息添加到TCP(UDP)头部前(IP头部),形成数据包,确定传输路径(路由选择);
  • 数据链路层:将源MAC和网关设备的MAC等信息添加到IP头部前(MAC头部),生成校验值(差错校验),形成数据帧;
  • 物理层:将二进制转为物理信号(比特流)通过传输介质发送;

交换机(二层)

  • 物理层:将物理信号(比特流)转为二进制数据;

  • 数据链路层:

    • 查看MAC头,检查源MAC是否存在于自己的MAC表中,如果不存在,则将源MAC与对应物理接口建立对应关系写入到自己的MAC表中;
    • 检查目标MAC是否存在于自己的MAC表中,如果不存在,则将该数据包从所有接口转发(广播),否则,将该数据包从自己MAC表中记录的对应物理接口转发(单播);

路由器(三层)

  • 物理层:将物理信号(比特流)转为二进制数据;
  • 数据链路层:查看目标MAC是否为自己的MAC地址,如果不是,则丢包,否则,拆除MAC头部数据,暴露IP头部数据;
  • 网络层:查看目标IP,是否存在于自己的路由表中,如果不存在,则响应目标不可达,否则,将数据交给下一层处理;
  • 数据链路层:将数据重新封装MAC头部,源MAC为自己的MAC,目标MAC为下一跳设备MAC;
  • 物理层:将二进制数据转为物理信号(比特流);

接收方主机

  • 物理层:将物理信号(比特流)转为二进制数据;
  • 数据链路层:检查目标MAC是否为自己的MAC地址,如果不是,则丢包,否则,拆除MAC头部,将数据交给上层(网络层)处理;
  • 网络层:检查目标IP是否为自己的IP地址,如果不是,则丢包,否则,拆除IP头部,将数据交给上层(传输层)处理;
  • 传输层:检查目标端口,查询目标端口对应服务程序,拆除TCP头部(或UDP),将数据交给对应服务程序处理;
  • 应用层:将数据进行解压、解密等格式处理,把二进制数据转为原始数据;

常见网络设备工作层

image.png