了解完IP协议簇后,经过别人写的IP路由选择过程简单了解下数据的行走过程。windows
转自:https://blog.csdn.net/weixin_44059188/article/details/99628775缓存
用户在Host_A上ping Host_B的IP地址。网络
1)ICMP生成一个回应请求——数据字段中的字母并发
2)ICMP将该请求交给IP,后者建立一个分组ide
3)建立分组后,IP判断目标IP地址位于本地网络仍是远程网络.net
4)IP判断出这是一个远程请求,所以必须将分组发送到默认网关,以便它可以被路由到远程网络blog
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的硬件地址,而主机将缓存该硬件地址get
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有利。