标签:控制 默认网关 ping 请求 ip协议 details cci 了解 封装
了解完IP协议簇后,通过别人写的IP路由选择过程简单了解下数据的行走过程。转自:https://blog.csdn.net/weixin_44059188/article/details/99628775
用户在Host_A上ping Host_B的IP地址。
1)ICMP生成一个回应请求——数据字段中的字母
2)ICMP将该请求交给IP,后者创建一个分组
3)创建分组后,IP判断目标IP地址位于本地网络还是远程网络
4)IP判断出这是一个远程请求,因此必须将分组发送到默认网关,以便它能够被路由到远程网络
5)在Host_A上,配置的默认网关为172.16.10.1。因此必须知道IP地址为172.16.10.1的接口E0的硬件地址。只有知道硬件地址后,才能将分组交给数据链路层,再由后者将其封装成帧,并发送到与网络172.16.10.1相连的路由器接口(在LAN内,主机只能通过硬件地址进行通信,因此Host_A想要与Host_B通信,必须将分组发送给本地网络的默认网关的介质访问控制地址)
注:MAC地址只能用于LAN内部通信,而不能用于穿越路由器进行通信
6)检查主机的地址解析协议(ARP)缓存,看看默认网关的IP地址是否已被解析为硬件地址。如果已解析,就可以直接将分组交给数据链路层,由它封装成帧;如果还未解析,将在本地网络中发送ARP广播,以查询172.16.10.1对应的硬件地址,路由器将相应该请求,并提供接口E0的硬件地址,而主机将缓存该硬件地址
7)分组和目标硬件地址被交给数据链路层,LAN驱动程序将根据LAN类型,来提供介质访问。然后生成一个帧,它使用控制信息对分组进行封装
ping Host_B时,Host_A发送给Lab_A的帧
8)帧创建好后,被交给物理层,物理层以每次1比特的方式将帧放到物理介质上
9)当前冲突域中的每台设备都接收这些比特,并将其封装成帧。每台设备都执行CRC计算,并且将结果与FCS字段的值对比,如果不同就丢弃该帧;相同就查看硬件地址,看指的是不是自己,如果是自己,就查看“以太类型”字段,来获悉使用的网络层协议
10)从帧中提取分组并将其他部分丢弃,将分组交给指定的协议(此处是IP)
11)IP接收分组并检查其目标IP地址。因为该目标IP地址与该路由器配置的所有地址都不匹配,因此路由器会在路由选择表中查找目标IP网络
12)路由选择表必须有前往网络172.16.20.0的路由,否则路由器将立即丢弃分组,并向始发设备发送一条ICMP消息,来说明目标网络不可达
13)如果在路由选择表中找到了前往目标网络的路由,路由器将分组交换到指定的出站接口(此处是E1)
14)路由器将分组交换到接口E1的缓冲区
15)E1的缓冲区需要知道目标主机的硬件地址,因此查看ARP缓存。如果Host_B的硬件地址以前已经被解析过了,并且包含在路由器的ARP缓存中,将直接把分组以及该硬件地址交给数据链路层以便封装成帧;如果没有被解析过,路由器将通过E1发送ARP请求,来查询172.16.20.2对应的硬件地址,然后Host_B将作出响应,并提供自己的硬件地址。然后分组和目标硬件地址交给数据链路层,以便将分组封装成帧
16)数据链路层创建一个帧,包含目标硬件地址、源硬件地址、“以太类型”字段和FCS字段,这个帧被交给物理层,物理层以每次1比特的方式将帧放到物理介质上
17)Host_B接收这个帧,并执行CRC计算(相同)→查看目标硬件地址(相同)→查看“以太类型”字段→确定是哪一个网络层协议(IP)
18)在网络层,IP收到分组后对IP报头执行CRC计算(相同)→查看目标地址(相同)→查看“协议”字段→确定将分组的有效负载交给谁
19)有效负载被交给ICMP,后者知道这是一个回应请求,因此立即对请求进行响应:将分组丢弃并生成一个回应应答
20)为封装回应应答,创建一个包含源IP地址、目标IP地址、”协议“字段和有效负载的分组
21)IP检查目标IP地址位于本地LAN还是远程网络,由于目标设备位于远程网络中,因此需要将分组发送到默认网关
22)在windows设备的注册表中找到默认网关的IP地址,并查看ARP缓存,看看是否将默认网关的IP地址解析为硬件地址
23)获悉默认网关的硬件地址后,将其与分组一起交给数据链路层,以便将分组封装成帧
24)数据链路层将分组封装成帧
25)这个帧被交给物理层,让它通过网络介质以每次1比特的方式发送出去
26)路由器的接口E1接收这些比特,并将它们组装成帧。然后执行CRC计算,将结果与FCS字段的值进行比较,看其是否相同
27)确定CRC相同后,查看目标硬件地址(相同)→从帧中提取分组,查看“以太类型”字段,确定将其分组交给哪一个网络层协议(IP)
28)协议为IP,因此分组被交付给IP。IP首先对IP报头执行CRC检查,再查看目标IP地址
29)由于路由器知道如何前往网络172.16.10.0,出站口为E0,因此分组被交换到接口E0
30)路由器查看ARP缓存,看看是否曾经将172.16.10.2解析为硬件地址
31)由于在一开始分组前往Host_B期间,路由器已经缓存了172.16.10.2对应的硬件地址因此将该硬件地址和分组一起交给数据链路层
32)数据链路层使用目标硬件地址和源硬件地址创建一个帧,并且将“以太类型”字段设置为IP,然后对整个帧执行CRC计算,并将结果放到FCS字段中
33)这个帧被交给物理层,让它以每次1比特的方式发送到本地网络上
34)目标主机接收这个帧,执行CRC检查并检查目标硬件地址,再查看“以太类型”字段来确定将分组交给谁
35)指定的接收方为IP,因此分组被交给网络层协议IP。IP检查“协议”字段,来确定将有效负载交给谁。IP发现应该将有效负载交给交给ICMP,而ICMP判断出这个分组时ICMP回应应答
36)ICMP在用户界面上显示一个 !,以确定它收到了应答。然后ICMP试图再向目标主机发送4个回应请求
这是简单的不同网段数据路由过程。还不太详细,大概了解下过程,后面会从集中了解下各种数据封装结构、及解封装,然后把每一步的封装内容加入到路由选择过程中。这是整个网络技术的精髓也是基础,把这些搞清楚,能够举一反三,同时也是对进军CCIE/HCIE有利。
标签:控制 默认网关 ping 请求 ip协议 details cci 了解 封装
原文地址:https://blog.51cto.com/11659526/2452246