数据转发过程
前言
TCP/IP协议簇和底层协议配合,保证了数据能够实现端到端的传输。数据传输过程是一个非常复杂的过程,例如数据在转发的过程中会进行一系列的封装和解封装。对于网络工程师来说,只有深入地理解了数据在各种不同设备上的转发过程,才能够对网络进行正确的分析和检测。
数据转发过程概述
以下图为例:
假设主机A想访问服务器A
- TCP封装(传输层封装)
当主机建立了到达目的地的TCP连接后,便开始对应用层数据进行封装。
如图所示,这里做的是传输层封装内容中指定了源端口和目的端口号 - IP封装(网络层封装)
这里协议号为:0x06,表示上层协议为tcp协议,若为0x11则为udp,并指定源ip地址和目的端口ip地址等。
- 查找路由(链路层封装)
如下图,链路层封装需要知道目的主机的mac地址,由于本次传输是跨网段的,所以主机A查看路由表发现有一条默认路由(即路由器ip地址也是主级A的网关地址),于是就通过arp请求网关的mac地址
至此链路层封装完成,这里type为0800为ip协议
数据帧转发
1.数据格式
需要注意的是,下图无论数字还是顺序都是从右向左看,主机工作在半双工状态下,suoyi 会使用CSMA/CD来检测链路是否空闲。
前导码(Preamble)用于使接收者进入同步状态,当接收者收到101010…这样一条同步信号,就知道有数据来了。
定界符(SFD)用于指示帧的开始,当接收者收到收到101010111的时候,就知道后续的字节都是数据。
2.数据帧鉴别
同一个冲突域里的设备都会接收到主机A发送的数据帧。
只有网关(RTA)会处理该数据帧,并继续转发。其他主主机如主机B,查看mac地址与主机不匹配则丢弃该数据帧。
3.跨网段数据包转发
网关检查路由表是否具有到达目的网络的路由条目。
如果存在转发路径,则为数据包添加一个新的二层帧头和帧尾,并继续转发。且数据从路由器入口进入的时候,路由器会将二层信息拆掉查看源ip和目的ip,并查看路由表从指定接口转发出去,转发出去的时候会重新封装二层信息,这个过程中会修改数据包中的数据,例如:会将TTL值-1。若转发的设备会交换机,则不换将二层信息拆掉,即透传的。
4.数据帧解封装
RTB拆二层信息查看目的ip为服务器A,则以服务器A的MAC地址作为目的MAC继续转发。这过程中由于路由表中显示的出口存在服务器A、服务器B两台路由器,所以服务器A、服务器B都会收到该数据包,然后查看mac地址是否与自己匹配再选择继续处理还是丢弃该数据帧。
服务器A接收到该数据帧后,发现目的MAC为自己的MAC,于是会继续处理该数据帧。
服务器A检查数据包的目的IP地址,发现目的IP与自己的IP地址相同。于是,服务器A剥掉数据包的IP头部查看协议号(protocol为6)是走tcp协议,于是送往上层协议TCP继续进行处理。
服务器A检查TCP头部的目的端口,然后将数据段发送给应用层的HTTP协议进行处理。
总结
1.数据在进行二层和三层封装之前,主机需要了解哪些信息?
源ip地址、目的ip地址、目的ip地址、目的mac地址、若跨网段还是网关ip、网关mac地址。
2.当数据帧发送到非目的主机时,非目的主机将会如何处理?
丢弃该数据帧
3.传输层如何能够准确的将数据交给特定应用?
端口号
4.当两台主机同时访问服务器的HTTP服务,该服务器如何区分数据属于哪个会话?
源端口号