IP路由协议概述

1.IP路由的概念
 


路由器类似于现实生活中的GPS导航仪,你指定目的地,导航仪会根据当前位置计算出到达目的地的路线条目并选择最优的路线。而在 一个IP网络中,路由(Routing)是个非常非常基本的概念。网络的基本功能,是使得处于网络中的两个IP节点能够互相通信,而通信实际上就是数据交互的过程,数据交互则需要网络设备(交换机、路由器)帮助我们来将数据在两个通信节点之间进行传输。当路由器(或者其他三层设备)收到一个IP数据包,路由器会找出报文中的 IP头里的目的IP地址,然后拿着目的IP地址到自己的路由表(Routing Table)中进行查找,找到“最匹配”的路由条目后,将数据包根据路由条目所指示的出接口或下一跳IP转发出去,这就是路由(Routing)。
而每台路由器都会在本地维护一个路由表,路由表中装载着路由器通过各种途径获知的路由条目(Routes),每一条路由条目由路由前缀(路由所关联的目的网络号)、路由信息来源、出接口或下一跳IP、优先级、开销等信息元素构成。路由器通过直连、静态的或者动态的方式获取路由条目并维护自己的路由表,路由表是每台支持路由功能的设备进行数据转发的依据和基础,是一个非常重要的概念,任何一台支持路由功能的设备要执行数据转发或路由的动作,就必须拥有及维护一 张路由表。


2.为什么要有动态路由协议
 


上面已经说了,路由器是依赖自己维护的路由表来进行数据转发的,而路由表又是由许多路由条目构成的,路由器要将数据转发到目的地就必须有路由。一台路由器可以从多种来源学习到路由条目:

  • 直连路由
    直连路由顾名思义,就是直接连接在路由器上的接口路由条目,路由器在初始启动后,如果我们为其接口配置IP地址,并且接口的物理及协议(链路)的状态都为UP,则路由器能够自动地学习该接口的网络号,将这条直连路由装载进路由表,这其实很好理解,因为这是我“家门口”的网络嘛,无需询问别人,自己知道怎么走出大门口。

  • 静态路由
    直连网络能够自动学习,可是非直连网络可就无法自动学习了,那么一种最简单的方式,就是通过手工配置的方式为路由器创建静态的路由表项,这叫静态路由。静态路由由于其是静态手工配置,因此可管理性非常高,但是也有明显的缺陷,因为你要到一个目的地, 就必须做一条静态路由的配置,那么如果网络特别庞大、设备数量特别多呢?工作量就相当大了,这是低效且不切实的;再者静态路由无法根据网络拓扑的变更做出 动态的感知,因此当网络发生变化时(新加入路由设备或者原有路由设备发生故障),管理员可能不得不重新配置或调整静态路由。因此,我们迫切需要一种动态的机制,来帮助路由器更加灵活的维护路由信息。这种机制就是下面要讲的动态路由。

  • 动态路由

  • 所谓动态路由,就是由网络中的路由器之间互相通信,传递路由信息,利用收到的路由信息更新路由表的过程,它能实时地适应网络结构的变化。动态路由选择依赖于路由选择协议来收集与传播有关信息。路由选择协议是为了学习与维护路由表,它获取网络上其他参与者的路由更新数据包。这样,路由器之间便能够交换可达网络的信息以及每个网络的状态。只有运行同一种路由协议的路由器之间才会交换信息。网络拓扑发生变化后,新信息将会传遍整个网络,路由器都将更新其路由表,以反映变化后的拓扑。

3.动态路由协议的分类


根据作用的范围,路由协议可分为:

  • 内部网关协议(Interior Gateway Protocol,简称IGP):在一个自治系统内部运行。

  • 外部网关协议(Exterior Gateway Protocol,简称EGP):运行于不同自治系统之间。
     

wKioL1VsatGx3q_CAAC9d_4oISI520.jpg


所谓的(AS)自治系统,指的就是一个独立自治的、自我管理的路由选择域。

根据使用的算法,路由协议可分为:

  • 距离矢量协议(Distance-Vector):包括RIP(路由信息协议)、IGRP(内部网关路由协议,已退出历史)和BGP(边界网关协议)也叫路径矢量协议(Path-Vector)

  • 链路状态协议(Link-State):包括OSPF(开放最短路径优先)和IS-IS(中间系统到中间系统)

  • 高级距离矢量协议(Advance Distance-Vector)也叫混合路由协议:如EIGRP(加强型的内部网关路由协议)

wKiom1VsauHQbdqcAADviLtD0kY103.jpg

根据发送更新的路由条目是否包含子网掩码可以将IP路由协议分为有类路由协议和无类路由协议。

wKiom1Vsdlagow3tAAC7ioDoI6g890.jpg

 

4.关于距离矢量路由协议
 


我们先初步认识一下距离矢量路由协议。
动态路由协议,大家可以理解为赋予了路由器一种“语言”交流能力。在静态路由环境下,路由器之间都互相不交流的,比较闷骚。但是一旦激活了动态路由协议,路由器之间就能够进行互相的通告和学习。
在上图中,初始情况下,R2是无法知道远程网络、R1的直连网络1.1.1.0/24的,在R1和R2激活了距离矢量的动态路由协议后,R1将自己“家门口”的路由 1.1.1.0/24通告给R2(当然,需要在配置RIP时把网段宣告出去),在通告路由的同时,还告诉R2你要前往1.1.1.0/24所需花费的“代价,或成本(Metric)”,这样一来R2就能动态的从R1 学习到这条路由并且装载进路由表。于是当R2要发送数据去往1.1.1.0/24的时候,就会将数据包丢给下一跳路由器、也就是路由的通告者R1。这就是 所谓的距离矢量。最具代表性的距离矢量路由协议是RIP,RIP是一个有着悠久历史的路由协议,简单、小巧,但是也存在很大局限,这使得它几乎很少在现今 的网络环境中被使用。

使用距离矢量路由协议的路由器并不了解网络的拓扑。该路由器只知道:

  • 自身与目的网络之间的距离

  • 应该往哪个方向或使用哪个接口转发数据包

实际上,运行距离矢量路由协议的路由器,所有路由器都定期地将自己的整张路由表(或路由表的一部分)更新给直连的其他路由器(邻接路由器),接着邻接路由器根据收到的信息判断是否要对自己的路由表进行修改(例如,是否有去往特定网路的更佳路径),这一过程将定期地重复进行。于是就进行一系列的路由收发行为,最终的结果是,大家都心满意足的填充好了自己的路由表。
 


 

5.关于链路状态路由协议

距离矢量路由协议是直接将自己的路由表更新给直连路由器,并且路由器并不了解整个拓扑结构,这很容易在特定情况下产生诸如路由环路之类的问题(因此距离矢量路由协议定义了一系列防止环路的特性)。相比之下,链路状态路由协议则更新的不再是路由表或路由条目,而是对链路(接口)的描述等,每台路由器仅在其接口(链路)的状态发生变化时,才将变化后的状态发送给其他所有路由器(或网络中称为区域的一部分所有路由器),通过链路状态信息的泛洪,路由器搜集这些链路状态信息并装载进链路状态数据库,随后运行特定的算法计算出一个无环的拓扑最后把最优的路由条目放入路由表。因此运行链路状态路由协议的路由器是知晓网络的拓扑结构的。链路状态路由协议应该说是目前业内IGP应用的主流,其中最具代表性的当属OSPF和ISIS。

6.关于高级距离矢量(混合)路由协议

顾名思义,混合路由协议兼具距离矢量和链路状态的特征。这些协议只发送变化后的消息(这类似于链路状态信息),且只将这些消息发送给邻接路由器(这类似于距离矢量路由协议)。使用该协议的有EIGRP。

7.关于有类和无类路由协议

有类和无类路由协议最大的区别在于:

  • 有类路由协议在发送路由更新时只发送网络而不发送子网掩码,RIPv1和IGRP(现在版本的路由器已经不支持此协议)属于有类路由协议。

  • 无类路由协议在发送路由更新时在发送网络的同时还会发送 子网掩码。RIPv2、EIGRP、OSPF、IS-IS和BGP等大多数较新的网络都使用无类路由协议。

也许你会问,既然现在几乎所有网络都在使用无类路由协议,那还学有类路由协议干嘛?我只能说IT发展的速度太快了!要知道当时路由器和猫等WAN网络设备的CPU和内存等性能相比现在是很低的,如果路由器在更新的时候发送明细路由即带子网掩码的话不但耗内存和CPU资源而且会占用路由器不少存储空间。相反,如果对多条明细路由能够在边界进行自动汇总的话那么上面提到的两个问题就能得到改善!所以有类路由协议具有如下特征:

  •     发送的路由条目不带子网掩码,接收到路由条目的路由根据路由主类别(A类、B类和C类)进行判断并填充。

  •     在边界进行自动汇总:路由器只发送主网络信息(网络中所以子网的汇总),在主网络边界,有类路由协议自动创建一条有类汇总路由。

下面我们用一个实例来说明一下有类路由协议的工作机制和规则:

wKioL1VwHcbg3aHCAAAbLRj5fig879.gif

R1的路由表:

R1#show ip route
Gateway of last resort is not set

R    172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:02, Serial0/2  //该路由是从R2的172.16.1.0和172.16.2.0汇总后接收到的,R2从右边的172.16.0.0 B类网络跨越10.0.0.0 A类网络后发送给R1。
     10.0.0.0/16 is subnetted, 2 subnets
C       10.2.0.0 is directly connected, Serial0/2 //直连路由
C       10.1.0.0 is directly connected, Loopback0 //直连路由


R2的路由表:

R2#show ip route
Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
R       172.16.1.0 [120/1] via 172.16.2.3, 00:00:07, Serial0/3 //从R3学习到的RIP明细路由条目
C       172.16.2.0 is directly connected, Serial0/3 //直连路由
     10.0.0.0/16 is subnetted, 2 subnets
C       10.2.0.0 is directly connected, Serial0/1 //直连路由
R       10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1  //从R1学习到的明细路由条目


R3的路由表:

R3#
R3#sh ip route
Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
C       172.16.1.0 is directly connected, Loopback0 //直连路由
C       172.16.2.0 is directly connected, Serial0/2 //直连路由
R    10.0.0.0/8 [120/1] via 172.16.2.2, 00:00:15, Serial0/2 //该路由是从R2的10.1.0.0和10.2.0.0汇总后接收到的,R2从左边的10.0.0.0A类网络跨越172.16.0.0 B类网络后发送给R3。

我们对上图R1的LO 0 接口IP地址做一下变更,看看路由表会发生什么变化,变更后得拓扑图如下所示:

wKiom1VwIaSC3gZIAAAbxP8AWI0290.gif

R1的路由表:

R1#sh ip route
Gateway of last resort is not set

R    172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:27, Serial0/2
     10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C       10.2.0.0/16 is directly connected, Serial0/2
C       10.1.0.0/24 is directly connected, Loopback0

R2的路由表

R2#show ip route

Gateway of last resort is not set

     172.16.0.0/24 is subnetted, 2 subnets
R       172.16.1.0 [120/1] via 172.16.2.3, 00:00:14, Serial0/3
C       172.16.2.0 is directly connected, Serial0/3
     10.0.0.0/16 is subnetted, 1 subnets
C       10.2.0.0 is directly connected, Serial0/1

R3的路由表:

R3#sh ip route
Gateway of last resort is not set
     172.16.0.0/24 is subnetted, 2 subnets
C       172.16.1.0 is directly connected, Loopback0
C       172.16.2.0 is directly connected, Serial0/2
R    10.0.0.0/8 [120/1] via 172.16.2.2, 00:00:06, Serial0/2

此时,发现R2中R 10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1这条路由条目没有了!是不是觉得R2的路由表和你想象中的不一样?下面给出答案!

有类路由协议发送路由更新时遵守如下规则:

  1. 同类发明细,异类发汇总。注:在路由边界,将要发出的路由和出接口进行比较:是否是同一个主类,是同一个主类(A类看一个段,B类看两个段,C类看三个段)则发路由明细(下面第二条是例外),不是则发送汇总!

    实例解析:上面的第一张图(R1的LO 0接口为10.1.0.0/16)R1从S0/2接口把路由条目10.1.0.0/16发给R2,由于S0/2接口所在的子网10.2.0.0/16和要发送的子网属于同一主类网络(A类10.0.0.0),所以路由器R1会把明细路由10.1.0.0/16发送给R2。所以在R2的路由表里会有R  10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1的路由条目。

  2. 发出的路由条目和接口在同一主类网络(如A类10.1.0.0/16通过10.2.0.0/16网段的接口发送出去),如果跟出接口的子网掩码相同就可发出去,如果不同(10.1.0.0/24通过10.2.0.0/16网段的接口发送)就不能发出去。

    实例解析:上面的第二张图(R1的LO 0接口为10.1.0.0/24)R1从S0/2接口把路由条目10.1.0.0/24发给R2,S0/2接口所在的子网10.2.0.0/16和要发送的子网属于同一主类网络(A类10.0.0.0),但是24位的和16位的子网掩码不同,所以R1根本就不会把10.1.0.0/24的路由条目发送给R2。所以R2的路由表里自然就不会有10.1.0.0的路由条目(第二张图下R2的路由表)。为了验证可以在R1上打开Debug ip rip packet。

  3. 如果是32位主机路由,不受上面第二条约束,直接发出。

    为了验证,在R1上加一个环回口LO 1,IP地址为10.1.1.1/32.之后再到R2看路由表,结果如下:

    R2#sh ip route
    Gateway of last resort is not set
         172.16.0.0/24 is subnetted, 1 subnets

    R       172.16.1.0 [120/1] via 172.16.2.3, 00:00:06, Serial0/3
    C       172.16.2.0 is directly connected, Serial0/3
         10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
    R       10.3.0.1/32 [120/1] via 10.2.0.1, 00:00:16, Serial0/1 //得到验证,32位的主机路由只要主类网络一样,子网掩码可以不同。
    C       10.2.0.0/16 is directly connected, Serial0/1

有类路由协议在接收路由更新时遵守如下规则:

  1. 如果收到的路由与入接口在同一主类网络,就以入接口的子网掩码去匹配;如果匹配时发现主机位有1,则将其做为主机路由放入路由表。

    如上R2的路由表收到R3的路由条目172.16.1.0属于同一主类网络,所以就以接口S0/3的子网掩码(255.255.255.0)去匹配。

  2. 收到的路由与入接口不在同一主类网络,且自己路由表中并无此路由子网就以此路由的主类掩码去匹配。

    如上R1的路由表中的172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:27, Serial0/2,与R1本身的直连接口路由10.1.0.0/16和10.2.0.0/16不在同一主类网络,而且自己路由表中本来并无此路由子网,所以就用B类主网16位的掩码去匹配。

  3. 收到的路由与入接口不在同一主类网络,但路由表中有此路由子网,就不接受。

你可能感兴趣的:(路由分类)