数据转发过程
背景:TCP/IP协议簇和底层协议配合,保证了数据能够实现端到端的传输。这个过程是数据在不同的设备转发前的一系列封装和解封装的过程,熟悉了这个,才能对网络进行正确的分析和检测。
目标:
-
数据封装和解封装的过程
-
处理数据转发过程中的基本故障
数据转发过程:
-
-
-
分类
-
同一网络
-
本地转发:主机A给主机B发送数据
-
-
不同网络
-
远程转发:主机A给服务器A发送数据
-
-
-
举例:主机A需要访问服务器A的Web服务,假定两者之间建立了TCP连接。
-
TCP封装
-
-
主机三次握手后建立来了可靠的TCP连接
-
对应用层封装(加密,压缩等)
-
进行传输层封装
-
填充源端口:本例中为1027
-
目地端口字段:80
-
初始序列号
-
确认序列号
-
标识位
-
窗口字段
-
校验和字段
-
-
-
IP封装
-
-
网络层封装
-
IP封装时,需要明确IP报文的源和目的地址。
-
IP报文大于网络的最大传输单元(MTU),则报文有可能在传输过程中分片。
-
TTL字段用于减少网络环路造成的影响。默认TTL=255
-
协议字段标识了传输层所使用的协议(TCP协议—0X06)
-
-
-
查找路由
-
-
通过路由表知道数据下一跳的地址是哪里
-
通过接口10.1.1.1的接口跳到网关10.1.1.254
-
-
-
ARP
-
-
通过ARP缓存表找到下一跳的地址
-
Dynamic 动态,指的是动态地址
-
如果没有下一跳的MAC地址,那么久会发送ARP请求
-
-
-
以太网封装
-
-
-
主机A在链路层封装数据帧是,遵循IEEE802.3或者Ethernet_II标准,Ethernet_II帧头中的类型字段填充0X0800,表示网络层用的是IP协议。源MAC地址为主机AC地址,目的MAC地址是网关路由器E0/0接口的MAC地址
-
-
数据帧转发过程
-
-
-
主机在半双工状态下,使用CSMA/CD检测链路是否空闲
-
空闲的话,发送
-
前导码(Preamble)用于使接受者进入同步状态
-
定界符(SFD)用于指示帧的开始
-
-
遇到冲突域
-
-
同一冲突域里的设备都会接收到主机A发送的数据帧
-
只有网关RTA会处理该数据帧,并继续转发
-
-
主机A发送到数据帧到共享以太网,此网络中的所有设备都会收到,进行FCS校验,
-
未通过,帧被丢弃
-
通过,检查帧中的目的MAC地址
-
与自己的MAC地址不吻合
-
与自己的MAC地址吻合,继续处理
-
解封装–帧头帧尾剥去
-
剩下的根据帧头中的类型字段的值送到网络层中的对应协议去处理。
-
-
-
-
网关检查具有到达目的的网络的路由条目
-
若果存在转发路径,则为数据包添加新的二层帧头和帧尾,并继续转发
-
RTA收到此数据报文后
-
网络层处理
-
RTA根据IP报头信息中的校验和字段,检查完整性
-
RTA根据IP地址查看路由表,确认是否能把数据包发送到目的端
-
RTA必须对TTL值处理
-
报文大小不得超过MTU的值,超过就分片
-
-
处理完后,报文送到数据链路层重新封装,成为一个新的 数据帧(头部会封装新的源MAC地址和目的MAC地址,)
-
如果网络设备不知道下一跳的MAC地址通过ARP协议获取
-
-
-
-
数据帧解封装
-
RTB以服务器A的MAC地址作为目的MAC地址继续转发
-
服务器A接收到该数据帧后,发现目的MAC为自己的,且通过FCS校验完整后,就继续处理
-
-
数据包解封装
-
服务器A检查数据包的目的IP地址就是自己的,就会解封装,去除报头和报尾
-
若数据被分片,则需要重新组合。
-
标识字段用于标识同一数据源的分片报文
-
偏移量:分片在原分组中的相对位置
-
标志字段
-
最低位为1,标识后面还有分片
-
0,就是标识这是最后一个数据片
-
中间一位为1表示不能分片
-
为0表示允许分片。
-
-
-
-
送往上层协议TCP继续处理
-
-
数据段解封装
-
服务器A检查TCP头部目的端口,然后将数据段发送给应用层的HTTP协议处理
-
-
提问:
-
数据在进行二层和三层封装之前,主机需要了解什么信息
目的端IP地址,目的网络的路由以及下一跳的MAC地址
-
传输层如何准确的将数据给特定应用
传输层检查TCP/UDO报文中的端口号来识别
-
当两台主机同时访问服务器的HTTP服务,如何区分属于哪个会话
TCP报文头中包含源端口可以区分会话
服务器通过源IP地址来识别