首页 > 代码库 > BGP路由
BGP路由
1、自治系统(AS)
自治系统:由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合;
自治系统内部的路由协议——IGP
自治系统之间的路由协议——EGP
AS号段:1-64511(公有号段)、64512-65535(私有号段)
2、BGP特征
IGP:着重于发现和计算路由,主要有RIP、OSPF、ISIS;
EGP:着重于控制路由的传播和选择最优的路由,通常指BGP;
BGP用来在AS之间传递路由信息,是一种增强的距离矢量路由协议(可靠的路由更新机制、丰富的metric度量方法、从设计上避免了环路的发生)为路由附带属性信息,支持CIDR(无类别域间选路)、丰富的路由过滤和路由策略;
3、BGP路由传递
首次连接是通过TCP三次握手,然后发生open消息协商,然后再通过keepalive报文检测TCP的连通性;
4、BGP可靠的路由更新
传输协议:TCP,端口号179,无需周期性更新;
路由更新:只发送增量路由;
周期性发送keepalive报文检测TCP的连通性;
5、BGP报文种类
open:负责和对等体建立邻居关系;
keepalive:在对等体之间周期性地发送,用以维护连接;
update:该消息被用来在BGP对等体之间传递路由信息;
notification:当BGP Speaker检测到错误的时候,就发送消息给对等体;
route-refresh:用来通知对等体自己支持路由刷新能力。
1)BGP报文头
报文头共19个字节:marker为固定值、length报文长度、type报文类型;
2)Open报文
3)keepalive报文
4)update报文
5) notification报文
6)route-refresh报文:通知对方进行路由刷新
6、BGP协议中消息的应用
通过TCP建立BGP连接时,发送OPEN消息;
连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端;
稳定后要定时发送keepalive消息以保持BGP连接的有效性;
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体;
ROUTE-KEFRESH消息用来通知对等体自己支持路由刷新;
7、BGP状态机
8、BGP数据库
IP路由表(IP-RIB):全局路由信息库,包括所有IP路由信息;
BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker选择的路由信息;
邻居表:对等体邻居清单列表;
Adi-RIB-In:对等体宣告给本地Speaker的未处理的路由信息库;
Adi-RIB-Out:本地speaker宣布给指定对等体的路由信息库;
9、BGP邻居关系
BGP邻居关系建立在TCP连接的基础之上;
可以通过IGP或静态路由来提供TCP连接的IP可达性;
BGP两种邻居关系:IBGP和EBGP
Loopback地址作为一台路由器的管理地址:管理员会使用该地址对路由器远程登录(telnet ),选择的telnet 地址必须是永远也不会down 掉的,而虚接口(Loopback接口)恰好满足此类要求。该接口地址作为动态路由协议OSPF 、BGP 的router id。
IBGP如果要指定使用Loopback作为原地址需要加一条命令:peer 4.4.4.4 connect-interface loopback 0;
EBGP建立连接要求TLL为1,即直连
EBGP如果指定使用Loopback作为原地址需要再加一条命令:peer 4.4.4.4 ebgp-max-hop 2
10、BGP路由通告原则
连接一建立,BGP Speaker将把自己所有BGP路由通告给新对等体;
多条路径时,BGP Speaker只选最优的给自己使用;
BGP Speaker只把自己使用的最优路由通告给对等体;
查BGP路由命令:display bgp routing-table
BGP Speaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);
保证IBGP下一跳可达
next-hop-local是RTB的地址;
BGP Speaker从IBGP获得的路由不会通告给它的IBGP邻居;
IBGP全互联,导致AS内部路由器需要维护更多的IBGP会话;
解决会话过多的方法是:路由反射器、联盟;
BGP Speaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定;
成为BGP路由的途径之一:network命令
成为BGP路由的途径之二:import命令
11、BGP路径选择
BGP路径属性是一组描述BGP前缀特性的参数;
BGP路径属性可以被分为四大类:公认必遵、公认任意、可选过渡、可选非过渡;
公认属性是所有BGP路由器都必须识别的属性;
1)公认必遵:所有BGP路由器都可以识别,且必须存在于update消息中,如果缺少这种属性,路由信息就会出错;
2)公认任意:所有BGP路由器都可以识别,但不要求必须存在于update消息中,可以根据具体情况来决定是否添加到update消息中;
可选属性不需要都被BGP路由器所识别:
1)可选过渡:BGP路由器可以选择是否在update消息中携带这种属性,接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性;
2)可选非过渡:BGP路由器可以选择是否在update消息中携带这种属性,在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用,因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必再转发给邻居路由器。
常见BGP路由属性:
origin:描述如何成为BGP路由
AS_PATH:一条路由中经过了哪些AS
nexthop:路由下一跳
MED:数据流如何进入其他AS
local-preference:数据流如何离开AS
community:对路由的标记
起源(Origin):某条路由是直接而具体的注入到BGP路由表中的,则origin属性为IGP;通过network命令注入BGP的路由;通过EGP学到的路由,则origin属性为EGP;其他情形下,origin属性都为incomplete;通过import命令注入BGP的路由;
origin属性值默认情况下不被任何路由器修改
AS路径(AS_PATH)属性:作用是避免成环、选路;
下一跳属性(Next Hop)
本地优先级属性(local-preference)
MED属性:只能通告给邻居路由器
上图是同一个AS两个MED,选MED小的;
下图是两个AS的MED不同,所以不考虑MED值;
团体属性(community):是一组有相同性质的目的地址路由,目的就是将路由信息编组,通过组的标识决定路由传递的策略。
no_export:不通告本AS
no_advertise:不通告
no_export_subconfed:只通过给IBGP
BGP路由选择过程:
1)如果此路由的下一跳不可达,忽略此路由;
2)preferred-value值数值高的优先;
3)local-preference值高的路由优先;
4)聚合路由优先于非聚合路由;
5)本地手动聚合路由的优先级高于本地自动聚合的路由;
6)本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由;
7)AS路径的长度最短的路径优先;
8)比较origin属性,IGP优于EGP,EGP优于Incomplete
9)选择MED较小的路由
10)EBGP路由优于IBGP路由
11)BGP优先选择到BGP下一跳的IGP度量最低的路径
12)比较cluster-list长度,短者优先
13)比较originator_ID(如果没有originator_id,则用router id比较),选择数值较小的路径;
14)比较对等体的IP地址,选择IP地址数值最小的路径;
12、BGP路由聚合
自动聚合:
手动聚合:手动聚合的优先级高于自动聚合的优先级;
BGP路由