IP路由——路由选择基础
路由选择基础
路由选一旦将多个WAN和LAN连接到路由器,一个彼此互联的网络就创建起来了,而接下来要完成的工作就是为此互联网络上的所有主机配置逻辑的网络地址,如IP地址,以便这些主机能够通过这一互联网络进行通信。
路由选择是指将分组从一个设备通过互联网络发往位于不同网络上的另一个设备的操作。路由器不关注网络中的主机,而只关注互联起来的网络以及通往各个网络的最佳路径。目标主机的逻辑网络地址用来获取通过可路由网络传送到指定网络中的分组,主机的硬件地址用来将分组从路由器投递到正确的目标主机上。
如果网络中没有使用路由器,那么自然也就不会需要路由选撣。路由器可以在互联网络中将用户数据路由到所有网络中。要实现对分组的路由,路由器至少必须了解以下内容:
目的地址;
借以获取远程网络信息的相邻路由器;
到达所有远程网络的可能路由; .
到达每个远程网络的最佳路由;
维护并验证路由选择信息的方式。
路由器从相邻的路由器或管理员那里了解有关远程网络的信息,然后建立一个描述如何查找远程网络的路由选择表(即互联网络的一张地图)。如果某个网络与路由器是直接相连的,那么路由器自然就知道如何到达这个网络。
如果某个网络没有与路由器直接相连,那么路由器就必须通过这样两种方式了解如何到达这个远程网络:静态的路由选择,即必须由专人手工将所有的网络位置输人路由选择表;动态的路由选择。
在动态路由选择的过程中,路由器上运行的协议将与相邻路由器上运行的同一协议进行通信。在此基础上,这些路由器可以不断更新各自对所有网络的了解,并将相关的信息加入到路由选择表中。
如果网络连接出现变化,这个动态路由选择协议就会将这个变化自动通知到所有的路由器。如果使用静态路由选择,管理员需要在所有路由器上通过手动输入的方式更新所有的相关配置。在大型的网络中,动态和静态路由选择通常会被同时使用。
在学习IP路由选择之前,我们先来看一个路由选择的简单示例,通过它可以了解路由器是如何通过使用路由选择表将分组路由出接口的。注意这里将使用“最长匹配规则”进行路由选择匹配,即IP会在路由选择表中查找与分组目标地址具有最长匹配内容的表项进行路由。下面是个示例。图8-1给出了一个只包含两个路由器的简单网络。路由器Lab_ A配有1个串行接口和3个LAN接口。
在图8-1中,路由器Lab A将用哪个接口向IP地址为10.10.10.10的主机转发数据包?
通过命令show ip route, 我们可以看到Lab_ A用于进行转发判断的路由选择表(即对互联网络连接的映射):
在此路由选择表输出中的C用于表示所列出的网络是“直接连接的"。注意,在将某个路由选择协议(诸如RIP、EIGRP 等)添加到互联网络中的路由器(或使用静态路由选择)之前,路由器的路由选择表中只会包含直接连接的网络。
现在回到最初的问题上:根据示例中的拓扑图和路由选择表的输出,IP将会如何处理目标IP地址为10.10.10.10的分组?
路由器会将这一分组交换到FastEthernet0/0接口,之后,此接口会将分组封装成帧,然后再将此帧发送到指定的网段中。对于最长匹配规则需要再次说明的是,在本示例中IP将会在路由选择表中首先查找10.10.10.10,如果没有找到则查找10.10.10.0,随后查找10.10.0.0,此过程将会进行下去直到找到为止。
下面是另外一个示例:这里给出了另一个路由选择表的输出,其中哪个接口将用于转发目标地址为10.10.10.14的分组?
首先,你应该注意到此网络已经完成了子网的划分,并且它的每个接口均配置了不同的掩码。需要提醒的是,如果你还没有学会子网划分,那么就解答不了这里的问题! 10.10.10.14是一台位于10.10.10.8/29子网中的主机,它连接了FastEthernet0/1 接口。如果对此回答还一时反应不过来,这也很正常。
在完全理解了这里的内容之后,下面将对这一路由选择过程进行更为详尽地讨论。
IP路由选择过程
IP的路由选择是一个相当简单的、没有什么变化的过程,并且这一选择过程与网络的大小无关。
接下来,我们以图8一2为例,分步骤讲述Host. A与不同网络上的Host_B 进行通信时的情况。
在这个示例中,Host.A上的某个用户对Host _B的IP地址执行了ping 操作。这一过程就涉及了最基本的路由选择,但包含许多个步骤。下面就来具体讨论一下这些步骤。
(1)因特网控制报文协议( ICMP )将创建一个回应请求数据包(此数据包的数据域中只包含字母)。
(2) ICMP会将这一有效负荷递交给因特网协议(IP), IP协议会用它创建一个分组。至少,源IP地址、目标IP地址和值为01h的协议字段(记住思科更习惯于在十六进制字符前添加0x,所以这个协议字段就应该表示为0x01 )将被封装到此分组中。当此分组到达目的方时,这些内容就会告诉接收方主机应该将这个有效负荷交付给哪个协议来处理,本例中就是ICMP。
(3)一且这个分组被创建,IP协议就需要判断目标IP地址的位置,判断此目的方位于本地网络还是某个远程网络。
(4)由于IP协议判定这是一个远程的跨网络请求,而要将这一分组路由到远程网络,就必须将它发送给默认网关。在这里,我们需要打开Windows中的注册表查找已配置的默认网关。
(5)主机172.16.10.2 ( Host A)的默认网关被配置为172.16.10.1。要将这一分组发送给此默认网关,我们就必须知道路由器的Ethernet 0 ( 172.16.10.1就是配置给它的IP地址)接口的硬件地址。为什么要这样?这是因为只有知道了接口的硬件地址,分组才可以向下递交给数据链路层,并在那里完成帧的组建,然后再将帧发送给与172.16. 10.0网络相连接的路由器接口。在本地局城网上,主机只能通过硬件地址完成通信,因此若Host_A要与Host_B通信,它必须首先使用本地网络中默认网关的MAC地址将分组发送给网关,理解这一点是非常重要的。
! 注意:MAC地址永远只能作用于本地LAN网络,不可能绕过或通过路由器。
(6)接下来,需要检查主机的ARP缓存,查看此默认网关的IP地址是否已被解析为一个硬件地址。
如果已被解析,此分组就可被传送到数据链路层以组建成帧。(目的方的硬件地址也将随分组一起下传到数据链路层)。要查看主机上的ARP缓存,我们可以使用如下命令:
如果在主机的ARP缓存中没有被解析的硬件地址,那么用于查找172.16.10.1硬件地址的ARP广播将被发送到本地网络上。这时,示例中的路由器会响应这个请求,并提供Ethernet 0的硬件地址,此后主机会接收并缓存这个地址。
(7)一旦分组和目的方的硬件地址被交付给数据链路层,局域网驱动程序负责选用适合所在局城网类型(本例中为以太网)的介质访问方式。通过将控制信息封装到此分组上帧就被创建了。在这个帧中,附加有目的方硬件地址和源硬件地址,以及以太网类型字段,这个字段用于描述给数据链路层交付帧中分组的网络层协议,在本示例中,这个协议为IP。在帧的尾部是FCS ( Frame CheckSequence,帧校验序列)字段,这个部分装载了CRC (循环冗余校验)的计算结果。图8一3中给出了此帧的完整结构。可以看出,此帧中包含Host A的硬件( MAC )地址以及作为目标方地址的默认网关的硬件地址。注意,这里并没有包含远程主机的MAC地址!
(8)一旦帧创建完成,这个帧将被交付给物理层,物理层会以一次一比特的方式将帧发送到物理介质(在本示例中为双绞线)上。
(9)这时,此冲突域中的每台设备都会接收这些比特,并将它们重新组建成帧。每个设备都会对接收到的内容进行CRC运算,并与帧中FCS字段的内容进行比对。如果值不匹配,接收到的帧将被丢弃。
如果这个CRC计算机结果与帧中FCS字段的内容匹配,接着将检查目的方的硬件地址与自己(本示例中指的是路由器的Ethemet 0接口)是否匹配。
如果匹配,则接下来查看以太网类型字段,以获悉完成数据后续处理的网络层协议。
(10)将分组从帧中取出,并将其他部分丢弃。然后,分组被递交给以太网类型字段中列出的协议一示例中是IP。
(11)IP将接收这个分组,并检查它的IP目的地址。由于分组的目的地址与配置到此接收路由器上的各个地址均不匹配,此路由器会在其路由选择表中查找目的方的IP网络的地址。
(12)在此路由选择表中需要包含网络172.16.20.0的相关表项,否则路由器会立即将收到的分组丢弃,并同时向发送数据的源方设备回送一个携带有目标网络不可达信息的ICMP报文。
(13)如果路由器在路由选择表中查找到了关于目的方网络的内容,则分组将被交换到指定的输出接口一在本示例中为接口Ethernet 1。下面给出Lab. _A路由器的路由选择表。其中,C表示“直接连接"。由于这个网络中所有网络(总共就两个网络)都是直接相连的,因此这里不必使用路由选择协议。
(14)路由器将此分组交换到Ethernet 1的缓冲区内。
(15)此Ethernet 1的缓冲需要获得目的方主机的硬件地址,因此会首先查看ARP缓存。
如果Host-B的硬件地址已经被解析并保存在路由器的ARP缓存中,那么此分组和硬件地址将被递交到数据链路层,用于帧的组建。使用show ip arp命令,我们可以得到Lab_ A路由器上的ARP缓存输出,结果如下所示:
其中,横划线(-)表示这是路由器上的物理接口。从上面的输出中可以看出,路由器已经获知172.16.10.2 (Host. A)和172.16.20.2 (Host_ B)的硬件地址。思科的路由器会将ARP表中的表项保留4个小时。
如果此硬件地址没有被解析,则路由器将从E1发出一个ARP请求,用以查找172.16.20.2 的硬件地址。Host-B将用它的硬件地址进行响应,随后此分组和目的方的硬件地址都会被传递给数据链路层,用以组装成帧。
(16)数据链路层将使用目标硬件地址和源硬件地址、以太网类型字段及帧尾部的FCS字段创建帧。随后这个帧将被递交到物理层,并由物理层以逐比特发送的方式发送到物理介质上。
(17) Host_B 将接收此帧,并立即运行CRC。如果运算的结果与FCS字段中的内容匹配,则检查帧中的目标硬件地址。如果主机认定地址也是匹配的,则检查帧中以太网类型字段的值,判断将分组向上递交的网络层协议一本示例中为IP。
(18)在网络层,IP会接收这个分组,并对IP报头运行CRC。如果校验通过,IP随后将检查分组中目标地址。由于它们最终是匹配的,接下来要检查的就是分组的协议字段,并据此了解分组有效负荷的交付对象。
(19)此有效负荷将被递交给ICMP,后者知道这是一个回应请求数据。ICMP将负责应答这个请求,它首先立即丢弃这个接收到的分组,然后产生一个新的有效负荷作为回应应答数据。
(20)这样一个包含有源方地址、目的方地址、协议字段和有效负荷的一个新分组就被创建出来了。而该分组的目的方设备就是Host_ A。
(21)在递交给IP后,它将对这个目的方IP地址的位置进行判断,判断这一地址指向的是一个本地局域网中的设备,还是一个位于远程网络上的设备。由于示例中的目的方设备位于远程网络,此分组将首先被发送给默认网关。
(22)默认网关的IP地址可以在Windows主机的注册表中找到。此外,为了实现IP地址到硬件地址的解析还需要查看ARP的缓存。
(23)一旦找到默认网关的硬件地址,则目的方的硬件地址会随分组一起被递交给数据链路层,以便完成帧的创建。
(24)数据链路层会将收到的分组内容封装起来,并在帧头中包含下列内容:
目的方硬件地址和源方的硬件地址;
值为0x0800(IP)的以太网类型字段;
值为CRC运算结果的FCS字段。
(25)之后,帧将向下递交给物理层,以逐比特的方式发送到网络介质上。
(26)路由器的Ethernet1接口将接收这些比特位,并将它们重新组建为帧。然后进行CRC运算,帧中的FCS字段被用于验证计算结果是否匹配。
(27)当CRC通过后,路由器将检查帧中携带的硬件目的地址。由于路由器的接口地址与这一地址是匹配的,于是帧中封装的分组将被取出,随后路由器会查看帧的以太网类型字段,以确定应接收此数据包的网络层协议。
(28)由于以太网类型字段中指定的是IP,于是分组被递交给了网络层的IP。IP将首先对其IP报头运行CRC,然后检查帧中的目的方IP地址。
!注意
IP并不会像数据链路层那样对分组运行完全的CRC,它只对IP报头进行校验,只关注报头可能出现的错误。
由于分组中携带的IP目的方地址与该路由器各个接口的IP地址不匹配,于是路由器需要查看路由选择表,以找出一条通往172.16.10.0网络的路由。如果表中没有关于目的网络的路由,则路由器会将该分组立即丢弃。(这是一个引发众多管理员困惑的地方,当一个ping操作失败时,许多人都会认为是分组没有能到达目的方主机。但是,正如这里看到的,事情可能并不总是这样。导致示例讨论结果的原因,仅仅是因为某个远程路由器缺乏应答分组返回源方主机网络的路由,而将分组丢弃。注意,
这个分组是丢弃在返回源方主机的过程中,而不是前往目的主机的过程中。)
提示:
有一点需要简要说明,当(如果)分组是在返回源主机的途中被丢弃,由于这是一个不知原因的错误,我们通常看到的会是请求超时这样的信息。如果出现的错误是由某种已知原因导致的,比如在前往目的主机的途中,某路由器的路由选择表里没有可用的路由,这时得到的信息将会是目标主机不可达一类的信息。根据这些提示内容,我们就可以判断问题是发生在前往目的主机的途中,还是出现在返回源主机的过程中。
(29)在这里,路由器是知道如何到达网络172.16.10.0的,用于输出的接口就是Ethernet 0,于是分组被交换到接口Ethernet0上。
(30)路由器将检查ARP缓存,以确定172.16.10.2的硬件地址是否已经被解析。
(31)由于在完成将分组发送给Host _B的过程中,172.16.10.2的硬件地址已经被缓存起来,因此这一硬件地址将随分组一起被递交给数据链路层。
(32)数据链路层将使用这个目的方的硬件地址和源方的硬件地址以及类型为IP的以太网类型字段完成帧的创建。随后对这个帧进行CRC运算,并将运算结果放人FCS字段中。
(33)接下来这个帧将被递交给物理层,以逐比特的方式发送到本地网络中。
(34)目标主机将会接收这个帧,然后运行CRC,验证目的方的硬件地址,并查看以太网类型字段中的内容,以认定处理这个分组的上层协议。
(35)IP是指定的接收者,随后这个分组将被递交给网络层的IP,它将检查帧中的协议字段,以确定下一步的操作。IP发现需要将此有效负荷交给ICMP,之后ICMP将确定此分组是一个ICMP应答回复。
(36) ICMP通过向用户界面发送一个惊叹号(!)表明已经接收到一个回复。随后,ICMP将尝试继续发送后续的4个应答请求给目的方的主机。
这里的36个简单步骤可以帮助我们理解整个IP路由选择过程。这里的关键性问题是,即使对于大型的网络,路由选择的实现过程也是如此。只是在非常大的互联网络中,分组在到达目标主机之前需要经过更多的路由转发。需要重点记忆的是,当Host A向Host _B发送分组时,所采用的目标硬件地址是默认网关的以太网接口地址。之所以会这样,是因为数据帧只在本地网络中有效,它不可以被直接发送到远程网络中。因此,发往远程网络的分组必须通过默认网关进行转发。
下面给出了Host_ A上的ARP缓存中的内容:
在上面的内容中,你是否注意到Host A向Host B发送数据时使用的硬件( MAC )地址是Lab_ AEO接口的地址?注意,硬件地址总是本地有效的,它们决不可以跨路由器使用。理解这个处理过程是非常重要的,大家需要将这一点牢记心中!