在一个网络中,选择通信的路径发生在网络层。路径选择的功能使得路由器能够评估到目的地的可用路径,并为数据包确定首选路径。路由选择服务使用网络拓扑信息来评估网络中的各条路径。该信息可以由网络管理员配置,也可以由网络中运行的动态进程去收集。


  在实际应用中,网络必须始终代表路由器之间的所有可用的路径。路由器之间的每一条线路都有一个被用作网络地址的编号,这些地址必须能传达供路由选择进程使用、将数据包从源端发送到目的端的信息。利用这些地址,网络层能提供互联多个独立网络的中继连接。在一个互联网络中,路由器使用地址来识别数据包的目标网络。

  路由器通常用来将数据包从一条数据链路传送到另外一条数据链路。这其中使用了路径选择功能和交换功能两项。

14.2.1 被路由协议和路由选择协议

    路由选择协议(routing protocol)和被路由协议(routerd protocol)很容易产生混淆。下面会对这些内容作更明确的讲解。

  1. 被路由协议

  以寻址方案为基础,为分组从一个主机发送到另一个主机提供充分的第三层地址信息的任何网络协议。被路由协议通过网络传输数据,通过路由器把数据从一个主机传输到另一个主机的协议是被路由或可路由协议,用在路由器之间引导用户流量。

  被路由协议包括任何网络协议集,以提供足够网络层地址信息,使路由器能够转发到下一个设备并最终达到目的地,定义了分组的格式和其中所用的字段,使得分组能实现端到端的传递。

  网际协议(IP)就是被路由协议的一个实例。网际协议(IP)是一个网络层的协议。因此 ,它能够在互联网络(若干网络互联而成的网络)之间进行路由选择。支撑网络层的协议被称为被路由(routerd)或可路由(routable)协议。

  IP协议、Novell的网际分组交换(IPX ,Internetwork Packet eXchange)和Apple Talk的数据报传送协议(DDP,Datagram Delivery Protocol)等协议都能提供第3层的支持,因此都是可路由的。然而,某些协议不能提供第3层的支持,这些协议属于不可路由协议,在这类协议中,最常见的是NetBEUI。NetBEUI是一个小型、快速并高效的协议,但是只能限制在一个网段内运行。

  一个协议要成为可路由的,必须要能给每台独立设备分配网络号和主机号。某些协议,比如IPX,只要求分配网络号,因为它使用主机的MAC地址来作为物理地址。另外一些协议,如IP,要求提供一个地址和子网掩码。

  2. 路由选择协议

  这种协议通过在网络设备之间提供路由选择信息共享机制,为被路由协议提供支持。路由选择信息在路由器之间传送。路由器使用路由选择协议来交换路由选择表和共享路由选择信息。换句话说,路由选择协议使得路由器在确定路径之后发送被路由协议数据。

  路由选择协议提供共享路由选择信息的方法,它允许路由器与其他路由器进行通信来更新和维护路由选择表。

  在TCP/IP路由选择协议中包括路由信息协议(RIP内部网关路由协议(IGRP增强内部网关路由协议(EIGRP以及开放式最短路径优先(OSPF等路由选择协议。

  路由选择协议用来确定被路由协议为了到达目标所遵循的路径。路由选择协议使得相互连接的路由器能在内部产生关于本网络中或因特网中其他路由器的一幅地图。这样就能够进行路由选择(选择最佳路径)和交换了。路由器使用路由选择协议来交换路由选择信息。

  在网络层用于动态生成路由表信息的协议被称为路由协议,路由协议使得网络中的路由设备能够相互交换网络状态信息,从而在内部生成关于网络连通性的映象(map)并由此计算出到达不同目标网络的最佳路径或确定相应的转发端口。

  路由协议有时又被称为主动路由协议,这是与规定网络层分组格式的网络层协议如IP协议相对应而言的。IP协议的作用是规定了包括逻辑寻址信息在内的IP数据报格式,它使网络上的主机有了一个唯一的逻辑标识,并为从源到目标的数据转发提供了所必需的目标网络地址信息。但IP数据报只能告诉路由设备数据包要往何处去,还不能解决如何去的问题,而路由协议则恰恰提供了关于如何到达既定目标的路径信息。也就是说,路由协议为IP数据包到达目标网络提供了路径选择服务,而IP协议则提供了关于目标网络的逻辑标识并且是路由协议进行路径选择服务的对象,所以在此意义上又将IP协议这类规定网络层分组格式的网络层协议称为被动路由(routed)协议。

  通常,按路由选择算法的不同,路由协议被分为距离矢量路由协议、链路状态路由协议和混合型路由协议三大类。表14-1给出了距离矢量路由协议、链路状态路由协议的比较。距离矢量路由协议的典型例子包括路由消息协议(Routing Information Protocol,简称RIP)和内部网关路由协议(Interior Gateway Routing Protocol,简称IGRP)等,链路状态路由协议的典型例子则是开放最短路径优先协议(Open Shortest Path First,简称OSPF)。混合型路由协议是综合了距离矢量路由协议和链路状态路由协议的优点而设计出来的路由协议,如IS-IS(intermediate system-intermediate system)和增强型内部网关路由协议(Enhanced Interior Gateway Routing Protocol,简称EIGRP)就属于此类路由协议。

表14-1 距离矢量路由协议、链路状态路由协议的比较



距离矢量路由选择

链路状态路由选择

从网络邻居的角度观察网络拓扑结构

得到整个网络的拓扑结构图

路由器转换时增加距离矢量

计算出通往其他路由器的最短路径

频繁、周期地更新;慢速收敛

由事件触发来更新;快速收敛

把整个路由表发送到相邻路由器

只把链路状态路由选择的更新传送到其他路由器上



  3. 网络层协议的运行




  假设一台主机上的应用程序需要向另一个网络上的目的主机发送数据包,主机使用路由器的某一个接口地址,将数据链路层的帧发送给路由器。路由器的网络层进程查看收到数据包的第三层的包头,以确定目的网络,然后查询路由选择表,找到与该网络相关联的输出端口,如图14.7所示,然后根据选定的接口,将数据包重新封装成相应的数据链路层的帧,加入发送到下一跳路由器的队列中。如果路由器在它的路由选择表中没有找到目标IP网络地址,也没有规定缺省网络的话,则会丢弃这个分组。

 

  数据包每经过一台路由器都要发生上述过程。当数据包到达与目的主机所在网络相连的路由器时,便根据目的局域网的数据链路层帧类型进行封装,然后传送到目的主机。

  4. 多协议路由 

  路由器能够同时支持若干个彼此无关的路由协议,并且为多个被路由协议维护各自的路由表。这使得一台路由器在同一条数据链路上可以使用几种不同的被路由协议来传送分组。

  5. 路由选择表

14.8所示。根据所使用的路由选择协议不同,路由信息也会有所不同。路由选择协议以多种信息来填充路由选择表。




  路由器在它们的路由选择表中保存着重要的信息:

 

  l         信息类型:创建路由选择表条目的路由选择协议的类型。

  l         目的地/下一跳:告诉路由器特定的目的地是直接连接在路由器上还是通过另一个路由器达到,这个位于达到最终目的地途中的路由器叫做下一跳。当路由器接收到一个入站分组,它就会查找目的地地址并试图将这个地址与路由选择表条目匹配。

  l         路由选择度量标准:不同的路由选择协议使用不同的路由选择度量标准。路由选择度量标准用来判别路由的好坏。例如,RIP使用跳数作为度量标准值,IGRP使用带宽、负载、延迟、可靠性来创建合成的度量标准值。

  l         出站接口:数据必须从这个接口被发送出去以到达最终目的地。

  路由器与另一路由器之间通信,通过传送路由选择更新消息来维护它们的路由选择表。根据特定的路由选择协议,更新消息可以周期性地发送或者仅仅当网络拓扑中有变化的时候才发送。路由选择协议也决定在路由更新的时候是仅仅发送有变化的路由还是整个的路由表。通过分析来自邻近路由器的路由选择更新,路由器能够建立和维护他自己的路由选择表。

  14.2.2 路由的基本过程

    如图14.9所示是一个最简单的网络拓扑,连接在同一台路由器上的两个网段。下面以图14.9拓扑为例,来介绍数据包是如何被路由的。

  假设主机A(IP:192.168.1.2)要发一个数据包(为了下文表述方便,称该数据包为数据包a)到主机B(IP:192.168.2.2)。主机A和主机B的IP地址分别属于网段192.168.1.0和网段192.168.2.0。由于这两台主机不在同一网段,它们之间的联系必须通过路由器才能实现




  数据包a被路由的步骤如下:

 

  1. 在主机A上的封装过程

  首先,在主机A的应用层上向主机B发出一个数据流,该数据流在主机A的传输层上被分成了数据段(segment)。然后这些数据段从传输层向下进入到网络层,准备在这里封装成为数据包。

  在这里,只描述其中一个数据包──数据包a的路由过程,其他数据包的路由过程是与之相同的。

  在网络层上,将数据段封装为数据包的一个主要工作,就是为数据段加上IP包头,而IP包头中主要的一部分,就是源IP地址和目的IP地址。路由器正是通过检查IP包头的源IP地址和目的IP地址,从而知道这个包是哪里来,要到哪里去。

  那么,数据包a的源IP地址和目的IP地址分别是什么呢?它们分别是主机A和主机B的IP地址。主机A的IP地址192.168.1.2就是数据包a的源IP地址,而主机B的IP地址192.168.2.2就是数据包a的目的IP地址。

  在封装完成以后,主机A将数据包a向下送到数据链路层上进行帧的封装,在这一层里要为数据包a封装上帧头和尾部的校验码,而帧头中主要的一部分就是源MAC地址和目的MAC地址。

  那么,数据帧a(注意,现在数据包a已经被封装为数据帧a了)的源MAC地址和目的MAC地址又是什么呢?源MAC地址当然还是主机A的MAC地址0000.0C11.1111,但是,在这里数据帧的目的MAC地址并不是主机B的MAC地址,而是路由器A的F0/0接口的MAC地址,为什么呢?原因在于,主机A和主机B不在同一个IP网段,它们之间的通信必须经过路由器。当主机A发现数据包a的目的IP地址不在本地时,它会把该数据包发送向默认网关,由默认网关把这个数据包路由到它的目的IP网段。在这个例子里,主机A的默认网关就是路由器A的fastethernet0/0接口

默认网关的IP地址是可以配置在主机A上的(见图14.10所示),主机A可以通过ARP地址解析得到自己默认网关的MAC地址,并将它缓存起来以备使用。一旦出现数据包的目的IP地址不在本网段的情况,就以默认网关的MAC地址作为目的MAC地址封装数据帧,将该数据帧发往默认网关(具有路由功能的设备),由网关负责寻找目的IP地址所对应的MAC地址或可以到达目的网段的下一个网关的MAC地址。




在图14.10上,主机A上配置的默认网关的IP地址是路由器A上fastethernet0/0接口的IP地址。至此,在主机A上得到一个封装完整的数据帧a,它所携带的地址信息如图14.11所示。




  主机A将这个数据帧a放到物理层,发送给目的MAC地址所标明的设备──默认网关。

 

  2.路由器A的工作

  当数据帧a到达路由器A的fastethernet0/0接口之后,首先被存放在接口的缓存里进行校验以确定数据帧在传输过程中没有损坏,然后路由器A会把数据帧a的二层封装(即帧头和尾部校验码)拆掉,取出其中的数据包a。至此,由主机A所封装的帧头完成使命而被抛弃

  路由器A将数据包a的包头送往路由器处理,路由器会读取其中的目的IP地址,然后在自己的路由表里查找是否存在着它所在网段的路由。

  在路由器的路由表里,记载了所有路由器所知道网段的路由,路由器之所以能够把数据包传递到目的地,就是依靠路由表来实现的。只有数据包想要去的目的网段存在于路由器的路由表中,这个数据包才可以被发送到目的地去。

  路由器知道数据包a将要被送往的网段的位置。如果在路由表里没有找到相关的路由,路由器会丢弃这个数据包,并向它的源设备发送destination network unavailable”的ICMP消息,通知该设备目的网络不可达

  在路由表里标明了到达网段192.168.2.0要通过路由器的f0/1接口,路由器根据路由表里的信息,对数据包a重新进行帧的封装。

  由于这次是把数据包a从路由器A的f0/1接口发出去,所以源MAC地址是该接口的MAC地址0000.0C33.3333,目的MAC地址则是主机B的MAC地址0000.0C44.4444,这个地址是路由器A由ARP协议解析得来存在缓存里的。如果ARP缓存里没有主机B的MAC地址,路由器就会发出ARP解析广播来得到它

  路由器A又重新建立了数据帧a,,图14.12是它的地址信息,请注意与原来的数据帧a(图14.11)的区别。路由器A将数据帧a,从f0/1接口发送给主机B。




  3. 主机B的拆封过程

 

  数据帧a,到达主机B后,主机B首先核对帧封装的目的MAC地址与自己的MAC地址是否一致,如不一致主机B就会把该帧丢弃。核对无误之后,主机B会检查帧尾的校验,看数据帧是否损坏。证明数据的完整之后,主机B会拆掉帧的封装,把里面的数据包a拿出来,向上送给网络层处理。

  网络层核对目的IP地址无误后会拆掉IP包头,将数据段向上送给传输层处理,至此,数据包a的路由过程结束。主机B会在传输层按顺序将数据包重组成数据流。

  从主机B向主机A发送数据包的路由过程和以上过程类似,只不过源地址和目的地址与上一过程正好相反。

  由此可以看出,数据在从一台主机传向另一台主机时,数据包本身没有变化IP地址和目的IP地址也没有变化,路由器就是依靠识别数据包中的IP地址来确定数据包的路由的。而MAC地址却在每经过一台路由器时都发生变化。在大型的网络里,主机之间的通信可能要经过好多台路由器,那么数据帧从哪台路由器的哪个接口发出,源MAC地址就是那台路由器的那个接口的MAC地址,而目的MAC地址就是路径中下一台路由器的与之相连的接口的MAC地址,直到到达目的的网段。所以说数据的传递归根结底靠的是MAC地址