Juniper-R&S-BGP(1):一些写在前头的基础知识


AS (autonomous system)自治系统

BGP提供环路防护机制(使用AS-Path属性)

一个AS,实际上就是路由器设置的一个控制和管理域。一个单独的管理域可以使用一个AS号来定义,并且只能赋予一个AS号。

应为BGP使用AS这个属性来标示路线,所以BGP又叫路径矢量路由协议Path-Vector Protocols。



BGP路由协议的特性(待补充)

  • BGP路由协议由很强的操控性

  • 可靠传输:BGP使用TCP协议(TCP 179端口),TCP本身的特性(三次握手、ACK、序列号、校验和、流控等)保证了BGP的可靠性。

  • 路由表的可扩展性:BGP对等体建立连接后,初始通告是整张路由表,然后就是根据需要发送路由更新了。

BGP的对等体Peer

BGP的对等体分为两种 IBGP和EBGP。

EBGP:当两个BGP路由器在不同AS网络时,他们之间的Session就是使用EBGP连接。

默认一个EBGP连接的Peer必须是直连:也就是IP头部TTL值被置为1.因此中间不允许存在其他三层设备。


IBGP:当两个NBGP路由器在相同的AS网络,他们之间的Session就是成为IBGP连接。

IBGP邻居不需要物理直连,BGP数据包的IP首部TTL值被设置为64 ,只要TCP的179端口可达,IBGP邻居关系就能建立,IBGP连接的建立依赖于AS网络中的IGP(静态、直连也算在内)产生的路由。

IBGP邻居有个重要的特性:IBGP邻居不会把从IBGP邻居学到的路由再发给一个IBGP邻居,但是会把从EBGP邻居处学到的路由发给IBGP邻居。


BGP 连接

BGP是增量(incremental)更新

不会定期的刷新全部路由信息



解决路由黑洞的方法。。

(详见专题)


BGP邻居状态

BGP邻居状态一共6种

—————-前三种属于TCP连接部分

  • Idle :这是邻居的初始化状态,在这个状态路由器将拒绝所有进入的TCP会话请求,当BGP进程启动后,路由器会向对等体发送TCP请求,然后本地路由器切换到Connect状态,并监听远程路由器的初始连接请求。

  • Connect:在Connect状态,本地路由器等待TCP会话建立完成。

  • Active 

—————-后三种属于BGP连接部分

  • OpenSent

  • OpenConfirm

  • Established



基本的路由信息

各个BGP路由器使用本地内存来存放路由信息,这总的来说称为 RIB(Routing Information Base),一个BGP对等体维持三种类型的RIBs

  • Adjacency-RIB-in

  • Local-RIB

  • Adjacency-RIB-out


Adjacency-RIB-in

adjacency-RIB-in 是本地路由为每一个BGP对等体创建的。从对等体接收到的所有路由都被存在合适的内存列表里。

–在这里需要注意:本地路由器会丢弃包含 AS Path环路的路由。

Local-RIB

到达每个目的地的最佳路由被存放在Local-RIB列表里,这些路由是本地路由器用来转发数据流量的。在这个RIB里,基于每个目的地,只有单一的路径通告(最优的)

Adjacency-RIB-out

每个BGP对等体同样创建一个属于自己的Adjacency-RIB-out表为outbound路由通告(所有outbound路由通告被存放在adjacency-RIB-out列表)。只有在Local-RIB 里面的路由才有资格被放进outbound数据库,换句话说,一个BGP路由器通告最佳路由(被用作流量转发的路由)


默认所有Local-RIB路由都被放置到adjacency-RIB-out列表。当然,你可以通过export路由策略修改这个默认的行为,一个策略可以添加、修改或者移除各个路由的属性,此外,一个策略可以防止某些路由别通告到指定的对等体。




BGP 路由选择进程

本地路由器会基于Adjacency-RIB-in 列表的路由信息,使用一个路由选择算法确定到达各个目的地的最佳路由。这个路由选择算法的主要依据是各种BGP属性值

  • 如果在Inbound中只有单条到达某一目的地的路由,那么该路由会直接放到Local-RIB列表,同时被用于数据包的转发。

  • 当到达同一目的地有多条路由时,就需要比较他们的属性值,在选择算法的每个步骤里,都是为了淘汰到达目的地的次优路由,如果还是存在多条路由,那么选择一个算法再进入到下一个步骤,一直到选出最优路由。



BGP选择算法步骤

  1. 各个路由的Next-Hop属性在本地路由表中必须可达的,如果不可达,本地路由器会丢弃该路由。

  2. 路由器会选择最佳(Local-Preference属性值得路由。

  3. 路由器会选择具有最短 AS Path 长度的路由。

  4. 路由器会选择具有最优 Origin属性的路由。(Origin属性值有三种,IGP,EGP,Incomplete,优先顺序是IGP(i)>EGP(e)>Incomplete(?))。

  5. 路由器会选择具有最小 MED(Multiple Exit Discriminator)属性值的路由。

  6. 路由器会优选基于EBGP对等体学习到的路由(相比从IBGP对等体学习到的路由)。

  7. 路由器会选择到达BGP Next Hop具有最小 IGP Metric值得路由。

  8. 如果在IBGP对等体使用RR(路由反射器),那么路由器会选择具有最短Cluster-List长度的路由。

  9. 路由器会选择具有最小RID(BGP对等体)通告的路由。

  10. 路由器会选择具有最小对等体地址(BGP对等体)通告的路由。



BGP的属性

1、Next Hop属性

属性代码 3

公认强制属性

BGP路由器学习到的到达目的地的下一跳

0.0.0.0 代表 是自己产生的路由,其他代表是别人产生的路由(自己产生的路由优先)

Juniper路由器将标记出来的路由隐藏起来,可以使用show route hidden查看


利用BGP Next Hop有五种可行的方法。

  • 设置下一跳属性。许多人认为这是一个IBGP Peer会话的最佳实现方式,这个方法允许通过路由器改变下一跳属性。

  • 使用一个IGP被动接口。在这个方式,EBGP对等体连接接口被配置为AS里IGP的被动接口,这允许IGP通告外部子网像内部路由一样在EBGP邻居还没有建立时。在AS的所有路由器就能找到通过下一跳的EBGP-speaking router.

  • 配置一个export policy,使用export 策略配置将直连路由通告给IGP,这样内部AS路由器就知道EBGP-Speaker路由器在哪里(Next-Hop

  • 建立一个IGP邻接。

  • 利用静态路由。

2、Local-Preference 本地优先级

属性类型代码 5

公认自决属性

所有BGP路由器必须识别本地优先级属性。

本地优先级用于AS内部(常被用于选择出口路由器)

默认本地优先级值为100 

取值范围 1- 4294967295


3、AS-Path

属性代码2

公认强制属性

防止路由环路

路由经过一个AS时,会自动添加这个AS号到BGP的路由AS列表中

只有在EBGP邻居之间通告的时候,AS号才会被添加,IBGP邻居通告时不会添加


4、Origin 起源属性

属性代码 1

公认强制属性

起源属性描述了BGP路由的起源


BGP路由的起源有三种

  1. IGP有IGP路由学来的,      使用“I”标识,并且编码值设置为0。

  2. EGP                                   使用“E”标示,编码值设置为1。

  3. Incomplete 路由源未知的 使用“?”标识,并且编码值设置为2。

IGP最优,EGP其次,?最差(重分布过来的路由标示就是“?”)

JunOS软件总是设置一个Origin值给所有使用export策略通告的IGP路由。


5、MED属性

属性代码 4

相当于IGP的metric值

JunOS软件解释不存在的MED值为0。


6、Community 团体属性

属性代码 8

可选的可传递的属性

该属性为4字节格式是 65001:1001 (前面是AS号,后面为属性值)

本文出自 “伟大玮先森的网络实验室” 博客,谢绝转载!