精华内容
下载资源
问答
  • BGP路由配置与管理 BGP是个复杂而又庞大的距离矢量类型动态路由协议,涉及非常复杂的配置。与RIP、OSPF、IS-IS路由协议属于内部网关协议(IGP)不同,BGP路由协议属于外部网关协议(EGP)。BGP本身不产生路由,而是...

    BGP路由配置与管理

    BGP是个复杂而又庞大的距离矢量类型动态路由协议,涉及非常复杂的配置。与RIP、OSPF、IS-IS路由协议属于内部网关协议(IGP)不同,BGP路由协议属于外部网关协议(EGP)。BGP本身不产生路由,而是通过引入其他类型的路由在对等体中间传播的。所以BGP路由协议解决的不再是同一AS不同路由器之间的选路问题,而是解决不同AS之间的选路问题(也可在同一AS内部路由器上运行,称之为IBGP),这也正是BGP路由协议广泛应用于广域网的根本原因。

    BGP基础

    BGP(Border Gateway Protocol,边界网关协议)是一种实现AS(自治系统)之间路由的距离矢量性动态路由协议。

    一、BGP简介

    1982年,EGP被用于在AS之间动态交换路由信息,但EGP只发布网络可达的路由信息,不对路由信息进行优选,同时没有考虑环路避免等问题。

    BGP是用于取代最初的EGP而设计的另外一种外部网关协议。BGP能够进行路由优选、避免路由环路、更高效的传递路由和维护大量的路由。早期发布3个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)、BGP-3(RFC1267)。1994年使用BGP-4(RFC1771);2006年之后单播Ipv4网络使用的版本是BGP-4(RFC4271),其他网络使用的版本是MP-BGP(RFC4760);再后来BGP-4+提供了对IPv6单播网络的支持,用于控制IPv6单播网络中路由的传播和选择。

    在BGP视图下的配置将对BGP-4、BGP-4+和MP-BGP同时生效,缺省情况下,在BGP IPv4单播地址族视图下配置的命令也可在BGP视图下直接配置,但只对BGP4生效。

    虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP。在一些网络出口比较单一的AS边界,可以用更为简单的静态路由来配置。

    1、BGP中的AS

    AS是指在一个组织机构管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配了一个唯一的AS号,用于区分不同的AS。BGP中的AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1~65535的整数,4字节AS号范围为1~4294967295的整数,属于扩展AS号。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。

    2、BGP分类

    BGP按照运行方式分为EBGP(External/Exterior BGP,外部BGP)和IBGP(Internal BGP,内部BGP)。


        ①EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发来的路由时,会将路由信息AS_Path列表中带有本地AS号的路由丢弃。

        ②IBGP:运行于同一AS内部的BGP称为IBGP。为防止AS内产生环路,BGP设备不将从IBGP对等体学习到的路由发布给其他IBGP对等体。缺省需要与所有IBGP对等体建立全连接才能实现AS内部各IBGP设备间的路由互通。为了解决现实网络中多数情况下AS内部各IBGP设备间很难实现全连接的问题,BGP提供了“路由发射器”和“联盟”两种解决方案。

    如果在AS内一台BGP设备收到EBGP对等体发送的路由后,需要通过另一台BGP设备将该条路由信息传播给其他AS时,则建议将这两台BGP设备配置运行IBGP。如上图,位于AS200中的R1收到EBGP对等体R3发送的路由后,希望把这条路由信息通过R2传播到AS300中,所以R1与R2要配置为运行IBGP。实际上就是让他们成为IBGP对等体。由此可见IBGP对等体不一定就是直接连接的。

    3、两种BGP报文交互角色

    BGP报文交互中分为Speaker和Peer两种角色。

    ①Speaker:发送BGP报文的设备称为BGP Speaker(发言者)。它接收或产生新的报文信息,并发布给其他BGP Speaker。Speaker角色是针对具体报文发送过程而言的,网络中每台BGP路由器均可成为自己发送BGP报文的Speaker。

    ②Peer:相互交换报文的Speaker之间互称Peer(对等体)。多个相关的对等体可以构成对等体组(PeerGroup),然后可以为这个对等体组进行集中配置。

    4、BGP的路由器ID(RouterID)

    与OSPF一样,BGP也是采用RouterID(路由器ID)来标识一个BGP设备的。路由器ID会在BGP会话建立时发送的Open报文中携带,也是一个32位值,通常是IP地址的形式。在对等体之间建立BGP会话时,每台BGP设备都必须有唯一的路由ID,否则对等体之间不能建立BGP连接。

    在整个BGP网络中,每台BGP设备的路由器ID必须唯一,可采用手动配置,也可让BGP自己在设备上选取。在没有手动配置路由器ID的缺省情况下,BGP选择设备上的Loopback接口的IP地址作为BGP的路由器ID。否则选择设备上物理接口中最大的IP地址作为BGP的路由器ID。一旦选出路由器ID,除非发生接口地址删除等事件,否则即使配置了更大的接口IP地址,也会保持原来的路由器ID。

    二、BGP AS

    BGP的AS用于将整个外部网络划分为一个个应用本地路由策略的路由子域,这样公司通过BGP可以简化路由域管理和统一策略配置,因为一个BGP设备可以连接多个AS。在BGP设备连接的每个AS中可以支持多种不同的路由协议,但BGP本身不产生路由,需要通过引入各种IGP路由、直连路由和静态路由来实现与各个子网络的连接。不同的BGP AS中的BGP路由器间需通过EBGP对等会话动态交换路由信息;同一个AS内部的BGP路由器间通过IBGP对等会话交换路由信息。

    因为BGP主要用于基于Internet这样的公网连接,所以它的AS又与仅应用于公司内部网络的AS不一样,在公网中使用的AS(称之为“公用AS”)必须是在公网注册,并由ISP统一分配,且在整个Internet中都是唯一的,就像公网IP地址一样。

    RFC5398中规定,在1~64511间的2字节AS号是公网AS,64512~65534之间的2字节AS号是私网AS(AS号65535是保留用于特定用途的)。私有AS号可以用于内部路由域,但不能传输到达Internet的通信,不要配置通告私有AS号到外部网络。


    上图说明了在分隔AS中的两个路由器可以通过EBGP协议进行连接。RouterA和RouterB是两个使用公用AS号的独立路由子域上的ISP路由器。这两个路由器通过Internet来传输通信。RouterA和RouterB是通过EBGP对等会话进行连接的。每个直接连接Internet的公用AS各自分配一个由ISP提供的AS号,用于标识BGP进程和AS。

        1、BGP AS号格式

    在2009年1月之前,RFC4271 BGP-4中使用的AS号是一个2字节数,取值在1~65535范围之间。IANA从2009年1月开始在RFC5396中定义了4字节的AS号,取值范围从65536~4294967295。AS有以下两种表示格式:

    (1)Asplain AS(无格式AS)

    Asplain AS号格式是一个普通的十进制整数,可以是2字节的,也可以是4字节的,不同长度仅代表As编号的取值范围不同,是BGP缺省的AS号格式。

    (2)Asdot AS(点分AS)

    Asdot AS格式AS号是一个点分记数法所表示的十进制数。它规定:如果是2字节的AS号(最大值为65535),则直接用它的十进制整数表示;如果是4字节的AS号,则采用点分计数法表示。点分记数法的计算方法是先把这个十进制AS号转换成二进制,然后从右向左每16为(2字节)分成一段,在两段之间以小圆点分隔,再将这两段分别换算成十进制。

    尽管可以任意使用Asplain格式或者Asdot格式4字节AS号,但在display命令的输出中,或者在正则表达式中仅显示或控制一种格式。


    2、保留的AS号

    在RFC4893 BGP-4标准中,支持由2字节AS向4字节的过渡。但这个标准中新增了保留的AS号23456.后来又在新的RFC5398标准中规定了新的保留AS号,它们是在64496~64511之间的2字节AS号和在65536~65551之间的4字节AS号。

    三、BGP地址族

    最初BGP-4标准仅支持IPv4网络,为解决BGP对多种网络层协议的支持,IETF对BGP-4进行了地址族能力扩展,形成MP-BGP(Multi-Protocol BGP,多协议BGP),使BGP能够为多种网络应用提供路由信息。在RFC4760(Multiprotocol Extensions for BGP-4)中,定义了两个新的可选非过度属性(“非过度属性”就是该属性不能传递到其他设备上,仅在本地设备上使用),BGP的多种协议扩展都用到了这两个属性。

    ①扩展协议可达NLRI(MP_REACH_NLRI,属性类型14)。

    ②扩展协议不可达NLRI(MP_UNREACH_NLRI,属性类型15)。

    这两种属性适用于所有BGP协议扩展。为了对不同的扩展类型进行区分,在这两种属性中都携带了BGP地址族(Address Family)和子地址族(Sub-Address Family)信息。所谓“地址族”就是一种网络层协议(如TCP/IP网络中的IPv4、IPv6,以及OSI网络中的CNLS)配置模块,简单说就是把不同类型的网络分块进行配置。其目的就是把针对运行不同网络层协议的网络分别进行功能配置,这样配置起来就更加有条理,因为这些不同网络层协议的地址格式的应用需求或许根本不一样。

    为了进一步区分同一类型网络中不同类型的网络应用(如IPv4和IPv6网络中都有单播、组播、VPN等),又可在地址族下划分子地址族。“地址族”使用AFI(Address Family Identifier,地址族标识符)进行标识,对应的子地址族为SAFI(Subsequent AddressFamily Identifier,子序列地址族标识符)。

    目前在IP网络中,MP-BGP主要包括4个地址族:IPv4、IPv6、L2VPN和VPLS地址族。在IP地址族下又有IPv4单播、IPv4组播、IPv4 VPN、IPv4 MPLS和IPv4 MDT子地址族等,IPv6地址族下有IPv6单播和IPv6组播子地址族等。


    BGP报文类型及格式

       BGP-4协议有5种报文:Open(建立)、Update(更新)、Notification(通知)、Keepalive(保持活跃)和Route-refresh(路由刷新)。


    各字段解释:

    ①Marker:占16字节,用于标明BGP报文边界,固定值为所有比特均为“1”,相当于一个报文的头部标识符。

    ②Length:占2字节,标识BGP报文总长度(包括报头在内),以字节为单位。

    ③Type:占1字节,标识BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息。

        一、Open报文格式

       Open(建立)是TCP连接建立后发送的第一个报文,包含本地Speaker信息以及用于后面对等体间建立TCP会话的信息,用于建立BGP对等体之间的连接关系。报文格式如下:


    Open报文中的各字段信息必须在对等体之间进行路由信息交换之前协商确定好。

    ①Version:标识本地设备使用的BGP版本,占1字节。对BGP-4,其值为4。

    ②My autonomous system:标识本地AS号,占2字节或4字节。通过比较两端的AS号可以确定是EBGP连接(不同时)还是IBGP连接(相同时)。

    ③Hold time:标识对等体与本设备保持连接的时间,占2字节,以秒为单位。在建立对等体关系时两端要协商Holdtime,并保持一致。如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP连接中断。

    ④BGP identifier:标识BGP路由器的路由器ID,占4字节,采用点分十进制格式的IP地址的形式,用来识别BGP路由器。

    ⑤Opt Parm Len(Optional Parameters Length):可选参数的长度,占1字节,标识可选参数的总长度,如果为0则没有可选参数。

    ⑥Optional Parameters:可选参数,长度可变,用于多协议扩展(Multiprotocol Extensions)等功能,如BGP验证信息。

    二、Update报文格式

    在BGP对等体之间成功建立了BGP会话后,双方就可以开始利用Update(更新)报文进行路由信息交换了,包括要向对等体通告的每条路由信息。但Update报文既可以发布可达路由信息,也可以撤销不可达路由信息。


    一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer ReachableInformation,网络层可达信息)字段中,PathAttributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由信息,被撤销的路由放在Withdrawn Routes字段中,用来通知对等体要撤销的路由。

    ①Unfeasible routeslength:标识不可达路由(Withdrawnroutes)字段的长度,占2字节,以字节为单位,包含通知对等体从它的BGP路由表中要撤销的当前不可达路由的数量。如果为0则说明没有要撤销的路由,也就没有下面的Withdrawn routes字段。

    ②Withdrawn routes:不可达路由列表,长度可变,包含要从对等体BGP路由表中撤销的当前不可达路由的网络地址及前缀。

    ③Total path attributelength:标识路径属性(Path attributes)字段的长度,占2字节,以字节为单位。如果为0则说明没有下面的Path attributes字段。

    ④Path attributes:与NLRI字段相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成,可变长度。BGP正是根据这些属性值来避免环路,进行选路、协议扩展等。

    ⑤NLRI(Network Layer Reachability Information):标识网络层可达信息,包含要向对等体通告的每条可达路由的前缀,长度可变。这些可达路由信息来自本地Adj-RIB-In(AdiacentRouting Information Base,Incoming,入方向邻接路由信息库),然后又将加入到对端Adj-RIB-In中。

    三、Notification报文格式

    当BGP检测到错误状态时,就会向对等体发出Notification(通知)报文,之后BGP连接会立即中断。


    ①Error code:差错码,占1字节,指定错误类型。

    ②Error subcode:差错子码,占1字节,描述错误类型的详细信息。

    ③Data:错误消息内容,可变长度,用于辅助发现错误的原因。内容依赖于具体的差错码和差错子码,记录的是出错部分的数据。

    四、Keepalive报文格式

    BGP会周期性的向对等体发送Keepalive(保持活跃)报文,用来保持对等体连接的有效性。报文格式仅包含BGP报头,没有附加其他任何字段。

    五、Route-refresh报文格式

    Route-refresh(路由刷新)报文用来要求对等体重新发送指定地址族的路由信息。


    ①AFI:Address Family Identifier,地址族标识,占2字节,用于标识所采用的地址族类型。

    ②Res:保留,1字节,必须为0。

    ③SAFI:subsequent Address Family Identifier,子地址族标识,1字节,用于标识子地址族类型。

    BGP的主要路由属性

    BGP路由属性是随着通过Update报文发送的BGP路由信息一起发布的一组参数。它对特定的路由进行了进一步的描述,使得路由接收者能够根据路由属性值对路由进行过滤和选择。它们可以被看做选择路由的度量(metric)。

    一、BGP路由属性分类

    BGP路由信息包括许多属性,总体分为4类:

    ①公认必须遵循(Well-know mandatory):所有BGP设备都可以识别此类属性(这就是“公认”的含义),且必须在Update报文中存在(这就是“必须遵循”的含义),否则对应的路由信息就会出错。

    ②公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中(这就是“任意”的含义),即就算缺少这类属性,路由信息也不会出错。

    ③可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,仍然会接收这类属性(这就是“可选”的含义),且可将该属性通告给其他对等体(这就是“过渡”的含义)。

    ④可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,也会接收这类属性,但在接收时忽略该属性,不会将该属性通告给其他对等体(这就是“非过渡”的含义),即仅在本地路由器上使用。


    二、ORIGIN(源)属性

    Origin属性公认必须遵循(就是所有BGP路由器都可识别,且必须在Update报文中存在)的BGP路由属性,用来标记一条BGP路由的路由信息源类型,指明了当前BGP路由是从哪类设备中产生的。有以下三种类型:

    ①IGP(i):是IBGP设备通过network命令通告的路由,是本AS内产生的路由,优先级最高。

    ②EGP(e):是从EGP对等体那里学习得到的路由,优先级次之。

    ③incomplete(?):优先级最低,是通过其他方式学习到的路由信息,比如BGP通过import-route命令引入的外部路由。但它并不是说明路由不可达,而是表示路由的来源无法确定。

    三、AS_PATH属性

    AS_Path(AS路径)属性也是公认必须遵守的BGP路由属性。AS_PATH属性按矢量(所谓“矢量”就是带有方向性的变量)顺序记录了某条路由从本地到达目的地址所经过的所有AS号,即“AS路径列表”的含义。AS路径列表可以理解为一个小括号里面包括所经过的AS号,各AS号间以逗号分隔,且离本地设备越近的AS编号越在前面(小括号的左边),如(200,400,100)表示该路由经过了AS200、AS400、AS100三个AS,其中AS200离本地设备最近,AS100离本地设备最远,也即路由的源AS。

    通过观察路由的AS_Path属性,BGP设备可以找出该路由是从哪个AS产生的,以及该路由在传递过程中经过了多少AS。AS路径最右边的AS号就是路由的产生者(即源AS),最左边的AS号就是刚刚声明该路由的那个相邻的AS。处于AS_Path中间的AS号是路由传递经过的AS。这样的AS_Path序列被称为AS_Sequence。

    当BGP路由器在通告路由信息时,遵循以下原则:

    (1)当BGP Speaker通告自身引入的路由时

    ①当BGP Speaker将这条路由发布到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS路径列表。

    ②当BGP Speaker将这条路由发布给IBGP对等体时,便会在Update报文中创建一个空的AS路径列表。

    (2)当BGP Speaker通告从其他BGP Speaker的Update报文中学习到的路由时

    ①当BGP Speaker将这条路由发布给EBGP对等体时,便会把本地AS编号添加在AS路径列表的最前面(最左面)。收到此路由的BGP设备根据AS-Path属性就可知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。

    ②当BGP Speaker将这条路由发布给IBGP对等体时,不会改变这条路由相关的AS_Path属性。


    如上图,有两条从AS 50区域中路由器到达目的网络8.0.0.0的路由,根据箭头所示的路由发布方向(路由发布方向是到达目的地址的路由路径的反方向)可看出,在AS_Path列表中依次添加了所经过的AS号,并且是最近的处于最前面,其他AS号按顺序依次排列,中间以逗号分隔。如最后D=8.0.0.0(30,20,10)和D=8.0.0.0(40,10)。

    缺省情况下,BGP不会接受AS_Path中已包含本地AS号的路由,从而避免了环路形成,与RIP的水平分割特性功能类似。也就是只有在EBGP对等体之间通告路由时才会在AS路径列表中添加AS号,同一个AS中的通告不会添加AS号。如果某台BGP路由器从其外部对等体收到某条路由的AS路径列表中包含了自己的AS号,则该路由器就知道出现了环路,因而将丢弃该路由。

    同时,AS_Path属性也可用于路由的选择和过滤。在其他因素相同的情况下,BGP会优先选择路径较短的路由。如上图,AS50中的BGP路由器会优先选择经过AS40的路径作为目的地址8.0.0.0的最优路由。

    在某些应用中,还可以使用路由策略来人为增加AS路径长度,以便更灵活控制BGP路由路径的选择。通过配置AS路径过滤列表,还可针对AS_Path属性中所包含的AS号来对路由进行过滤。

    四、NEXT_HOP属性

    Next_Hop(下一跳)属性也是公认必须遵守的BGP属性。因为BGP主要用于AS间网络的连接,所以它的“下一跳”仅是针对不同AS中的EBGP对等体间的路由发布而言的,是指下一个AS,而不是指下一个路由器,因为在IBGP对等体间的路由发布中其下一跳属性是不会改变的。

    动态路由(包括RIP、OSPF、IS-IS和BGP)的“下一跳”都是针对接收路由信息的设备而言的,而不是针对发送路由信息而言的,因为路由中的目的地址所在网络总是在通告路由的路由器之前,即路由自身的路径与路由被通告的路径是相反的。另外,无论是EBGP对等体,还是IBGP对等体,不一定都是直接连接的,非直接连接的BGP路由器之间也可建立EBGP或者IBGP对等体连接。

    通常情况下,Next_Hop属性遵循下面的规则:

    ①BGP Speaker在向EBGP对等体发布(包括转发)某条路由时,会把该路由信息的下一跳属性修改为本地与对端建立EBGP对等体连接关系的出接口IP地址

    如下图14-9图,AS100路由器产生到达8.0.0.0网络的路由并发布给AS200路由器时,下一跳地址就是AS100路由器与AS200路由器连接时所用的出接口IP地址1.1.1.1/24。

    再次解释一下为什么该路由的下一跳会变成发送路由发布的AS100中的路由器的出接口IP地址1.1.1.1/24。因为对于接收这条路由的AS200中的路由器来说,它到达1.1.1.1/24的路由方向其实就是由AS100中的路由器向他自己通告这条路由的反方向(也就是图中箭头方向的反方向),而在这个反方向中的下一跳正好就是AS100中的路由器的出接口。

    同理,AS200向AS300中左边那台路由器转发从AS100得到的路由发布时,其路由的下一跳地址为AS200与AS300中左边那台路由器相连时所用的出接口的IP地址1.1.2.1/24。


    ②BGP Speaker将本地始发的路由(也就是这条路由的目的网络就是直接连接在该BGP Speaker上)发布给IBGP对等体时,也会把该路由信息的下一跳属性设置为本地与对端建立IBGP邻居关系的出接口IP地址。但是收到该IBGP路由的IBGP对等体不会再转发给其他的IBGP对等体,这是为了避免在AS内部出现路由环路。即BGP Speaker从IBGP对等体获得的IBGP路由不再向其他IBGP对等体发布。

    ③BGP Speaker在向IBGP对等体转发从EBGP对等体学习到的路由时,不改变该路由信息的下一跳属性(但通过配置也改为转发路由的BGP设备的出接口IP地址),但收到转发的EBGP路由的IBGP对等体可以再转发给其他IBGP对等体且如果配置了负载分担,路由被发给IBGP对等体时则会修改其下一跳属性

    如上图,AS300左边那台路由器转发从AS200获得的路由发布到相同区域中的右边那台路由器时,其下一跳没有改变,仍为AS200与AS300中左边那台路由器相连时所用的接口的IP地址1.1.2.1/24。

    五、LOCAL_PREF属性

    Local_Pref(本地优先级)属性是公认任意(所有BGP路由器都可识别,但可以不在Update报文中存在)的BGP属性,表明BGP路由器自身(不是针对具体路由)的BGP优先级(Local_Pref属性值越大,优先级越高),用于判断流量离开本地AS时的最佳路由。路由器配置了Local_pref属性后,本路由器上所有的BGP路由都具有相同的本地优先级。

    当一个AS内部的BGP的设备通过得到不同的IBGP对等体到达位于其他AS中的相同目的地址,但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间交换和比较,不通告给其他AS

    如下图,在RouterD上学习到了两条通过同一AS中的IBGP路由器路径到达RouterA的路由,这时就可以使用本地优先级进行选路了,经过比较最终确定选择RouterC作为从AS20到AS10的出口(如虚箭头方向),因为RouterC中的Local_Pref属性值为200,高于RouterB中的Local_Pref属性值100。


    六、MED属性

    MED(多出口)属性是一个可选非过渡(不要求在Update必须存在,且不可向其他对等体通告)属性,用于EBGP对等体判断流量进入其他AS时的最优路由

    MED属性仅在相邻两个AS之间交换,收到此属性的AS一方不会再将其通告给任何其他第三方AS。当一个BGP路由器通过不同的EBGP对等体得到目的地址相同,但下一跳不同的多条路由时,在其他条件相同的情况下,将优先选择MED值较小者作为进入EBGP对等体所在AS的最优路由,即MED值越小,优先级越高


    如上图,从AS10到AS20的流量将选择RouterB作为入口(虚箭头方向),因为RouterB中的MED值为0,小于RouterC中的MED值100。

    一般情况下,EBGP路由器只比较来自同一个其他AS中多个EBGP对等体路径的MED属性,不比较来自不同AS的MED值。若非要比较的话,则可以通过手动配置强制BGP比较来自不同AS的路由的MED属性值。如果路由器没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

    七、团体属性

    Community(团体)属性是一个可选过渡(不要求在Update必须存在,但可向其他对等体通告)的BGP属性,是一组有相同特征的目的地址的BGP路由集合,用来简化路由策略的应用和降低维护管理的难度,因为这样可以为团体中的路由成员一次性配置相同的参数属性和路由策略,也可通过团体属性进行路由过滤。而且,团体中具体集合的路由数量没有物理上的边界,与其所在的AS无关,也就是可以是不同AS路径的路由。

    BGP团体属性可分为基本团体属性和扩展团体属性两种:

    1、基本团体属性

    基本团体属性的“Type code”(类型代码)字段值是8,属性取值占32位,可以解析为一个十进制数,也可解析为aa:nn的格式,各占16位。32位团体属性值中0x00000000~0x0000FFFF和0xFFFF0000~0xFFFFFFFF被保留。RFC1997中规定,前16位表示路由的源AS号,后16位可以理解为源AS划分的子AS号,也可用来标识路由来自不同的IGP路由类型,或者其他属性,如本地优先级值、MED属性值等,应用非常灵活。

    RFC1997还规定了以下几种公认的基本团体属性:

    ①INTERNET:缺省情况下,所有的路由都属于INTERNET团体。具有此属性的路由可以被通告给所有的BGP对等体。

    ②NO_EXPORT(属性值为十进制的4294967041,或者十六进制的0xFFFFFF01):具有此属性的路由在被收到后,不能被发布到本地AS之外。如果使用了联盟(Confederation),则不能被发布到BGP联盟之外,但可以发布给联盟中的其他子AS。

    BGP联盟其实就是一个AS下面的子AS划分,满足一些较大企业用户需要多个AS,但又想进行集中路由域管理的需求。这样在一个大的组织机构划分多个子网络管理区域,每个子区域独立分配成为1个子AS,可以减少同一个AS中BGP路由的数量,提高了路由和管理效率。

    ③NO_ADVERTISE(属性值为十进制的4294967042,或者十六进制的0xFFFFFF02):具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。

    ④NO_EXPORT_SUBCONFED(属性值为十进制的4294967043,或十六进制的0xFFFFFF03):具有此属性的路由被接收后,不能被通告到本地AS之外,也不能通告到联盟中的其他子AS。

    2、扩展团体属性

    因为团体属性的使用越来越丰富,原有的32位定义已经不能满足各种应用,所以应运而生了扩展团体属性。扩展团体属性使用了新的“Type code”(为16)格式。比起原来的基本团体属性,扩展团体属性提供了更长的取值范围(占64位),以减少冲突的可能;同时,还增加了一个Type字段,可以使得路由策略直接基于扩展团体属性的Type字段进行操作。相当于将一些原来需要通过复杂的团体属性配置才能实现的功能,直接添加到了扩展团体属性的结构中。

    路由反射器与联盟

    在BGP中,为了防止路由环路的出现,对于EBGP路由和IBGP路由分别作了如下规定:

    ①对于AS之间学习到的EBGP路由,通过AS_Path属性记录途经的AS路径,规定在收到带有本地AS号的路由将被直接丢弃。

    ②对于AS内部学习到的IBGP路由,规定在收到路由后禁止向其他IBGP对等体发布。也就是IBGP对等体之间仅能学习到对等体(IBGP的对等体可以不是直接连接的)之间的路由,不能学习到非邻居之间的路由

    从上可看出,IBGP设备之间只有对等体之间可以相互学习到路由,这样就带来一个问题,即非IBGP对等体之间不能彼此交互路由信息,变成路由不可达了。为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。即假设在一个AS内部有n台设备,那么建立的IBGP连接数就是n*(n-1)/2。这样一来,当一个AS中的BGP设备很多时,设备配置将十分复杂且消耗网络和CPU资源。

    为解决以上问题,BGP提供了两种解决方案:一个是在IBGP对等体间使用路由反射器(Route Reflector,RR),另一个就是联盟(Confederation)。

    一、路由反射器

    在RR技术中,为一个AS内部的各IBGP设备定义了以下几种角色:

      ①路由反射器(RR):允许把从IBGP对等体学习到的路由反射到其他IBGP对等体,与OSPF网络中的DR(指定路由器)或者IS-IS网络中的DIS(指定IS)类似。

    ②客户机(Client):与RR形成反射邻居关系的IBGP设备,类似于OSPF中的DROther,或者IS-IS网络中的DISOther。在AS内部,客户机只需要与RR直连,彼此交换路由信息,客户机之间无需直接连接,也无需交换路由信息。

    ③非客户机(Non-Client):既不是RR,也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系

    ④集群(Cluster):路由反射器及其客户机的集合,通过专门的Cluster_List属性可以防止集群间产生路由环路。

    ⑤始发者(Originator):在AS内部始发IBGP路由的BGP设备。通过专门的Originator_ID属性可防止集群内产生路由环路。

    1、路由反射器原理

    在路由反射器技术中规定,同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。

    RR突破了“从IBGP对等体获得的BGP路由只能发布给它的EBGP对等体”的限制,并采用独有的Cluster_List属性和Originator_ID属性分别防止了集群之间和集群内部的路由环路出现。RR向IBGP邻居发布路由规则如下:

    ①从非客户机学习到的路由,发布给所有客户机

    ②从客户机学习到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。

    ③从EBGP对等体学习到的路由,发布给所有的非客户机和客户机。

    2、Cluster_List属性

    路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性来记录路由经过的所有集群的ClusterID,类似EBGP路由中所使用的AS_Path属性。具体流程如下:

    ①当一条路由第一次被RR通告时,RR会把本地Cluster ID添加到Cluster_List的前面。如果没有Cluster_List属性,RR就创建一个。

    ②当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster ID,则丢弃该路由;否则,将其加入Cluster_List,然后通告该更新路由。

    3、Originator_ID属性

    Originator_ID由RR产生,使用路由始发者的RouterID进行标识,用于防止集群内产生路由环路。具体流程:

    ①当一条路由第一次被RR通告时,RR将路由始发者的Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。

    ②当IBGP接收到这条路由的时候,将比较收到的Originator_ID和本地的RouterID,如果两个ID相同,则丢弃该路由,否则,接收该更新路由。

    4、备份路由反射器

    为增加网络可靠性,防止单点故障,需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以如果同一集群内存在多个RR,则它们之间中又可能存在环路,因此这里又规定,同一集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。


    如上图,路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。下面是备份路由反射器解决路由环路的具体流程:

        ①当客户机Client1从EBGP对等体接收到一条更新路由时,它将通过IBGP同时向RR1和RR2通告这条路由。

    ②RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster_List前面,然后向其他的客户机(Client2、Client3)通告。

    ③当Client2、Client3客户向RR1和RR2进行路由发布时,RR1和RR2有可能收到原来由自己向客户机通告的路由。这时RR1和RR2会检查路由发布中的Cluster_List,如果发现自己的ClusterID已经包含在通告路由的Cluster_List中,就丢弃该更新路由,从而避免了路由环路。

    5、多集群路由反射器

    一个AS中可以存在多个集群,各个集群的RR之间可以建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。在实际的RR部署中,常用的是分级RR场景。


    如14-14图所示,ISP为AS100提供Internet路由。AS100内部分为两个集群,其中Cluster1内的4台设备是核心路由器,采用备份RR的形式保证可靠性;而Cluster2内的两台设备是下级路由器,采用单RR结构。

    图14-15所示,一个骨干网被分成多个集群。各集群的RR间互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的RR建立IBGP连接,但所有RR和客户机都能收到全部路由信息。

    二、BGP联盟

    解决AS内部的IBGP网络连接激增问题,还可以使用联盟(Confederation)技术。

    联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍会认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处:一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和Next_Hop属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。

    如下图14-16,AS100使用联盟后被划分为3个子AS:AS65001、AS65002、AS65003,使用AS100作为联盟ID。此时IBGP的连接数量从10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。AS100外的BGP设备因为仅知道AS100的存在,并不知道AS100内部的联盟关系。


    联盟的缺陷是:从非联盟方案向联盟方案转变时,要求路由器重新进行配置,逻辑拓扑也要改变。



    展开全文
  • OSPF路由配置与管理 Ospf(开放式最短路径优先)是一个基于链路状态进行路由计算的动态路由协议,主要用于大中型网络。AR G3系列路由器支持OSPFv2和OSPFv3两种版本,OSPFv2仅支持IPv4,OSPFv3同时支持IPv4和IPv6。 ...

    OSPF路由配置与管理

    Ospf(开放式最短路径优先)是一个基于链路状态进行路由计算的动态路由协议,主要用于大中型网络。AR G3系列路由器支持OSPFv2和OSPFv3两种版本,OSPFv2仅支持IPv4,OSPFv3同时支持IPv4和IPv6。

    OSPF显著特点就是不仅可以在一台路由器上运行多种OSPF路由进程,还可把一个AS(自治系统)划分成多个不同的Area(区域),然后基于路由器的位置和功能划分多种不同的OSPF路由器类型和OSPF路由类型,同时支持不同类型网络的连接。OSPF是一种IGP(内部网关协议)类型动态路由协议,所以OSPF路由也只用于一个AS内部。OSPF是通过LSA(链路状态通告)报文进行路由信息交互,通过5种报文(Hello、DBD、LSR、LSU、LSAck)进行邻居和邻接关系的建立以及同一区域内部各路由器间的LSDB(链路状态数据库)信息的同步,最终形成统一的区域内拓扑数据库。

    OSPF基础

    OSPF(OpenShortest Path First,开放式最短路径优先)协议是IETF开发的一个基于链路状态的AS内部的IGP(内部网关协议),广泛应用在接入网和城域网中。

    一、OSPF的几个重要概念

    OSPF几个非常重要的基本概念:自治系统(AS)、区域(Area)、路由器类型和路由类型。首先,一台运行OSPF协议路由器中的每个OSPF进程必须指定一个用于标识本地路由器的RouterID(路由器ID)。RouterID是一个32比特无符号整数。在一个AS中每个路由器ID必须唯一,但同一路由器的不同进程中的路由器ID可以相同

    1、AS

    AS(自治系统)也就是通常所讲的“路由域”(Routing Domain),是由运行同一种路由协议并且被同一组织机构管理的一组路由器组成同一个AS中的所有路由器必须运行相同的路由协议,且必须彼此相互连接(中间不能被其他协议路由域所间断),分配相同的AS

    在OSPF网络中,只有在同一AS中的路由器才会互相交互链路状态信息;在同一个AS中,所有的OSPF路由器都维护一个相同AS结构描述(就是AS中各区域间的连接关系)的数据库。该数据库中存放的是路由域中相应链路的状态信息,OSPF通过这个数据库计算出其OSPF路由表。OSPF路由配置都是针对同一个AS内部的路由器之间进行配置的,不涉及不同AS之间的路由器间的路由。

    2、Area

    Area(区域)是OSPF的一个非常重要的特征,就是在一个AS内部划分的多个不同位置,或者不同角色的一组路由器单元,每个OSPF路由器只能在所属区域内部学习到完整的链路状态信息。在大型网络中,路由器非常多,如不进行区域划分,则整个网络中的所有设备都要彼此学习路由信息,最终路由信息数据库会很庞大。区域的划分也不是随意进行的,是根据这些路由器在网络中承担的作用和位置来划分的


    如上图为Area与AS之间的关系示意图,即一个AS中可以包括多个区域,不同的协议路由域使用不同的AS。但只有OSPF和IS-IS协议路由域中的AS可以划分多个区域。不同路由域(也即不同AS)中的路由需经过BGP协议进行连接。

    区域是从逻辑上将网络中的不同路由设备划分为不同的组,每个组用区域号(Area ID)来标识。要注意的是,OSPF的区域的边界是设备接口,而不是链路。即一个网段(链路)只能整个属于同一个区域,即路由器间直接相连的链路两端接口必须属于同一个区域。如下图:


    划分了区域后,可以在区域边界路由器上进行路由聚合,不同区域之间仅向外通告其聚合路由,大大减少通告到其他区域的LSA(链路状态通告)数量,还可以最小化由于网络拓扑变化带来的影响。

        与OSPF同为链路状态协议的IS-IS在区域边界方面就与OSPF完全相反,IS-IS区域的边界是链路,而不是设备接口,即两台路由器相连的链路两端接口是分属于不同区域的

    在OSPF中,除了可以划分多个普通区域外,还可以配置多种特殊区域类型,如骨干区域(固定为Area0)、Stub(末梢)区域、Totally Stub(完全末梢)区域、NSSA(非纯末梢)区域和Totally NSSA(完全非纯末梢)区域。

    3、路由器类型

    由于OSPF把一个AS划分成多个区域,这就使得OSPF网络中不同路由器的角色可能会有所不同,根据路由器在AS中的不同位置,可以分为4类(见图12-2):

    ①区域内路由器(InternalRouters,IR):该类设备的所有接口都在同一个OSPF区域内。

    ②区域边界路由器(Area BorderRouters,ABR):该类设备接口可以分别属于不同区域,但其中一个接口必须连接骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接(“虚连接”)。

    ③骨干路由器(BackboneRouters,BR):该类设备至少有一个接口属于骨干区域。所有的ABR和位于骨干区域的内部设备都是骨干路由器

    ④自治系统边界路由器(ASBoundary Routers,ASBR):与其他AS中的设备交换路由信息的设备成为ASBR。虽然ASBR通常是位于AS的边界,但也可以是区域内设备,也可以同时是ABR。只要一台OSPF设备引入了外部路由(包括直连路由、静态路由、RIP、IS-IS路由、BGP路由,或者其他OSPF进程路由等)的信息,它就成为ASBR。

    4、路由类型

    划分区域的目的就是想减少LSA的数量,减少路由器上依据LSA形成的路由数量,这就自然会对在区域内部,或区域之间,甚至从其他AS外入的路由进行分类。OSPF中,把路由分为4类:

    ①区域内(Intra Area)路由:仅用于区域内IR路由器之间的路由,用于IR设备间的互联,不向区域外通告。

    ②区域间(Inter Area)路由:仅用于区域间ABR之间的路由,用于骨干区域与其他区域相互通告路由信息。

    ③第一类外部(Type1 External)路由:这是经由ASBR引入的外部路由,且通常是IGP类型(如直连路由、静态路由、RIP、IS-IS路由或其他OSPF进程路由)的外部路由,它们的开销值计算方法与OSPF的开销值计算方法具有可比性,可信度较高。到第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销

    ④第二类外部(Type2 External)路由:这也是经由ASBR引入的外部路由,且通常是EGP类型(如EGP路由)的外部路由,它们的开销值计算方法与OSPF不具可比性。OSPF协议认为,从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销,所以OSPF计算第二类外部路由的开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销

    二、OSPF网络的设计考虑

    1、OSPF网络的设计规划

    (1)确定需运行OSPF协议的路由器

    在设计OSPF网络时,首先要确定的是哪些路由器的接口要启用OSPF路由进程。在一个自治系统内部各路由器上需运行相同的动态路由协议,所以绝大多数情况下自治系统内部的各个路由器上都要运行OSPF协议。

    (2)合理划分OSPF区域

    当一个大型网络中的路由器都运行OSPF协议时,LSDB(链路状态数据库)会占用大量存储空间,并使得运行SPF(Shortest Path First,最短路径优先)算法的复杂度增加,CPU负担增加。网络规模增大,拓扑结构变化概率增大,网络会经常处于“振荡”之中,造成大量OSPF协议报文传递,降低带宽利用率。每次变化还导致路由器重新进行路由计算。OSPF协议通过将一个自治系统划分为不同的区域来解决上述问题。按一般经验,在一个区域内路由器的数量不要超过50台,且当网络中路由器少于20台,可以只划分一个区域,即骨干区域。

    根据OSPF协议规定,所有的其他区域均必须与骨干区域连接,所以应合理选择骨干区域的位置。通常将骨干区域置于网络的中央,这样可以使更多的其他区域与骨干区域直接连接。实在有不能直接与骨干区域连接的区域,则需要使用虚连接来解决。骨干区域中的路由器要负责整个OSPF网络各个区域的路由信息传输,负荷大,需要性能好的路由器承担。

    (3)注意ABR和ASBR的性能要求

    每个ABR需要负责所连接的两个或多个区域间的路由信息传输工作,需要保存每个连接区域的LSDB,而ASBR更是要负责两个或多个自治系统间的路由信息传输,保存每个连接自治系统的LSDB,需要高性能路由器承担。建议在一台ABR上一般最多连接3个区域,即一个骨干区域和两个普通区域,ASBR类似,不要连接太多自治系统。

    2、OSPF区域划分原则

    (1)按照地理区域或行政管理单位划分

    因为OSPF网络主要应用于广域网系统,跨市、省、全国,最简单就是根据地理区域或行政区域划分。

    (2)按照网络中的路由器性能来划分

    路由器也可分为接入层、汇聚层和核心层,性能从低到高,按性能来划分

    (3)按照IP网段来划分

    好处是便于在ABR上配置路由汇聚,减少路由信息的数量。

    (4)区域中路由器数量的考虑

    一个区域中最好不要超过50台路由器。

    三、OSPF  LSA类型

    OSPF是一种典型的链路状态路由协议,采用OSPF的每个路由器通过向邻居路由器发送LSA(Link StateAdvertisement,链路状态通告)来实现彼此交换并保存整个网络的链路状态信息,从而掌握全网拓扑结构,并独立计算路由。划分区域后,OSPF路由器收集其所在网络区域上各路由器的链路状态信息,并生成链路状态数据库LSDB,也称拓扑数据库,它代表了对应区域中的网络拓扑结构。OSPF路由器根据自己的LSDB利用SPF(Shortest Path First)路由算法独立计算出到达任意目的地址的路由。LSA是OSPF计算路由的依据,在相当程度上代表了OSPF路由。

    因为OSPF路由器按用途进行了分类,不同类型的OSPF路由器所发送的LSA的用途和可以通告的范围各不相同。OSPF将LSA分为以下几类:

    (1)Type1 LSA:路由器LSA(Router LSA)

    每个OSPF路由器都会产生路由器LSA,描述了对应设备物理接口所连接的链路或接口,并指明了各链路的状态、开销等参数。

    (2)Type2 LSA:网络LSA(Network LSA)

    网络LSA由DR(指定路由器)或者BDR(备份指定路由器)产生,描述了DR和BDR所在网段的链路状态,也仅在所属区域内传播因为DR和BDR仅在广播类型网络中存在,所以网络LSA也仅在广播类型网路中存在

    (3)Type2 LSA:网络聚合LSA(Networksummary LSA)

    网络汇总LSA由ABR产生,描述所连接的某个区域内某个网段的聚合路由(包括缺省路由),并通告非Totally Stub或NSSA区域(包括源网段所在区域,到达其他区域必须经过骨干区域转发该LSA),这样区域通信在到达区域边界ABR后都是采用聚合路由进行的,可大大减少区域内部路由器的路由表项数量。

    (4)Type4 LSA:ASBR聚合LSA(ASBR summaryLSA)

    ASBR聚合LSA也由ABR产生,描述从该ABR到达OSPF路由域中各个ASBR的路由,通告给整个路由域。但仅可向普通区域中泛洪,不能进入Stub区域、Totally Stub区域、NSSA区域和Totally NSSA区域。

    (5)Type5 LSA:自治系统外部LSA(Autonomoussystem external LSA)

    自治系统外部LSA由ASBR产生,描述到达AS外部的路由,也仅可向普通区域中泛洪,不能进入Stub区域、Totally Stub区域、NSSA区域和Totally NSSA区域。

    (6)Type7 LSA:NSSA外部LSA(NSSAExternal LSA)

    NSSA外部LSA也由ASBR产生,内容几乎和Type5LSA相同,但它专用于NSSA区域和Totally NSSA区域连接的ASBR向NSSA区域内泛洪外部AS的路由,然后经过NSSA区域ABR上转换成Type5 LSA向OSPF路由域内其他区域中传播。

    (7)Type9/Type10/Type11LSA:Opaque LSA

    Opaque LSA是一个被提议的LSA类别,是在标准的LSA头部后面加上特殊 应用的信息组成,可以直接由OSPF协议使用,或者由其他应用分发信息到整个OSPF域间接使用。Opaque LSA分为9、10、11三种类型,但是各自可泛洪的区域不同,Type9 LSA仅在接口所在网段范围内传播,Type10 LSA在区域内传播,Type11 LSA在自治系统内传播。

    在OSPF中主要用到的就是Type1~Type5和Type7这6种LSA。

    ①在区域内部各路由器设备通过Type1LSA来获取彼此的路由信息,实现互相路由通信。

    ②在广播类型网络中,区域内非DR、非BDR路由器与DR、BDR路由器之间是通过Type2LSA获取路由信息的,实现非DR、非BDR路由器与DR、BDR路由器之间的路由通信;各非DR、非BDR路由器之间不相互获取路由信息,需全部通过DR或者BDR,以及该区域的ABR与其他区域进行通信。

    ③在区域内部路由器与区域ABR之间,通过所在区域的ABR以Type3 LSA向内发布本区域各网段聚合路由信息,实现区域内路由器与对应区域的ABR路由通信。

    ④在不同区域之间,通过各自区域的ABR以Type3 LSA向内、外发布的本区域和外部区域各网段聚合路由信息(中间还需要骨干区域进行LSA转发),实现不同区域的路由器间的路由通信。

    ⑤在区域内部路由器与外部AS之间,先通过各区域的ABR以Type4 LSA向内发布到达ASBR的聚合路由信息实现与ASBR的路由通信,然后通过对应ASBR向普通区域内部发布的Type5LSA或者向NSSA区域和Totally NSSA区域发布的Type7 LSA实现与外部AS的路由通信。

    四、几种特殊的OSPF区域

    在OSPF网络的区域中,除了Stub区域、TotallyStub区域、NSSA区域和Totally NSSA区域外,其他区域(包括骨干区域)都称为普通区域

    1、骨干区域

    骨干区域是普通区域中的一种特殊区域,它的区域号固定为0.0.0.0,也即区域0。骨干区域是连续的,或者通过“虚连接”(Virtual Link)连接两个或多个分离的骨干区域,但这些分离的骨干区域的区域号一样,均为0。同时,要求其他区域必须与骨干区域直接连接,或者通过“虚连接”虚拟连接。


    如上图,普通区域2没有与骨干区域0直接连接(中间隔了一个区域1),这时就可以在区域1连接骨干区域0和普通区域2的两端ABR中配置“虚连接”。“虚连接”被认为是属于骨干区域(相当于骨干区域的延伸)的,在OSPF路由协议看来,虚连接两端的两个路由器被一个点对点的链路连在一起,这样原来没有与骨干区域连接的区域就变成直接连接了,成为普通区域了。通过虚连接连接两个非连续的骨干区域0的方法一样。

    骨干区域作为区域间通信传输和分布路由信息的中心,在一个OSPF路由域中,无论有没有划分区域,总是至少有一个骨干区域。区域间的通信先要被路由到骨干区域,然后再路由到目的区域,最后被路由到目的区域中的主机。在骨干区域中的路由器(都是ABR)通告它们所连接的其他区域内的汇总路由到骨干区域中的其他路由器中。汇总通告在骨干区域内路由器传播,使得在骨干区域内部的每台路由器都有一个到达所有连接的其他区域ABR的可用路由表。

    2、Stub(末梢)区域

    Stub区域是一种专门为那些由性能较低的路由器组成、与AS外部没有太多路由通信的AS边缘区域简化区域内部路由器上的路由表而采取的一种优化措施。只有处于AS边缘,且只有一个连接其他区域的ABR,没有ASBR,没有虚连接穿越的非骨干区域才可配置为Stub区域,因为只有这样才能尽可能的减少区域内路由器的路由表项数量。

    在Stub区域中是通过禁止与AS外部路由相关的Type4LSA和Type5 LSA通过ABR进入区域内泛洪来实现的,仅允许同一AS中其他区域的Type3 LSA通过ABR进入区域泛洪。这样在Stub区域内部路由器中仅有Type1LSA、Type2 LSA(广播网络中才有)和Type3 LSA存在,没有Type4LSA和Type5 LSA(更没有专用于NSSA和Totally NSSA区域的Type7 LSA),可在一定程度上减小区域内部路由器上的路由表规模。

    在阻止了与AS外部相关的Type4LSA和Type5 LSA进入区域后,会代理啊一个问题,那就是Stub区域内部路由器不能获知外部AS的路由信息,不能与AS外部进行通信。有时的确需要与外部AS进行通信,于是新增了一条折中的解决方法,就是由Stub区域的ABR向本区域内部路由器泛洪一条指向自己的缺省路由(0.0.0.0),使Stub区域ABR作为区域内部路由器与外部AS通信的唯一出口

    当一个OSPF的区域只存在一个区域出口点(只与一个其他区域连接)时,可以将该区域配置成为一个Stub区域。这时,该区域的ABR会对区域内通告缺省路由信息。需要注意的是,一个Stub区域中的所有路由器都必须知道自身属于该区域(也就是需要在其中的路由器启用这项功能),否则Stub区域的设置不会起作用。

    3、Totally Stub区域

    Totally Stub(完全末梢)区域是相对Stub区域的变形版本,也是为那些设备性能相当低的边缘区域而设计的,可以进一步减少区域内路由器的路由表项。Totally Stub区域所需满足的条件与Stub区域一样,即只有处于AS边缘,且只有一个连接其他区域的ABR,没有ASBR,没有虚连接穿越的非骨干区域才可配置为Totally Stub区域

    在LSA的限制上,TotallyStub区域比Stub区域更加严格,除了不允许与AS外部路由相关的Type4LSA和Type5 LSA进入区域外,还不允许同一AS中其他区域的Type3LSA经由ABR向区域内部路由器泛洪。这样一来,在Totally Stub区域内部路由器中仅有Type1LSA和Type2 LSA(广播网络中才有),没有Type3 LSA、Type4 LSA和Type5 LSA(同样更没有Type7LSA),可进一步减少区域内部路由器的路由表项数量。

    与Stub区域类似,为了解决有时TotallyStub区域内部路由器需要与其他区域或AS外部进行通信的问题,由ABR向区域内泛洪一条缺省路由。

    4、NSSA区域

    Stub区域因为只存在于网络边缘,利用率不高,于是提出了一种新的概念NSSA(Not-So-Stubby Area,非纯末梢区域)。NSSA区域是对Stub区域概念的延伸,在必备条件方面有所放宽,即NSSA区域可以位于非边缘区域,可以有多个ABR(Stub区域仅允许有一个ABR),可以有一个或多个ASBR(Stub区域不允许有ASBR)。在LSA的限制方面:

    允许从其直接连接的ASBR上引入的AS外部路由以Type7LSA进入NSSA区域中泛洪,然后在ABR上转换为Type5 LSA后以自己的身份发布到区域之外,因为Type7 LSA是专门为NSSA区域新定义的,非NSSA区域设备不可识别。

    ②与Stub区域一样,允许区域间的Type3 LSA进入区域内部泛洪,不允许与其他区域中ASBR连接的AS外部路由相关的Type4 LSA和Type5 LSA进入NSSA区域内泛洪

    NSSA区域也限制了由其他区域中的ASBR所引入的AS外部路由进入区域内,但同样NSSA区域内部路由器有可能需要与其他区域连接的外部AS进行通信。为解决这一问题,NSSA区域仍采用缺省路由的方式来解决,就是在该区域的其中一个ASBR上(NSSA区域中可以有多个ASBR)向区域内部路由器泛洪一条指向自己的缺省路由,使该ABR作为区域内部路由器与其他区域所连接的外部AS进行通信的唯一路由。

    在NSSA区域总存在Type1LSA、Type2 LSA(广播网络中才有)、Type3 LSA和Type7 LSA,但没有Type4 LSA和Type5 LSA

    5、Totally NSSA区域

    Totally NSSA区域可以说是TotallyStub区域和NSSA区域的结合体:

    与NSSA区域一样,可以位于非边缘区域,可以有多个ABR和ASBR

    与NSSA区域一样,允许区域中ASBR引入的AS外部路由以Type7 LSA进入区域内部泛洪,然后经由该区域内的ABR将转换成Type5 LSA向OSPF路由域中其他所有区域进行发布。但不允许其他区域中的ASBR引入的路由进入区域内部,即不允许Type4 LSA和Type5 LSA进入区域内部泛洪

    与Totally Stub区域一样,不允许Type3 LSA进入区域内部泛洪(NSSA区域是允许的),这可进一步减少区域内部路由器的路由表规模。

    Totally NSSA区域禁止了其他区域的Type3LSA和其他区域中ASBR连接的外部AS相关Type4 LSA和Type5 LSA进入区域内,Totally NSSA区域也采用缺省路由的方式,在区域中选择一个ABR和ASBR,在其中配置一条指向自己的缺省路由,然后在Totally NSSA区域内泛洪,使该ABR或ASBR作为区域内部路由器与其他区域或者其他区域中连接的外部AS进行通信的唯一出口。


    五、OSPF的网络类型

    OSPF协议支持多种不同类型的网络,当然必须都是运行IP协议的。根据链路层协议类型的不同将这些可支持的网络分为4种类型(不同类型网络的报文发送方式不一样)。

    1、广播(Broadcast)类型

    当链路层协议是Ethernet、FDDI时,OSPF缺省网络类型是广播(Broadcast)类型。在这种网络中,OSPF的各种报文发送方式如下:

    ①以组播形式(224.0.0.5,是运行OSPF设备的预留IP组播地址)发送Hello报文及所有源自DR(指定路由器)的选举报文。

    ②以组播形式(224.0.0.6,是OSPF DR的预留IP组播地址)向DR发送LSU(链路状态更新)报文,然后DR将该LSU报文发送到224.0.0.5。

    ③以单播形式发送DD(数据库描述)报文、LSR(链路状态请求)报文和所有重传报文。

    ④正常情况下,以组播形式(224.0.0.5)发送LSAck(链路状态应答)报文。当设备收到重复的LSA或达到最大生存时间的LSA被删除时,LSAck以单播形式发送。

    2、NBMA(Non-BroadcastMulti-Access)类型

    当链路层协议是帧中继、X.25时,OSPF缺省网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

    3、点到多点(point-to-multipoint,P2MP)类型

    因为链路层协议中没有Point-to-Multipoint的概念,所以P2MP必须是由其他的网络类型强制更改的。在该类型的网络中,以组播形式(224.0.0.5)发送Hello报文,以单播形式发送DD报文、LSR报文、LSU报文、LSAck报文。

    4、点到点P2P(point-to-point)类型

    当链路层协议是PPP、HDLC和LAPB时,OSPF缺省网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送各种OSPF协议报文。


    OSPF报头及各种报文格式

    OSPF把自治系统划分成逻辑意义上的一个或多个区域,通过LSA的形式发布路由信息,然后依靠在OSPF区域内各设备间各种OSPF报文的交互来达到区域内路由信息的统一,最终在区域内部路由器中构建成完全同步的LSDB,因为OSPF是专为TCP/IP网络设计的路由协议,所以OSPF的各种报文是封装在IP报文内的,可以采用单播或组播的形式发送。

    一、OSPF协议报头格式

    OSPF报文主要有5种:Hello报文、DD(DatabaseDescription,数据库描述)报文、LSR(LinkState Request,链路状态请求)报文、LSU(LinkState Update,链路状态更新)报文和LSAck(LinkState Acknowledgment,链路状态应答)报文。它们使用相同的OSPF报头格式(以OSPFv2版本为例):


    ①Version:版本字段,占1个字节,指出所采用的OSPF协议版本号,OSPFv2值为2,即0000 0010。

    ②Package Type:报文类型字段,标识对应报文的类型,取值为1~5的整数,分别对应Hello报文、DD报文、LSR报文、LSU报文、LSAck报文这5种OSPF报文。

    ③Package Length:包长度字段,占2字节,标识整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。

    ④Router ID:路由器ID字段,占4个字节,指定发送报文的源路由器ID。

    ⑤Area ID:区域ID字段,占4字节,指定发送报文的路由器接口所在的OSPF区域号。

    ⑥Checksum:校验和字段,占2字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。

    ⑦AuType:验证类型字段,占2字节,指定在进行OSPF报文交互时所需采用的验证类型,0为不验证,1为进行简单验证,2为采用MD5方式验证。

    ⑧Authentication:验证字段,占8个字节,具体值根据不同验证类型而定。验证类型为不验证时,此字段没有数据;验证类型为简单验证时,此字段为验证密码;验证类型为MD5验证时,此字段为MD5摘要消息。

    二、OSPF Hello报文及格式

    OSPF协议使用Hello报文来建立和维护相邻邻居路由器之间的邻接关系。Hello报文仅用来向邻居路由器证明自己的存在,就像人与人之间打招呼一样。RIP邻居路由器之间的邻居关系建立和路由更新都是通过发送Hello报文进行的,显然OSPF的这种Hello报文更简单,可大大减少网络中的报文传输流量。

    在P2P和广播类型网络中,Hello报文是以HelloInterval为周期(缺省10s),以组播方式向224.0.0.5组播组发送一次;在P2MP和NBMA类型网络中,OSPF路由器是以PollInterval为周期(缺省60s),以单播方式向状态为Down的邻居发送一个Hello报文(其他类型的网络是不会把Hello报文发送给状态为Down的路由器的)。如果在设定的DeadInterval时间(通常至少是Hello报文发送时间间隔的4倍)内没有收到对方OSPF路由器发送来的Hello报文,则本地路由器会认为该对方路由器无效。

    Hello报文内容包括一些定时器设置、DR、BDR以及本路由器已知的邻居路由器。



    在OSPF路由器上可以配置Hello报文的发送时间间隔(是基于接口来配置的)。

    三、OSPF DD报文及格式

    DD报文用来描述本地路由器的链路状态数据库(LSDB),即在本地LSDB中包括哪些LSA。在两个OSPF路由器初始化连接时要交换DD报文,以便进行数据库同步。

    DD报文内容部分包括DD报文序列号和LSDB中每一条LSA的头部等。对端路由器根据所收到的DD报文中的OSPF报头就可以判断出是否已有这条LSA。由于数据库的内容可能相当长,所以可能需要多个DD报文的交互来完成双方LSDB的同步。所以有三个专门用于标识DD报文序列的比特位,即DD报文格式中的I、M和M/S这三位。接收方对接收到的连续DD报文重新排序,使其能还原所接收的DD报文。



    DD交换过程按询问/应答方式进行,在DD报文交换中,一台为Master(主)角色,另一台为Slave(从)角色。Master路由器向Slave路由器发送它的路由表内容,并规定起始序号,每发送一个DD报文,序号加1,Slave路由器则使用Master路由器的序号进行确定应答。显然,主、从之间的关系会因每个DD交换的不同而不同,因为双方可能都有对方没有的LSA,网络中的所有路由器会在不同时刻担当不同的角色。

    四、OSPF LSR报文及格式

    LSR报文用于请求相邻路由器链路状态数据库中的一部分数据。当两台路由器互相交换完DD报文后,知道对端路由器有哪些LSA是本LSDB所没有的以及哪些LSA是已经失效的,则需要发送一个LSR报文,向对方请求所需的LSA。

    LSR报文内容包括所需的LSA摘要。



    五、OSPF LSU报文及格式

    LSU报文是LSR请求报文的应答报文,用来向对端路由器发送所需的真正LSA内容,可以是多条LSA完整内容的集合。LSU报文内容部分包括此次一共发送的LSA数量和每条LSA的完整内容。


    LSU报文在支持组播和多路访问的链路上是以组播方式将LSA泛洪出去的,并且对没有收到对方确认应答(即LSAck报文)的LSA进行重传,但重传时的LSA是直接送到没有收到确认应答的邻居路由器上,而不是泛洪。

    六、OSPF LSAck报文及格式

    LSAck报文是路由器在收到对端发来的LSU报文后发出的确认报文,内容是需要确认的LSA头部(LSA Headers)。LSAck报文根据不同链路以单播或组播形式发送。


    OSPF工作原理

    OSPF中涉及许多具体技术原理,如OSPF路由计算原理、OSPF区域间的路由原理、OSPF路由更新原理,还有在广播网络中要进行的DR和BDR选举以及OSPF报文的验证原理等。

    一、OSPF状态机

    OSPF是一种链路状态路由协议,邻居设备间交换的是链路状态信息,OSPF路由也是依据由链路状态信息构成的链路状态数据库(LSDB)形成的。在OSPF中,建立设备间的邻居关系,交换彼此的LSDB显得格外重要。邻居关系建立的流程体现在OSPF接口的状态转换过程中。在OSPF中共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。

    ①Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔(DeadInterval)内收到来自邻居路由器的Hello报文。

    ②Attempt:该状态仅发生在NBMA网络中,表明在邻居失效时间间隔超时后仍然没有对端发来的Hello应答报文。此时路由器依然会以轮询Hello报文发送时间间隔(PollInterval)向对端发送Hello报文。

    ③Init:收到不包含自己路由器ID的Hello报文后状态转换为Init。

    ④2-way:收到包含有自己的路由器ID的Hello报文后则状态转换为2-way。

    ⑤Exstart:在进行DR、BDR选举后形成邻居关系,则从Init状态转换到Exstart状态,通过不带LSAHeader字段内容的DD报文协商主、从关系,并确定DD报文的序列号。

    ⑥Exchange:主、从关系协商完毕后,主设备开始向从设备正式发送带有LSA Header字段内容的DD报文,此时双方状态转换为Exchange。

    ⑦Loading:DD报文交换完成后从设备状态转换为Loading。此时,通信双方可以LSR报文向对方请求LSA更新,而以LSU报文对对方请求进行应答。

    ⑧Full:当设备收到对端发来的,由自己所请求的LSA报文后向对端发送LSAck报文,同时发给对端的LSA后也收到了来自对端的LSAck报文,之后,则本地设备自动切换为Full状态。

    二、OSPF邻接关系建立流程

    OSPF邻居关系的建立和维持都是依靠Hello报文交互来实现的,OSPF邻接关系的建立则需要一个比较复杂的流程,也是邻居设备接口的状态机转换过程。

    整个OSPF设备间邻接关系的建立过程分为4个主要阶段:邻居发现阶段、主从关系确立阶段、数据库同步阶段、完全邻接阶段。4个阶段中每个阶段都包含一种或多种状态机的转换。初始状态下,所有OSPF接口的邻居状态均为Down状态,表明没有与任何设备建立邻居关系,更没有与任何设备建立邻接关系邻居关系不等于邻接关系)。

    以P2P和广播类型网络中的两台OSPF路由器为例学习建立双向邻接关系的流程,以及对应的OSPF状态机迁移过程(假设R1路由器先启动了OSPF进程)。


    1、邻居发现阶段

    ①首先,当R1的OSPF接口启动路由进程后,会以组播方式(目的地址为组播地址224.0.0.5)向所连接的同网段所有直接连接的OSPF设备发送一个Hello报文。此时,因为R1还没有与其他任何设备建立邻居关系,不知道其他设备的路由器ID,所以在此Hello报文的RouterID字段中仅封装了本地OSPF路由器的路由器ID,在Neighbor字段中没有封装任何路由器ID。

    ②当R2收到来自R1的Hello报文后,将接收来自R1的Hello报文的接口转换成Init状态。同时R2从接收到的Hello报文中获取R1的路由器ID,添加到邻居列表中。然后在DeadInterval超时前,以组播方式向所连接的网段中的所有直接连接的OSPF设备发送一个在RouterID字段中封装本地设备R2的路由器ID,在Neighbor字段中封装R1的路由器ID的Hello报文。

    ③当R1收到来自R2的Hello报文,且发现里面有自己的路由器ID后,将接收来自R2的Hello报文的接口转换成2-way状态,同时R1从接收到的Hello报文中获取R2的路由器ID,添加到邻居列表中,然后在DeadInterval超时前,以组播方式向所连接的网段中的所有直接连接的OSPF设备发送一个在RouterID字段中封装了本地设备R1的路由器ID,在Neighbor字段中封装R2的路由器ID的Hello报文。

    ④当R2再次收到来自R1的Hello报文,且发现里面有自己的路由器ID后,将接收来自R1的Hello报文的接口转换成2-way状态。这时R1和R2就建立了双向的2-way邻居关系。

    通过以上4步(其实是一个两次握手过程),R1和R2间就建立起了邻居关系,进入主从关系确立阶段。

    2、主从关系确立阶段

    ①在双方都进入2-way状态后,R1和R2通过先前各自获取的Hello报文的信息进行DR、BDR选举,选举完成后双方都进入ExStart状态。

    DR和BDR是由同一网段中所有路由器根据路由器优先级和路由器ID选举出来的,只有Hello报文中Rtr Pri(优先级)字段大于0的路由器才具有选举资格。具体的选举过程如下:

    ★在与一个或多个邻居之间的双向通信建立起来之后,本地路由器对每个邻居发送来的Hello包中的优先级、DR和BDR域进行检查。此时所有路由器都宣称自己为DR(将它们自己的接口地址置于Hello包的DR字段中);同时,所有路由器都宣称自己为BDR(将它们自己的接口地址置于Hello包的BDR字段中)。

    ★如果一个或多个备选路由器将它(们)自身的接口地址置于DR字段中,拥有最高优先级的邻居将被宣告为DR。如果路由器优先级一样,拥有最高路由器ID的邻居将被选举出来。

    ★然后将自身的接口地址置于BDR字段中的路由器中选择拥有最高优先级的路由器作为BDR。如果这些宣称自己为BDR路由器的优先级相等,则拥有最高路由器ID的邻居将被选举作为BDR。

    ★如果没有任何路由器被宣告为BDR,则拥有最高优先级的非DR邻居路由器将被宣告为BDR;如果有多个优先级相同的路由器,则拥有最高路由器ID的邻居将被选举为BDR。

    ②进入ExStart状态后,双方路由器开始以DD报文进行交互,确定双方的主从关系,确定用于数据交换的初始的DD报文的序列号,以保证路由器得到的永远是最新的链路状态信息。

    在开始交互时,R1和R2双方都是在M/S字段设为1(代表自己为主设备),在DDSequence Number字段加上各自当前DD报文的序列号(每发送一次序列号加“1”),LSA Header字段为空的DD报文进行交互的。最终会根据双方的路由器ID来确定双方的主从关系,路由器ID大的成为主设备(此处假设为R2)。

    确认好主从关系后,从设备R1以主设备R2的DD报文序列号向主设备发送DD报文,并且置M/S字段值为0(代表自己为从设备),同样里面的LSA Header字段为空,并转换自己接收DD报文的接口为Exchange状态。主设备R2在收到从设备R1的DD报文后也将自己接收DD报文的接口转换为Exchange状态。

    通过以上两步,R1和R2邻接关系建立流程进入了数据库同步阶段。

    3、数据库同步阶段

    ①主设备R2开始连续向从设备R1发送带有LSA Header字段的报文(其中第一个DD报文的I字段值为1,代表为连续DD报文中的第一个报文,其余连续DD报文的I字段值均为0),M字段为1(代表后面还有报文)对从设备R1进行数据库更新。但每发送一次DD报文,其序列号都要加“1”。从设备R1每次收到来自主设备R2的DD报文后均以收到的DD报文序列号进行响应(但里面的LSA Header字段为空)。

    ②当主设备R2向从设备R1发送最后一个DD报文时,将M字段置为0,代表为最后一个DD报文,同时LSA Header字段为空,并将接收到DD报文的接口转换为Loading状态。当从设备R1收到主设备R2带有M字段为0的DD报文后便知道这是最后一个DD报文了,此时也将接收DD报文的接口转换为Loading状态。

    ③当主设备R2发送完DD报文后,从设备R1开始依据所接收的DD报文中的LSA Header字段检查自己的LSDB,如果发现有些LSA在自己的LSDB中没有,则从设备R1会以LSR报文向主设备R2发出更新请求。当主设备R2收到LSR报文后会以LSU报文向从设备R1发送对应的LSA。从设备R1在收到来自主设备R2的LSU报文后,会以LSAck报文进行确认。

    因为双方都可能有对方没有的LSA,或者一方的LSA版本更新,所以在DD报文交互中,主从角色不是固定的,双方都可以向对方发送LSR报文请求更新。

    通过以上两步完成了链路状态数据库的同步,进入最后的完全邻接阶段。最终实现同一区域中每台OSPF区域内部路由器的LSDB是完全一致的,实现了整个区域内的拓扑结构同步。

    4、完全邻接阶段

    当双方的LSDB完全同步后,双方均转为Full状态,双方OSPF接口间正式建立了完全邻接的关系。

    三、OSPF路由计算基本过程

    OSPF网络是在一个AS中以区域为单位的分层结构,而且在区域中又分为两种不同角色:骨干区域和普通区域。这就决定了OSPF的路由也必定是分层的,分为区域内路由和区域间路由,而不像RIP路由那样是扁平的。

    整个OSPF路由计算过程是在OSPF设备间建立了完全的邻接关系后进行的,依据的就是路由器为所连接的各个区域所保存的LSDB(每个连接区域都有一个专门的LSDB)。具体的路由计算中,又分区域内路由和区域间路由两个方面。

    1、OSPF区域内路由计算

    当网络重新稳定下来后,OSPF路由器会根据其各自的LSDB采用SPF(最短路径优先)算法——具体为Dijkstra算法)独立地计算到达每一个目的网路的路径,并将路径存入路由表中。路由表中包含该路由器到每一个可到达目的地址、开销和下一跳(next-hop)。OSPF区域内路由是由OSPF内部路由器使用最小开销的路径到达目的网络,且区域内的路由不被聚合。

    在Dijkstra算法中,为了在一对给定的路由器节点之间选择一条最短(链路开销最小)路由路径,只需在通信子网拓扑图中找到在这起始和结束节点之间的中间节点串连起来后链路开销最短的路径即可。把最短路由的节点标识为工作节点,并且是永久性的节点,其到达源节点的距离值是不能改变的,其他的标识为临时性的节点,其到达源节点的距离可能随工作节点的不同而改变。

    如下图,每个节点代表一台OSPF路由器,每条线段代表一条通信链路,线段上的数字代表对应链路的开销。现要使用Dijkstra算法计算节点A到节点D之间的最短路径。

    在网路中路由器启动时,首先需要初始化,测量每条链路的开销。从A节点到达D节点的路由确定步骤如下:

    ①首先将源节点A标记为永久性工作节点(用箭头来特别标识),然后依次检查每一个与A节点直接连接的相邻节点,并且把它们与A节点之间的距离重新以(n,N)的方式进行标识,其中的n为与A节点相距的链路开销,N为最近的工作节点。

    本示例中与节点A直接相邻的节点只有B和G,所以仅需要标识这两个节点与A节点之间距离。此时工作节点为A,B节点的标识为(2,A),G节点的标识为(6,A),其他与A节点不相邻的节点的距离标识为无穷远。如下图:


    ②比较B和G这两个节点与A节点之间距离,B节点的距离更短,于是把B节点改为工作节点(箭头移到B),同时变为永久性节点,其他节点(包括G节点)标注为临时节点。然后以B节点为工作节点,标记直接相邻的节点到源节点A的距离,对于前面已经计算过的节点将略过,如源节点A和G节点。

    与B节点直接相邻的节点中,除了A节点外还有C、E两个节点。C节点到达A节点的距离就是C节点到B节点的链路开销7,加上B到A的链路开销2,所以C到A的距离为2+7=9,标识为(9,B)。同理E到A的距离为2+2=4,标识为(4,B)。其他节点仍为无穷远。


    ③同样经过比较得出,E到A的距离(4),比C到A的距离(9)近,所以把E改为工作节点(箭头移到E),同时标注E为永久性节点,其他节点(包括C)标注为临时节点。

    同样标记与E节点直接相邻的节点(B、G、F)到E节点的距离,但对于前面已经计算过的永久性B节点不再重新计算,对原来已计算过,但为临时性节点的G以及F需重新计算。最终G标识为(5,E)(在此步以前为(6,A)),F标识为(6,E)。如下图


    ④同样的方法比较G节点和F节点到达A节点之间的距离,可以得出G节点更近,把G改为工作节点(箭头移到G),同时标注G为永久性节点,其他节点(包括F)标注为临时节点,如下图


    再看G直接相邻的节点,包括A、E、H,但是A、E已经标识为永久性节点了,标识是不能更改的,这里只需对H节点计算到达A节点的距离,经计算得出为(9,G)。

    这里要出问题了,按上面的计算,此时应该把H标识为下一个工作节点,但事实上,由H经G到达E的距离(4+1=5)要长于由H经F到达E的距离(2+2=4),前面把G标识为永久性节点是错误的,这时要把F节点标识为工作节点(箭头移到F),撤消G节点永久工作节点的资格,


    ⑤再检查与F相连接的相邻节点,除了已标识为永久性节点的E外,其余就是C和H,重新计算得到的值分别为9和8。这里要注意一个现象,对于C,本来属于临时节点,需重新计算距离值,可是经过F到A的距离与原来计算所得的经过B到达A的距离是一样的,所以距离值不需要改变。此时包H标识为工作节点(箭头移到H)和永久性节点。如下图:


    因为H是直接与目的节点D相连的,无需再进行选举,直接标识D的距离为(10,H)。即从源节点A到D的最短距离为10,即2+2+2+2+2,如上图连线:A——>B——>E——>F——>H——>D。以上可以看到,Dijkstra算法虽然能得出最短路径,但遍历计算的节点很多,效率低,而且有些节点还不能一次标识正确。

    2、OSPF区域间路由计算

    OSPF路由器的ABR连接多个OSPF区域,所以它保存了多个区域的LSDB。但是在ABR,与所连区域内部路由器以及其他区域内路由器的通信都不是象区域内部那样是以具体的明细路由进行的,而是采用聚合路由进行。

    在ABR上会以Type3  LSA(即网络聚合LSA)的方式向所连区域内以及其他区域通告所连区域的网络聚合路由,其他区域的路由也是以Type3 LSA方式向所连区域内通告的。所以区域内路由器与ABR以及ABR与其他区域的通信都是以网络聚合路由进行的。但要注意,两个非骨干区域之间是不能直接进行路由通信的,必须借助骨干区域进行转发,同样,两个非骨干区域之间是不能直接进行路由通信的,必须借助骨干区域的路由转发。所以在区域间的路由路径中一定会包括到达骨干区域对应路由器所连接网段的路由

    OSPF区域间的路由将按照以下过程进行:

    ①在源区域内部的路由器按照到达最近ABR的开销最小的网络聚合路由进行通信。

    ②骨干区域按照到达连接到包含目的主机IP地址所在区域最近ABR的开销最小的网络聚合路由进行通信。

    ③包含目的主机IP地址的ABR按照到达目的主机的开销最小网络聚合路由进行通信。


    如上图,由Area1中IP地址为192.168.1.10/26的HostA发往位于Area2中的IP地址为172.16.2.10/24的HostB的数据报文最先从Area1中的内部路由器以一个网路聚合地址(可以由管理员在R1上配置,假设为192.168.1.0/24)到达R1(ABR/骨干路由器),然后数据报文再通过骨干区域Area0中的路由器转发至R2。最后,数据报文通过聚合路由(也可以由管理员在R2上配置,假设为172.16.0.0/16)转发,然后通过Area2中的内部路由器到达目的主机。.

    3、OSPF路由维护

    当链路状态发生变化时,OSPF通过泛洪过程广播给网络上的其他路由器。OSPF路由器接收到包含新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。要注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,缺省时间为30min。

    四、理解OSPF进程

    在动态路由协议中有一个路由进程的概念,一个路由器可以创建多个路由进程,多个进程有什么用?不同进程之间又有什么区别和联系

    1、不同进程之间不相互交换路由信息,缺省是不通的

    可以简单的把同一路由器上多个不同OSPF进程理解为多个不同的动态路由协议的进程不同路由协议下的路由信息是不能直接进行交换的,最终也造成通过不同路由协议学习到的动态路由都是不通的。OSPF上的不同进程也是如此,不同进程各自有不同的LSDB(链路状态数据库),彼此之间是不交换路由信息的,当然彼此之间的网络也就不会直接相通了。这相当于把一个物理网络划分成多个虚拟网络。但是不同OSPF进程的路由是可以引入的

    假设有以下OSPF网络,R1、R2和R3均会运行OSPF协议,但R2上配置了10和20两个进程,如果没有配置两个OSPF进程互相进行路由引入的话,R1上连接的192.168.1.0/24网络是不能与R3上连接的192.168.4.0/24网络相通的,因为R2路由器的S1接口所学习到的R1路由器上的192.168.1.0/24网络路由是不会向R3路由器通告的,同样R2路由器的S0接口所学习到的R3路由器上的192.168.4.0/24网络路由是不会向R1路由器通告的。但是在R2上连接的两个网络还是可以直接通信的,因为它们在R2路由器上是直连路由,优先级最高,不需要OSPF协议的支持。


    如果在R2路由器上将位于OSPF进程10的S1接口学习到的OSPF路由和直连路由引入到OSPF进程20,则R3路由器将学习到路由192.168.1.0/24和192.168.2.0/24网络。同理,如果在R2路由器上将位于OSPF进程20的S0接口学习到的OSPF路由和直连路由引入到OSPF进程10,则R1路由器将学习到路由192.168.3.0/24和192.168.4.0/24网络。

    2、路由进程仅对本地路由器有意义,相连路由器的进程可以不同

    理解OSPF进程的另一个重点是,不同的OSPF进程仅对本地路由器有意义,也就是它仅将本地路由器划分成多个虚拟网络。把各路由器接口划分到不同的路由进程后,对应接口只与相连路由器接口所在的OSPF进程中的各路由交换路由信息,但一定要注意的是,相连的两个路由器接口的路由进程号可以不一样,当然也可以一样,因为进程号仅对本地路由器有意义。如上图,R1路由器的S0接口的OSPF进程号可以与R2路由器的S1接口的OSPF进程号一样,即都是10,也可以不是10,如20、30等都可以。同理,R3路由器的S1接口OSPF进程号可以与R2路由器的S0接口的OSPF进程号一样,即都为20,也可以不一样。

    3、同一个网络可以配置在多个OSPF进程中

    在OSPF协议中,同一个直连网络可以发布在多个不同的路由进程中,也就是一个路由器接口所连接的网络可以在多个不同的OSPF进程中发布。这样做目的主要出于路由备份的考虑,使得在某一个进程下的网络不通时,对应的路由器接口所连接的网络仍然可以通过其他进程在网络中进行通信。如上图,R2路由器S0接口可以同时发布在10和20的进程中,这样当R3路由器失效时,它仍可以与R1路由器通信,或者通过R1路由器所连接的网络最终访问R3路由器所连接的网络。


    展开全文
  • RIP路由配置与管理 RIP路由是最简单的动态路由协议,主要用于中小网络。基本配置仅需在各路由器上创建所需的RIP进程,然后宣告各RIP路由器接口直接连接的网段所对应的自然网段就可以把各接口上连接的网段路由向邻居...

    RIP路由配置与管理

    RIP路由是最简单的动态路由协议,主要用于中小网络。基本配置仅需在各路由器上创建所需的RIP进程,然后宣告各RIP路由器接口直接连接的网段所对应的自然网段就可以把各接口上连接的网段路由向邻居路由器进行通告。

    RIP基础

    RIP是一种较为简单的内部网关协议(IGP),包括RIPv1RIPv2两个版本。RIPv2RIPv1进行了扩充,支持CIDRVLSM技术,支持安全验证。

    一、RIP的度量机制

    RIP是一种基于距离矢量(Distance-Vector算法的协议,使用跳数(HopCount)作为度量来衡量到达目的网络的距离。设备到与它直接相连网络的跳数为0,然后每经过一个三层设备跳数增加1度量值等于从本网络到达目的网络间的三层设备数量,但并不是等于所经过的网段数

    上图拓扑,4个路由器都运行RIP,现在配置从PC1所在网络到达PC2网络的RIP路由,则跳数是3PC1直接连接的R1不算在内,其他每个路由器算一跳)。4个路由器连接网络数为5个,所以跳数并不等于所经过的网段数。另外,在同一个路由器上直接连接的多个网络,彼此间的度量值为0,因为是直连路由

    RIP通过UDP报文进行路由信息的交换,使用端口号为520是一个不可靠的路由协议RIP规定度量值取值0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。

    在定期自动更新过程中,RIP路由器采用完整路由表更新方式,也就是每个RIP路由器会把自己的完整路由表发给相邻的RIP路由器。遵循几个基本原则:

    ①路由表项每经过一次邻居路由器之间的传递,其度量值加1

    ②路由器在收到新的路由更新表项时,会在其路由表中添加新的路由表项,其度量值是在接收到的路由表项度量基础上加1,同时在新添加的路由表项中标注其下一跳地址就是发送路由器更新的邻居路由器的接口

    ③收到原有路由表项的路由更新时,先对有更新的路由表项的度量加1,然后与对应的路由表项中原度量值进行比较,仅接收度量值更小或相等的更新,忽略度量值比原来的值更大的路由更新。

    对上图,R2中原来的路由表项如11-2,现在又收到来自R3的如11-3路由更新

    R2来说,他在收到R3的路由更新后,首先对11-3所示的各路由表项的度量加1,同时路由表项中标注其下一跳地址就是发送路由器更新的邻居路由器的接口(这里是R33.1.1.2),结果如下图:

    11-2对比可以看到到达2.1.1.03.1.1.0网络的度量值比原来还大,忽略更新。而到达4.1.1.05.1.1.0网络的度量值相等,进行路由表项更新,最终R2上的路由表还是如11-2图所示。

        如果一个接口连接的网络没有指定(也就是没有宣告所有直接连接的网络),则它不会在任何RIP更新中被通告。

    二、RIP协议定时器

    RIP在路由更新和维护路由信息时主要使用以下4个定时器。

    更新定时器(Update timer:当此定时器超时时,立即发送路由更新报文,缺省为30s发送一次。

    老化定时器(Age timerRIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由器不可达。当学到一条路由并添加到RIP路由表中时,老化定时器启动。如老化定时器超时,设备仍没有收到邻居发来的更新报文,则把该路由的度量值值为16(表示路由不可达),并启动“垃圾收集定时器”。

    垃圾收集定时器(Garbage-collec timer:如果在垃圾收集时间内没有收到原来某条不可达路由的更新,则该路由将被从RIP路由表中彻底删除。

    抑制定时器(Suppress timer:当RIP设备收到对端的路由更新,其度量值为16,则对应路由进入抑制状态,并启动抑制定时器,缺省值为180s。这时为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由度量值小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。

    三、RIP路由更新机制

    RIP有两种更新机制:一是定期更新,二是触发更新。“定期更新”是根据设置的更新定时器定期发送RIP路由通告。该通告报文中携带了除“水平分割”机制抑制的RIP路由之外的本地路由器中的所有RIP路由信息。“触发更新”则是RIP路由器仅在有路由表项发生变化时发送RIP路由通告,并仅携带本地路由表中有变化的路由信息

    无论哪种更新,RIP路由的更新规则如下:

    ①如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项。

    ②如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表。

    ③如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项。

    ④如果路由表中已有相同目的网络的路由表项,且度量值相同,则保留原来的路由表项。

    1RIP路由定期更新机制

    RIP路由器总是会每隔30s(缺省值,可修改)通过UDP 520端口以RIP广播应答方式向邻居路由器发送一个路由更新包,包中包括了本地路由器上的完整的路由表(除被“水平分割”机制抑制的路由表项),用来向邻居路由器提供路由更新,同时用来向邻居路由器证明自己的存在。RIP的路由表中主要包括“目的网络”、“下一跳地址”和“距离”这3个字段。

    如果一个路由器在180s内没有收到某个邻居路由器发来的路由更新,则这个路由器就会标记该邻居路由器为不可达路由器,使这个邻居路由器进入抑制周期。当路由器处于抑制周期内,它仍然可向前转发报文,但网络中的其他路由器不学习到达该路由器所连网络的路由信息,除非是一条更好的到达该路由器所连网络的路由信息,如本来是3跳,在抑制周期内学到了一条2条的路由信息。但抑制后期过后,即使更差的路由信息也接受。

    如果300s内还没有收到这个路由器的路由更新,则本地路由器会在路由表中删除与该邻居路由器相关的路由表项。

    可见,路由更新不仅影响着整个RIP网络中的路由器上路由表的更新和所有需要到达或经过该路由器的报文路由,还影响着其他邻居路由器对他存在的判定。

    2RIP路由定期更新机制解析示例

    ①开始,所有路由器中的路由表只有自己直连的网络的路由表项信息。不是RIP路由表项,是直连路由表项,无需下一跳,度量“距离”均是0

    ②接着,各路由器就会按设置的周期(缺省30s)向邻居路由器发送路由更新。假设R2先收到来自R1R3的路由更新,并更新了自己的路由表,如图11-7,它新添加了分别通过R1R3到达10.0.0.030.0.0.0网络的路由表项,度量值为1

    R2更新自己的路由表后,会把完整的路由表发给邻居路由器R1R3。路由器R1R3分别再进行更新。R1首先把从R2上接收到的如图11-7路由表每项度量加1,得到路由表如11-8.

    ④然后R1把图11-8路由表与自己原来的路由表11-6左图进行比较,凡是新添加的和度量值小于等于原来的路由表项均将更新,度量值更大的路由表项忽略。经过行比较发现两条新的路由表项,30.0.0.040.0.0.0直接在路由表中添加。已有的两条1020忽略更新。同样R2在收到R2路由更新后更新自己的路由表。

    RIP路由协议存在一个问题,就是网络收敛比较慢,以11-5为例,三个路由器建立了稳定的路由表后,假设R1路由器和网10.0.0.0的连线断开了。R1更新自己的路由表,将10.0.0.0的路由表项距离改为16(即不可达),30s后发给R2,但是,R2R3得到的路由更新是“经过R2到达10.0.0.0网络的距离是2”,明显度量值更小,于是R2将此路由表项更新为“经过R3到达10.0.0.0的距离为3”,然后通过路由更新发给R3,此时R3的路由表中更新为“经过R2到达10.0.0.0网络的距离为4”,R3再通过路由更新发给R2,如此反复,直到该路由表项的距离达到16R2R3才知道10.0.0.0网络不可达。(这个过程是记数到无穷大机制)为解决这一不足,出现了水平分割技术,就是同一路由表项更新不再从接收该路由表项的接口发送出去。

    四、RIP路由收敛机制

    任何距离矢量类路由选择协议都有一个问题,路由器不知道网络的全局情况,必须依靠相邻路由器来获取网络的可达信息。由于采用UDP协议协议进行的路由更新信息在网络上传播慢,所以所有距离矢量路由算法都有一个收敛慢的问题。这将导致网络中各路由器路由信息不一致现象。RIP可以使用以下机制减少因网络上的不一致带来的路由选择环路的可能性:

    1、记数到无穷大机制

    RIP允许最大跳数值为15,大于15的目的地址被认为是不可达的。这个数字在限制了网络大小的同时也防止了一个叫做“记数到无穷大”的问题。

    2、水平分割法

    “水平分割”(Split Horizon)就是使路由器不向对应路由更新表项输入的方向回传此条路由表信息,使它只沿一个方向通告。即如果一条路由信息是从某个端口学习到的,那么从该端口发出的路由更新中将不再包含该条路由信息,其目的就是为了避免出现路由更新环路。

    水平分割在不同网络中的实现有所区别。在广播网、P2PP2MP网络中是按照接口进行水平分割的,如图11-12.

    RouterA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/9网络的路由:一条为跳数为0的直连路由;另一条为下一跳指向RouterB,跳数为2的路由。当RouterA到网络10.0.0.0的路由变成不可达,并且RouterB还没有收到路由不可达的信息时,RouterB会继续向RouterA发送10.0.0.0可达的路由信息。即RouterA会接收到错误的路由信息,认为可以通过RouterB到达10.0.0.0网络;而RouterB仍旧认为可以通过RouterA到达10.0.0.0网络,从而形成环路。配置水平分割后,RouterB将不会再把到网络10.0.0.0的路由发回给RouterA,由此避免了路由环路的产生。

    对于NBMANon-BroadcastMultiple Access)网络,由于一个接口上连接多个邻居,所以是按照邻居进行水平分割的。从某一接口的对端邻居处学习到路由,不会再通过该接口发送回去。

    3、毒性反转

    “水平分割”功能是路由器用来防止把一个借口得来的路由又从此接口回传,导致路由更新环路出现。“毒性反转”(Poison Reverse)方法是在更新信息中包括这些回传路由,但会把这些回传路由的跳数直接设为16(无穷),直接使该路由变为不可达路由。即如果一条路由信息是从某个端口学习到的,那么从该端口发出的路由更新分组中将继续包含该条路由信息,但将这条信息的metric置为16,这能够更快的消除路由信息的环路。但增加了路由更新的负担。

    4、保持定时器法

    “保持定时器法”是设置路由信息被抑制的时间,缺省为180s。当路由器接收到一个不可达的路由更新时,路由器会把这条路由更新置于无效抑制状态,不再接收对应路由的更新信息,也不向外发送这条路由更新信息,一直持续到接收到一个带有更好度量的对应路由更新分组,或者这个保持计时器到期为止。

    上图,由于线路原因,从路由器1发往路由器2的路由更新被延迟到达,致使路由器2不能及时更新,所以路由器2仍会以更新后的错误路由信息向路由器3发送。使用“保持定时器法”后,不会发生这种情况,因为路由器3在收到来自路由器1的网络A不可达的路由更新后,将在180s内不接受通向网络A的新的路由信息,而经过这段时间后,路由器2也正确进行了更新,不会再发送错误路由信息给路由器3

    五、RIP报文格式

    RIP有两种版本:RIPv1RIPv2RIPv1是有类别路由协议(ClassfulRouting Protocol),只支持以广播方式发布协议报文。RIPv1的协议报文中没有携带掩码信息,只能识别ABC类这样的自然网段的路由(如果连接的是子网,则在进行路由更新通告只能聚合成自然网段的聚合路由向外通告),不支持任意掩码长度的子路由聚合,也不支持不连续子网(Discontiguous Subnet)。RIPv2是一种无分类路由协议(Classless Routing Protocol)。RIPv2RIPv1具有的优势:

    ①支持外部路由标记,可以在路由策略中根据Tag对路由进行灵活的控制。

    ②报文中携带掩码信息,支持任意掩码长度的路由聚合和CIDRClassless Inter-Domain Routing,无类别域间路由),即能识别子网路由。

    ③支持指定下一跳,在广播网上可以选择到目的网段的最佳下一跳IP地址。

    ④支持以组播方式发送更新报文,减少资源消耗,但只有支持RIPv2的设备才能接收这种更新报文。

    ⑤支持对协议报文进行验证,增强安全性。

    “不连续子网”是指在网络中,某几个连续子网在中间被另一个其他网段的子网或网络隔开了。

    如上图11-14,由172.16.0.0/16划分的子网172.16.1.0/24172.16.2.0/24被中间的192.168.0.0/24192.168.1.0/24分隔开了,这就是一个不连续子网。

    11-15图是一个连续子网,因为在R3的左边和右边所连接的子网都不是由一个网络划分的子网,也就是完全不同的子网。

    为什么RIPv1不支持不连续子网呢?原因就是RIPv1路由器接口在收到不是与接收接口IP地址处于同一自然网段的路由更新时会自动进行路由聚合(如果是处于同一自然网段下,则不会聚合,是以具体子网路由显示的),而且该自动聚合功能是不可关闭的。如11-14所示不连续子网中,R3左边接口在收到R1R2连接网段172.16.1.0/24RIP路由通告后,由于它与该接口IP地址所在网段192.168.0.0/24不在同一自然网段下,所以会在R3上自动聚合成为172.16.0.0/16自然网段的聚合路由,其下一跳是R3左边接口;同理R3右边接口也会对所收到的R4R5所连接的172.16.2.0/24子网进行自动聚合,且聚合路由也是172.16.0.0/16自然网段路由,其下一跳是R3右边接口,这时R3就不能识别了,因为两边的聚合路由是一样的,但下一跳不一样,这时在R3RIP路由表中会存在两个不同的下一跳,但目的网络均为172.16.0.0/16的路由,就会被认为网络中出现了环路

    如果在11-14R2R3之间连接的是172.16.3.0/24网段,则R3在收到R1R2之间连接网段172.16.1.0/24的路由时,在R3上就不会被聚合成172.16.0.0/16,而是以172.16.1.0/24的子网路由显示。也就不会出现环路,网络也不能说成是不连续子网了。

    RIP使用UDP报文在邻居路由器间交换路由表,使用UDP端口号为520.通常情况下RIPv1报文为广播报文;RIPv2报文为组播报文,组播地址为224.0.0.9,缺省每隔30s向邻居路由器发送一次路由更新报文。如果设备经过180s没有收到来自对端的路由更新报文则将所有来自此设备的路由信息标志为不可达,若300s内仍为收到更新报文就将这些路由从路由表中删除。

    1Command

    命令字段,占1个字节,用来指定数据报分组是请求分组,还是响应分组。在RIPv1中主要有以下4四种分组类型Request(请求,对应值为1)、Response(响应,对应值为2)、Traceon(启用跟踪标记,对应值为3,自RIPv2版本后已淘汰)、Traceoff(关闭跟踪标记,对应值为4,自RIPv2后已淘汰)。请求分组是请求邻居路由器发送全部或部分路由表信息的分组,响应分组可以是路由器主动提供的周期性路由更新分组或者是对请求分组的响应。

    2Version

    版本字段,占1个字节,RIPv1版本值为1RIPv2版本值为2

    3Unused

    未使用字段,2字节,值固定为0

    4Address Family IdentifierAFI

    地址族标识字段,2字节,指出所使用的地址族。RIP设计用于携带多种不同协议的路由信息,每个项都有地址族标志来表明使用的地址类型,IP地址的AFI2

    5Route Tag

    路由标记字段,2字节,仅适用于RIPv2RIPv1不适用(值固定为0)。它提供区分内部路由(由RIP学得)和外部路由(由其他协议学得)的方法。它携带着一个EGPBGP的自治系统号。因为RIPv1中不支持该字段,所以RIPv1不支持由其他类型路由重发布为RIP路由。

    6IP Address

    IP地址字段,4字节,用于指定路由的目的网络地址,可以是标准网段地址、子网地址。

    7Subnet Mask

    子网掩码字段,4字节,用于指定目的网络的子网掩码,仅适用于RIPv2RIPv1中该字段值固定为0。因为RIPv1不支持无类别网络,也就是不支持子网路由(但可以连接子网,只是在生成RIP路由表项会以有类网络路由显示),仅支持标准的有类网络,所以具体网段的子网掩码是固定的。

    8Next Hop

    下一跳字段,4字节,仅适用于RIPv2RIPv1中该字段值固定为0。因为RIPv1版本采用的是广播方式发送,无具体的下一跳。它指出RIP路由的下一跳的IP地址。如果为0.0.0.0,则表示发布此条路由信息的路由器地址就是最佳下一跳地址。

    9Metric

    RIP路由的Metric(度量)值字段,也就是“跳数”值,4字节,最大有效值为15。值为16时表示该路由不可达。

    整个RIP报文的各字段可分为“头部”(Header)和“路由表项”(Route Entries)两大部分。“头部”包括CommandVersionUnused3个字段,其余字段都属于“路由表项”。在一个RIP报文中,最多可以有25个路由表项,也就是在一个RIP分组中最多可含有25个地址项,即一个分组中最多可一次性通告25RIP路由表项。

    RIP路由表项部分包括目的IP地址/掩码、下一跳IP地址、度量,对比静态路由的组成可以看出前三项是一样的,不同的只是在静态路由中还可以配置出接口,另外在静态路由中的“优先级”其实与RIP路由中的“度量”作用差不多,都可体现对应路由的优先级。

    RIP配置与管理

    RIP的配置任务主要体现在路由器对RIP特性的支持。AR G3系列路由器支持的RIP特性主要包括RIP的基本功能、RIPv2增强特性、水平分割、毒性反转、控制RIP路由的选路、控制RIP路由信息的发布和接收、调整RIP网络性能参数和RIPBFD联动。

    一、配置RIP基本功能

    RIP基本功能主要包括以下几方面:

    1、启动RIP进程

    全局启动RIP进程是进行所有RIP配置的前提。如果在全局启动RIP前,在接口视图下配置了RIP相关命令,这些配置只有在全局RIP启动后才会生效。

    2、在指定网段使能RIP

    也就是通常所说的网络宣告。RIP只在进行网络宣告时所指定网段上的接口才能运行,对于不在指定网段上的接口,RIP既不在通过它接收和发送路由,也不将它的接口路由转发出去。因此,RIP启动后必须指定其工作网段。

    3、(可选)配置NBMA网络的RIP邻居

    通常情况下,RIP使用广播或组播IP地址发送报文。如果在不支持广播或组播报文的NBMA网络(如X.25ATMFR等网络)链路上运行RIP,则必须在链路两端手动互相指定RIP的邻居,这样报文就会以单播形式发送到对端。

    4、(可选)配置RIP的版本号

    一般情况下,只需配置全局RIP版本号即可。如果需要在指定接口配置与全局不同的RIP版本号,则在指定接口下配置接口的RIP版本号。


    当接口中配置的RIP版本与全局配置的RIP版本不同时,则该接口以本地接口配置的RIP版本为准。在接口上配置不同的RIP版本,接口允许发送的请求报文和允许接收的响应报文的版本可能会有所不同。

    ①如果不配置RIP版本,则以广播方式发送RIPv1报文,接收广播的RIPv1RIPv2报文

    ②如果配置为RIPv1,则只以广播方式发送v1报文,接收广播的v1报文。

    ③如配置为RIPv2,则只以组播方式发送v2报文,接收组播或广播的v2报文

    ④如配置为组播的RIPv2multicast),则以组播方式发送,接收组播v2报文

    ⑤如配置为广播的RIPv2broadcast),则以广播方式发送v2报文,接收v1v2的报文

    二、配置RIPv2特性

    RIPv2RIPv1的不同在于,RIPv2支持VLSM(可变长子网掩码)和CIDR(无类别域间路由),并支持验证功能,从而功能更加完善,安全性更高。

    RIPv2特性配置中主要包括两方面任务,均是可选配置:

    1、配置RIPv2的路由聚合

    使用路由聚合可以大大减小路由表的规模。通过对路由进行聚合,隐藏一些具体的路由,可以减少路由震荡对网络带来的影响。

    RIP支持两种聚合方式:自动路由聚合和手动路由聚合。自动路由聚合只能聚合成对应的自然网段,是在系统视图下全局使能的;而手动路由聚合可以是超网路由,是在具体RIP路由器接口下配置的。RIPv1仅支持自动路由聚合,但自动路由聚合功能不可关闭,也就是不可配置;RIPv2同时支持自动和手动路由聚合,且可关闭自动路由聚合功能,以便将子网路由向外发布。自动聚合的路由优先级低于手动指定聚合的路由优先级

    缺省情况下,如配置了水平分割或毒性反转,有类的自动路由聚合功能将失效。因此在向自然网段边界外发送聚合路由时,相关视图下的水平分割和毒性反转功能都应该关闭。

    2、配置RIPv2报文的认证方式

    可通过配置RIPv2报文的认证来提高RIP网络的安全性。RIPv2支持对协议报文进行认证,并提供简单认证和MD5认证两种方式。简单认证使用未加密的认证字段随报文一同传送,其安全性比MD5要低。

    RIPv2报文认证需要在具体的RIP路由器接口上配置。


    三、配置防止路由环路

    通过配置RIP的水平分割和毒性反转,可以有效防止路由环路。水平分割和毒性反转也是在具体的RIP路由器接口上配置的,在配置水平分割和毒性反转前,需要完成RIP基本功能的配置。

    四、控制RIP的路由选路

    通过控制RIP的路由选路,使得网络满足复杂环境中的需要。可选配置任务:

    1、配置RIP协议优先级

    当多个路由协议发现目的地相同的路由时,通过配置RIP的协议优先级来改变路由协议的有限顺序。

    2、配置接口的附加度量值

    对于RIP接收和发布路由,可通过调整RIP接口的附加度量值来影响路由的选择(度量值越小越优先)。附加路由度量值是指在RIP路由原来度量值的基础上所增加的度量值(跳数)。

    3、配置最大等价路由条数

    通过配置RIP最大等价路由条数,可以调整进行负载分担的路由数目。


    五、控制RIP路由信息的发布

    RIP路由信息的发布进行精确控制,可以满足复杂网络环境中的需要。

    1、配置RIP发布缺省路由

    在路由表中,缺省路由以到网络0.0.0.0(掩码为0.0.0.0,代表任意网络)的路由形式出现。当报文的目的地址不能与路由表的任何目的地址匹配时,设备将选取缺省路由转发该报文。

    2、配置RIP引入外部路由信息

    RIP可以引入其他进程或其他协议学习到的路由信息,从而实现与其他协议的网络互通。

    3、禁止接口发送更新报文

    通过配置禁止接口发送更新报文,可以防止路由环路。禁止接口发送更新报文有两种方式:一是在RIP进程下全局配置接口为抑制状态;二是在接口视图下禁止具体接口发送RIP报文。全局配置的优先级要高于在接口视图下的配置。



     

    展开全文
  • 动态路由有一个共同的特点,就是整个协议功能比较复杂,但是最基本的网络配置却比较简单。在配置OSPF的基本功能之前,需配置接口的网络层地址,使各相邻节点网络层可达。 OSPF基本功能的配置任务和流程如下: ①...

    配置OSPF基本功能

    动态路由有一个共同的特点,就是整个协议功能比较复杂,但是最基本的网络配置却比较简单。在配置OSPF的基本功能之前,需配置接口的网络层地址,使各相邻节点网络层可达。

    OSPF基本功能的配置任务和流程如下:

    ①创建OSPF进程

    ②创建OSPF区域

    ③使能OSPF

    ④(可选)创建虚连接

    ⑤(可选)配置对OSPF更新LSA的泛洪限制。

    一、创建OSPF进程

    OSPF是支持多进程的,要使用OSPF协议,首先就要创建一个OSPF协议进程。创建OSPF进程的同时要指定路由器的路由器ID,因为一台路由器如果要运行OSPF协议必须存在路由器ID。路由器ID是一个IP地址方式的32位无符号整数,是一台路由器在一个AS中的唯一标识。

    创建OSPF进程的方法,仅需在系统视图下通过ospf [process-id | router-id router-id | vpn-instancevpn-instance-name]*命令配置即可。配置此命令后将启动对应的OSPF进程,进入OSPF视图。

    ①procees-id:可多选参数,指定要启动的OSPF进程的编号,取值范围1~65535的整数,缺省值为1。OSPF路由器支持多进程,进程号是本地概念,不影响与其他路由器之间的报文交换。因此不同的路由器之间,即使进程号不同也可以进行报文交换

    ②router-id router-id:可多选参数,指定本地路由器的路由器ID,为点分十进制格式。可以单独用router  id router-id系统视图命令创建。

    缺省情况下,在没有手动配置路由器ID情况下,系统会优先从已配置的Loopback接口IP地址中选择最大的IP地址作为设备的路由器ID,没有配置Loopback接口,则在其他物理接口IP地址中选取最大的IP作为路由器ID。手动配置路由器ID时,必须保证同一AS中任意两台路由器的路由器ID不相同。通常做法是将路由器ID配置为与该设备某个接口的IP地址一致。要注意的是,在每台OSPF路由器中要为每个OSPF进程配置一个全网唯一的路由器ID(但同一路由器的不同进程中的路由器ID可以相同),否则会导致邻居不能正常建立、路由信息不正确的问题。

    ③vpn-instancevpn-instance-name:可多选参数,指定所启动的OSPF进程所属的VPN实例的名称。如果不指定VPN实例,所启动的OSPF进程属于公网实例。

    缺省,系统不运行OSPF协议,可用undoospf process-id [flush-waiting-timer time]命令关闭指定的OSPF进程,并可通过可选参数flush-waiting-timertime设定让其他端设备删除原来保留的该设备上的LSA的时间,取值范围1~40的整数秒。

    在关闭OSPF进程时选择了flush-waiting-timertime时,设备在设定的时间内再次产生自己的LSA,并将其age字段置为3600(让此LSA立即老化)。其他设备收到age字段为3600的LSA后,会立刻删除与本设备相关的LSA。否则,其他设备会一直保留这个OSPF进程中早先产生的已无效的LSA,直到这些LSA超时。

    在名为huawei的VPN实例中启动OSPF 100进程,进入OSPF视图:

    <hauwei>system-view

    [huawei]ospf 100router-id 10.10.10.1 vpn-instance huawei

    二、创建OSPF区域

    网络规模扩大,设备增多,导致LSDB非常庞大,设备负担重。OSPF协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。OSPF协议将自治系统划分成不同的区域后,同一区域内的多台设备的功能(如定时器、过滤、聚合等)就可以以区域为单位进行统一规划和配置,从而减少LSDB的规模,提高网络性能。要注意:OSPF区域的边界是设备,而不是链路,即互联设备的整个链路(包括两端的接口)只能属于一个区域,每个运行OSPF的接口必须指明属于哪一个区域

    OSPF区域的创建是在对应的OSPF视图下进行的,使用area area-id命令配置。参数area-id用来指定区域的标识,可以采用十进制整数或IPv4地址形式输入,但显示时使用IPv4地址形式。0固定为骨干区域的ID,而且在一个多区域的OSPF网络中必须至少有一个区域ID为0的骨干区域(单区域OSPF网络中的区域ID可随意)。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。缺省系统未创建OSPF区域,可用undo area area-id指令删除指定区域。

    在OSPF 100进程下创建骨干区域0,进入区域视图:

    <hauwei>system-view

    [huawei]ospf 100

    [huawei-ospf-100]area0

    [huawei-ospf-100-area-0.0.0.0]

    三、使能OSPF

    创建OSPF进程后,还需要配置区域所包含的网段,就是用network命令进行“网络宣告”。该处的网段是指运行OSPF协议接口的IP地址所在的网段,一个网段只能属于一个区域,OSPF中网络宣告可以是子网和超网宣告,而不一定需要采用自然网段进行宣告。

    OSPF路由器会对接收到的Hello报文做网络掩码检查,当接收到的Hello报文中携带的网络掩码和本设备上宣告的网络掩码不一致时,则丢弃这个Hello报文,即不能建立邻居关系。

    OSPF的使能既可以在具体区域下一次性对一个或多个接口进行配置,也可在具体的OSPF接口下对一个接口进行配置。如果用两种配置方式同时配置,则对应OSPF接口下的配置优先级高于区域中为该接口的配置。

    1、在OSPF区域视图下配置

    在OSPF区域下是通过network ip-address wildcard-mask命令对指定网段范围的所有OSPF接口一次性使能OSPF,并指定所属的OSPF区域。

    ①ip-address:指定要使能OSPF的网段IP地址。接口的IP地址掩码长度必须>=本命令宣告网段的掩码长度。

    ②wildcard-mask:IP地址的反掩码,相当于将IP地址的子网掩码反转(0变1,1变0)。它是用来与参数一起确定要使能OSPF的网段范围的,其中,“1”表示忽略IP地址中对应的位,“0”表示必须匹配的位,这样就可以在一个区域内配置一个或多个接口,对应接口的主IP地址必须在命令指定的网段范围之内。

    对于Loopback接口,缺省情况下OSPF是以32位主机路由方式对外发布其IP地址,与接口上配置的掩码长度无关。但是如果要发布Loopback接口的网段路由,需要在接口下执行ospf network-type {broadcast | nbma}命令配置网络类型为广播或NBMA。

    在同一个实例的不同进程之间,或者同一个进程的不同区域之间,不能同时配置具有包含关系的两个网段。假设一个ABR有两个接口同在Area1区域,分别连接的是192.168.1.0/24和192.168.3.0/24网段,而另一个接口属于Area0区域,连接的网段为192.168.4.0/24,这时在两个区域中宣告网段时均不能采用192.168.0.0/16,因为这样两个区域中宣告的网段是重叠的,属于包含关系。

    在接口下通过ospf enable[process-id] area area-id命令在具体接口上使能OSPF,则优先级高于本命令的全局使能配置。

    缺省情况下,接口不属于任何区域,可用undonetwork address wildcard-mask命令从该区域中删除运行OSPF协议的对应接口。

    指定接口主IP地址位于网段192.168.1.0/24的接口使能OSPF,并加入Area2.

    <huawei>system-view

    [hauwei]ospf 100

    [huawei-ospf-100]area 2

    [huawei-ospf-100-area-0.0.0.2]network192.168.1.0 0.0.0.255

    2、在接口视图下配置

    在接口视图下使能ospf enable[process-id] area area-id命令使能对应接口的OSPF功能,指定所启动的OSPF进程和所加入的OSPF区域。

    在创建OSPF进程和配置本命令时要注意:

    ①如果先执行本命令配置接口使能OSPF,然后再创建对应的OSPF进程,虽然也可进行,但是不会自动创建对应的OSPF进程。且在创建进程的时候,进程所属的VPN必须和本命令的接口保持一致。

    ②如果先创建进程,然后执行本命令配置接口使能OSPF,则需要检查该接口使能的进程与已经存在的进程VPN是否一致,如果不一致,是不允许配置的。

    ③如果没有创建进程,属于不同VPN实例的接口不能被使能到相同的OSPF进程。

    缺省情况下,接口没有使能OSPF

    使能接口GE1/0/0的OSPF功能,并把它加入到OSPF1进程的骨干区域0中。

    <huawei>syste-view

    [hauwei]interface gigabitethernet 1/0/0

    [hauwei-GigabitEthernet1/0/0]ospf enable 1area 0

    四、创建虚连接

    因为OSPF规定,在划分OSPF区域后,非骨干区域之间的OSPF路由更新是通过骨干区域交换完成的,所以要求所有非骨干区域必须与骨干区域保持连通,并且骨干区域之间也要保持连通。有时实际网络环境达不到这个要求,如有些区域不能与骨干区域进行直接连接,而有时骨干区域又是分离的,这时就需要通过配置OSPF“虚连接”来解决。

    虚连接支持验证,以防非法建立虚连接。具体配置是在中间穿越虚连接的传输区域两端分别连接骨干区域和普通区域或分离的骨干区域的ABR对应区域视图下通过vlink-peer router-id [smart-discover | hello hello-interval | retransmit retransmit-interval | trans-delaytrans-delay-interval | dead dead-interval | [simple[plain plain-text | [cipher] cipher-text] | {md5 | hmac-md5 | hmac-sha256} [key-id {plain plain-text | [cipher] cipher-text}] | authentication-null  |keychain keychain-name]]*命令进行配置。参数说明:

    1)router-id:指定建立虚连接的对端设备的路由器ID

    2)smart-discover:可多选项,设置主动发送Hello报文。

    3)hellohello-interval:可多选参数,指定接口发送Hello报文的时间间隔,取值1~65535,缺省10s。但该值必须与建立虚连接路由器上的hello-interval值相等。

    4)retransmitretransmit-interval:可多选参数,指定接口在发送LSU报文后,多长时间没有收到LSAck应答报文即重传原来发送的LSA报文,取值1~3600,缺省5s。

    5)trans-delaytrans-delay-interval:可多选参数,指定接口延迟发送LSA(为避免频繁发送LSA而造成设备CPU负担过重)的时间间隔,取值1~3600,缺省1s。

    6)deaddead-interval:可多选参数,指定在多长时间没收到对方发来的Hello报文后即宣告对方路由器失效,缺省40s。该值必须与对端设备的该参数值相等,并至少为hello-interval参数值的4倍。

    7)simple:多选一可选项,设置采用简单验证模式。

    8)plainplain-text:二选一可选参数,指定采用明文密码类型。此时只能键入明文密码,查看配置文件时也是以明文方式显示密码的。

    9)ciphercipher-text:指定采用密文密码类型。可以键入明文或密文密码,查看配置文件时以密文方式显示。Simple验证模式缺省是cipher密码类型。

    10)md5:设置采用MD5验证模式。缺省md5验证模式缺省是cipher密码类型

    11)hmac-md5:设置采用HMAC-MD5验证模式缺省是cipher密码类型

    12)hmac-sha256:设置采用HMAC-SHA256验证模式缺省是cipher密码类型

    13)key-id:指定接口密文验证的验证字标识符,取值范围为1~255整数,必须与对端的验证字标识符一致。

    14)authentication-null:设置采用无验证模式

    15)keychainkeychain-name:设置采用Keychain验证模式,并指定所使用的Keychain的名称。采用此验证模式前,需首先通过keychain keychain-name命令创建一个keychain,并分别通过key-id key-id、key-string {[plain] plain-text | [cipher] cipher-text}和algorithm {hmac-md5| hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 | simple}命令配置该keychain采用的key-id、密码及其验证算法,否则会造成OSPF验证始终为失败状态。

    在Area2区域连接骨干区域和另一个普通区域的两端ABR上创建虚连接,对端路由器ID为1.1.1.1。

    <huanwei>system-view

    [huawei]ospf 100

    [huawei-ospf-100]area 2

    [hauwei-ospf-100-area-0.0.0.2]vlink-peer1.1.1.1

    五、配置对OSPF更新LSA的泛洪限制

    当邻居数量或者需要泛洪的LSA报文数量较多时,邻居路由器会在短时间内收到大量LSU更新报文。如不能及时处理,可能因处理更新报文而丢弃Hello报文,造成邻居断开。重建邻居时,交互的报文更大,情况进一步恶化。此时可通过对OSPF更新LSA的泛洪进行限制。

    对OSPF更新LSA的泛洪限制是在对应的OSPF进程下通过 flooding-control [number transmit-number | timer-intervaltransmit-interval]*命令进行配置。通过本命令可设置本地设备每次泛洪更新LSA的数量和泛洪更新LSA的时间间隔。配置本命令后,对OSPF更新LSA泛洪的限制功能将立刻生效。

    1)numbertransmit-number:设置每次泛洪更新LSA的数量,取值范围为1~1000的整数,缺省50。

    2)timer-intervaltransmit-interval:设置每次泛洪更新LSA的时间间隔,取值范围30~100000ms,缺省30。

    设置每次泛洪更新LSA的数量为100:

    <huawei>system-view

    [Huawei]ospf 1

    [Huawei-ospf-1]flooding-control number 100

    六OSPF基本功能管理

    ①display ospf[process-id] peer:查看指定进程或所有进程下的OSPF邻居信息。

    ②display ospf[process-id] interface:查看指定进程或所有进程下的OSPF接口信息。

    ③display ospf[process-id] routing:查看指定进程或所有进程下的OSPF路由表信息。

    ④display ospf[process-id] lsdb:查看指定进程或所有进程下的OSPF LSDB信息。

    七、OSPF基本功能配置示例


    如上图,所有路由器都运行OSPF,并将整个自治系统划分为3个区域,其中RouterA和RouterB作为ABR来转发区域之间的路由。配置完后,每台路由器都应学到AS内到所有网段的路由。

    1、基本配置思路分析

    OSPF基本功能配置很简单,先创建OSPF进程,创建所需区域,在路由器或者对应接口上使能OSPF。在此之前还需要配置好各路由器接口IP地址。

    2、具体配置步骤

    ①配置各路由器接口IP地址。以RouterA为例。


    ②配置OSPF基本功能。本例中都是单进程,所以在创建OSPF进程时,进程号可以不写,都采用缺省的1号进程。

    RouterA上的配置:RouterA属于ABR,所以要分别创建所连接的两个区域,并在每个区域中宣告区域中接口所连接的网段。


    在配置OSPF基本功能时,最关键的一点就是各OSPF接口的网段通告。在OSPF网段通告时要特别注意,在不同区域、不同进程中所通告的网段路由不能有包含、交叉关系,当然更不能是完全重叠关系(这种情况主要发生在连接多个区域的ABR上)。如本例中RouterA上的GE1/0/0接口所连接的网段是192.168.0.0/24,GE2/0/0接口连接的网段是192.168.1.0/24,如果它们是在同一区域中,则完全可以用192.168.0.0/16的路由进行通告,但因为现在它们是在不同区域中,所以两个区域中都不能这样宣告,只能分别宣告,以避免重叠。同时,如果两个接口位于不同OSPF进程,也一样不能宣告成192.169.0.0/16路由的,因为这样两个进程所宣告的网段就是重叠的了。


    通过以上配置就完成了整个网络的OSPF基本路由配置。通过displayospf peer查看各自的OSPF邻居。


    RouterA与RouterB和RouterC建立了完全(Full)的邻接关系。

    使用display ospf routing查看各自的OSPF路由信息。


    RouterA建立了到达所有非直连网段(直连网段的路由不会在OSPF路由表中出现,仅会出现在IP路由表中)的OSPF路由。

    通过display ospf lsdb查看各路由器的LSDB:


    RouterA上分别为所连接的Area0和Area1保存LSDB,其中LinkStateID代表链路ID,但不同LSA所代表的含义不同,AdvRouter为发布对应LSA的源路由器的路由器ID。

    八、OSPF虚连接配置示例


    如上图拓扑,Area2没有与骨干区域直接相连。Area1被用作传输区域(Transit Area)来连接Area2和Area0.为了使Area2与骨干区域连通,需要在RouterA和RouterB之间配置一条虚连接(Virtual Link)。

        1、基本配置思路分析

    OSPF虚连接需要在配置OSPF基本功能的基础上进行配置,所以首先需要配置各路由器的OSPF基本功能,使各路由器通过OSPF协议三层互通,然后在RouterA和RouterB上分别配置虚连接,使非骨干区域与骨干区域连通。

    2、具体配置步骤

    ①配置各路由器接口的IP。


    ②配置OSPF基本功能。


    通过display ospfrouting视图命令查看RouterA的OSPF路由表。由于Area2没有与Aera0直接相连,所以ROuterA的路由表中没有Area2中的路由。


    ③配置虚连接,需要在RouterA和RouterB上同时配置:


    通过display ospf routing查看RouterA上的OSPF路由表:


    发现RouterA已通过OSPF学习到了Area2中的路由。证明虚连接配置成功。

    配置OSPF邻居或邻接的会话参数

    在OSPF网络中,所有链路状态信息都在邻居或邻接中传递、交换。在实际网络中,合理配合参数对整个网络的稳定性有重要作用。本项配置为可选配置,因为都有缺省值。

    1)配置OSPF报文重传限制。

    2)使能在DD报文中填充接口的实际MTU。在配置OSPF邻居或邻接关系的会话参数前,需要完成以下任务:

    ①配置链路层协议

    ②配置接口的网络层地址,使各相邻节点网络层可达

    ③配置OSPF的基本功能。

    1、配置OSPF报文重传限制

    OSPF路由器在发送完DD、LSR和LSU三种报文后,如果没有在规定时间内收到相应的LSAck,报文会再次重传。当到达限定报文重传次数后,本端就断开和对方的邻接关系。为此可调整最大的DD、LSR和LSU报文的重传次数,以避免频繁出现邻居关系断开的现象。

    配置的方法仅需在对应的OSPF进程下使用retransmission-limit[max-number]命令配置,max-number取值范围是2~255,缺省30。

    使用display ospf [process-id] retrans-queue[interface-type interface-number] [neighbor-id] [low-level-of-retrans-times-range min-time] [high-level-of-retrans-times-rangemax-time]

    在OSPF进程100下配置最大的报文重传限制数为40:

    <Huawei>system-view

    [Huawei]ospf 100

    [Huawei-ospf-100]retransmission-limit 40

    2、使能在DD报文中填充接口的实际MTU

    DD报文中的InterfaceMTU字段填写的是接口的MTU值,缺省为0(代表不配置),但是在网络中存在不同厂商设备,建立虚连接时,不同的设备制造商可能使用不同的MTU缺省值。使用在对应接口视图下执行ospf mtu-enable命令,使能接口发送DD报文时填充MTU值,即使用接口的实际MTU值填写。配置本命令后,系统会自动重启OSPF进程,也会使邻居关系重新建立,所以通常不建议修改。

    指定GE1/0/0接口在发送DD报文时,填写实际的MTU值:

    <Huawei>system-view

    [Huawei]interface gigabitethernet 1/0/0

    [Huawei-GigabitEthernet1/0/0]ospfmtu-enable

    配置OSPF在不同网络类型中的属性

    OSPF支持Broadcast、NBMA、P2P、P2MP 4中类型的网络,通过配置OSPF接口的网络类型和调整属性可以灵活组建OSPF网络。

    4种网络类型的差异主要集中在发送报文形式不同,所以在4种网络类型中配置的OSPF协议,主要区别就是体现在协议报文的发送形式上。在不同网络类型属性的配置中,主要包括以下三项配置任务,且配置接口的网络类型是配置P2MP和NBMA网络属性的前置。

    ①配置接口的网络类型。

    ②配置P2MP网络属性。

    ③配置NBMA网络属性。

    同样,在配置OSPF在不同网络类型中的属性之前,需完成以下任务:

    ①配置接口的网络层地址,使各相邻节点网络层可达。

    ②配置OSPF的基本功能。

    一、配置接口的网络类型

    在对应接口视图下通过ospfnetwork-type {broadcast | nbma | p2mp | p2p}命令配置。四个多选项分别代表广播网络类型、NBMA网络类型、P2MP网络类型和P2P网络类型。

    缺省情况下,接口的网络类型是根据物理接口类型而定的,即以太网接口的网络类型为广播,串口和POS口(封装PPP协议或HDLC协议时)的网络类型为P2P,ATM和Frame-relay(帧中继)接口的网络类型为NBMA,可用undo ospf network-type命令恢复缺省。

    可根据实际情况配置接口的网络类型,但也不是随意的,具体要考虑一下几个方面:

    ①如果同一网段内只有两台设备运行OSPF协议,也可以将接口的网络类型改为P2P。

    ②如果接口的网络类型是广播,但在广播网络上有不支持组播地址的路由器,可以将接口的网络类型改为NBMA。

    ③如接口的网络类型是NBMA,且网络是全连通的,即任意两台路由器都直接可达,此时,可以将接口类型改为Broadcast,并且不必在配置邻居路由器。

    ④如果接口的网络类型是NBMA,但网络不是全连通的,必须将接口的网络类型改为P2MP。这样,两台不能直接可达的路由器就可以通过一台与两者都直接可达的路由器来交换路由信息。接口的网络类型改为P2MP网络后,不必再配置邻居路由器。

    ⑤如果同一网段内只有两台路由器运行OSPF,建议将接口的网络类型改为P2P。

    注意的几点:P2MP网络类型必须是由其他的网络类型强制更改的;一般情况下,链路两端的OSPF接口的网络类型必须一致,否则不可以建立起邻居关系;当链路两端的OSPF接口的网络类型一端是Broadcast,另一端是P2P时,仍可正常建立起邻居关系,但互相学习不到路由信息;当链路两端的OSPF接口的网络类型一端是P2MP,另一端是P2P时,仍可以正常的建立起邻居关系,但互相学习不到路由信息。为了互相学习到路由信息,此时需要在链路两端的OSPF接口上配置相同的Hello报文发送间隔和邻居失效时间。

    示例:将GE1/0/0接口设置为NBMA类型

    <Huawei>system-view

    [Huawei]interface gigabitethernet 1/0/0

    [Huawei-GigabitEthernet1/0/0]ospfnetwork-type nbma

    在Broadcast网络中可通过ospf dr-priority priority接口视图命令配置路由器的优先级,用于DR和BDR选举,其值越大,优先级越高。如果一台设备的接口优先级为0,则他不会被选举为DR或BDR。在广播或NBMA网络中,也可以通过配置接口的DR优先级来影响网络中DR或BDR的选举。

    示例:设置GE1/0/0接口在选举DR时的优先级为8。

    <Huawei>system-view

    [Huawei]interface gigabitethernet 1/0/0

    [Huawei-GigabitEthernet1/0/0]ospfdr-priority 8

    二、配置P2MP网络属性

    缺省情况下,在P2MP网络上,接口IP地址的子网掩码长度不一致的设备不可以建立邻居关系。但可以通过配置设备间忽略对Hello报文中网络掩码的检查,就可以正常建立OSPF邻居关系了。在P2MP网络中,当两台路由器之间存在多条链路时,通过对出方向的LSA进行过滤可以减少LSA在某些链路上的传送,减少不必要的重传。


    GR(Graceful Restart,平滑启动)是一种冗余容错技术,被广泛使用在主备切换和系统升级方面。OSPF通过增加Grace-LSA来支持GR功能。这种LSA用于在开始GR和退出GR时向邻居通告GR的时间、原因以及接口地址等内容。

    三、配置NBMA网络属性

    1、(可选)配置NBMA网络类型

    当确定某OSPF接口连接的是NBMA网络时,可以配置该接口的网络类型为NBMA。要注意的是,NBMA网络必须是全连通的,网络中任意两台路由器之间都必须直接可达(无需经过其他中间路由器)。如果这个要求无法满足,则必须通过命令强制将网络的类型改为P2MP。

    2、(可选)配置NBMA网络发送轮询报文的时间间隔

    在NBMA网络上,当邻居失效后,路由器将按设置的轮询时间间隔定期发送Hello报文。

    3、配置NBMA网络的邻居

    当网络类型为NBMA(如X.25或帧中继)时,可通过配置映射使整个网络达到全连通状态(即网络中任意两台设备之间都存在一条虚电路且直接可达)。这样,OSPF就可看做是广播网络进行DR、BDR选举等。但由于无法通过广播Hello报文的形式动态发现相邻设备,必须手动通过peer命令指定相邻设备的IP地址以及用于DR选举的优先级。


    四、OSPF网络属性管理

    1)display ospf[process-id] lsdb [brief]或display ospf [process-id] lsdb [{router | network | summary | asbr |ase | nssa | opaque-link | opaque-area | opaque-as} [link-state-id]][originate-router[advertising-router-id] | self-originate][age { min-value min-age-value|max-value max-age-value}*]:查看指定的或者所有OSPF的链路状态数据库(LSDB)信息。

    2)display ospf[process-id] peer [[interface-type interface-number] neighbor-id | brief |last-nbr-down]:查看指定或者所有OSPF邻居的信息。

    3)display ospf[process-id] nexthop:查看指定进程或者所有进程下OSPF的下一跳信息。

    4)display ospf[process-id] routing router-id [router-id]或display ospf[process-id] routing [ip-address [mask | mask-length]][interface interface-typeinterface-number][nexthop nexthop-address]:查看指定或所有OSPF路由表的信息。

    5)display ospf[process-id] interface [all | interface-type interface-number] [verbose]:查看指定或所有OSPF的接口信息。

    五、OSPF的DR选举配置示例


    如上图拓扑,在一个广播型OSPF网络中,配置RouterA的优先级为100,这是网络上最高优先级,被选举为DR;RouterC优先级第二高,被选举为BDR;RouterB优先级为0,无法成为DR或BDR,RouterD没有配置优先级,取默认值1。

    1、基本配置思路

    首先需要在各路由器上配置OSPF的基本功能,使整个网络通过OSPF协议可达,然后分别按照要求为RouterA、RouterB和RouterC配置用于DR、BDR选举的优先级。要注意,选举了DR和BDR后,区域内路由器仅与DR、BDR交互LSA,DROther之间不需要交互LSA的。

    2、具体配置步骤

    ①配置各接口的IP地址

    ②分别在4台路由器上配置OSPF基本功能,均采用缺省的OSPF进程1,所以在创建进程时不用写具体的进程号。然后宣告各区域中的接口所在网段,配置各自的路由器ID。


    此时可通过display ospf peer查看各路由器的邻居信息。因为此时都是采用的缺省优先级,DR和BDR角色的选举依据是路由器ID,高的为DR或者BDR,最终RouterD为DR,RouterC为BDR。


    当两台路由器接口的DR优先级相同时,路由器ID高的为DR或者BDR,但DR、BDR已选举完毕,当一台新路由器加入后,即使他的优先级值最大,也不会立即成为该网段中的DR,也就是不会进行DR角色抢占。

    ③重新按照要求进行配置A、B、C接口上的DR优先级。


    通过display ospf peer查看DR/BDR状态:


    尽管DR优先级进行了修改,但是DR和BDR角色仍没变化,需要重启OSPF进程才能进行新的DR选举。

    ④在各路由器用户视图下,同时执行reset ospf 1 process命令,以重启OSPF进程。在通过display ospf peer命令查看OSPF邻居状态:


    现在以RouterA为DR,RouterC为BDR,如果邻居状态是Full,说明他和邻居之间形成了邻接关系;如果停留在2-way的状态,则说明它们都不是DR或BDR,两者之间不需要交换LSA。

    还可通过命令查看OSPF接口的状态,如果OSPF接口的状态是DROther,则说明它们既不是DR,也不是BDR。


     

    配置OSPFStub/Totally Stub/NSSA/TotallyNSSA区域

    通过将位于AS边缘的一些非骨干区域配置成Stub区域(包括TotallyStub区域)或NSSA区域(包括Totally NSSA区域),可以缩减LSDB和路由表规模,减少需传递的路由信息数量。

    配置Stub区域需注意几点:

    ①骨干区域(Area0)不能配置成Stub区域或NSSA区域

    ②如果要将一个区域配置成Stub区域或者NSSA区域,则该区域中的所有路由器都要配置Stub区域或NSSA区域属性。

    ③Stub区域内不能有ASBR,即自治系统外部的路由不能在Stub区域内传播,且只有一个ABR;NSSA区域可以有一个或多个ABR和ASBR,允许自孩子系统外部的路由通过Type7 LSA在NSSA区域内传播,然后在NSSA区域的ABR上转换成Type5 LSA向其他OSPF区域传播。

    ④Stub区域和NSSA区域内都不能存在虚连接。

    一、配置OSPF的Stub/TotallyStub区域

    Stub区域的配置主要包括两项任务:①配置当前区域为Stub区域;②(可选)配置发送到Stub区域缺省路由的开销。如果想配置为Totally Stub区域,则还可在ABR上禁止Type3 LSA向区域内泛洪。当区域配置为Stub或者Totally Stub区域后,为保证到达外部自治系统,或者同时包括到达其他区域(仅在配置为Totally Stub区域时)的路由可达,Stub区域的ABR将自动生成一条缺省路由,并发布给Stub区域内的其他路由器。


    二、配置OSPF的NSSA/TotallyNSSA区域

    NSSA区域配置包括两项配置任务:①配置当前区域为NSSA区域;②(可选)配置发送到NSSA区域缺省路由的开销。如想配置为Totally NSSA区域,则还可在ABR上禁止Type3 LSA向区域内泛洪。当区域配置为NSSA或者Totally NSSA区域后,为保证到达非本区域直连的外部自治系统,或同时包括到达其他区域(仅当配置为Totally NSSA区域时)的路由可达,NSSA区域的ABR将自动生成一条缺省路由,并发布给NSSA区域中的其他路由器。


    三、Stub区域和NSSA区域管理

    ①display ospf[process-id] routing [ip-address [mask | mask-length]] [interface interface-typeinterface-number] [nexthop nexthop-address]或display ospf[process-id] routing router-id [router-id]:查看指定或所有的OSPF路由表的信息。

    ②display ospf[process-id] abr-asbr [router-id]:查看OSPF ABR和ASBR信息。

    ③display ospf[process-id] interface [all | interface-type interface-number] [verbose]:查看指定或所有进程下的指定或所有OSPF接口信息。

    四、OSPF的Totally Stub区域配置示例


    所有路由器都运行OSPF,整个自治系统划分为3个区域。其中RouterA和RouterB作为ABR,用来转发区域之间的路由,RouterD作为ASBR引入了外部静态路由(可见ASBR不一定要位于区域边缘)。现要求将Area1配置为Totally Stub区域,以最大限度的减少通告到此区域内的LSA数量,但又不影响与AS外部和其他区域间的路由的可达性。

    1、基本配置思路

    ①配置Area1为Stub区域(需要在Area1内所有的路由器上配置)。

    ②在RouterA上配置禁止向Stub区域通告Type3 LSA,使Area1成为Totally Stub区域,以进一步减少向区域内通告的LSA。

    ③在RouterD上配置静态路由,并在OSPF进程中引入,以此来验证当把Area1配置为Totally Stub区域后,区域内的各部路由器的OSPF路由表中不能见到所引入的外部路由。

    2、具体配置步骤

    ①配置各路由器接口的IP地址。


    ②在整个OSPF网络中的各路由器上配置OSPF基本功能,实现OSPF路由互通。


    ③在RouterD上配置一条到达200.0.0.0/8的“黑洞”(以NULL0接口为出接口)静态路由,使到达200.0.0.0/8网络的报文均直接丢弃,并在OSPF 1进程中引入。用来说明在把Area1配置为Totally Stub区域后,该区域内各路由器上见不到由OSPF引入的这条外部静态路由。


    通过display ospf abr-asbr命令查看RouterC的ABR/ASBR信息,可看到RouterA为ABR,RouterD为ASBR。


    通过display ospf routing命令查看RouterC的OSPF路由表。此时当RouterC所在区域Area1作为普通区域时,可以看到路由表中存在AS外部的路由,即RouterD上引入的静态路由,其他路由器的OSPF路由表中也可见。


    通过display ospf routing命令查看RouterC的OSPF路由表。此时当RouterC所在区域Area1作为普通区域时,可以看到路由表中存在AS外部的路由,即RouterD上引入的静态路由,其他路由器的OSPF路由表中也可见。


    再通过display ospf routing查看C的OSPF的OSPF路由表。可发现,当把C所在区域配置为Stub区域时,已经看不到AS外部的路由,取而代之的是一条缺省路由:


    ⑤再在Area1的ABR——RouterA上配置禁止向Stub区域通告Type3 LSA,把Area1配置成Totally Stub区域。


    通过display ospf routing查看C的OSPF路由表,可看出,禁止向Stub区域通告Summary LSA后,Stub路由器的路由表项进一步减少,凡是区域间的路由都没有了,只保留一条通往区域外部的缺省路由:


    五、OSPF的NSSA区域配置示例


    如上拓扑结构,所有路由器都运行OSPF,整个自治系统划分为两个区域。其中RouterA和RouterB作为ABR,用来转发区域之间的路由,RouterD作为ASBR引入了外部路由(以静态路由为例)。现要求将Area1配置为NSSA区域。配置NSSA区域中的RouterA和RouterB为转换路由器,配置RouterD为引入外部路由(静态路由)的ASBR,且路由信息可正确的在AS内传播。

    1、基本配置思路分析

    ①配置Area1为NSSA区域(需要在Area1内所有的路由器上配置)。

    ②在RouterD上配置静态路由,并在OSPF进程中引入,以此来验证当把Area1配置为NSSA区域后各区域内部路由器的OSPF路由表中可见到所引入的外部路由。

    ③配置RouterA作为NSSA区域中的转换路由器,使NSSA区域中引入的外部路由转换通过RouterA向其他区域中的路由器(如RouterC)进行通告,验证转换器的配置。

    2、具体配置步骤

    ①配置各路由器接口的IP地址。


    ②配置OSPF基本功能,实现OSPF路由互通。


    ③在各路由器上配置Area1区域为NSSA区域,以A为例:


    ④在RouterD上配置一条到达100.0.0.0/8的“黑洞”(以NULL0接口为出接口)静态路由,并在OSPF 1进程中引入。


    通过display ospf routing查看RouterC的OSPF路由表。可看到NSSA区域引入的AS外部路由的发布路由器的路由器ID为2.2.2.2。虽然在Area1中有两个ABR,但OSPF会选举RouterID较大的ABR作为转换路由器,所以最终的转换器是RouterB。


    通过display ospf lsdb查看RouterC的OSPF LSDB,可看到所引入的外部LSA:


    ⑤配置RouterA为转换路由器


    在RouterC上通过display ospf routing查看OSPF路由表,可看到NSSA区域引入的AS外部的路由的发布路由器的RouterID变为1.1.1.1,即RouterA成为了转换路由器。


    再在RouterC上通过display ospf lsdb,可以发现外部LSA也是通过RouterA来进行通告:


    展开全文
  • 动态路由协议与配置

    2020-07-01 22:53:39
    动态路由协议1.动态路由概述2.动态路由协议3.动态路由按照路由执行的算法分类4.RIP路由工作原理5.路由表的形成5.RIP的语法 1.动态路由概述 动态路由: 基于某种路由协议实现 动态路由的特点: 减少了管理任务 占用...
  • 本文档详细介绍路由器 OSPF 动态路由配置的方法 实验目的 掌握 OSPF 协议的配置方法 掌握查看通过动态路由协议 OSPF 学习产生的路由 熟悉广域网线缆的链接方式 实验背景 假设校园网通过一台三层交换机连到校园...
  • 路由技术: 二层(数据链路层)——交换机:mac地址、mac地址表(转发数据的依据)。... 动态路由——路由器间自动学习路由 1.局域网内——IGP(内部网关路由协议) 距离矢量路由协议——RIPV1、RI
  • 掌握查看通过动态路由协议 RIP 学习产生的路由;熟悉广域网线缆的链接方式; 实验背景假设校园网通过一台三层交换机连到校园网出口路由器上,路由器再和校园外的另一台路由器连接。现要做适当配置,实现校园网内部...
  • 管理距离介绍管理距离(AD)用于判断从邻接路由器收到的路由选择信息的可信度,它是0-255的整数,0表示可信度最大,255意味着他不会有数据流使用相应的路由默认管路距离(Show ip protocols查看动态路由的AD值)路由来源...
  • 实验九 路由器RIP动态路由配置

    万次阅读 2017-03-24 10:32:01
    实验九 路由器RIP动态路由配置 一、实验目的 掌握RIP协议的配置方法: 掌握查看通过动态路由协议RIP学习产生的路由; 熟悉广域网线缆的链接方式; 二、实验背景  假设校园网通过一台三层...
  • 实验十 路由器OSPF动态路由配置

    千次阅读 2017-09-17 16:42:24
    实验十 路由器OSPF动态路由配置 一、实验目的 掌握OSPF协议的配置方法:掌握查看通过动态路由协议OSPF学习产生的路由;熟悉广域网线缆的链接方式; 二、实验背景  假设校园网通过一台三层交换机连到校园网出口...
  • 实验十 路由器OSPF动态路由配置

    千次阅读 2017-03-24 10:32:03
    实验十 路由器OSPF动态路由配置 一、实验目的 掌握OSPF协议的配置方法: 掌握查看通过动态路由协议OSPF学习产生的路由; 熟悉广域网线缆的链接方式; 二、实验背景  假设校园网通过一台三层交换机连到...
  • 动态路由中,管理员不再需要静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表...
  • 静态路由的原理与配置动态路由 路由技术: 二层(数据链路层)——交换机:mac地址、mac地址表(转发数据的依据)。 三层(网络层)——路由器:IP地址、路由表(数据转发表)。 一、路由表的主要作用: ...
  • 网络配置动态路由

    2017-05-12 18:07:55
    网络配置动态路由介绍:动态...在动态路由中,管理员不再需要静态路由一样,手工对路由器上的路由表进行维护,而是在每台路由器上运行一个路由协议。这个路由协议会根据路由器上的接口的配置(如IP地址的配置)及...
  • 接下来按就让我们一起来了解一些有关于静态路由器的一些设置方法以及静态路由与动态路由的区别。静态路由的设置方法路由关系是需要双向解析的,和NAT单向不同的。在几个网段互联时就需要配置静态路由来指定某一个...
  • 2路由协议分类3管理距离介绍管理距离(AD)用于判断从邻接路由器收到的路由选择信息的可信度,它是0-255的整数,0表示可信度最大,255意味着他不会有数据流使用相应的路由默认管路距离(Show ip protocols查看动态路由...
  • IS-IS(Intermediate System-to-Imtermediate System,中间系统到中间系统)最初是ISO(国际标准化组织)为它定义的OSI (Open System Interconnection,开放系统互联)网络中CLNP设计的一种动态路由协议。随着TCP/IP的...
  • 动态路由与静态路由最大不同就是,动态路由无须手动配置一跳跳的路由,且可在网络通信流量或网络拓扑发生变化时能自动调整路由路径。无须网络管理员手动配置进行整理。 路由A配置: RouterA(config)#in...
  • 动态路由静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它...
  • 动态路由的优点 1.配置管理方便 2.适用于中大型网络 3.针对拓扑的变化可以自动重新收敛 动态路由协议的缺点 1.安全 2.容易造成选路不佳-最严重的情况—环路 3.占用硬件资源 衡量动态路由协议好坏的标准 pre 1.选路佳...
  • 掌握查看通过动态路由协议RIP学习产生的路由; 熟悉广域网线缆的链接方式; 实验背景  假设校园网通过一台三层交换机连到校园网出口路由器上,路由器再和校园外的另一台路由器连接。现要做适当配置,实现校园网...
  • 动态路由概述:基于某种路由协议实现特点:减少了管理任务占用了网络带宽动态路由协议概述:路由器之间用来交换信息的语言度量值:跳数,带宽,负载,时延,可靠性,成本静态路由与动态路由的比较:网络中静态路由和...
  • 掌握查看通过动态路由协议OSPF学习产生的路由; 熟悉广域网线缆的链接方式; 实验背景  假设校园网通过一台三层交换机连到校园网出口路由器上,路由器再和校园外的另一台路由器连接。现要做适当配置,实现校园网...
  • 掌握查看通过动态路由协议RIP学习产生的路由;熟悉广域网线缆的连接方式;二、实验背景假设校园网通过一台三层交换机连到校园网出口路由器上,路由器再和校园外的另一台路由器连接。现要做适当配置,实现校园网内部...
  • 掌握查看通过动态路由协议OSPF学习产生的路由;熟悉广域网线缆的连接方式;二、实验背景假设某公司通过一台三层交换机连到公司出口路由器上,路由器再和公司外的另一台路由器连接。现要做适当配置,实现公司内部主机...
  • IP路由概述介绍路由是把数据从源地址通过网络传输到目的地址的行为。路由器查看其路由选择表,并决定转发或者丢弃数据报。路由表项转发数据包方式...静态路由的管理距离(AD)改变到比动态路由选择协议产生的路由(...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 433
精华内容 173
关键字:

动态路由配置与管理