了解完IP协议簇后,通过别人写的IP路由选择过程简单了解下数据的行走过程。

转自:https://blog.csdn.net/weixin_44059188/article/details/99628775

IP路由选择过程(概况)_第1张图片

用户在Host_Aping Host_BIP地址

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类型,来提供介质访问。然后生成一个帧,它使用控制信息对分组进行封装

IP路由选择过程(概况)
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有利。