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选择算法步骤
各个路由的Next-Hop属性在本地路由表中必须可达的,如果不可达,本地路由器会丢弃该路由。
路由器会选择最佳(高)Local-Preference属性值得路由。
路由器会选择具有最短 AS Path 长度的路由。
路由器会选择具有最优 Origin属性的路由。(Origin属性值有三种,IGP,EGP,Incomplete,优先顺序是IGP(i)>EGP(e)>Incomplete(?))。
路由器会选择具有最小 MED(Multiple Exit Discriminator)属性值的路由。
路由器会优选基于EBGP对等体学习到的路由(相比从IBGP对等体学习到的路由)。
路由器会选择到达BGP Next Hop具有最小 IGP Metric值得路由。
如果在IBGP对等体使用RR(路由反射器),那么路由器会选择具有最短Cluster-List长度的路由。
路由器会选择具有最小RID(BGP对等体)通告的路由。
路由器会选择具有最小对等体地址(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路由的起源有三种
IGP有IGP路由学来的, 使用“I”标识,并且编码值设置为0。
EGP 使用“E”标示,编码值设置为1。
Incomplete 路由源未知的 使用“?”标识,并且编码值设置为2。
IGP最优,EGP其次,?最差(重分布过来的路由标示就是“?”)
JunOS软件总是设置一个Origin值给所有使用export策略通告的IGP路由。
5、MED属性
属性代码 4
相当于IGP的metric值
JunOS软件解释不存在的MED值为0。
6、Community 团体属性
属性代码 8
可选的可传递的属性
该属性为4字节格式是 65001:1001 (前面是AS号,后面为属性值)
本文出自 “伟大玮先森的网络实验室” 博客,谢绝转载!
原文:http://weidawei.blog.51cto.com/1050147/1615869