1.7、数据转发过程
- 前言
- TCP/IP协议簇和低层协议配合,保证了数据能够实现端到端的传输。数据传输过程是一个非常复杂的过程,例如数据在转发的过程中会进行一系列的封装和解封装。对于网络工程师来说,只有深入地理解数据在不同设备上的转发过程,才能够对网络进行正确的分析和检测。
- 数据转发过程概述
- 数据包在相同网段内或不同网段之间转发所依据的原理基本一致
- TCP封装
- 当主机建立了到达目的地的TCP连接后,便开始对应用层数据进行封装
- IP封装
- 查找路由
- 主机A必须要拥有到达目的地的路由
- 每个主机都会独自维护各自的路由表项,在发送数据之前要检测是否能到达目的端,通过检测路由表完成检测
- 主机A必须要拥有到达目的地的路由
- ARP
- 通过ARP缓存表找到下一跳的MAC地址
- 如果表项里没有下一跳的MAC地址,主机A会发送ARP请求
- 以太网封装
- 由于上层网络层使用的是IP协议,所以TYPE类型填充为0X0800
- 数据帧转发过程
- 主机工作在半双工的状态下,所以会使用CSMA/CD来检测链路是否空闲
- 如果链路空闲,主机A会发送一个前导码和定界符额外附加到帧头
- 前导码用于使接受者进入同步状态
- 定界符用于指示帧的开始
- 数据帧转发过程
- 如何确定该帧的目的地?
- 设备收到帧以后,会进行FCS校验来确定帧是完整的
- 如果不完整则丢弃
- 如果通过了FCS校验,则检查目的MAC地址
- 接收该帧后,帧头帧尾也会被剥去,剩下的数据报文会根据帧头中的类型字段上传给网络层的对应协议处理
- 设备收到帧以后,会进行FCS校验来确定帧是完整的
- 同一个冲突域里的设备都会接收到主机A发送的数据帧
- 只有网关(RTA)会处理该数据帧,并继续转发
- 如何确定该帧的目的地?
- 数据报转发过程
- 网络层进行处理
- 首先根据IP的头部信息来进行校验,来确定IP数据是否完整,然后再根据目的IP地址来查看路由表项,看是否能够转发到目的端。
- 再对TTL值进行处理
- 网关检测是否具有到达目的网络的路由条目
- 如果存在转发路径,则为数据包添加一个新的二层镇头和帧尾,并继续转发
- 源IP地址和目的IP地址不变
- 源MAC地址和目的MAC地址变成当前设备转发接口和下一条接口的MAC地址
- 通过ARP获取
- 网络层进行处理
- 数据帧解封装
- RTB以服务器A的MAC地址作为目的MAC继续转发
- 服务器A接收到该数据帧后,发现目的MAC为自己的MAC,于是会继续处理该数据帧
- 数据包解封装
- 服务器A检测数据包的目的IP地址,发现目的IP与自己的IP地址相同
- 服务器A剥掉数据包的IP头部后,会送往上层协议TCP继续进行处理
- 数据段解封装
- 服务器A检查TCP头部的目的端口,然后将数据段发送给应用层的HTTP协议进行处理
- 总结
- 数据在进行二层和三层封装之前,主机需要了解哪些信息?
- 查看目的是否可达,知道目的的IP地址,和下一跳的目的MAC地址
- 目的端IP地址
- 去往目的地址的路由
- 下一条的MAC地址
- 查看目的是否可达,知道目的的IP地址,和下一跳的目的MAC地址
- 当数据帧发送到非目的主机时,非目的主机将会如何处理?
- 首先进行帧校验,校验后比对目的MAC地址和本设备源MAC地址是否一致,不一致则丢弃
- 传输层如何能够准确的将数据交给特定应用?
- 根据目的端口号来识别特定应用
- 当两台主机同时访问服务器的HTTP服务,该服务器如何区分数据属于哪个会话?
- 通过主机的源IP地址和源端口号
- Eg
- 当使用qq浏览器和ie浏览器来访问服务器时,可以通过端口号来区分该数据
- Eg
- 通过主机的源IP地址和源端口号
- 数据在进行二层和三层封装之前,主机需要了解哪些信息?