IGP / EGP基础
- 1. 内部网关协议(IGP)
-
- 1.1 RIP
-
- 1.1.1 度量值
- 1.1.2 路由数据库
- 1.1.3 运行过程
- 1.1.4 防环机制
- 1.2 OSPF
-
- 1.2.1 特点
- 1.2.2 报文类型
- 1.2.3 LSA类型
- 1.2.4 区域
- 1.2.5 路由器类型
- 1.2.6 路由器ID
- 1.2.7 计算过程
- 1.2.8 网络类型
- 1.2.9 DR/BDR
- 1.3 OSPFv3
-
- 1.3.1 与OSPFv2的相同点
- 1.3.2 与OSPFv2的不同点
- 1.4 IS-IS
-
- 1.4.1 术语概念
- 1.4.2 IS-IS地址
- 1.4.3 NET
- 1.4.4 IS-IS区域
-
- 1.4.4.1 Level-1 路由器
- 1.4.4.2 level-2 路由器
- 1.4.4.3 Level-1-2 路由器
- 1.4.5 IS-IS拓扑结构
- 1.4.6 路由渗透
- 1.4.7 IS-IS网络类型
- 1.4.8 DIS和伪节点
- 1.4.9 IS-IS报文
- 1.4.10 IPv6 IS-IS
- 2. 外部网关协议(EGP)
-
- 2.1 边界网关协议(BGP)
-
- 2.1.1 特点
- 2.1.2 BGP发言者和BGP对等体
- 2.1.3 BGP的消息类型
- 2.1.4 BGP的路由属性
- 2.1.5 BGP的选路规则
- 2.1.6 BGP发布路由的策略
- 2.1.7 BGP负载分担
- 2.1.8 大规模BGP网络所遇问题的解决方法
- 2.1.9 MP-BGP
- 3. 总结
1. 内部网关协议(IGP)
IGP(内部网关协议)是在一个自治网络内网关(主机和路由器)间交换路由信息的协议。路由信息能用于网间协议(IP)或者其它网络协议来说明路由传送是如何进行的。IGP协议包括RIP、OSPF、IS-IS、IGRP、EIGRP。
内部网络协议一般分为:距离矢量路由协议 和 链路状态路由协议
1.1 RIP
RIP(Routing Information Protocol,路由信息协议),是一种基于距离矢量算法的内部网关协议,通过UDP报文进行路由信息交换,端口520,适用于小型网络。
1.1.1 度量值
RIP的度量值是跳数,衡量到达目的地址的距离。在RIP中,路由器到与他直接相连网络的跳数为0,通过一个路由器可达的网络跳数为1,以此类推。为了限制收敛时间,度量值规定取0-15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。也是由于度量值的限制,所以RIP不适用于大型网络。
1.1.2 路由数据库
每个允许的RIP路由器管理一个路由数据库,包含:
- 目的地址:主机或网络的地址
- 下一跳地址:为了到达目的地,需要经过的相邻路由器的接口IP地址
- 出接口:本路由器转发报文的出接口
- 度量值:本路由器到达目的地的开销
- 路由时间:从路邮箱最后一次被更新到现在所经过的时间,路由项每次被跟新时,路由时间会被重置为0。
- 路由标记:用于标识外部路由,在路由策略中可根据路由标记对路由信息进行控制。
1.1.3 运行过程
- 路由器启动RIP后,立即向相邻的路由器发送请求报文,相邻的RIP路由器收到请求报文后,响应请求,回送包含本地路由表信息的响应报文。
- 路由器收到响应报文后,更新本地路由表,同时向相邻路由器发送触发更新包文,通告路由更新信息。相邻路由器收到触发更新报文后,又向各自的相邻路由器发送触发更新报文,在一连串的触发更新广播后,网络中各个路由器都能得到并保持最新的路由信息。
- 路由器周期性的向相邻路由器发送本地路由表,运行RIP协议的相邻路由器在收到报文后,对本地路由进行维护,选择一条最佳路由,再向各自相邻网络发送更新信息,使更新的路由最终能达到全局有效。同时RIP采用老化机制对超市路由表进行老化处理,保证路由实时性和有效性。
1.1.4 防环机制
- 计数到无穷:将度量值大于或者等于16的路由定义为不可达。环路发生时度量值会增加到16,从而被认为不可达。这种方法其实不是根本上阻止了环路的发生,而是在环路发生的情况下,达到峰值则停止环路。
- 触发更新:RIP通过触发更新来避免多个路由之间形成路由环路而且可以加速网络收敛速度。一旦某条路由的度量值发生了变化,就立即向邻居路由发布更新报文,而不是等待更新周期。
- 水平分割:RIP从某个接口学到的路由,不会从该接口发回给邻居路由。可以减少带宽消耗和阻止环路。举例来说,路由器A从GE0/0/1接收到来自路由器B 的触发更新报文,那么路由器A就不会将信息通过GE0/0/1发回给路由器B。
- 毒性逆转:RIP从某个接口学到路由后,将该路由的度量值设置为16,并从接口发回邻居路由。这样可以清除对方路由表中的无用信息。
1.2 OSPF
OSPF(Open Shortest Path First,开放最短路劲优先),是一种基于链路状态的内部网关协议。
1.2.1 特点
- 适应范围广:支持各式规模的网络,最多可以支持数百台路由器
- 快速收敛:在网络拓扑结构发生变化后立即更新报文,使这一变化在自治系统中同步
- 无自环:由于OSPF根据收集到的链路状态用最短路径树算法计算路由,保证没有自环
- 区域划分:允许自治系统的网络被划分成区域进行管理。路由器链路状态数据库的减小降低了内存消耗和CPU负担;区域间传送路由信息的减少降低了网络带宽的占用。
- 等价路由:支持到同一目的地址的多条等价路由
- 路由分级:使用4类不同的路由,按照优先顺序分别是——区域内路由、区域间路由、第一类外部路由、第二类外部路由
- 支持验证:支持基于区域和接口的报文验证,以保证报文交互和路由计算的安全性
- 组播发送:在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰
1.2.2 报文类型
OSPF报文直接封装成IP报文,协议号89
- Hello报文:周期发送,用来发现和维持OSPF邻居关系,以进行DR/BDR选举
- DD(Database Description,数据库描述),描述本地LSDB(Link Stat DataBase,链路状态数据库)中的每条LSA(Link State Advertisement,链路状态通告)的摘要
- LSR(Link State Request, 链路状态请求)报文:向对方请求所需要的LSA。两台路由器相互交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需要的LSA。
- LSU(Link State Update,链路状态更新)报文:向对方发送所需要的LSA
- LSAck(Link State Acknowledgement,链路状态确认)报文:用来对收到的LSA进行确认。
1.2.3 LSA类型
OSPF中对链路状态信息的描述都是封装在LSA中发布出去,常用的LSA有以下几种类型:
- Router LSA(Type-1):由每个路由器产生,描述路由器的链路状态和开销,在其始发的区域内传播。
- Network LSA(Type-2):由DR产生,描述本网段所有路由器的链路状态,在其始发的区域内传播。
- Network Summary LSA(Type-3):由ABR(Area Border Router,区域边界路由器)产生,描述区域内某个网段的路由,并通告给其他区域。
- ASBR Summary LSA(Type-4):由ABR产生,描述到ASBR(Autonomous System Boundary Router,自治系统边界路由器)的路由,通告给相关区域。
- AS External LSA(Type-5):由ASBR产生,描述到AS(Autonomous System,自治系统)外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
- NSSA External LSA(Type-7):由NSSA(Not-So-Stubby Area)区域内的ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
- Opaque LSA:用于OSPF的扩展通用机制,目前有Type-9、Type-10和Type-11三种。其中,Type-9 LSA仅在本地链路范围进行泛洪,用于支持GR(Graceful Restart,平滑重启)的Grace LSA就是Type-9的一种类型;Type-10 LSA仅在区域范围进行泛洪,用于支持MPLS TE的LSA就是Type-10的一种类型;Type-11 LSA可以在一个自治系统范围进行泛洪。
1.2.4 区域
-
区域划分
当一个大型网络中所有路由器都运行OSPF时,LSDB会占用大量储存空间,增加算法复杂度,CPU负担加重。
而且大规模的网络中,拓扑结构发生变化也是很常见的,网络会处于频繁的“震荡”,造成大量OSPF协议在网络中传递,降低了带宽利用率。
所以OSPF将自治系统中分成不同区域进行管理。从逻辑上将路由器划分为不同组,每个组用区域号标识。区域边界是路由器,而不是链路。每个运行的OSPF接口都必须指明属于哪个区域。划分区域后,可以在区域边界路由器上进行路由聚合,以减少通告到其他区域的LSA数量,也可以将拓扑变化带来的影响减少到最小。
-
骨干区域(Backbone Area)
当OSPF区域划分后,并非所有区域都是平等的,其中有一个区域号为0的区域,通常被称为骨干区域,负责区域之间的路由,所有非骨干区域之间的路由信息必须通过骨干区域转发。对此,OSPF有两个规定:
a. 所有非骨干区域必须与骨干区域保持连通
b. 骨干区域自身也必须保持连通
如果由于限制无法满足,可以使用OSPF需连接解决
-
虚连接(Virtual Link)
虚连接是指两台ABR之间通过一个非骨干区域建立一条逻辑上的连接通道,它的两端必须是ABR,必须在两端同时设置才能生效,为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)。
虚连接相当于在两个ABR之间形成了一个点到点的连接,除了建立逻辑上的连接通道之外,还能提供冗余的备份链路,当骨干区域链路故障而不能连通时,通过虚连接仍然可以保证逻辑上的连通性。
- Stub区域和Totally Stub区域
- NSSA区域和Totally NSSA区域
1.2.5 路由器类型
-
区域内路由器(Internal Router)
路由器所有接口都属于同一个OSPF
-
区域边界路由器ABR
路由器可以属于两个或以上的区域,但是其中一个必须是骨干区域,ABR用来连接骨干区域和非骨干区域,可以是物理连接也可以说逻辑连接
-
骨干路由器
至少有一个接口属于骨干区域。所以所有的ABR和区域0路由器都属于骨干路由器
-
自治系统边界路由器ASBR
与其他AS交换路由信息的路由器称为ASBR,ASBR的位置不固定 ,只要这台路由器引入了外部路由信息,就是ASBR。
1.2.6 路由器ID
路由器允许OSPF协议之前,必须存在Router ID。获取方式有三种:
-
手动指定
用户创建OSPF的时候指定Router ID,配置时必须保证任意两台路由器的ID不同,通常将Router ID设置为Loopback接口的IP地址
-
自动获取
规则如下:
a. OSPF进程启动,将选取第一个运行该进程的接口的主IPv4地址作为Router ID
b. 设备重启时,OSPF将会选取第一个运行本接口的主IPv4地址作为RouterID
c. OSPF进程重启时,将从运行了本进程的所有接口的主IPv4地址中重新获取Router ID。规则:
- 如果存在配置IP的Loopback接口,则选择LoopBack接口地址中最大的作为router ID - 否则,从其他接口的IP地址中选择最大的作为Router ID(忽略UP/DOWN状态)
-
全局Router ID
如果在创建OSPF进程的时候没有指定Router ID,则缺省使用全局Router ID,
1.2.7 计算过程
同一个区域内,OSPF路由的计算过程如下:
- 每台OSPF路由器根据自己周围的网络拓扑结构生成LSA,并通过更新报文将LSA发送给网路中的其他OSPF路由器。
- 每台OSPF路由器都会收集其他路由器通告的LSA,所有的LSA放在一起就组成了LSBD,LSA是对路由器周围网络拓扑结构的描述,LSDB是对整个自治系统的网络拓扑进行描述。
- OSPF路由器将LSDB转换成一张带权有向图,这张图是对网络拓扑结构的真实反映。所有路由器的有向图是完全相同的。
- 每台路由器根据有向图,使用SPF算法计算出一颗以自己为root节点的最短路径树,这棵树给出了到自治系统中各个节点的路由。
也就是说OSPF的组建限制就是区域,在同一个区域内的所有路由器所储存的有向图都是一致的,协议条件就是运行时储存的有向图,相当于在路由器内储存了路径图,然后通过SPF(Shortest Path First,最短路径优先)计算转发路径。
1.2.8 网络类型
-
广播(Broadcast)
当链路层协议是Ethernet、FDDI是,缺省情况下,OSDF网络默认是广播类型,在这类中,通常以组播形式发送Hello报文、LSU和LSAck,以单播形式发送DD和LSR
-
NBMA
NBMA(Non-Broadcast Muti-Access,非广播多路访问)类型:当链路层协议是帧中继、ATM或者X.25时,缺省情况下,OSPF网络默认是NBMA,以单播形式发送协议报文。
-
P2P
P2P(Point to Point,点到点)类型:当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。以组播形式(224.0.0.5)发送协议报文
-
P2MP
P2MP(Point to MultiPoint,点到多点)类型:这种类型必须强制更改,通常将NBMA网络改为P2MP网络。缺省情况下,以组播形式(224.0.0.5)发送协议报文,也可以根据用户需求,以单播形式发送协议报文。
注意:
- OSPF路由器的预留IP组播地址是224.0.0.5,OSPF DR/BDR的预留IP组播地址是224.0.0.6
- NBMA网络是全连通的,P2MP网络并不需要一定是全连通的。
- NBMA网络中需要选举DR与BDR;P2MP网络中没有DR和BDR
- NBMA网络采用单播发送报文,需要手工配置邻居;P2MP网络采用组播港式发送报文,通过配置也可以采用单播发送。
1.2.9 DR/BDR
在OSPF广播网络中,任意两条路由器之间都需要交换路由信息,如果网络中有n台路由器,就需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,很复杂。所以提出了DR的概念,简单来说,DR是路由器的管理者,所有路由器的变化都将发送给DR,然后由DR将整个网络的链路状态转发给所有路由器。
BDR是DR的一个备份,在选举DR的同事也会选举BDR。BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。一旦DR失效,BDR立即成为新的DR代替工作。
选举:
DR/BDR是由同一网段中所有的路由器根据路由器优先级和Router ID通过Hello报文选举的,只有优先级大于0的才有选举资格。
进行选举时,每台路由器将自己选出的DR写入Hello报文中,发给网段上每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由级别高者胜出,如果优先级相等,则Router ID大的胜出。
注意!
1. 只有广播或者NBMA网络中才会选举DR;在P2P、P2MP网络中不需要选举DR。
2. DR是某网段中的概念,是针对路由器的接口而言,某台路由器在一个接口上可能是DR,另一个接口上可能是BDR或者是DR other。
3. DR/BDR选举后,不会因为新加入设备而重新选举,哪怕新加入的设备有更高优先级,所以DR并不一定是路由器优先级最高的,同理,BDR也不一定就是路由器优先级次高的路由器接口
1.3 OSPFv3
通常说的OSPF协议指得是OSPFv2,主要提供对IPv4的支。OSPFv3,是OSPF版本3的简称,主要提供的对IPv6的支持。
1.3.1 与OSPFv2的相同点
- Router ID, Area ID仍然是32位
- 相同类型的五种报文
- 相同的邻居发现机制和邻接形成机制
- 相同的LSA扩散机制和老化机制
1.3.2 与OSPFv2的不同点
- OSPFv3基于链路运行;OSPFv2基于网段运行。在配置OSPFv3时,不需要考虑是否配置在同一网段,只要在同一链路中,就可以直接建立连接关系。
- OSPFv3在同一条链路上可以运行多个实例,即一个接口可以使用多个OSPFv3进程(不同实例)
- OSPFv3通过RouterID标识邻居,OSPFv2通过IPv4标识邻居。
1.4 IS-IS
IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统),是一种链路状态协议,使用SPF(最短路径优先)算法进行路由计算
1.4.1 术语概念
- IS(Intermediate System):中间系统。相当于TCP/IP中的路由器,是IS-IS协议中生成路由和传播路由信息的基本单元。通常所说的IS和路由器具有相同的含义。
- ES(End System):终端系统。相当于TCP/IP中的主机系统,ES不参与IS-IS路由协议的处理,ISO使用专门的ES-IS协议定义终端与中间系统的通信。
- RD(Routing Domain):路由域。在一个路由域中多个IS通过相同的路由协议交换信息。
- Area:区域。路由域的细分单元,IS-IS允许将整个路由域分为多个区域。
- LSDB(Link State Database):链路状态数据库。网络内所有链路的状态组成了链路状态数据库。在每个IS中都至少有一个LSDB。IS使用SPF算法,利用LSDB来生成自己的路由。
- LSPDU(Link State Protocol Data Unit):链路状态协议数据单元,简称LSP。在IS-IS中,每个IS都会生成LSP,此LSP包含了本IS的所有链路状态信息。
- NPDU(Network Protocol Data Unit):网络协议数据单元,是OSI中的网络层协议报文,相当于TCP/IP中的IP报文。
- DIS(Designated IS):广播网络上选举的指定中间系统,也可以称为指定IS。
- NSAP(Network Service Access Point):网络服务接入点,即ISO中网络层的地址,用来标识一个抽象的网络服务访问点,描述OSI模型的网络地址结构。
1.4.2 IS-IS地址
NSAP由IDP(Initial Domain Part)和DSP(Domain Specific Part)组成:
IDP1 | IDP2 | DSP1 | DSP2 | DSP3 |
---|---|---|---|---|
AFI | IDI | HO-DSP | System ID (6 octet) | SEL (1 octet) |
IDP部分是ISO规定的,它由AFI(Authority and Format Identifier)和IDI(Initial Domain Identifier)两部分组成:
- AFI标识地址分配机构和地址格式
-
IDI用来标识域
DSP由HO-DSP(High Order Part of DSP)、System ID和SEL三个部分组成:
- HO-DSP用来分割区域
- System ID用来区分主机
-
SEL有时也能携程N-SEL(NSAP Selector),它的作用类似IP中的“协议标识符”,用于指示服务类型,不同的传输协议对应不同的SEL。
IDP和DSP的长度都是可变的,NSAP总长最多20字节,最少8字节。
IS-IS地址结构由以下三部分组成:
-
区域地址
IDP、DSP和HO-DSP一起,既能标识路由域,也能标识路由域中的区域,被称为区域地址。两个不同的路由域中不允许有相同的区域地址。
一般情况下,一台路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,一台路由最多可以配置3个区域地址。
-
System ID
System ID用来在区域内唯一表示主机或者路由器,固定长度48比特。
一般使用Router ID和System ID对应。假设一台路由器使用接口Loopback0的IP地址168.10.1.1作为Router ID,则它在IS-IS使用的System ID可通过如下方式转换:
- 将IP地址168.10.1.1的每一部分扩展为3位,不足三位的用0补足
168.010.001.001
- 将罗战后的地址重新划分为3部分,每部分4个数字组成,得到System ID
1680.1000.1001
- 将IP地址168.10.1.1的每一部分扩展为3位,不足三位的用0补足
-
SEL
SEL用于指示服务类型,不同的传输协议对应不同的SEL,固定为8比特,在IP中,SEL均为00
1.4.3 NET
NET(Network Entity Title,网络实体名称)指示的是IS本身的网络层信息,不包括传输层信息,可以看作是一类特殊的NSAP,即SEL为0的NSAP地址。因此,NET的长度与NSAP的相同,为8~20个字节。
NET由三部分组成:
- 区域ID:它的长度是可变的,为1~13个字节。
- System ID:用来在区域内唯一标识主机或路由器,它的长度固定为6个字节。
-
SEL:为0,它的长度固定为1个字节。
例如NET为:ab.cdef.1234.5678.9abc.00,则其中区域ID为ab.cdef,System ID为1234.5678.9abc,SEL为00。
通常情况下,一台路由器配置一个NET即可,当区域需要重新划分时,例如将多个区域合并,或者将一个区域划分为多个区域,这种情况下配置多个NET可以在重新配置时仍然能够保证路由的正确性。由于一台路由器最多可配置3个区域地址,所以最多也只能配置3个NET。在配置多个NET时,必须保证它们的System ID都相同。
1.4.4 IS-IS区域
为了支持大规模的路由网络,IS-IS在路由域内采用两级的分层结构。一个大的路由域通常被分成多个区域(Areas)。一般来说,我们将Level-1路由器部署在区域内,Level-2路由器部署在区域间,Level-1-2路由器部署在Level-1路由器和Level-2路由器的中间。
1.4.4.1 Level-1 路由器
Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,维护一个Level-1的LSDB,该LSDB包含本区域的路由信息,到区域外的报文转发给最近的Level-1-2路由器。
属于不同区域的Level-1路由器不能形成邻居关系。
1.4.4.2 level-2 路由器
Level-2路由器负责区域间的路由,可以与同一区域或者其他区域的Level-2和Level-1-2路由器形成邻居关系,维护一个Level-2的LSDB,该LSDB包含区域间的路由信息。所有Level-2路由器和Level-1-2路由器组成路由域的骨干网,负责在不同区域间通信,骨干网必须是物理连续的。
Level-2路由器是否形成邻居关系与区域无关。
1.4.4.3 Level-1-2 路由器
同时属于Level-1和Level-2的路由器称为Level-1-2路由器,可以与同一区域的Level-1和Level-1-2路由器形成Level-1邻居关系,也可以与同一区域或者其他区域的Level-2和Level-1-2路由器形成Level-2的邻居关系。Level-1路由器必须通过Level-1-2路由器才能连接至其他区域。Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由。
1.4.5 IS-IS拓扑结构
在IS-IS网络中,骨干区域中的所有路由器均是L2路由器,其他区域直接连接在骨干区域的路由器是L1/L2路由器,其他都是L1路由器
另外,IS-IS网络中也可以有不明确的骨干区域,在这种情况下所有L2和L1/L2路由器构成了IS-IS的骨干网络。
1.4.6 路由渗透
通常情况下,区域内的路由通过Level-1的路由器进行管理。所有的Level-2路由器和Level-1-2路由器构成一个Level-2区域。因此,一个IS-IS的路由域可以包含多个Level-1区域,但只有一个Level-2区域。
Level-1区域必须且只能与Level-1-2区域相连,不同的Level-1区域之间并不相连。
Level-1区域内的路由信息通过Level-1-2路由器发布到Level-2区域,因此,Level-2路由器知道整个IS-IS路由域的路由信息。但是,在缺省情况下,Level-2路由器并不将自己知道的其他Level-1区域以及Level-2区域的路由信息发布到Level-1区域。这样,Level-1路由器将不了解本区域以外的路由信息,Level-1路由器只将去往其他区域的报文发送到最近的Level-1-2路由器,所以可能导致对本区域之外的目的地址无法选择最佳的路由。
为解决上述问题,IS-IS提供了路由渗透功能,使Level-1-2路由器可以将已知的其他Level-1区域以及Level-2区域的路由信息发布到指定的Level-1区域。
也就是说,L2区域作为管理区,是能够知道包括所有L1区域的路由信息,但是对L1来说并不知道其他L1层的路由信息。所以路由渗透功能是让L1/L2路由器将已知的L1区域信息和L2区域信息发布到L1区域中。
1.4.7 IS-IS网络类型
IS-IS只支持两种类型网络,根据物理链路不同可以分为:
- 广播链路:如Rthernet、Token-Ring等
- 点到点链路:如PPP、HDLC等
1.4.8 DIS和伪节点
在广播网络中,IS-IS需要在所有的路由器中选举一个路由器作为DIS。
Level-1和Level-2的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。DIS优先级数值越高,被选中的可能性就越大。如果优先级最高的路由器有多台,则其中SNPA(Subnetwork Point of Attachment,子网连接点)地址(广播网络中的SNPA地址是MAC地址)最大的路由器会被选中。不同级别的DIS可以是同一台路由器,也可以是不同的路由器。
与OSPF的不同点:
- 优先级为0的路由器也参与DIS的选举;
- 当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,此更改会引起一组新的LSP泛洪。
在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。
DIS用来创建和更新伪节点(Pseudonodes),并负责生成伪节点的LSP,用来描述这个网络上有哪些路由器。
伪节点用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
使用伪节点可以简化网络拓扑,减少SPF的资源消耗。
1.4.9 IS-IS报文
-
PDU
IS-IS报文是直接封装在数据链路层的帧结构中的。PDU(Protocol Data Unit,协议数据单元)可以分为两个部分,报文头和变长字段部分。其中报文头又可分为通用报头和专用报头。对于所有PDU来说,通用报头都是相同的,但专用报头根据PDU类型不同而有所差别
-
Hello
用于建立和维持邻居关系,也称为IIH(IS-to-IS Hello PDUs)。其中,广播网中的Level-1路由器使用Level-1 LAN IIH,广播网中的Level-2路由器使用Level-2 LAN IIH,点到点网络中的路由器则使用P2P IIH。
-
LSP
LSP报文:用于交换链路状态信息。LSP分为两种:Level-1 LSP和Level-2 LSP。Level-1路由器传送Level-1 LSP,Level-2路由器传送Level-2 LSP,Level-1-2路由器则可传送以上两种LSP。
-
SNP
SNP(Sequence Number PDU,时序报文)通过描述全部或部分数据库中的LSP来同步LSDB,从而维护LSDB的完整和同步。
SNP包括CSNP(Complete Sequence Number PDU,全时序报文)和PSNP(Partial Sequence Number PDU,部分时序报文),进一步又可分为Level-1 CSNP、Level-2 CSNP、Level-1 PSNP和Level-2 PSNP。
CSNP包括LSDB中所有LSP的概要信息,从而可以在相邻路由器间保持LSDB的同步。在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10秒);在点到点链路上,CSNP只在第一次建立邻接关系时发送。
PSNP只列举最近收到的一个或多个LSP的序列号,它能够一次对多个LSP进行确认。当发现LSDB不同步时,也用PSNP来请求邻居发送新的LSP。
-
CLV
PDU中的变长字段部分是多个CLV(Code-Length-Value)三元组
1.4.10 IPv6 IS-IS
IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)支持多种网络层协议,其中包括IPv6协议,支持IPv6协议的IS-IS路由协议又称为IPv6 IS-IS动态路由协议。
IETF中规定了IS-IS为支持IPv6所新增的内容,主要是新添加的支持IPv6协议的两个TLV(Type-Length-Values)和一个新的NLPID(Network Layer Protocol Identifier,网络层协议标识符)。
TLV是LSP(Link State PDU,链路状态协议数据单元)中的一个可变长字段值。新增的两个TLV分别是:
- IPv6 Reachability:类型值为236(0xEC),通过定义路由信息前缀、度量值等信息来说明网络的可达性。
- IPv6 Interface Address:类型值为232(0xE8),它对应于IPv4中的“IP Interface Address”TLV,只不过把原来的32比特的IPv4地址改为128比特的IPv6地址。
NLPID是标识网络层协议报文的一个8比特字段,IPv6的NLPID值固定为142(0x8E)。
2. 外部网关协议(EGP)
EGP(Exterior Gateway Protocol,外部网关协议)是AS之间使用的路由协议,是一个在自治系统网络中两个邻近的网关主机(每个都有它们自己的路由)间交换路由信息的协议。EGP常常被用来在英特网的两个主机间交换路由表信息。路由表包括已知的路由器清单、它们能到达的地址以及与每个路由的路径相关的成本度量,以便选出最好的可用路径。每个路由器按照一定的时间间隔,通常在120秒到480秒之间,就给它的邻近路由发送信息,然后邻近路由就会将自己的完整路由表发回给它。
2.1 边界网关协议(BGP)
BGP(Border Gateway Protocol,边界网关协议)是一种既可以用于不同AS(Autonomous System,自治系统)之间,又可以用于同一AS内部的动态路由协议。当BGP运行于同一AS内部时,被称为IBGP(Internal BGP);当BGP运行于不同AS之间时,称为EBGP(External BGP)。
2.1.1 特点
- BGP是一种EGP(Exterior Gateway Protocol,外部网关协议),与OSPF、RIP等IGP(Interior Gateway Protocol,内部网关协议)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。
- BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
- BGP是一种路径矢量(Path-Vector)路由协议,它采用到达目的地址所经过的AS列表来衡量到达目的地址的距离。
- BGP支持CIDR(Classless Inter-Domain Routing,无类域间路由)。
- 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
- BGP路由通过携带AS路径信息彻底解决路由环路问题。
- BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
- BGP易于扩展,能够适应网络新的发展。
2.1.2 BGP发言者和BGP对等体
运行BGP协议的路由器称为BGP发言者。BGP发言者接收或产生路由信息,并将路由信息发布给其它BGP发言者。
相互之间存在TCP连接、相互交换路由信息的BGP发言者互为BGP对等体。
根据对等体所在的AS,可以将对等体分为以下两种:
- IBGP对等体:对等体与本地路由器位于同一AS。
- EBGP对等体:对等体与本地路由器位于不同AS。
根据对等体的IP地址类型,可以将对等体分为以下两种:
- IPv4对等体:通过IPv4地址创建的对等体。
- IPv6对等体:通过IPv6地址创建的对等体。
2.1.3 BGP的消息类型
BGP定义了以下几种消息类型:
- Open:TCP连接建立后发送的第一个消息,用于在BGP对等体之间建立会话。
- Update:用于在对等体之间交换路由信息。一条Update消息可以发布具有相同路径属性的多条可达路由,也可以同时撤销多条不可达路由。
- Keepalive:BGP周期性地向对等体发送Keepalive消息,以保持会话的有效性。
- Route-refresh:用来要求对等体重新发送指定地址族的路由信息。
- Notification:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP会话会立即中断。
2.1.4 BGP的路由属性
- 源(ORIGIN)属性
- AS路径(AS_PATH)属性
- 下一跳(NEXT_HOP)属性
- MED(Multi-Exit Discriminator,多出口区分)属性
- 本地优先(LOCAL_PREF)属性
- 团体(COMMUNITY)属性
- 扩展团体属性
2.1.5 BGP的选路规则
(1) 丢弃下一跳(NEXT_HOP)不可达的路由;
(2) 优选首选值(Preferred-value)最大的路由;
(3) 优选本地优先级(LOCAL_PREF)最高的路由;
(4) 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
(5) 优选携带AIGP属性的路由,AIGP属性值越小优先级越高;
(6) 优选AS路径(AS_PATH)最短的路由;
(7) 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
(8) 优选MED值最低的路由;
(9) 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;
(10) 优选IGP Metric值最小的路由;
(11) 优选迭代深度值小的路由;
(12) 如果当前的最优路由为EBGP路由,则BGP路由器收到来自不同的EBGP邻居的路由后,不会改变最优路由;
(13) 优选Router ID最小的路由器发布的路由。如果路由包含RR属性,那么在路由选择过程中,就用ORIGINATOR_ID来替代Router ID;
(14) 优选CLUSTER_LIST长度最短的路由;
(15) 优选IP地址最小的对等体发布的路由。
2.1.6 BGP发布路由的策略
BGP发布路由时采用如下策略:
- 存在多条有效路由时,BGP发言者只将最优路由发布给对等体。如果配置了advertise-rib-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由。
- BGP发言者只把自己使用的路由发布给对等体。
- BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体(包括EBGP对等体和IBGP对等体)。
- BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。
- 会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。
2.1.7 BGP负载分担
- 基于迭代路由实现BGP负载分担
- 通过改变BGP选路规则实现负载分担
2.1.8 大规模BGP网络所遇问题的解决方法
2.1.9 MP-BGP
BGP-4只能传递IPv4单播的路由信息,不能传递其它网络层协议(如IPv6等)的路由信息。为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP(Multiprotocol Border Gateway Protocol,多协议边界网关协议)。MP-BGP可以为多种网络层协议传递路由信息。
MP-BGP支持的协议
-
IPv6单播
通过MP-BGP发布和维护IPv6单播路由前缀信息。
-
IPv4组播/IPv6组播
组播路由协议PIM(Protocol Independent Multicast,协议无关组播)根据单播静态路由或者任意单播路由协议(包括RIP、OSPF、IS-IS、BGP等)所生成的单播路由表进行RPF(Reverse Path Forwarding,逆向路径转发)检查,以创建组播路由表项,从而进行组播报文的转发。组播转发路径与单播转发路径是一致的。但是,在某些情况下,组播网络拓扑和单播网络拓扑有可能不同;有些用户希望组播转发路径不同于单播转发路径,以便分别对组播流量和单播流量进行管理和控制。
MP-BGP对IPv4组播/IPv6组播的扩展,称为MBGP(Multicast BGP,组播BGP),它通过MP-BGP传递用于RPF检查的路由信息,并将该信息保存在独立的组播BGP路由表中,以实现单播转发和组播转发的隔离,使得组播转发路径可以不同于单播转发路径。
- VPNv4/VPNv6
- 带标签的IPv4单播/IPv6单播
- L2VPN
- IPv4 MDT
- MVPN
- EVPN
MP-BGP的扩展属性
路由信息中与网络层协议相关的关键信息包括路由前缀和下一跳地址。BGP-4通过Update消息中的NLRI(Network Layer Reachability Information,网络层可达性信息)字段携带可达路由的前缀信息,Withdrawn Routes字段携带不可达路由的前缀信息,NEXT_HOP属性携带下一跳地址信息。NLRI字段、Withdrawn Routes字段和NEXT_HOP属性不易于扩展,无法携带多种网络层协议的信息。
为实现对多种网络层协议的支持,MP-BGP定义了两个新的路径属性:
- MP_REACH_NLRI(Multiprotocol Reachable NLRI,多协议可达NLRI):用于携带多种网络层协议的可达路由前缀及下一跳地址信息,以便向邻居发布该路由。
- MP_UNREACH_NLRI(Multiprotocol Unreachable NLRI,多协议不可达NLRI):用于携带多种网络层协议的不可达路由前缀信息,以便撤销该路由。
MP-BGP通过上述两个路径属性传递不同网络层协议的可达路由和不可达路由信息。不支持MP-BGP的BGP发言者接收到带有这两个属性的Update消息后,忽略这两个属性,不把它们传递给其它邻居。
地址族
MP-BGP采用地址族(Address Family)和子地址族(Subsequent Address Family)来区分MP_REACH_NLRI属性、MP_UNREACH_NLRI属性中携带路由信息所属的网络层协议。例如,如果MP_REACH_NLRI属性中AFI(Address Family Identifier,地址族标识符)为2、SAFI(Subsequent Address Family Identifier,子地址族标识符)为1,则表示该属性中携带的是IPv6单播路由信息。关于地址族的一些取值可以参考RFC 1700。
MP-BGP支持BGP IPvX会话承载IPv4和IPv6路由
MP-BGP支持IPvX(X可以为4或6)对等体之间交互IPv4和IPv6路由,即IPv4对等体之间除了交互IPv4路由以外还可以交互IPv6路由,IPv6对等体之间除了交互IPv6路由以外还可以交互IPv4路由:
- IPv6路由的下一跳为IPv4地址时,MP-BGP将此IPv4地址映射为IPv6地址封装在Update报文的Next-Hop属性中。此时,需要配置路由策略,将IPv6路由的下一跳地址修改为对端设备的IPv6地址,否则无法正常进行路由迭代。
- IPv4路由的下一跳为IPv6地址时,需要BGP会话协商支持扩展IPv6下一跳能力,将IPv4 NLRI封装在MP_REACH_NLRI属性中。此时,需要配置路由策略,将IPv4路由的下一跳地址修改为对端设备的IPv4地址,否则无法正常进行路由迭代。
3. 总结
内部网关协议(IGP)主要使用RIP和OSPF两种协议,其中OSPF为了适配IPv6,产生OSPFv3。
RIP协议用跳数作为度量值,数据库表中包含目的地址、下一跳地址、出接口、路由时间和路由标记。通过 请求-响应-触发更新 的方式运行和更新路由表。利用 计数到无穷、触发更新、水平分割和毒性逆转 技术防环
OSPF协议通过区域划分降低内存消耗和CPU占用,利用Hello报文、DD报文、LSR报文、LSU报文、LSAck报文五种报文在AS之间同步路由信息。