IP路由__IP路由选择过程
阅读原文时间:2023年07月11日阅读:3

  

1.主机A上的某个用户ping主机B的IP地址

  1.主机A的因特网控制报文协议(ICMP)将创建一个回应请求数据包(在它的数据域中只包含有字母)。

  2. ICMP将把这个有效负荷交给因特网协议(IP),然后IP协议会创建一个数据包。这时,这个数据包将包含源IP地址、目的IP地址和值为01h的协议字段(Cisco习惯在十六进制字符前添加0x,这样便有了0x01的表示)。

  在本例中,当数据包到达目的地时,所有这些内容会告诉接收方主机,它应该将这个有效负荷交给ICMP处理。

  3. 一旦数据包被创建,IP协议将判断目的IP地址是处在本地网络中,还是处在一个远程网络上。

  4. 本例中,由于IP协议断定这是一个远程请求,这个数据包需要被发送到默认网关,这样,这个数据包才会被路由到远程网络。Windows注册表将被使用,以查找配置的默认网关。

  5. 主机172.16.10.2(主机A)的默认网关被配置为172.16.10.1。要能够发送这个数据包到默认网关,必须要知道路由器的Ethernet0接口(其IP地址被配置为172.16.10.1)的硬件地址。

  为什么?因为只有这样,数据包才可以被下传给数据链路层并成帧,然后发送给与172.16.10.0网络连接的路由器接口。在本地局域网上,主机只可以通过硬件地址来进行通信。主机A要与主机B通信,它必须将数据包发送到本地网络中默认网关的MAC地址处。

  说明:MAC地址永远都应用于LAN本地,而决不会穿过或通过路由器。

  6. 接着,检查ARP缓存,查看一个默认网关的IP地址是否已经解析为硬件地址。

  如果已经被解析,数据包将被释放、传送到数据链路层并成帧(目的方的硬件地址也将同数据包一起下传至数据链路层)。要查看你的主机上的ARP缓存,可以使用下列命令:

  C:\>arp -a

  Interface: 172.16.10.2 --- 0x3

  如果这个硬件地址在主机的ARP缓存中尚未被解析,将在此本地网络中发送ARP广播,以搜索172.16.10.1的硬件地址。路由器会响应这个请求并提供Ethernet0的硬件地址,接着,这一主机将缓存这个地址。

  7. 一旦这个数据包和目的方的硬件地址被交付给数据链路层,局域网驱动器将提供媒体访问,以通过所用类型的局域网(在本例中,即以太网)。将产生一个数据帧,使用控制信息来封装此数据包。

  在这个帧中包含有目的方和源方的硬件地址,及以太网类型字段(这个字段里描述的是交付此数据包到数据链路层的网络层协议),在本例中,这个协议为IP协议。在这个帧的结尾处是被称为帧校验序列(FCS)的字段,

  它是装载循环冗余校验(CRC)计算值的区域。此时数据帧还需要查找一些信息,即源MAC地址(主机A的MAC地址),以及目的MAC地址(主机A的默认网关即E0的MAC地址)。注意,这里并不包含远端主机的MAC地址!

  当ping主机B时主机A发给Lab_A路由器的数据帧

  

  8. 一旦完成帧的封装,这个帧将被交付到物理层,以一次一位的方式发往物理媒体(在本示例中,是双绞线对)。

  9. 此冲突域中的每台设备都将接收这些位并重建成帧。它们都将运行CRC并核对保存在FCS字段中的内容。如果这两个值不相匹配,此帧将被丢弃。

  如果这个CRC值相吻合(在这个示例中,指的是路由器的Ethernet0接口),那么就核查目的方的硬件地址,检查它们是否也匹配。

  如果它是匹配的,那么路由器将查看以太网类型字段,以了解在网络层上使用的协议。

  10. 数据包从帧中抽出,然后这个帧剩下的部分被丢弃。再把数据包传送给在以太网类型字段中列出的上层协议,在这里是传递给IP协议。

  11. IP会接收这个数据包,并检查其IP目的地址。由于数据包的目的地址与接收路由器所配置的任一地址不相匹配,路由器将会在路由表中查看目的IP网络的地址。

  12. 此路由表中必须包含有网络172.16.20.0的表项,否则此数据包将被立即丢弃,然后发送回一个携带有“destination network unavailable”信息的ICMP包给源方设备。

  13. 如果路由器的确在它的路由表中查找到了目的方的网络,数据包将被交换到输出接口,在本示例中,为Ethernet l接口。下面的输出给出了Lab_A路由器的路由表。C表示“直接连接”。

    由于在这个网络中所有的网络(总共是两个网络)都是直接连接的,因此没有必要使用主动路由协议。

  Lab_A>sh ip route  ……

  14. 路由器将交换此数据包到Ethernet 1的缓冲区内。

  15. Ethernet1的缓冲区需要了解目的方主机的硬件地址,它首先检查ARP缓存。

   如果主机B的硬件地址已经被解析并被保存在路由器的ARP缓冲中,则这个数据包和这个硬件地址将被传递到数据链路层以便组成帧。下面是使用show ip arp命令得到的在路由器Lab_A上的ARP缓冲:

  Lab_A#sh ip arp

  Protocol Address Age(min) Hardware Addr Type Interface

  Internet 172.16.20.1 - 00d0.58ad.05f4 ARPA Ethernet0

  Internet 172.16.20.2 3 0030.9492.a5dd ARPA Ethernet0

  Internet 172.16.10.1 - 00d0.58ad.06aa ARPA Ethernet0

  Internet 172.16.10.2 12 0030.9492.a4ac ARPA Ethernet0

  连接线(-)表示它是路由器上的物理接口。从上述的输出可以看出,路由器了解此172.16.10.2(主机 A)和172.16.20.2(主机B)的硬件地址。Cisco路由器会将ARP表中的表项保留4小时。

  如果硬件地址没有被解析,路由器将从E1发送一个ARP请求,查找172.16.20.2的硬件地址。主机 B会使用它的硬件地址来进行响应,然后这个包和硬件地址都会被发送到数据链路层以组成帧。

  16. 数据链路层将使用这个目的MAC(主机B的MAC)和源的MAC(E1的MAC),及以太网的类型字段和处于帧尾部的FCS字段来创建一个帧。这个帧将被传送到物理层,并以一次一位的方式发送到物理媒体上。

  17. 主机B会接收到此帧并立即运行CRC。如果运算结果与FCS字段中的内容相匹配,再检查这个目的方的硬件地址。如果主机发现是匹配的,随后将检查以太网类型字段中的值,以判断应该将数据包上传给网络层的什么位置(在本示例中,为IP协议)。

  18. 在网络层,IP会接收这个数据包,并检查其目的方的IP地址。由于终归它们是匹配的,检查数据包的协议字段,以了解此有效负荷应该交付给谁。

  19. 此有效负荷会交付给ICMP,它将知道这是一个回应请求。ICMP会应答这个请求,通过即刻丢弃这个数据包并随后产生一个新的有效负荷来作为回应应答。

  20. 随后创建的数据包中将包含有源方和目的方的地址、协议字段和有效负荷。现在,目的方设备为主机A。

  21. 然后,IP将检查了解这个目的方的IP地址是否属于本地局域网上的设备,或者是位于远程网络上的设备。由于这个目的方的设备位于远程网络,此数据包将需要发送到默认网关上。

  22. 在此Windows设备的注册表上,可以找到默认网关的IP地址,之后将查看 ARP缓存,以了解是否已经完成了从IP地址到硬件地址的解析。

  23. 一旦默认网关的硬件地址找到,此数据包和目的方的硬件地址都将被送往数据链路层,以完成帧的封装。

  24. 数据链路层会封装数据包的内容,并在帧报头中包含以下内容:

  目的方和源方的硬件地址

  在以太网类型字段中填入0x0800(IP)

  将CRC结果填入FCS字段

  25. 这时,帧将被下传给物理层,并以一次一位的方式发送到网络媒体上。

  26. 路由器的Etherne 1接口会接收到这些位并重建为一个帧。运行CRC校验,校验帧的FCS字段,以确认两个结果是相符的。

  27. 一旦CRC校验通过,将检查硬件目的地址。由于路由器的接口同这个地址是相匹配的,数据包将被从这个帧中取出,然后检查以太网类型字段,以了解此数据包应该投递给网络层上的哪一个协议。

  28. 由于协议被判断为IP,于是IP将得到这个数据包。首先IP将对IP报头运行 CRC校验,然后检查目的方的IP地址。

  注:IP并没有像数据链路层那样使用完整的CRC校验,它只校验报头的错误。

  由于IP目的地址与路由器的各个接口的IP地址并不相匹配,路由器将会查看路由表,以了解是否存在一个通往172.16.10.0的路由。如果不存在一个路由可以到达目的网络,该数据包将立即丢弃(这是一个令许多管理员困惑的点,当一次ping失败时,

  许多人会认为这个数据包决没有到达目的主机。但是,正如我们在这里所看到的,事情并不总是这样的。上面所有造成这一现象的原因,仅仅是由于远端路由器缺乏返回源方主机网络的路由并将数据包丢弃!

  数据包被丢弃在返回源方的旅途中,并不是丢弃在它前往目的主机的过程中)。

  说明:当数据包在返回源主机的途中被丢弃时,由于这是一个未知的错误,通常将会看到“request timed out”的信息。 如果出现的错误是一个已知的错误,如假设在去往目的设备的路途中路由表内没有可用的路由,

  你将会得到“destination unreachable”的信息。根据这些信息,你可以判断问题是发生在去往目的的路上,还是在返回的途中。

  29. 在这种情况下,路由器确实知道到达网络172.16.10.0的方式,这一输出的接口是Ethernet 0,于是数据包将被交换到接口Ethernet 0上。

  30. 路由器检查ARP缓存,确定172.16.10.2的硬件地址是否已经被解析。

  31. 由于在将数据包传送到主机B的过程中,172.16.10.2的硬件地址已经被缓存起来了,因此,这一硬件地址和数据包将被传递到数据链路层。

  32. 数据链路层会使用这个目的方的硬件地址和源方的硬件地址,然后,将 IP放入以太网类型字段中,并对这个帧进行CRC运算,将此运算结果放入FCS字段中。

  33. 这个帧然后被传送到物理层,以一次一位的方式发送到本地网络。

  34. 目的方的主机将接收这个帧,运行CRC算法,检验目的方的硬件地址,并查看以太网类型字段中的内容,以断定谁来处理这个帧。

  35. 由于IP是被指定的接收者,随后这个数据包被传递给网络层的IP协议,它将检查包的协议字段,以确定进一步的操作。IP发现要将此有效负荷交给 ICMP的指示,接着ICMP将确定此数据包是一个ICMP的应答回复包。

  36. ICMP通过发送一个惊叹号(!)到用户接口来表明它已经接收到一个回复。这之后,ICMP会尝试继续发送4个应答请求到目的方的主机。

  注:当主机A发送数据包到主机B时,所使用的目的方硬件地址是默认网关的以太网接口。因为数据帧是不可以被直接发往远程网络的,它只有首先发送到本地网络上,而且去往远程网络的数据包必须要通过默认网关转发。

  举例:

  

  1. 来自主机A的帧中的目的地址将是路由器A F0/0接口的MAC地址。

  2. 数据包中的目的地址将是HTTP服务器上的网络接口卡(NIC)的IP地址。

  3. 在数据段头中的目的端口号是80。

  4. TCP的端口号将用于指引数据到达正确的应用程序窗口。

  5. HTTP服务器B接收到的帧的源地址是Router B的F0/0的MAC地址。

  注:如果有多台主机同时使用HTTP与这台服务器进行通信,那么它们必须全部使用各不相同的源端口号。这就是该台服务器如何在其传输层上保持数据分离的方式。

2.1)数据帧会在每一跳处被改变,而数据包将不会以任何方式改变或假造,直到它到达目的设备。

  2)MAC(硬件)地址将只能用在本地LAN上。它决不能由路由器的接口所传递。

  3)数据帧只能将数据包运载到两个地方:在LAN上数据帧使用MAC地址发送数据包。数据帧既可以将数据包发给LAN的任一台主机,也可以当数据包定向到远端网络时将数据包发给路由器的接口。

  4)If you have a DCE serial interface, what command must you enter for that interface to work:Router(config-if)#clock rate speed

  5)   R 10.0.0.0/8 [120/15] via 192.168.40.1, 00:00:07, Serial0

  The network 10.0.0.0 cannot be placed in the next router‘s routing table because it already is at 15 hops. One more hop would make the route 16 hops, and that is not valid in RIP networking.