概述
- 数据封包是指数据在发送前,经过网络模型各个分层,数据封装的过程;
- 数据拆包是指数据在接收后,经过网络模型各个分层,拆除多余数据还原原始数据的过程;
同网络下
发送方主机
- 应用层:将原始数据转为二进制,调用网络接口传入,并将数据进行加密、压缩等格式处理,创建会话,进行会话控制;
- 传输层:确定传输方式,将源端口和目标端口信息添加到原始数据前的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),将数据交给对应服务程序处理;
- 应用层:将数据进行解压、解密等格式处理,把二进制数据转为原始数据;
不同网络下
发送方主机
- 应用层:将原始数据转为二进制,调用网络接口传入,并将数据进行加密、压缩等格式处理,创建会话,进行会话控制;
- 传输层:确定传输方式,将源端口和目标端口信息添加到原始数据前的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),将数据交给对应服务程序处理;
- 应用层:将数据进行解压、解密等格式处理,把二进制数据转为原始数据;