BGP详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BGP详解相关的知识,希望对你有一定的参考价值。

BGP:

BGP是建立在TCP之上的  端口号为179

AS:(两者是区分开来的)特指被相关机构管理  运行相同路由协议的一组路由器(中国人只能和中国人说,外国人和外国人说)

BGP是运用在AS之间的

BGP的前身是EGP,EGP只能在AS之间简单的传递路由信息,不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题,BGP一般运营在运营商的核心网

BGP的邻居发现:

技术分享

先启动BGP的一端先发起TCP连接,如图所示,RTB先启动BGP协议,RTB使用随机端口号向RTA的179端口发起TCP连接。

路由器是通过物理口去建立邻居的;Loopback也能建立,前提是必须要有路由,需要建立一个动态路由或者静态路由。

源是12.1.1.1 目的2.2.2.2

源是2.2.2.2 目的 10.1.1.1

没有匹配,即三次握手没有成功


AS号的分类:

1-64511 由IANA统一分配

64512-65535 私有企业或者自行分配

特点:BGP可以跨越多跳路由器建立邻居关系,非常吊

邻居关系:

EBGP(外部网关边界协议):运行在不同AS之间的BGP路由器建立的邻居关系,默认的优先级是225,默认的TTL是1

IBGP(内部BGP协议):运行在相同AS之间BGP路由器建立的邻居关系,默认的优先级是225,默认的TTL是255

[R1]router id 1.1.1.1   (标识路由器)

[R1]bgp 100 (配置邻居关系)

[R1-bgp]peer 2.2.2.2 as-number 100 (peer后面是对端邻居的接口地址,as-number后面是邻居路由器所在的AS号,AS号相同,就是IBGP邻居关系,AS号不同,就是EBGP邻居关系)

PS:建立IBGP邻居关系是时,一般使用loopback接口的IP地址,因为loopback接口开启后一直处于UP状态,只要保证路由可达,邻居关系就会处于稳定状态。而建立EBGP邻居关系时,一般使用直接接口的IP地址,因为EBGP是跨AS建立邻居关系,邻居关系建立之前非直连接口之间的路由不可达

BGP邻居关系配置的优化

在路由器上敲

[R1]router id 1.1.1.1   (标识路由器)

[R1]bgp 100 (配置邻居关系)

[R1-bgp]peer 2.2.2.2 as-number 100

[R1-bgp]peer 2.2.2.2 connect-interface LoopBack 0 (修改更新源,路由器默认是物理口建立可连接)


报文:

Open keeplive update route-refresh notification

open:邻居建立发送的第一个报文 协商参数

keeplive:周期性发送,去看链路是否正常

update:去更新路由信息

①更新路由属性相同的多个路由条目

②更新路由不可达的路由条目(删除)

route-refresh:当路由策略改变的时候会发送该报文去请求新的路由条目

notification:当邻居失效就会发送这个报文

一:Idle:BGP的初始状态,不会去接受任何邻居发来的任何请求

二:connect:如果成功了就进入OPEN SENT状态,如果失败了会根据重传计时器重新发起链接,同时切换到Active状态。也就是说,只要在Connect状态,就证明BGP正在试图建立连接,而不是等候。

①连接成功

②连接不成功

③请求超时

三:active:请求连接,向邻居去请求连接的,在OPENSENT的时候,如果BGP链接忽然丢失,也会进入这个状态。

第一种 请求成功 connect

第二种  请求不成功

第三种  请求超时

四:opensent

对收来的open报文进行检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive 报文,并复位Keepalive 计时器,开始计时。协商成功  进入下一个状态

五:opencomfirm:如果收到了一个Keepalive 报文,就转入Established 阶段,BGP邻居关系就建立起来了。如果TCP连接中断,就退回到Idle 状态。

六:establish:BGP 邻居关系已经建立,这时,BGP将和它的邻居们交换Update 报文

TTL:经过一台路由器,并且经过解封装和重新封装以后的源地址和目标地址不变,这时候,TTL减1

BGP通告原则之一:仅将自己最优的路由发给邻居

技术分享

将10.1.1.0/24这个路由发布给邻居

下一跳自我:

看上图可知,10.1.1.0/24的下一跳是1.1.1.1,他就会把1.1.1.1发送给邻居,其他路由器也就接受到了这个1.1.1.1,但是,这些路由器并不能直接通信,因为下一跳是直接到达1.1.1.1了,所以,不是最优的路由,没有到达直连的那个路由器,所以,需要修改下一跳,把下一跳设置为从传到他的那个路由

技术分享

如上图所示,它的下一跳就改变了,他就能把这个最优路由发布给其他的邻居,其他的路由器通过这个直连的下一跳,也就能通信了。

配置命令:[R2-bgp]peer 4.4.4.4 next-hop-local

BGP通告原则之二:通过EBGP获得的最优路由发布给所有BGP邻居

BGP通告原则之三:从IBGP学到的最优路由不会发给其他的IBGP邻居、(也是IBGP的水平分割)

技术分享

R3从R1通过EBGP学来的10.1.1.0/24的路由发送给R2,但是R2不会通过IBGP把10.1.1.0/24学来的路由发送给R4,所以,R4是不会接收到10.1.1.0/24这条路由的

BGP通告原则之四:BGP与IGP的同步

也就是把BGP的路由表和IGP的路由表同步

华为默认关闭

技术分享

IBGP水平分割:从IBGP学到的最优路由不会发给其他的IBGP邻居、

路由黑洞

解决:

1.全互联(TCP会话过多,资源占用就大了)

2.路由的引入,把BGP的路由引入到IGP中

前两个不是太靠谱,因为BGP有上万个路由条目,IGP只有几千个

3.MPLS

BGP路由信息处理

技术分享

当从BGP邻居接收到Update报文时,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径

得出的最佳路径被存储到本地BGP路由表(local_RIB)中,然后被提交给本地IP路由表

BGP的属性

技术分享

公认:在Update报文当中,可以支持和识别的属性

①公认必遵:在Update报文当中,必须携带的属性

②公认任意:可以不携带在update报文当中

可选:在update报文当中,可以不识别的属性

可选过渡:本BGP路由器不识别的属性,但是可以把该属性传递给邻居

可选非过渡:本BGP路由器忽略的属性,并且不传递给邻居

BGP属性-Origin

Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的

orgin的三种属性:

i表明BGP路由通过network命令注入

技术分享

e表明BGP路由是从EGP学来的(现在EGP不用了,但是可以通过路由的策略修改为e)

?即incomplete(路由引入)表明BGP路由通过其他方式学来的路由信息

三种Origin属性的优先级为:i>e>Incomplete(?)

通过EGP学习来的   E

incomplete(路由引入)

AS-PATH:记录了路由经过的所有AS的编号

规定AS_PATH越短(记录的AS编号越少),路径越优

BGP属性-Next_hop

1.EBGP邻居之间采用直连接口建立邻居关系,EBGP邻居在相互通告路由时会修改Next-hop为自己的出接口IP;

2.IBGP邻居通常采用Loopback接口建立邻居,当路由时本路由器起源的,在发送给邻居之后Next-hop该为自己的更新源地址,这样即使网络中出现链路故障,只要Next-hop可达,同样可以访问目的网段,提高网络稳定性

MED(以小为优)

仅在相邻的两个AS之间传递,收到此属性的AS不会再通告给任何第三方AS,用于判断流量进入AS时的最佳路由 和Local_Preference一样,也是设置怎么走

Local_Preference(以大为优)

Local_Preference属性仅在IBGP邻居之间有效,不通告给其他的AS。它表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由 设置怎么走,往哪里走,控制往哪里走,默认是100


BGP路由优选原则

BGP路由器将路由通告给邻居后,每个BGP邻居都会进行路由选择,路由选择有三种情况

1.该路由到达目的地唯一的路由,直接优选

2,对到达同一目的地的路由多条路由,优选优先级最高的

3.对到达同一目的地具有相同优先级的多条路由,必须用更细的原则去选择一条最优的

一般来说,BGP计算路由优先级的规则如下

1.丢弃下一跳不可达的路由

2.优选Preference_Value值最高的路由(私有属性,进本地有效)

3.优选本地优先级最高的路由

4.优选手动聚合>自动聚合>network>import>从对等体学到的

5.优选AS_Path最短的路由

6.起源类型IGP>EGP>Incomplete

7.对于来自同一AS的路由,优选MED值最小

8.优选从EBGP学来的路由(EBGP>IBGP)

9.优选AS内部IGP的Metric最小的路由

如果前九条都是一样的话,就会出现负载分担

但是,BGP不会让他出现负载分担的

10.优选Cluster_List最短的路由

11.优选Orginator_ID最小的路由

12.优选Router_ID最小的路由器发布的路由

13.优选具有较小的IP地址的邻居学来的路由


Preference_Value是BGP的私有属性(华为的私有属性),Preference_Value相当于BGP选路规则的Weight值,仅在本地路由器生效,Preference_Value值越大,越优先


引入一个默认路由

第一种方式

[R1]bgp 100

[R1-bgp]peer 2.2.2.2 default-route-advertise

第二种方式

[R1]ip route-static 0.0.0.0 0.0.0.0 NULL 0(目的是让默认路由出现在igp路由表里)

[R1-bgp]network 0.0.0.0 0


手工汇总:

第一种:

[R1]ip route-static 123.0.0.0 8 NULL 0

[R1-bgp]network 123.0.0.0 8

第二种:

aggregate 123.0.0.0 8

收到的是明细路由和汇总路由



路由反射器(RR)

1.客户机

2.服务器

3.非客户机

相当于一面镜子,通过这面镜子进行反射

[R2-bgp]peer 3.3.3.3 reflect-client

怎么改最优

①从EBGP学来的路由会发给所有的客户机和非客户机

②从非客户机学来的路由会发给所有的客户机

③从客户机学来的路由会发给除了该客户机以外的所有客户机和非客


本文出自 “costin” 博客,请务必保留此出处http://brighttime.blog.51cto.com/12837169/1958309

以上是关于BGP详解的主要内容,如果未能解决你的问题,请参考以下文章

华为路由器——BGP路由技术详解

BGP的四类属性详解

BGP路由属性详解

数通面试私房菜之BGP专题第三期:BGP属性详解

华为路由器BGP邻居详解

数通面试私房菜之BGP专题第二期:BGP状态机详解