
Cisco路由技术基础知识详解
路由器 <一>
最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信。但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题:
1、带宽资源耗尽。
2、每台计算机都浪费许多时间处理无关的广播数据。
3、网络变得无法管理,任何错误都可能导致整个网络瘫痪。
4、每台计算机都可以监听到其他计算机的通信。
把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网络协议层选择性地在网段间传送数据,我们来看一下网络协议层和路由器的位置。
我们可以看到,路由器位于网络层。本文假定网络层协议为IPv4,因为这是最流行的协议,其中涉及的概念与其他网络层协议是类似的。
一、路由与桥接
路由相对于2层的桥接/交换是高层的概念,不涉及网络的物理细节。在可路由的网络中,每台主机都有同样的网络层地址格式(如IP地址),而无论它是运行在以太网、令牌环、FDDI还是广域网。网络层地址通常由两部分构成:网络地址和主机地址。
网桥只能连接数据链路层相同(或类似)的网络,路由器则不同,它可以连接任意两种网络,只要主机使用的是相同的网络层协议。
路由器 <二>
二、连接网络层与数据链路层
网络层下面是数据链路层,为了它们可以互通,需要“粘合”协议。ARP(地址解析协议)用于把网络层(3层)地址映射到数据链路层(2层)地址,RARP(反向地址解析协议)则反之。
虽然ARP的定义与网络层协议无关,但它通常用于解析IP地址;最常见的数据链路层是以太网。因此下面的ARP和RARP的例子基于IP和以太网,但要注意这些概念对其他协议也是一样的。
1、地址解析协议
网络层地址是由网络管理员定义的抽象映射,它不去关心下层是哪种数据链路层协议。然而,网络接口只能根据2层地址来互相通信,2层地址通过ARP从3层地址得到。
并不是发送每个数据包都需要进行ARP请求,回应被缓存在本地的ARP表中,这样就减少了网络中的ARP包。ARP的维护比较容易,是一个比较简单的协议。
2、简介
如果接口A想给接口B发送数据,并且A只知道B的IP地址,它必须首先查找B的物理地址,它发送一个含有B的IP地址的ARP广播请求B的物理地址,接口B收到该广播后,向A回应其物理地址。
注意,虽然所有接口都收到了信息,但只有B回应该请求,这保证了回应的正确且避免了过期的信息。要注意的是,当A和B不在同一网段时,A只向下一跳的路由器发送ARP请求,而不是直接向B发送。 接收到ARP分组后处理,注意发送者的对被存到接收ARP请求的主机的本地ARP表中,一般A想与B通信时,B可能也需要与A通信。
3、IP地址冲突
ARP产生的问题中最常见的是IP地址的冲突,这是由于两个不同的主机IP地址相同产生的,在任何互联的网络中,IP地址必须是唯一的。这时会收到两个ARP回应,分别指出了不同的硬件地址,这是严重的错误,没有简单的解决办法。
为了避免出现这类错误,当接口A初试化时,它发送一个含有其IP地址的ARP请求,如果没有收到回应,A就假定该IP地址没有被使用。我们假定接口B已经使用了该IP地址,那么B就发送一个ARP回应,A就可以知道该IP地址已被使用,它就不能再使用该IP地址,而是返回错误信息。这样又产生一个问题,假设主机C含有该IP地址的映射,是映射到B的硬件地址的,它收到接口A的ARP广播后,更新其ARP表使之指向A的硬件地址。为了解决这个错误,B再次发送一个ARP请求广播,这样主机C又更新其ARP表再次指向B的硬件地址。这时网络的状态又回到先前的状态,有可能C已经向A发送了应该发送给B的IP分组,这很不幸,但是因为IP提供的是无保证的传输,所以不会产生大的问题。
4、管理ARP缓存表
ARP缓存表是对的列表,根据IP地址索引。该表可以用命令arp来管理,其语法包括:
向表中添加静态表项 -- arp -s
从表中删除表项 -- arp -d
显示表项 -- arp -a
ARP表中的动态表项(没有手动加入的表项)通常过一段时间自动删除,这段时间的长度由特定的TCP/IP实现决定。
5、静态ARP地址的使用
静态ARP地址的典型使用是设置的打印服务器,这些设备通常通过telnet来配置,但首先它们需要一个IP地址。没有明显的方法来把此信息告诉该设备,好象只能使用其串口来设置。但是,这需要找一个合适的终端和串行电缆,设置波特率、奇偶校验等,很不方便。
假设我们想给一个打印服务器设置IP地址P-IP,并且我们知道其硬件地址P-hard,在工作站A上创建一个静态ARP表项把P-IP映射到P-hard,这样,虽然打印服务器不知道自己的IP地址,但是所有指向P-IP的数据就将被送到P-hard。我们现在就可以telnet到P-IP并配置其IP地址了,然后再删除该静态ARP表项。
有时会在一个子网里配置打印服务器,而在另一个子网里使用它,方法与上面类似。假设其IP地址为P-IP,我们分配一个本网的临时IP地址T-IP给它,在工作站A上创建临时ARP表项把T-IP映射到P-hard,然后telnet到T-IP,给打印服务器配以IP地址P-IP。接下来就可以把它放到另一个子网里使用了,别忘了删除静态ARP表项。
6、代理ARP
可以通过使用代理ARP来避免在每台主机上配置路由表,在使用子网时这特别有用,但注意,不是所有的主机都能理解子网的。基本的思想是即使对于不在本子网的主机也发送ARP请求,ARP代理服务器(通常是网关)回应以网关的硬件地址。
代理ARP简化了主机的管理,但是增加了网络的通信量(不是很明显),并且可能需要较大的ARP缓存,每个不在本网的IP地址都被创建一个表项,都映射到网关的硬件地址。在使用代理ARP的主机看来,世界就象一个大的没有路由器物理网络。
路由器 <三>
三、IP地址
在可路由的网络层协议中,协议地址必须含有两部分信息:网络地址和主机地址。存贮这种信息最明显的方法是用两个分离的域,这样我们必须考虑到两个域的最大长度,有些协议(如IPX)就是这样的,它在小型和中型的网络里可以工作的很好。
另一种方案是减少主机地址域的长度,如24位网络地址、8位主机地址,这样就有了较多的网段,但每个网段内的主机数目很少。这样一来,对于多于256个主机的网络,就必须分配多个网段,其问题是很多的网络给路由器造成了难以忍受的负担。
IP把网络地址和主机地址一起包装在一个32位的域里,有时主机地址部分很短,有时很长,这样可以有效利用地址空间,减少IP地址的长度,并且网络数目不算多。有两种将主机地址分离出来的方法:基于类的地址和无类别的地址。
1、主机和网关
主机和网关的区别常产生混淆,这是由于主机意义的转变。在RFC中(1122/3和1009)中定义为:
主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据,但它从不把数据从一个网络传向另一个。
网关是连接到多于一个网络的设备,它选择性的把数据从一个网络转发到其它网络。
换句话说,过去主机和网关的概念被人工地区分开来,那时计算机没有足够的能力同时用作主机和网关。主机是用户工作的计算机,或是文件服务器等。现代的计算机的能力足以同时担当这两种角色,因此,现代的主机定义应该如此:
主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据。它也可以作为网关,但这不是其唯一的目的。
路由器是专用的网关,其硬件经过特殊的设计使其能以极小的延迟转发大量的数据。然而,网关也可以是有多个网卡的标准的计算机,其操作系统的网络层有能力转发数据。由于专用的路由硬件较便宜,计算机用作网关已经很少见了,在只有一个拨号连接的小站点里,还可能使用计算机作为非专用的网关。
2、基于类的地址
最初设计IP时,地址根据第一个字节被分成几类:
0: 保留
1-126: A类(网络地址:1字节,主机地址:3字节)
127: 保留
128-191: B类(网络地址:2字节,主机地址:2字节)
192-223: C类(网络地址:3字节,主机地址:1字节)
224-255: 保留
3、子网划分
虽然基于类的地址系统对因特网服务提供商来说工作得很好,但它不能在一个网络内部做任何路由,其目的是使用第二层(桥接/交换)来导引网络中的数据。在大型的A类网络中,这就成了个特殊的问题,因为在大型网络中仅使用桥接/交换使其非常难以管理。在逻辑上其解决办法是把大网络分割成若干小的网络,但在基于类的地址系统中这是不可能的。为了解决这个问题,出现了一个新的域:子网掩码。子网掩码指出地址中哪些部分是网络地址,哪些是主机地址。在子网掩码中,二进制1表示网络地址位,二进制0表示主机地址位。传统的各类地址的子网掩码为:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
如果想把一个B类网络的地址用作C类大小的地址,可以使用掩码255.255.255.0。
用较长的子网掩码把一个网络分成多个网络就叫做划分子网。要注意的是,一些旧软件不支持子网,因为它们不理解子网掩码。例如UNIX的routed路由守护进程通常使用的路由协议是版本1的RIP,它是在子网掩码出现前设计的。
上面只介绍了三种子网掩码:255.0.0.0、255.255.0.0和255.255.255.0,它们是字节对齐的子网掩码。但是也可以在字节中间对其进行划分,这里不进行详细讲解,请参照相关的TCP/IP书籍。
子网使我们可以拥有新的规模的网络,包括很小的用于点到点连接的网络(如掩码255.255.255.252,30位的网络地址,2位的主机地址:两个主机的子网),或中型网络(如掩码255.255.240.0,20位网络地址,12位主机地址:4094个主机的子网)。
注意DNS被设计为只允许字节对齐的IP网络(在in-addr.arpa.域中)。
4、超网(supernetting)
超网是与子网类似的概念--IP地址根据子网掩码被分为的网络地址和主机地址。但是,与子网把大网络分成若干小网络相反,它是把一些小网络组合成一个大网络--超网。
假设现在有16个C类网络,从201.66.32.0到201.66.47.0,它们可以用子网掩码255.255.240.0统一表示为网络201.66.32.0。但是,并不是任意的地址组都可以这样做,例如16个C类网络201.66.71.0到201.66.86.0就不能形成一个统一的网络。不过这其实没关系,只要策略得当,总能找到合适的一组地址的。
5、可变长子网掩码(VLSM)
如果你想把你的网络分成多个不同大小的子网,可以使用可变长子网掩码,每个子网可以使用不同长度的子网掩码。例如:如果你按部门划分网络,一些网络的掩码可以为255.255.255.0(多数部门),其它的可为255.255.252.0(较大的部门)。
6、无类别地址(CIDR)
因特网上的主机数量增长超出了原先的设想,虽然还远没达到232,但地址已经出现匮乏。1993年发表的RFC1519--无类别域间路由CIDR(Classless Inter-Domain Routing)--是一个尝试解决此问题的方法。CIDR试图延长IPv4的寿命,与128位地址的IPv6不同,它并不能最终解决地址空间的耗尽,但IPv6的实现是个庞大的任务,因特网目前还没有做好准备。CIDR给了我们缓冲的准备时间。
基于类的地址系统工作的不错,它在有效的地址使用和少量的网络数目间做出了较好的折衷。但是随着因特网意想不到的成长出现了两个主要的问题:
已分配的网络数目的增长使路由表大得难以管理,相当程度上降低了路由器的处理速度。
僵化的地址分配方案使很多地址被浪费,尤其是B类地址十分匮乏。
为了解决第二个问题,可以分配多个较小的网络,例如,用多个C类网络而不是一个B类网络。虽然这样能够很有效地分配地址,但是更加剧了路由表的膨胀(第一个问题)。
在CIDR中,地址根据网络拓扑来分配。连续的一组网络地址可以被分配给一个服务提供商,使整组地址作为一个网络地址(很可能使用超网技术)。例如:一个服务提供商被分配以256个C类地址,从213.79.0.0到213.79.255.0,服务提供商给每个用户分配一个C类地址,但服务提供商外部的路由表只通过一个表项--掩码为255.255.0.0的网络213.79.0.0--来分辨这些路由。
这种方法明显减少了路由表的增长,CIDR RFC的作者估计,如果90%的服务提供商使用了CIDR,路由表将以每3年54%的速度增长,而如果没有使用CIDR,则增长速度为776%。如果可以重新组织现有的地址,则因特网骨干上的路由器广播的路由数量将大大减少。但这实际是不可行的,因为将带来巨大的管理负担。
路由器 <四>
四、路由
1、路由表
如果一个主机有多个网络接口,当向一个特定的IP地址发送分组时,它怎样决定使用哪个接口呢?答案就在路由表中。来看下面的例子:
目的 子网掩码 网关 标志 接口
201.66.37.0 255.255.255.0 201.66.37.74 U eth0
201.66.39.0 255.255.255.0 201.66.39.21 U eth1
主机将所有目的地为网络201.66.37.0内主机(201.66.37.1-201.66.37.254)的数据通过接口eth0(IP地址为201.66.37.74)发送,所有目的地为网络201.66.39.0内主机的数据通过接口eth1(IP地址为201.66.39.21)发送。标志U表示该路由状态为“up”(即激活状态)。对于直接连接的网络,一些软件并不象上例中一样给出接口的IP地址,而只列出接口。
此例只涉及了直接连接的主机,那么目的主机在远程网络中如何呢?如果你通过IP地址为201.66.37.254的网关连接到网络73.0.0.0,那么你可以在路由表中增加这样一项:
目的
掩码
网关
标志
接口
73.0.0.0
255.0.0.0
201.66.37.254
UG
eth0
此项告诉主机所有目的地为网络73.0.0.0内主机的分组通过201.66.37.254路由过去。标志G(gateway)表示此项把分组导向外部网关。类似的,也可以定义通过网关到达特定主机的路由,增加标志H(host):
目的 掩码 网关 标志 接口
91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0
下面是路由表的基础,除了特殊表项之外:
目的 掩码 网关 标志 接口
127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
default 0.0.0.0 201.66.37.254 UG eth1
第一项是loopback接口,用于主机给自己发送数据,通常用于测试和运行于IP之上但需要本地通信的应用。这是到特定地址127.0.0.1的主机路由(接口lo0是IP协议栈内部的“假”网卡)。第二项十分有意思,为了防止在主机上定义到因特网上每一个可能到达网络的路由,可以定义一个缺省路由,如果在路由表中没有与目的地址相匹配的项,该分组就被送到缺省网关。多数主机简单地通过一个网卡连接到网络,因此只有通过一个路由器到其它网络,这样在路由表中只有三项:loopback项、本地子网项和缺省项(指向路由器)。
2、重叠路由
假设在路由表中有下列重叠项:
目的 掩码 网关 标志 接口
1.2.3.4 255.255.255.255 201.66.37.253 UGH eth0
1.2.3.0 255.255.255.0 201.66.37.254 UG eth0
1.2.0.0 255.255.0.0 201.66.37.253 UG eth1
default 0.0.0.0 201.66.39.254 UG eth1
之所以说这些路由重叠是因为这四个路由都含有地址1.2.3.4,如果向1.2.3.4发送数据,会选择哪条路由呢?在这种情况下,会选择第一条路由,通过网关201.66.37.253。原则是选择具有最长(最精确)的子网掩码。类似的,发往1.2.3.5的数据选择第二条路由。
注意:这条原则只适用于间接路由(通过网关)。把两个接口定义在同一子网在很多软件实现上是非法的。例如下面的设置通常是非法的(不过有些软件将尝试在两个接口进行负载平衡):
接口 IP地址 子网掩码
eth0 201.66.37.1 255.255.255.0
eth1 201.66.37.2 255.255.255.0
对于重叠路由的策略是十分有用的,它允许缺省路由作为目的为0.0.0.0、子网掩码为0.0.0.0的路由进行工作,而不需要作为路由软件的一个特殊情况来实现。
回头来看看CIDR,仍使用上面的例子:一个服务提供商被赋予256个C类网络,从213.79.0.0到213.79.255.0。该服务提供商外部的路由表只以一个表项就了解了所有这些路由:213.79.0.0,子网掩码为255.255.0.0。假设一个用户移到了另一个服务提供商,他拥有网络地址213.79.61.0,现在他是否必须从新的服务提供商处取得新的网络地址呢?如果是,意味着他必须重新配置每台主机的IP地址,改变DNS设置,等等。幸运的是,解决办法很简单,原来的服务提供商保持路由213.79.0.0(子网掩码为255.255.0.0),新的服务提供商则广播路由213.79.61.0(子网掩码为255.255.255.0),因为新路由的子网掩码较长,它将覆盖原来的路由。
3、静态路由
回头看看我们已建立的路由表,已有了六个表项:
目的 掩码 网关 标志 接口
127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
201.66.37.0 255.255.255.0 201.66.37.74 U eth0
201.66.39.0 255.255.255.0 201.66.39.21 U eth1
default 0.0.0.0 201.66.39.254 UG eth1
73.0.0.0 255.0.0.0 201.66.37.254 UG eth0
91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0
这些表项分别是怎么得到的呢?第一个是当路由表初始化时由路由软件加入的,第二、三个是当网卡绑定IP地址时自动创建的,其余三个必须手动加入,在UNIX系统中,这是通过命令route来做的,可以由用户手工执行,也可以通过rc脚本在启动时执行。上述方法涉及的是静态路由,通常在启动时创建,并且没有手工干预的话将不再改变。
路由器 <五>
四、路由
4、路由协议
主机和网关都可以使用称作动态路由的技术,这使路由表可以动态改变。动态路由需要路由协议来增加和删除路由表项,路由表还是和静态路由一样地工作,只是其增添和删除是自动的。
有两种路由协议:内部的和外部的。内部协议在自制系统(AS)内部路由,而外部协议则在自制系统间路由。自制系统通常在统一的控制管理之下,例如大的公司或大学。小的站点常常是其因特网服务提供商自制系统的一部分。
这里只讨论内部协议,很少有人涉及到甚至听说外部协议。最常见的外部协议是外部网关协议EGP(External Gateway Protocol)和边缘网关协议BGP(Border Gateway Protocol),BGP是较新的协议,在逐渐地取代EGP。
5、ICMP重定向
ICMP通常不被看作路由协议,但是ICMP重定向却与路由协议的工作方式很类似,所以将在这里讨论一下。假设现在有上面所给的六个表项的路由表,分组被送往201.66.43.33,看看路由表,除了缺省路由外,这并不能匹配任何路由。静态路由将其通过路由器201.66.39.254发送(trip 1),但是,该路由器知道所有发向子网201.66.43.0的分组应该通过201.66.39.253,因此,它把分组转发到适当的路由器(trip 2)。但是如果主机直接把分组发到201.66.39.253就会提高效率(trip 3)。
因为路由器把分组从同一接口发回了分组,所以它知道有更好的路由,路由器可以通过ICMP重定向指示主机使用新的路由。虽然路由器知道所有发向201.66.43.0子网的分组应该通过201.66.39.253,它通常只发送特定的主机的ICMP重定向(此例中是201.66.43.33)。主机将在路由表中创建一个新的表项:
目的 掩码 网关 标志 接口
201.66.43.33 255.255.255.255 201.66.39.253 UGHD eth1
注意标志D,对所有由ICMP重定向创建的路由设置此标志。将来此类分组将通过新路由发送(trip 3)。
6、RIP
RIP是一种简单的内部路由协议,已经存在很久,被广泛地实现(UNIX的routed就使用RIP)。它使用距离向量算法,所以其路由选择只是基于两点间的“跳(hop)”数,穿过一个路由器认为是一跳。主机和网关都可以运行RIP,但是主机只是接收信息,而并不发送。路由信息可以从指定网关请求,但通常是每隔30秒广播一次以保持正确性。RIP使用UDP通过端口520在主机和网关间通信。网关间传送的信息用于建立路由表,由RIP选定的路由总是具有距离目的跳数最少的。RIP版本1在简单、较小的网络中工作得不错,但是在较大的网络中,就出现一些问题,有些问题在RIP版本2中已纠正,但有些是由于其设计产生的。在下面的讨论中,适用于两种版本时简单称为RIP,RIP v1和RIP v2则指特定的版本。
RIP并没有任何链接质量的概念,所有的链路都被认为是相同的,低速的串行链路被认为与高速的光纤链路是同样的。RIP以最小的跳数来选择路由,因此当在下面两个路由中选择时:
100Mbps的光纤链路,路由器,然后是10Mbps的以太网
9600bps的串行链路
RIP将选择后者。RIP也没有链路流量等级的概念。例如对于两条以太网链路,其中一个很繁忙,另一个根本没有数据流,RIP可能会选择繁忙的那条链路。
RIP中的最大hop数是15,大于15则认为不可到达。因此在很大的自制系统中,hop数很可能超过15,使用RIP是很不现实的。RIP v1不支持子网,交换的信息中不含子网掩码,对给定路由确定子网掩码的方法各不相同,RIP v2则弥补了此缺点。RIP每隔30秒才进行信息更新,因此在大网中断链信息可能要花些时间才能传播开来,路由信息的稳定时间可能更长,并且在这段时间内可能产生路由环路。对此有一些解决办法,但这里不进行讨论。
可以看出,RIP是一个简单的路由协议,有一些,尤其在版本1中。不过,它常常是某些操作系统的唯一选择。
OSPF路由协议综述及其配置(5)
Changing the Cost Metric
默认情况下,Cisco根据100Mbps/bandwidth来计算metric,比如Kbps链路的metric约为1562,T1的为,100Mbps的链路为1.当链路速率大于100Mbps的时候,应该在OSPF进程下使用如下命令:
RouterA(config-router)#auto-cost reference-bandwidth
在接口自定义cost的命令如下:
RouterA(config-if)#ip ospf cost [value]
这条命令将使得超越默认的cost计算,具有更高的优先权.value范围为1到65535.值越低,就越优先采用该接口
OSPF Route Summarization Concepts
OSPF路由汇总可以减少路由表条目,减少类型3和类型5的LSA的洪泛,节约带宽资源和减轻路由器CPU负载,还能够对拓扑的变化本地化
OSPF路由汇总的两种类型如下:
1.inter-area(IA) route summarization:发生在ABR上
2.external route summarization:发生在ASBR上
Configuring Route Summarization
因为OSPF是基于无类的路由协议,它不会进行自动汇总.手动在ABR上做IA route summarization的命令如下:
Router(config-router)#area [area-id] range [address] [mask]
在ASBR上做external route summarization的命令如下:
Router(config-router)#summary-address [address] [mask] [not-advertise] [tag tag]
如下图就是一个ASBR上的external route summarization的例子:
R1(config-router)#network 172.16..1 0.0.0.0 area 1
R1(config-router)#summary-address 172.16.32.0 255.255.224.0
Default Routes in OSPF
OSPF路由器默认不会产生默认路由到一般性的area里,但是可以通过相关命令启用默认路由.默认路由作为LSA类型5出现在LSDB中
创建OSPF默认路由的命令如下:
Router(config-router)#default-information originate [always] [metric value] [metric-type type-value] [route-map map-name]
参数always是不管路由表里是否存在默认路由,都会宣告一条默认路由0.0.0.0
metric value是指定默认路由的metric,默认为10
type-value可以为1或者2.1为O E1,2为O E2,默认是2
route-map map-name是如果满足route map的话就产生默认路由
实例如下图:
R1(config)#router ospf 100
R1(config-router)#netw 10.1.1.1 0.0.0.0 area 0
R1(config-router)#default-information originate metric 10
R2(config)#router ospf 100
R2(config-router)#netw 10.2.1.1 0.0.0.0 area 0
R2(config-router)#default-information originate metric 100
Types of OSPF Areas
一些OSPF area的类型如下:
1.standard area:接收链路更新,路由汇总和外部路由
2.backbone area(transit area):标记为area 0,拥有standard area的一切属性
3.stub area:不可以包含ASBR.不接收外部路由信息(LSA类型5),如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是可以减少路由表的条目.stub area没有虚链路(virtual link)穿越它们
4.totally stubby area:Cisco私有,不接收外部路由信息和路由汇总信息(LSA类型3,4和5).不可以包含ASBR.如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是最小化路由表条目
5.not-so-stubby area(NSSA):NSSA是OSPF RFC的补遗.定义了特殊的LSA类型7.提供类似stub area和totally stubby area的优点,可以包含的有ASBR
Stub Area Configuration
stub area的配置命令如下:
RouterA(config-router)#area [area-id] stub
所有在stub area里的路由器必须都使用stub命令,例子如下图:
R3(config)#router ospf 100
R3(config-router)#netw 192.168.14.0 0.0.0.255 area 0
R3(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R3(config-router)#area 2 stub
R4(config)#router ospf 10
R4(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R4(config-router)#area 2 stub
如上是把area 2配置为stub area,R3做为ABR自动向area 2(stub area)宣告一条metric为1的默认路由0.0.0.0
Totally Stubby Area Configuration
totally stubby area的配置命令如下:
RouterA(config-router)#area [area-id] stub no-summary
ABR默认宣告一条metric为1的默认路由到totally stubby area,修改这个metric的命令如下:
RouterA(config-router)# area [area-id] default-cost [cost]
配置实例如下图:
R3(config)#router ospf 100
R3(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R3(config-router)#area 1 stub
R4(config)#router ospf 50
R4(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R4(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R4(config-router)#area 1 stub no-summary
R4(config-router)#area 1 default-cost 10
R4(config)#router ospf 50
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R2(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R2(config-router)#area 1 stub no-summary
R2(config-router)#area 1 default-cost 5
如上,默认路由将选用R2上的,因为R2的metric更低
Not-So-Stubby Areas
之前说过stub area和totally stub area不可以包含的有ASBR,但是假如你想使用ASBR,又想使其具有stub area和totally stub area的优点(减少路由表条目)的话,就可以采用NSSA,如下图:
RIP经过再发布(redistribution)到NSSA以后,NSSA的ASBR将产生只存在于NSSA中的LSA类型7,然后ABR将LSA类型7转换成LSA类型5
NSSA的配置命令为在OSPF进程下使用area [area-id] nssa,所有位于NSSA里的路由器都要使用这条命令.如下图是配置实例:
R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa default-information-originate
使用default-information-originate参数创建一条area 0到NSSA的默认路由.并且类型5的LSA将不会进入NSSA(类似stub area)
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa
还可以将NSSA配置成具有totally-stub的特性,如下:
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa
R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa no-summary
这样类型3,4和5的LSA将不会进入NSSA,no-summary参数只应用在ABR上就可以了,NSSA里的其他路由器只需使用area 1 nssa
The show Commands for Stub and NSSA
一些验证性命令如下:
show ip ospf:显示area类型
show ip ospf database:显示LSA类型7
show ip ospf database nssa-external:显示LSDB中每条类型7的LSA的信息
show ip route:显示标记为O N1/N2的NSSA路由条目(默认为O N2)
Defining an OSPF Virtual Link
在OSPF里所有的area都要和area 0相连,但是假如某个区域没有和area 0相连的话,就可以采用虚链路来连接它们,如下图:
虚链路一般是做为备份连接或者是临时连接
虚链路的配置命令如下:
Router(config-router)#area [area-id] virtual-link [RID]
一些其他可选参数如下:
authentication [message-digest|null]:指定验证方式为MD5加密还是明文口令
hello-intervals [second]:定义hello包发送时间间隔,默认为10秒
配置实例如下图:
R2(config)#router ospf 100
R2(config-router)#netw 10.3.0.0 0.0.0.255 area 1
R2(config-router)#netw 10.7.0.0 0.0.0.255 area 3
R2(config-router)#area 1 virtual-link 10.3.10.5
注意上面的RID,是指定虚链路中对方的RID,R1的配置如下:
R1(config)#router ospf 200
R1(config-router)#netw 10.2.3.0 0.0.0.255 area 0
R1(config-router)#netw 10.3.2.0 0.0.0.255 area 1
R1(config-router)#area 1 virtual-link 10.7.20.123
注意area-id都为area 1,因为area 1做为虚链路的transit area
使用show ip ospf virtual-links命令验证虚链路的配置
OSPF路由协议综述及其配置(4)
当OSPF area过大的话,带来的负面影响有:
1.太过频繁的SPF计算,造成路由器CPU负载过重
2.路由表过大
3.LSDB过大
解决方案是划分层次化的area路由(hierarchical area routing),减少了SPF运算的频率,减小了路由表的体积,减少了LSU的负载
OSPF路由器的类型如下图:
internal routers:所有的接口在一个area里,拥有相同的LSDB
backbone router:至少一个有接口连接到area 0里,和internal routers保持相同的OSPF进程和算法
ABR:接口连接了多个area,每个接口保持它所连的area的单独的LSDB
ASBR:至少有一个接口连接到外部网络比如其他的AS,非OSPF网络
当然,一个路由器同时可以扮演上述多个角色
OSPF LSA Types
一些LSA的类型如下:
类型1:router LSA
类型2:network LSA
类型3/4:summary LSA
类型5:AS external LSA
类型6:multicast OSPF LSA,使用在OSPF多播应用程序里
类型7:使用在Not-So-Stubby area(NSSA)里
类型8:特殊的LSA用来连接OSPF和BGP
类型9/10/11:opaque LSA,用于今后OSPF的升级等
LSA类型1(router LSA),如下图:
类型1的LSA只在一个area里传播,不会穿越ABR.描述了和路由器直接相连的链路集体状态信息.RID鉴别类型1的LSA,LSA描述了链路的网络号和掩码(即link ID).另外类型1的LSA还描述了路由器是否是ABR或ASBR
类型1的LSA不同的链路类型的link ID如下:
1.point-to-point的link ID是邻居的RID
2.transit network的link ID是DR的接口地址
3.stub network的link ID是IP网络号
4.virtual link的link ID是邻居的RID
LSA类型2(network LSA),如下图:
类型2的LSA只在一个区域里传播,不会穿越ABR.描述了组成transit network的直连的路由器.transit network直连至少2台OSPF路由器.DR负责宣告类型2的LSA,然后在transit network的一个area里进行洪泛.类型2的LSA ID是DR进行宣告的那个接口的IP地址
LSA类型3(summary LSA),如下图:
类型3的LSA由ABR发出.默认OSPF不会对连续子网进行汇总.可在ABR上进行人工设定启用汇总.类型3的LSA可以在整个AS内进行洪泛
LSA类型4(summary LSA),如下图:
类型4的LSA只使用在area里存在ASBR的时候,类型4的LSA鉴别ASBR和提供到达ASBR的路由.类型4的LSA只包含了ASBR的RID信息.类型4的LSA由ABR生成,并在整个AS里进行洪泛
LSA类型5(external LSA),如下图:
类型5的LSA描述了到达外部AS的路由,由ASBR生成并在整个AS内洪泛
Interpreting the OSPF LSDB and Routing Table
使用show ip ospf database来查看OSPF的LSDB信息
一些route designator如下:
1.O:代表OSPF area内(intra-area)路由,为router LSA
2.O IA:在一个AS里的area之间(inter-area)的路由,为summary LSA
3.O E1/O E2:AS外路由,为external LSA
SPF算法根据LSDB运算出SPF树来决定最佳路径,步骤如下:
1.所有在各自的area里的路由器计算出最佳路径并放进路由表里,为LSA类型1和类型2.用O来标记
2.area之间的路由器计算出最佳路径,这些最佳路径是area间路由条目,或LSA类型3和LSA类型4.用O IA来标记
3.所有的除了stub area的路由器计算出到达外部AS的最佳路径(LSA类型5),标记为O E1或O E2
O E1和O E2的区别为是到达外部网络,前者要加内部cost,后者不加,如下图:
一般只有一个ASBR宣告到达外部AS的外部路由的时候,就使用O E2(O E2为默认类型);如果有多个ASBR宣告一条到达同一个外部AS的外部路由的时候,就应该使用O E2
OSPF路由协议综述及其配置(3)
OSPF路由协议综述及其配置(3)
Common OSPF Configuration for Frame Relay
先看看NBMA模式,如下图:
1.OSPF会把NBMA当作broadcast网络进行处理(比如LAN)
2.如图,所有的serial口处于同一子网
3.ATM,X.25和帧中继默认为NBMA操作
4.邻居手动指定
5.洪泛LSU的时候,要对每条PVC进行洪泛
6.RFC 2328兼容
对NBMA类型人工指定邻居使用如下命令:
Router(config-router)#neighbor [x.x.x.x] priority [number] poll-interval [number]
x.x.x.x为邻居的IP地址
priority [number]为优先级,如果设置为0的话将不能成为DR/BDR
poll-interval [number]是轮询的间隔时间,单位为秒.NBMA接口发送hello包给邻居之前等待的时间
下图是一个配置实例:
RouterA(config)#router ospf 100
RouterA(config-router)#network 140.140.0.0 0.0.255.255 area 0
RouterA(config-router)#neighbor 140.140.1.2 priority 0
RouterA(config-router)#neighbor 140.140.1.3 priority 0
如上,把邻居的优先级设置为0,保证A为DR.在部分互连的NBMA网络中,只需在DR/BDR上使用neighbor命令;如果拓扑结构是星形的话,neighbor命令应该使用在中心路由器上;在全互连的NBMA网络中,应该在所有的路由器上使用neighbor命令,除非是人工指定DR/BDR查看OSPF邻居信息:show ip ospf neighbor [type number] [neighbor-id] [detail]
type number:接口类型和接口号,可选
neighbor-id:邻居路由器ID,可选
再看看point-to-multipoint模式,如下图:
1.适用于部分互连或星形拓扑结构里
2.不需DR,只使用单独的一个子网
3.自动发现邻居
4.LSU包被发送到每个邻居路由器的接口
如下图,point-to-multipoint的配置如下:
路由器A:
RouterA(config)#interface serial 0
RouterA(config-if)#encapsulation hdlc
RouterA(config-if)#ip address 120.120.1.1 255.255.255.0
RouterA(config)#interface serial 1
RouterA(config-if)#encapsulation frame-relay
RouterA(config-if)#ip address 140.140.1.1 255.255.255.0
RouterA(config-if)#ip ospf network point-to-multipoint
路由器B:
RouterB(config)#interface serial 0
RouterB(config-if)#ip address 140.140.1.2 255.255.255.0
RouterB(config-if)#encapsulation frame-relay
RouterB(config-if)#ip ospf network point-to-multipoint
验证如下:
RouterA#show ip ospf interface s1
Serial1 is up, line protocol is up
Internet Address 140.140.1.1/24, Area 1
Process ID 100, Router ID 120.120.1.1, Network Type Point-To-Multipoint, Cost:
Transmit Delay is 1 sec, State: Point_To_Multipoint
Timer intervals configured,Hello 30, Dead 120, Wait 120, Retransmit 5
Hello due in 00:00:11
Neighbor count is 2, Adjacent neighbor count is 2
Adjacent with neighbor 140.140.1.2
Adjacent with neighbor 140.140.1.3
(略)
接下来再看看point-to-multipoint nonbroadcast模式,这个模式是RFC兼容的point-to-multipoint的扩展;邻居必须人工指定;不选举DR/BDR;使用在某些邻居不能自动发现的场合下
然后是broadcast模式,要选举DR/BDR
最后是point-to-point模式,使用在当NBMA网络中只存在2个节点的时候;不选举DR/BDR;每条点到点的连接处在同一个子网中;一般只和point-to-point subinterface结合使用
定义subinterface的命令如下:
Router(config)#interface serial [number.subinterface-number] {point-to-point | multipoint}
默认在point-to-point的帧中继subinterface的OSPF模式是point-to-point模式;在multipoint的帧中继subinterface的OSPF模式是NBMA(nonbroadcast)模式;在帧中继物理接口的OSPF模式也是NBMA模式
下图就是一个point-to-point subinterface的例子:
如图每条VC要求一个单独的子网
下图是一个multipoint subinterface的例子:
如图,第一个subinterface S1.1为point-to-point模式;OSPF把第二个multipoint subinterface S1.2当作NBMA模式
下图是几种模式的一个比较:
debug ip ospf adj:用来跟踪OSPF邻居信息
OSPF路由协议综述及其配置(1)
OSPF路由协议综述及其配置(1)
Link-State Routing Protocols
链路状态路由协议(link-state routing protocol)的一些特征:
1.对网络发生的变化能够快速响应
2.当网络发生变化的时候发送触发式更新(triggered update)
3.发送周期性更新(链路状态刷新),间隔时间为30分钟
链路状态路由协议只在网络拓扑发生变化以后产生路由更新.当链路状态发生变化以后,检测到变化的设备创建LSA(link state advertisement),通过使用组播地址传送给所有的邻居设备,然后每个设备拷贝一份LSA,更新它自己的链路状态数据库(link state database,LSDB),接着再转发LSA给其他的邻居设备.这种LSA的洪泛(flooding)保证了所有的路由设备在更新自己的路由表之前更新它自己的LSDB
LSDB通过使用Dijkstra算法(shortest path first,SPF)来计算到达目标网络的最佳路径,建立一条SPF树(tree),然后最佳路径从SPF树里选出来,被放进路由表里OSPF和IS-IS协议被归类到链路状态路由协议中.链路状态路由协议在一个特定的区域(area)里从邻居处收集网络信息,一旦路由信息都被收集齐以后,每个路由器开始通过使用Dijkstra算法(SPF)计算到达目标网络的最佳路径
运行了链路状态路由协议的路由器跟踪以下信息:
1.它们各自的邻居
2.在同一个区域中的所有路由器
3.到达目标网络的最佳路径
Link-State Data Structures
为了能够做出更好的路由决策,OSPF路由器必须维持的有以下内容:
1.neighbor table:也叫adjacency database.存储了邻居路由器的信息.如果一个OSPF路由器和它的邻居路由器失去联系,在几秒中的时间内,它会标记所有到达那条路由均为无效并且重新计算到达目标网络的路径
2.topology table:一般叫做LSDB.OSPF路由器通过LSA学习到其他的路由器和网络状况,LSA存储在LSDB中
3.routing table:也就是我们所说的路由表了,也叫forwarding database,包含了到达目标网络的最佳路径的信息
链路状态路由协议和距离向量路由协议的一个区别就是:距离向量路由协议是routing by rumors,也就是说,距离向量路由协议依靠邻居发给它的信息来做路由决策,而且路由器不需要保持完整的网络信息;而运行了链路状态路由协议的路由器保持的有完整的网络信息的快照,而且每个路由器自己做出路由决策
Defining an OSPF Area
OSPF的网络设计要求是双层层次化(2-layer hierarchy),包括如下2层:
1.transit area(backbone或area 0)
2.regular areas(nonbackbone areas)
transit area负责的主要功能是IP包快速和有效的传输.transit area互联OSPF其他区域类型.一般的,这个区域里不会出现端用户(end user)
regular areas负责的主要功能就是连接用户和资源.这种区域一般是根据功能和地理位置来划分.一般的,一个regular area不允许其他区域的流量通过它到达另外一个区域,必须穿越transit area比如area 0.regular areas还可以有很多子类型,比如stub area,locally area和not-so-stubby area
在链路状态路由协议中,所有的路由器都保持的有LSDB,OSPF路由器越多,LSDB就越大.这可能对了解完整的网络信息有帮助,但是随着网络的增长,可扩展性的问题就会越来越大.采用的折中方案就是引入区域的概念.在某一个区域里的路由器只保持的有该区域中所有路由器或链路的详细信息和其他区域的一般信息.当某个路由器或某条链路出故障以后,信息只会在那个区域以内在邻居之间传递.那个区域以外的路由器不会收到该信息.OSPF要求层次化的网络设计,意味着所有的区域要和area 0直接相连.如下图:
注意area 1和area 2或3之间的连接是不允许的,它们都必须通过backbone area 0进行连接.Cisco建议每个区域中路由器的数量为50到100个构建area 0的路由器称为骨干路由器(backbone router,BR),如上图,A和B就是BR;区域边界路由器(area border router,ABR)连接area 0和nonbackbone areas.如图,C,D和E就是ABR.ABR通常具有以下特征:
1.分隔LSA洪泛的区域
2.是区域地址汇总的主要因素
3.一般做为默认路由的源头
4.为每个区域保持LSDB
理想的设计是使每个ABR只连接2个区域,backbone和其他区域,3个区域为上限
Defining OSPF Adjacencies
运行OSPF的路由器通过交换hello包和别的路由器建立邻接(adjacency)关系,过程如下:
1.路由器和别的路由器交换hello包,目标地址采用多播地址
2.hello包交换完毕,邻接关系形成
3.接下来通过交换LSA和对接收方的确认进行同步LSDB.对于OSPF路由器而言,进入完全邻接状态
4.如果需要的话,路由器转发新的LSA给其他的邻居,来保证整个区域内LSDB的完全同步
对于点到点的WAN串行连接,两个OSPF路由器通常使用HDLC或PPP来形成完全邻接状态
对于LAN连接,选举一个路由器做为designated router(DR)再选举一个做为backup designated router(BDR),所有其他的和DR以及BDR相连的路由器形成完全邻接状态而且只传输LSA给DR和BDR.DR从邻居处转发更新到另外一个邻居那里.DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把完整的数据库信息发送给新加入的路由器.路由器之间还会和LAN内的其他路由器(非DR/BDR,即DROTHERs)维持一种部分邻居关系(two-way adjacency)
OSPF的邻接一旦形成以后,会交换LSA来同步LSDB,LSA将进行可靠的洪泛
OSPF Calculation
链路状态陆游协议使用Dijkstra算法来查找到达目标网络中的最佳路径.所有的路由器拥有相同的LSDB后,把自己放进SPF tree中的root里,然后根据每条链路的耗费(cost),选出耗费最低的做为最佳路径,最后把最佳路径放进forwarding database(路由表)里
下图就是一个SPF计算的例子:
1.LSA遵循split horizon原则,H对E宣告它的存在,E把H的宣告和它自己的宣告再传给C和G;C和G再和之前类似,继续传播开来……
2.X有4个邻居:A,B,C和D,假设这里都是以太网,每条网链路的耗费为10,经过计算,路由器可以算出最佳路径.上图的右半部分实线所标即为最佳路径
LS Data Structures: LSA Options
关于LSA的操作流程图如下:
如图可以看出当路由器收到一个LSA以后,先会查看它自己的LSDB看有没有相应的条目,如果没有就加进自己的LSDB中去,并反馈LSA确认包(LSAck),接着再继续洪泛LSA,最后运行SPF算法算出新的路由表
如果当它收到LSA的时候,自己的LSDB有该条目而且版本号一样,就忽略这个LSA;如果有相应条目,但是收到的LSA的版本号更新,就加进自己的LSDB中,发回LSAck,洪泛LSA,最后用SPF计算最佳路径;如果版本号没有自己LSDB中那条新,就反馈LSU信息给发送源
Types of OSPF Packets
OSPF包的5种类型如下:
1.hello:用来建立邻居关系的包
2.database description(DBD):用来检验路由器之间数据库的同步
3.link state request(LSR):链路状态请求包
4.link state update(LSU):特定链路之间的请求记录
5.link state acknowledgement(LSAck):确认包
OSPF Packet Header Format
5种OSPF包都是直接被封装在IP包里的而不使用TCP或UDP.由于没有使用可靠的TCP协议,但是OSPF包又要求可靠的传输,所以就有了LSAck包.如下图所示就是OSPF包在IP包里的形式:
协议号为(EIGRP协议号为88),一些字段如下:
1.Version Number:当前为OSPF版本2
2.Type:定义OSPF包的类型
3.Packet Length:包的长度,单位字节
4.Router ID(RID):产生OSPF包的源路由器
5.Area ID:定义OSPF包是从哪个area产生出来的
6.Checksum(校验和):错误校验
7.Authentication Type:验证方法,可以是明文(cleartext)密码或者是Message Digest 5(MD5)加密格式
8.Data:对于hello包来说,该字段是已知邻居的列表;对于DBD包来说,该字段包含的是LSDB的汇总信息,包括RID等等;对于LSR包来说,该字段包含的是需要的LSU类型和需要的LSU类型的RID;对于LSU包来说,包含的是完全的LSA条目,多个LSA条目可以装在一个包里;对于LSAck来说,字段为空
OSPF Neighbor Adjacency Establishment
Hello协议用来建立和保持OSPF邻居关系,采用多播地址224.0.0.5,hello包包含的信息如下:
1.Router ID(RID):路由器的32位长的一个唯一标识符,选举规则是,如果loopback接口不存在的话,就选物理接口中IP地址等级最高的那个;否则就选取loopback接口
2.hello/dead intervals:定义了发送hello包频率(默认在一个多路访问网络中间隔为10秒);dead间隔是4倍于hello包间隔.邻居路由器之间的这些计时器必须设置成一样
3.neighbors:邻居列表
4.area ID:为了能够通信,OSPF路由器的接口必须属于同一网段中的同一区域(area),即共享子网以及子网掩码信息
5.router priority:优先级,选举DR和BDR的时候使用.8位长的一串数字
6.DR/BDR IP address:DR/BDR的IP地址信息
7.authentication password:如果启用了验证,邻居路由器之间必须交换相同的密码信息.此项可选
8.stub area flag:stub area是通过使用默认路由代替路由更新的一种技术(有点像EIGRP中的stub功能)
Establishing Bidirectional Communication
看看双向通信的建立过程,如下:
1.刚开始A还没和别的路由器交换信息,还处于down的状态,接下来通过使用多播地址224.0.0.5开始发送hello包
2.B接收到hello包,把A加进自己的neighbor table中,并进入init状态,然后以单播的形式发送hello包对A做出应答
3.A收到以后把所有从hello包里找到的RID加进自己的neighbor table中,进入two-way状态
4.如果链路是广播型网络比如以太网,接下来选举DR和BDR,这一过程发生在交换信息之前
5.周期发送hello包保证信息交换
Discovering the Network Routes & Adding the Link-State Entries
当选举了DR和BDR,进入exstart状态,接下来就可以对链路状态信息进行发现并创建自己的LSDB,如下:
1.在exstart状态里,邻接关系形成,路由器和DR/BDR形成主仆关系(RID等级最高的为主,其他的为辅)
2.主仆交换DBD包(DDP),路由器进入exchange状态
DBD包含了出现在LSDB中的LSA条目头部信息,条目信息可以为一条链路(link)或者一个网络.每个LSA条目头部信息包括链路状态类型,宣告路由器的地址,链路耗费和序列号(版本号)
3.路由器收到DBD以后,将使用LSAck做出确认;还将和自己本身就有的DBD进行比较,过程如下:
如果DBD信息中有更新更全的链路状态条目,路由器就发送LSR给其他路由器,该状态为loading状态;收到LSR以后,路由器做出响应,以LSU作为应答,其中包含了LSR所需要的完整信息;收到LSU以后,再次做出确认,发送LSAck
4.路由器添加新的条目到LSDB中,进入full状态,接下来就可以对数据进行路由了
Maintaining Routing Information
当链路状态发生变化以后,路由器将洪泛LSA来对其他路由器做出通知,如下:
1.路由器意识到链路产生变化以后,对多播地址224.0.0.6和所有的DR/BDR发送LSU,其中LSU包含了更新了的LSA条目
2.DR对LSU做出确认,接着对多播地址224.0.0.5继续洪泛,每个收到LSU的路由器对DR做出确认(反馈LSAck),
3.如果路由器连接了其他网络,将通过转发LSU给DR(在点到点网络是转发给邻居路由器)来对其他网络进行洪泛
4.其他路由器通过LSU来更新自己的LSDB,然后使用SPF算法重新计算最佳路径
链路状态条目的最大生存周期是60分钟,60分钟只有,它将从LSDB中被移除
OSPF Link-State Sequence Numbers
LSDB中的每个LSA记录都有个序列号,序列号是32位长,以0x80000001开头,0x7FFFFFFF结尾.OSPF路由器默认每30分钟洪泛一次LSA来保证LSDB的同步,每洪泛1次,序列号就加1.如果序列号达到最大并回到初始值的时候,已经存在的LSA的生存周期将设置为最大(1小时)并刷新LSDB(造成网络波动)
如果收到2条LSA,将比较序列号,序列号越高表示LSA版本越新
可以使用show ip ospf database命令查看生存周期和序列号,如下:
RTC# show ip ospf database
OSPF Router with ID (203.250.15.67) (Process ID 10)
Router Link States (Area 1)
Link ID ADV Router Age Seq# Checksum Link count
203.250.15.67 203.250.15.67 48 0x80000008 0xB112 2
203.250.16.130 203.250.16.130 212 0x80000006 0x3F44 2
(略)
Debug IP OSPF Packet
使用debug ip ospf packet命令对OSPF包进行排错和验证,如下:
Router# debug ip ospf packet
OSPF: rcv. v:2 t:1 l:48 rid:200.0.0.117 aid:0.0.0.0 chk:6AB2 aut:0 auk:
(略)
一些输出的含义如下:
v:OSPF版本
t:OSPF包类型,如上是1,几种数字所代表的意义是:1为hello,2为DBD,3为LSR,4为LSU,5为LSAck
l:定义包长度,单位字节
rid/aid:RID/area ID
chk:校验和
aut:验证类型,0代表不进行验证,1代表明文密码,2代表MD5加密
auk:OSPF验证key
keyed:MD5 key ID
seq:序列号
Configuring Basic Single-Area OSPF
OSPF的单域的配置命令:在全局配置模式下输入router ospf [process-id]启动OSPF进程,接下来在路由配置模
式下输入network [address] [inverse-mask] area [area-id]
process-id只是在本路由器有效,所以可以设置成和其他路由器的process-id一样的号码
address和inverse-mask为网络(或接口)地址和wildcard mask
来看一个配置实例,如下:
如图A是采用的网络地址,而B是采用的接口地址
Verifying OSPF Operation
一些验证性的命令如下:
1.show ip protocols:显示基于IP的路由协议信息
2.show ip route ospf:显示OSPF已知路由条目信息
3.show ip interface:显示RID,area ID和邻居信息
4.show ip ospf:显示RID,计时器和LSA等信息
5.show ip ospf neighbor (detail):显示邻居信息包括RID,优先级,邻接状态(比如exstart,full等)和dead timer.detail为详细参数.如下
RouterB#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
10..1.1 1 FULL/BDR 00:00:31 10..1.1 Ethernet0
10.2.1.1 1 FULL/- 00:00:38 10.2.1.1 Serial0
(略)
6.show ip ospf neighbor [type number] [neighbor-id] (detail):显示接口的邻居信息的命令.type为接口类型,number为接口号,neighbor-id为邻居ID
Manipulating OSPF Router ID
关于RID的分配,如下:
1.可以选择物理接口地址等级最高的做为RID(假如没有设置回环接口的话),接口不是必须参与OSPF进程,但是它的状态必须是up.否则将接收到如下错误提示:
Router(config)#router ospf 1
2wid: %OSPF-4-NORTRID: OSPF process 1 cannot start.
2.假如回环接口存在的话,可以选举等级最高的设置为RID(因为回环接口永远不会down掉)
3.可以使用router-id命令进行设置
一旦RID设置了,将不会改变,即使设置为RID的接口down掉了,RID也不会改变,除非路由器重新启动,或者OSPF进程重启
如果你想设置回环接口为RID,如下:
1.Router(config)#interface loopback [number]
创建回环接口
2.Router(config-if)#ip address [address] [mask]
分配IP地址(分配的地址等级高于物理接口的IP地址).mask参数一般为255.255.255.255
设置下次OSPF启动以后所采用的RID,如下:
1.Router(config)#router ospf [process-id]
2.Router(config-router)#router-id [ip-address]
创建新的RID.注意如果本次设置的新RID只会在下次OSPF进程中启用.可以重启路由器或者使用clear ip ospf process命令重启OSPF进程(这将暂时性的造成网络不稳定)
要查看RID的信息可以使用show ip ospf命令
Adjacency Behavior for a Point-to-Point Link & Broadcast Network
在点到点链路中一般采用PPP或者HDLC的封装格式,OSPF自动检测接口类型,并且不需要进行DR/BDR的选举.邻居通过对多播地址224.0.0.5进行多播hello包来动态发现邻居.默认hello包的发送间隔是10秒,dead间隔是40秒在多路访问(multiaccess)广播型网络中(比如以太网和Token Ring),需要进行DR/BDR的选举,所有的非DR/BDR(即DROTHER)路由器和DR/BDR形成完全邻接关系,即DROTHER通过DR/BDR交换信息,如下:
到达DR的包使用多播地址224.0.0.6;经DR转发给DROTHRT的包使用多播地址224.0.0.5
Electing the DR/BDR
当选举DR/BDR的时候要比较hello包中的优先级(priority),优先级最高的为DR,次高的为BDR.默认优先级都为1.在优先级相同的情况下就比较RID,RID等级最高的为DR,次高的为BDR.当你把优先级设置为0以后,OSPF路由器就不能成为DR/BDR,只能成为DROTHER
当网络中新加入一个优先级更高的的路由器,不会影响现有的 DR/BDR,除非DR出故障,BDR随即升级为DR,并重新选举BDR;如果是BDR出故障了就重新选举BDR
BDR对DR是否出故障的判定是根据使用wait timer,如果BDR在wait timer超时前确认DR仍然在转发LSA的话,它就认为DR出故障
设置优先级的命令如下:
Router(config-if)#ip ospf priority [number]
number的范围是0到255.注意仅当现有DR状态down掉以后,新设置的接口优先级才会生效
Adjacency Behavior for an NBMA Network
NBMA网络比如帧中继,ATM和X.25,没有广播的能力.但是经验通过在每条PVC上复制hell包为广播和多播来实现广播和多播的能力(将占用额外的带宽)
默认在NBMA网络中,hello包的发送时间间隔和dead时间间隔分别是30秒和120秒
OSPF认为NBMA网络的运做类似其他的BMA比如以太网
NBMA网络中邻居不是自动发现,DR/BDR需要一张邻居列表
OSPF Commands for NBMA Frame Relay
帧中继网络的几种拓扑结构如下:
1.星型(star/hub-and-spoke):最常见的帧中继网络拓扑,代价最小
2.全互连(full-mesh):冗余,但是代价大,在这样的环境中计算VC的数量,使用n(n-1)/2的公式,n为网络中的节点数
3.部分互连(partial-mesh):前两种的折中方案
OSPF运行的两种RFC中定义的模式如下:
1.NBMA:一般和部分互连的网络结合使用,需要选举DR/BDR和人工指定邻居.优点是相对point-to-multipoint模式它的负载较低
2.point-to-multipoint:把非广播的网络当作点到点连接的集合,自动发现邻居,不指定DR/BDR,一般和部分互连的网络结合使用.优点是配置较为简便
一些其他的可运行模式如下:
1.point-to-multipoint nonbroadcast
2.broadcast
3.point-to-point
定义OSPF网络类型的命令如下:
Router(config-if)#ip ospf network [{broadcast | nonbroadcast | point-to-multipoint | point-to-multipoint nonbroadcast}]
几种选项的含义如下:
1.broadcast:使得WAN接口看上去像LAN接口;一个IP子网;多播hello包自动发现邻居;选举DR/BDR;要求网络全互连
2.nonbroadcast(NBMA):一个IP子网;邻居手工指定;选举DR/BDR;DR/BDR要求和DROTHER完全互连;一般用在部分互连的网络中
3.point-to-multipoint:一个IP子网;多播hello包自动发现邻居;不要求DR/BDR的选举;一般用在部分互连的网络中
4.point-to-multipoint nonbroadcast:如果VC中多播和广播能力没有启用的话就不能使用point-to-multipoint模式,也路由器没办法多播hello包;邻居必须人工指定;不需选举DR/BDR
5.point-to-point:一个子网;不选举DR/BDR;当只有2个路由器的接口要形成邻接关系的时候才使用;接口可以为LAN或WAN接口
Common OSPF Configuration for Frame Relay
先看看NBMA模式,如下:
1.OSPF会把NBMA当作broadcast网络进行处理(比如LAN)
2.如图,所有的serial口处于同一子网
3.ATM,X.25和帧中继默认为NBMA操作
4.邻居手动指定
5.洪泛LSU的时候,要对每条PVC进行洪泛
6.RFC 2328兼容
对NBMA类型人工指定邻居使用如下命令:
Router(config-router)#neighbor [x.x.x.x] priority [number] poll-interval [number]
x.x.x.x为邻居的IP地址
priority [number]为优先级,如果设置为0的话将不能成为DR/BDR
poll-interval [number]是轮询的间隔时间,单位为秒.NBMA接口发送hello包给邻居之前等待的时间
下图是一个配置实例:
RouterA(config)#router ospf 100
RouterA(config-router)#network 140.140.0.0 0.0.255.255 area 0
RouterA(config-router)#neighbor 140.140.1.2 priority 0
RouterA(config-router)#neighbor 140.140.1.3 priority 0
如上,把邻居的优先级设置为0,保证A为DR.在部分互连的NBMA网络中,只需在DR/BDR上使用neighbor命令;如果拓扑结构是星形的话,neighbor命令应该使用在中心路由器上;在全互连的NBMA网络中,应该在所有的路由器上使用neighbor命令,除非是人工指定DR/BDR
查看OSPF邻居信息:show ip ospf neighbor [type number] [neighbor-id] [detail]
type number:接口类型和接口号,可选
neighbor-id:邻居路由器ID,可选
再看看point-to-multipoint模式,如下:
1.适用于部分互连或星形拓扑结构里
2.不需DR,只使用单独的一个子网
3.自动发现邻居
4.LSU包被发送到每个邻居路由器的接口
如下,point-to-multipoint的配置如下:
路由器A:
RouterA(config)#interface serial 0
RouterA(config-if)#encapsulation hdlc
RouterA(config-if)#ip address 120.120.1.1 255.255.255.0
RouterA(config)#interface serial 1
RouterA(config-if)#encapsulation frame-relay
RouterA(config-if)#ip address 140.140.1.1 255.255.255.0
RouterA(config-if)#ip ospf network point-to-multipoint
路由器B:
RouterB(config)#interface serial 0
RouterB(config-if)#ip address 140.140.1.2 255.255.255.0
RouterB(config-if)#encapsulation frame-relay
RouterB(config-if)#ip ospf network point-to-multipoint
验证如下:
RouterA#show ip ospf interface s1
Serial1 is up, line protocol is up
Internet Address 140.140.1.1/24, Area 1
Process ID 100, Router ID 120.120.1.1, Network Type Point-To-Multipoint, Cost:
Transmit Delay is 1 sec, State: Point_To_Multipoint
Timer intervals configured,Hello 30, Dead 120, Wait 120, Retransmit 5
Hello due in 00:00:11
Neighbor count is 2, Adjacent neighbor count is 2
Adjacent with neighbor 140.140.1.2
Adjacent with neighbor 140.140.1.3
(略)
接下来再看看point-to-multipoint nonbroadcast模式,这个模式是RFC兼容的point-to-multipoint的扩展;邻居必须人工指定;不选举DR/BDR;使用在某些邻居不能自动发现的场合下
然后是broadcast模式,要选举DR/BDR
最后是point-to-point模式,使用在当NBMA网络中只存在2个节点的时候;不选举DR/BDR;每条点到点的连接处在同一个子网中;一般只和point-to-point subinterface结合使用
定义subinterface的命令如下:
Router(config)#interface serial [number.subinterface-number] {point-to-point | multipoint}
默认在point-to-point的帧中继subinterface的OSPF模式是point-to-point模式;在multipoint的帧中继subinterface的OSPF模式是NBMA(nonbroadcast)模式;在帧中继物理接口的OSPF模式也是NBMA模式
下就是一个point-to-point subinterface的例子:
如图每条VC要求一个单独的子网
下是一个multipoint subinterface的例子:
如图,第一个subinterface S1.1为point-to-point模式;OSPF把第二个multipoint subinterface S1.2当作NBMA模式
下图是几种模式的一个比较:
debug ip ospf adj:用来跟踪OSPF邻居信息
Types of OSPF Routers
当OSPF area过大的话,带来的负面影响有:
1.太过频繁的SPF计算,造成路由器CPU负载过重
2.路由表过大
3.LSDB过大
解决方案是划分层次化的area路由(hierarchical area routing),减少了SPF运算的频率,减小了路由表的体积,减少了LSU的负载
OSPF路由器的类型如下
internal routers:所有的接口在一个area里,拥有相同的LSDB
backbone router:至少一个有接口连接到area 0里,和internal routers保持相同的OSPF进程和算法
ABR:接口连接了多个area,每个接口保持它所连的area的单独的LSDB
ASBR:至少有一个接口连接到外部网络比如其他的AS,非OSPF网络
当然,一个路由器同时可以扮演上述多个角色
OSPF LSA Types
一些LSA的类型如下:
类型1:router LSA
类型2:network LSA
类型3/4:summary LSA
类型5:AS external LSA
类型6:multicast OSPF LSA,使用在OSPF多播应用程序里
类型7:使用在Not-So-Stubby area(NSSA)里
类型8:特殊的LSA用来连接OSPF和BGP
类型9/10/11:opaque LSA,用于今后OSPF的升级等
LSA类型1(router LSA),如下
类型1的LSA只在一个area里传播,不会穿越ABR.描述了和路由器直接相连的链路集体状态信息.RID鉴别类型1的LSA,LSA描述了链路的网络号和掩码(即link ID).另外类型1的LSA还描述了路由器是否是ABR或ASBR
类型1的LSA不同的链路类型的link ID如下:
1.point-to-point的link ID是邻居的RID
2.transit network的link ID是DR的接口地址
3.stub network的link ID是IP网络号
4.virtual link的link ID是邻居的RID
LSA类型2(network LSA),如下
类型2的LSA只在一个区域里传播,不会穿越ABR.描述了组成transit network的直连的路由器.transit network直连至少2台OSPF路由器.DR负责宣告类型2的LSA,然后在transit network的一个area里进行洪泛.类型2的LSA ID是DR进行宣告的那个接口的IP地址
LSA类型3(summary LSA),如
类型3的LSA由ABR发出.默认OSPF不会对连续子网进行汇总.可在ABR上进行人工设定启用汇总.类型3的LSA可以在整个AS内进行洪泛
LSA类型4(summary LSA),如
类型4的LSA只使用在area里存在ASBR的时候,类型4的LSA鉴别ASBR和提供到达ASBR的路由.类型4的LSA只包含了ASBR的RID信息.类型4的LSA由ABR生成,并在整个AS里进行洪泛
LSA类型5(external LSA),如
类型5的LSA描述了到达外部AS的路由,由ASBR生成并在整个AS内洪泛
Interpreting the OSPF LSDB and Routing Table
使用show ip ospf database来查看OSPF的LSDB信息
一些route designator如下:
1.O:代表OSPF area内(intra-area)路由,为router LSA
2.O IA:在一个AS里的area之间(inter-area)的路由,为summary LSA
3.O E1/O E2:AS外路由,为external LSA
SPF算法根据LSDB运算出SPF树来决定最佳路径,步骤如下:
1.所有在各自的area里的路由器计算出最佳路径并放进路由表里,为LSA类型1和类型2.用O来标记
2.area之间的路由器计算出最佳路径,这些最佳路径是area间路由条目,或LSA类型3和LSA类型4.用O IA来标记
3.所有的除了stub area的路由器计算出到达外部AS的最佳路径(LSA类型5),标记为O E1或O E2
O E1和O E2的区别为是到达外部网络,前者要加内部cost,后者不加,如下图:
一般只有一个ASBR宣告到达外部AS的外部路由的时候,就使用O E2(O E2为默认类型);如果有多个ASBR宣告一条到达同一个外部AS的外部路由的时候,就应该使用O E2
Changing the Cost Metric
默认情况下,Cisco根据100Mbps/bandwidth来计算metric,比如Kbps链路的metric约为1562,T1的为,100Mbps的链路为1.当链路速率大于100Mbps的时候,应该在OSPF进程下使用如下命令:
RouterA(config-router)#auto-cost reference-bandwidth
在接口自定义cost的命令如下:
RouterA(config-if)#ip ospf cost [value]
这条命令将使得超越默认的cost计算,具有更高的优先权.value范围为1到65535.值越低,就越优先采用该接口
OSPF Route Summarization Concepts
OSPF路由汇总可以减少路由表条目,减少类型3和类型5的LSA的洪泛,节约带宽资源和减轻路由器CPU负载,还能够对拓扑的变化本地化
OSPF路由汇总的两种类型如下:
1.inter-area(IA) route summarization:发生在ABR上
2.external route summarization:发生在ASBR上
Configuring Route Summarization
因为OSPF是基于无类的路由协议,它不会进行自动汇总.手动在ABR上做IA route summarization的命令如下:
Router(config-router)#area [area-id] range [address] [mask]
在ASBR上做external route summarization的命令如下:
Router(config-router)#summary-address [address] [mask] [not-advertise] [tag tag]
如下图就是一个ASBR上的external route summarization的例子:
R1(config-router)#network 172.16..1 0.0.0.0 area 1
R1(config-router)#summary-address 172.16.32.0 255.255.224.0
Default Routes in OSPF
OSPF路由器默认不会产生默认路由到一般性的area里,但是可以通过相关命令启用默认路由.默认路由作为LSA类型5出现在LSDB中
创建OSPF默认路由的命令如下:
Router(config-router)#default-information originate [always] [metric value] [metric-type type-value] [route-map map-name]
参数always是不管路由表里是否存在默认路由,都会宣告一条默认路由0.0.0.0
metric value是指定默认路由的metric,默认为10
type-value可以为1或者2.1为O E1,2为O E2,默认是2
route-map map-name是如果满足route map的话就产生默认路由
R1(config)#router ospf 100
R1(config-router)#netw 10.1.1.1 0.0.0.0 area 0
R1(config-router)#default-information originate metric 10
R2(config)#router ospf 100
R2(config-router)#netw 10.2.1.1 0.0.0.0 area 0
R2(config-router)#default-information originate metric 100
Types of OSPF Areas
一些OSPF area的类型如下:
1.standard area:接收链路更新,路由汇总和外部路由
2.backbone area(transit area):标记为area 0,拥有standard area的一切属性
3.stub area:不可以包含ASBR.不接收外部路由信息(LSA类型5),如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是可以减少路由表的条目.stub area没有虚链路(virtual link)穿越它们
4.totally stubby area:Cisco私有,不接收外部路由信息和路由汇总信息(LSA类型3,4和5).不可以包含ASBR.如果要到达外部AS的话就使用标记为0.0.0.0的默认路由.好处是最小化路由表条目
5.not-so-stubby area(NSSA):NSSA是OSPF RFC的补遗.定义了特殊的LSA类型7.提供类似stub area和totally stubby area的优点,可以包含的有ASBR
Stub Area Configuration
stub area的配置命令如下:
RouterA(config-router)#area [area-id] stub
所有在stub area里的路由器必须都使用stub命令,
R3(config)#router ospf 100
R3(config-router)#netw 192.168.14.0 0.0.0.255 area 0
R3(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R3(config-router)#area 2 stub
R4(config)#router ospf 10
R4(config-router)#netw 192.168.15.0 0.0.0.255 area 2
R4(config-router)#area 2 stub
如上是把area 2配置为stub area,R3做为ABR自动向area 2(stub area)宣告一条metric为1的默认路由0.0.0.0
Totally Stubby Area Configuration
totally stubby area的配置命令如下:
RouterA(config-router)#area [area-id] stub no-summary
ABR默认宣告一条metric为1的默认路由到totally stubby area,修改这个metric的命令如下:
RouterA(config-router)# area [area-id] default-cost [cost]
R3(config)#router ospf 100
R3(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R3(config-router)#area 1 stub
R4(config)#router ospf 50
R4(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R4(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R4(config-router)#area 1 stub no-summary
R4(config-router)#area 1 default-cost 10
R4(config)#router ospf 50
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R2(config-router)#netw 130.135.0.0 0.0.255.255 area 0
R2(config-router)#area 1 stub no-summary
R2(config-router)#area 1 default-cost 5
如上,默认路由将选用R2上的,因为R2的metric更低
Not-So-Stubby Areas
之前说过stub area和totally stub area不可以包含的有ASBR,但是假如你想使用ASBR,又想使其具有stub area和totally stub area的优点(减少路由表条目)的话,就可以采用NSSA,如下图:
[img:b61272a7a61272a7ab]
RIP经过再发布(redistribution)到NSSA以后,NSSA的ASBR将产生只存在于NSSA中的LSA类型7,然后ABR将LSA类型7转换成LSA类型5
NSSA的配置命令为在OSPF进程下使用area [area-id] nssa,所有位于NSSA里的路由器都要使用这条命令.
R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa default-information-originate
使用default-information-originate参数创建一条area 0到NSSA的默认路由.并且类型5的LSA将不会进入NSSA(类似stub area)
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa
还可以将NSSA配置成具有totally-stub的特性,如下:
R1(config)#router ospf 100
R1(config-router)#redistribute rip subnets
R1(config-router)#default metric 150
R1(config-router)#netw 130.130.0.0 0.0.255.255 area 1
R1(config-router)#area 1 nssa
R2(config)#router ospf 100
R2(config-router)#summary-address 150.150.0.0 255.255.0.0
R2(config-router)#netw 130.130.20.0 0.0.0.255 area 1
R2(config-router)#netw 130.130.0.0 0.0.255.255 area 0
R2(config-router)#area 1 nssa no-summary
这样类型3,4和5的LSA将不会进入NSSA,no-summary参数只应用在ABR上就可以了,NSSA里的其他路由器只需使用area 1 nssa
The show Commands for Stub and NSSA
一些验证性命令如下:
show ip ospf:显示area类型
show ip ospf database:显示LSA类型7
show ip ospf database nssa-external:显示LSDB中每条类型7的LSA的信息
show ip route:显示标记为O N1/N2的NSSA路由条目(默认为O N2)
Defining an OSPF Virtual Link
虚链路一般是做为备份连接或者是临时连接
虚链路的配置命令如下:
Router(config-router)#area [area-id] virtual-link [RID]
一些其他可选参数如下:
authentication [message-digest|null]:指定验证方式为MD5加密还是明文口令
hello-intervals [second]:定义hello包发送时间间隔,默认为10秒
÷
R2(config)#router ospf 100
R2(config-router)#netw 10.3.0.0 0.0.0.255 area 1
R2(config-router)#netw 10.7.0.0 0.0.0.255 area 3
R2(config-router)#area 1 virtual-link 10.3.10.5
注意上面的RID,是指定虚链路中对方的RID,R1的配置如下:
R1(config)#router ospf 200
R1(config-router)#netw 10.2.3.0 0.0.0.255 area 0
R1(config-router)#netw 10.3.2.0 0.0.0.255 area 1
R1(config-router)#area 1 virtual-link 10.7.20.123
注意area-id都为area 1,因为area 1做为虚链路的transit area
使用show ip ospf virtual-links命令验证虚链路的配置
