【BGP基础】(建bgp邻居、邻居状态机、报文)

一、BGP背景

【BGP基础】(建bgp邻居、邻居状态机、报文)_第1张图片

【BGP基础】(建bgp邻居、邻居状态机、报文)_第2张图片

之前学的ospf和isis都是igp都是用来计算路由,选一条最优路径

bgp只负责路由传递

二、BGP基本概念

【BGP基础】(建bgp邻居、邻居状态机、报文)_第3张图片

【BGP基础】(建bgp邻居、邻居状态机、报文)_第4张图片

1)bgp因为基于TCP,既可靠又快 

2)bgp是距离矢量,只会传路由,压根不会传拓扑信息。距离矢量不怎么占资源,有什么路由传什么路由,不会像链路状态一样,先计算拓扑信息再传路由。

3)bgp只能触发式更新,不能周期性更新,因为bgp一般用在Internet上,在这样一个大环境下,周期更新几十万条路由,特别消耗资源,顶不住啊~~(节约资源)

【BGP基础】(建bgp邻居、邻居状态机、报文)_第5张图片

小疑问?为啥bgp这么好,当初设计ospf的人不用tcp作为网络协议 ??

因为tcp是面向连接的,假如已经有tcp了,就不需要ospf邻居自动发现了。

能建立tcp连接,就说明早就已经知道邻居IP地址了,那还要ospf自动发现邻居关系干嘛,手动建算了

【BGP基础】(建bgp邻居、邻居状态机、报文)_第6张图片

bgp:职业传递路由

大规模路由传递,上bgp 

【BGP基础】(建bgp邻居、邻居状态机、报文)_第7张图片

 bgp很好很稳,但是用bgp需要AS,而AS号是要钱的,蛮贵的

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第8张图片

EBGP:在AS之间建立的bgp

IBGP:在AS内部建立的bgp

bgp对等体:与ospf的邻居差不多的意思

 小问题?AS之间用bgp是因为,传递的路由量大,那为啥在AS内部还要用bgp呢??

【BGP基础】(建bgp邻居、邻居状态机、报文)_第9张图片

 假设,AS内部不做bgp,那么AS内部的运行的是ospf协议,AS外面的是bgp协议,那么两个协议传递路由的时候,需要做路由引入。将AS外部的bgp引入到ospf,再将ospf路由引入回BGP。。

此时就会产生之前,我们学路由引入时的问题:环路、次优路径等。。 

那么bgp此时就没有存在的意义了,所以为了保留bgp的一些属性(优势),在AS内部也会做bgp。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第10张图片

【BGP基础】(建bgp邻居、邻居状态机、报文)_第11张图片

【BGP基础】(建bgp邻居、邻居状态机、报文)_第12张图片

 以前学习igp的时候,一般我们看前缀、掩码、开销、优先级

但是bgp有很多很多属性特性

【BGP基础】(建bgp邻居、邻居状态机、报文)_第13张图片

一般电信。移动、联通这些用的AS都是共有AS。

企业内部用AS,用的一般为私有AS。

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第14张图片

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第15张图片

bgp虽然好,但不是所有场景都适合bgp的 

 1)bgp传递大量的路由,所以对设备有一定要求。如果设备不太行,不建议使用,风险太大。

 2)访问AS外部,是单出口、单链路的情况下不要用bgp(无选路不要用bgp)。以为一条链路去访问,不需要选路,直接一条静态路由,OK了。

3)管理员技术有限 

【BGP基础】(建bgp邻居、邻居状态机、报文)_第16张图片

假如公司花了很多钱,提高公司网络的效率,技术人员把bgp也配好了,也通了。但是由于配置不完善,导致原本不该本公司处理的数据,跑到链路上来,就很浪费资源,也浪费钱。

**注意:!!!bgp的进程不要随便重启!!(根本就不能重启!)

        bgp容错率比ospf还要低(基本不允许错),因为bgp承载的业务量是极大的,重启进程,会带来许多位置的麻烦,例如:重启之后就再也起不来了,就算邻居起来了,之前重启这段时间丢失的数据量,也没了;也有可能,重启之后,之前没生效的路由策略又生效了;又或者出现环路或次优路径...等

        所以,在配置之前,考虑清楚bgp配好之后会发生什么,配完之后会有什么效果,想清楚再配置,一旦配置错误就麻烦了(ospf配错顶多瘫痪整个公司,bgp配错至少毁掉一整座城市)。。一重启一配错,准备写离职报告吧。。。bgp弄完了,可能就玩完了。。三思而后行!!!

三、BGP建立邻居 

1. 邻居建立小知识

1)bgp邻居建立:

ibgp:一般用loopback建立。
ebgp:一般用直连接口建立。

**bgp基于tcp协议
在bgp建立建立邻居时,就不一定必须要在对端接口配置了,
因为只要tcp协议能建立tcp连接,能通,bgp就可以通。 

【BGP基础】(建bgp邻居、邻居状态机、报文)_第17张图片

2)用loopback环回口建立ibgp的原因:环回口增加链路的冗余性。因为直连建立ibgp,会存在链路断掉,bgp邻居就没了的风险。用环回口的话,链路断一条没事,只要能通就能建立bgp邻居。

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第18张图片

3)不用loopback环回口建立ebgp的原因:

ebgp之间TTL值默认为1。

假如用loopback建立ebgp,当R4把包丢给R3时,R3没法再传递给自己的loopback了(可以修改TTL值来建立ebgp邻居),为了便捷,一般就用直连的接口建立ebgp了。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第19张图片

2.实验

1)拓扑

【BGP基础】(建bgp邻居、邻居状态机、报文)_第20张图片

2)bgp建立邻居配置

在R1和R3上建立ibgp,在R3和R4上建立ebgp

**BGP支持ipv4和ipv6(默认为ipv4,所以配置里面有个ipv4-family unicast)

【BGP基础】(建bgp邻居、邻居状态机、报文)_第21张图片【BGP基础】(建bgp邻居、邻居状态机、报文)_第22张图片【BGP基础】(建bgp邻居、邻居状态机、报文)_第23张图片

3)查看bgp邻居表

        di bgp peer

发现:两边邻居都建立成功(Established)!!

【BGP基础】(建bgp邻居、邻居状态机、报文)_第24张图片

可以从表中能看到:

        当前BGP的router id(改router id 选举参考ospf)、自身所处的AS号;BGP邻居的状态、AS号;默认版本为BGPv4。

通过邻居的AS号和自己的AS号,可以判断自己是否和邻居处于同一AS。

        AS相同,代表同一AS内,说明邻居关系为ibgp。

        AS不同,代表不在同一AS,说明邻居关系为ebgp。

四、BGP建立邻居的详细过程

1.BGP邻居建立:(跨设备建立)基于tcp,只要tcp能到,ping的通,就能建立。

例如:本实验的isis就是为了让两个loopback能互通,这样tcp就通了,bgp邻居才能顺利建立。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第25张图片

2.BGP邻居协商参数

【BGP基础】(建bgp邻居、邻居状态机、报文)_第26张图片

【BGP基础】(建bgp邻居、邻居状态机、报文)_第27张图片

引入路由

[R4-bgp]network 150.1.4.4 32

【BGP基础】(建bgp邻居、邻居状态机、报文)_第28张图片

1)open报文

【BGP基础】(建bgp邻居、邻居状态机、报文)_第29张图片

keeplive:60s。

hold time:180s超时时间。(类似ospf的dead time,超过一定时间,就认为邻居挂掉了)

例如:

【BGP基础】(建bgp邻居、邻居状态机、报文)_第30张图片

2)keepalive报文

用来保持tcp连接(与ospf的hello包类似)

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第31张图片

3)update报文

携带前缀和路径属性

【BGP基础】(建bgp邻居、邻居状态机、报文)_第32张图片

 4)notification报文

提供bgp报错信息

【BGP基础】(建bgp邻居、邻居状态机、报文)_第33张图片

例如:管理员手动重启进程(现网不要重启!!这里是实验所以没啥事。)

【BGP基础】(建bgp邻居、邻居状态机、报文)_第34张图片

5)route-refresh报文

一般见不到这个报文,在改变路由策略后能看到。【BGP基础】(建bgp邻居、邻居状态机、报文)_第35张图片 

例如:

【BGP基础】(建bgp邻居、邻居状态机、报文)_第36张图片

4.BGP状态机(5种状态机)

【BGP基础】(建bgp邻居、邻居状态机、报文)_第37张图片【BGP基础】(建bgp邻居、邻居状态机、报文)_第38张图片 

【BGP基础】(建bgp邻居、邻居状态机、报文)_第39张图片

1)idle状态:

        最开始配置时的bgp状态。指完邻居之后,会等待32s。进入下一个状态。

2)connect状态:

        主动发起TCP连接的过程。(此过程有可能会成功,也有可能失败)

        tcp建立成功->顺利进入下一个opensent状态。

        tcp建立失败->有主动变为被动模式(active状态),又对方发起TCP连接(对方发起的tcp来接成功->可以进入opensent状态;失败->等待一会再重新主动发起tcp连接)

3)opensent状态:

        open包来协商AS号、router id、版本号等等。

4)openconfirm状态:

        代表open包协商成功。当收到邻居的keepalive报文,进入最终状态established。

5)established状态:

        bgp邻居建立成功的最终状态!

 ***注意:其中任何地方错误error,直接回到起点idle。32s后会重新来一遍这个bgp建立过程。

 5.必须用loopback建立ebgp的情况

【BGP基础】(建bgp邻居、邻居状态机、报文)_第40张图片

当我们希望这个ebgp能备份时,我们加一条链路,实现冗余备份,这时我们才用环回口loopback来建立ebgp邻居。

那么建立bgp邻居,最首要的一点:tcp建立,那么路由要可达。

配一条静态路由 ,然后用环回口建邻居。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第41张图片 【BGP基础】(建bgp邻居、邻居状态机、报文)_第42张图片

查看bgp邻居表

发现:邻居一直起不来?

原因是ebgp的TTL值为1。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第43张图片

所以修改ebgp的跳数为2,让环回口可达。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第44张图片【BGP基础】(建bgp邻居、邻居状态机、报文)_第45张图片

 查看bgp邻居表。

邻居建立成功。

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第46张图片

6.***检查bgp邻居建立:

1)路由是否ok

2)bgp参数是否完整(邻居的AS号、ebgp的跳数、router id等)

四、路由传递

1.bgp路由的生成

【BGP基础】(建bgp邻居、邻居状态机、报文)_第47张图片

 路由引入的方式有两种:

1)network(精确匹配一条路由)

2)import-route(运用ACL、ip前缀等做路由引入)

但是network引入时,必须要精确、严格匹配网络的前缀和掩码

【BGP基础】(建bgp邻居、邻居状态机、报文)_第48张图片

2.假设:我们此时新建一个环回口10.1.4.4/32的网络,将这条直连宣告进bgp。

        那么我们用network宣告的时候,只能是network 10.1.4.4 32,而不能是network 10.1.4.4 24,因为只有路由表里有的路由才能传递,此时路由表里根本没有掩码为24的10.1.4.4的网络,无法生效。

只能是 10.1.4.4/32。

        只有这条路由在我的路由表里,不管是不是我本地直连,我都可以传进bgp里,但是没有的路由,一定无法传进去。

比如:现在我的R1的路由表上有一条150.1.2.2的环回口,就可以将它宣告进bgp

【BGP基础】(建bgp邻居、邻居状态机、报文)_第49张图片

查看R4的bgp路由表

发现:刚150.1.2.2/32的路由已经传入bgp了 

【BGP基础】(建bgp邻居、邻居状态机、报文)_第50张图片

3.假如:我要一次性引入很多条命令呢?用import-route路由引入

【BGP基础】(建bgp邻居、邻居状态机、报文)_第51张图片

 查看R4的bgp路由表

发现:的确引入了150网段的多条路由,但是150.1.1.1却不见了

【BGP基础】(建bgp邻居、邻居状态机、报文)_第52张图片

 > 代表这条路由可以传递的

查看R1的bgp路由表

发现:10.1.4.4这条路由前面没有带 >,它不可传,而且下一跳很奇怪,是150.1.4.4。

【BGP基础】(建bgp邻居、邻居状态机、报文)_第53张图片

4.bgp 传递:只有在路由传递给ebgp邻居时,下一跳会改变。但路由传递给ibgp时,下一跳不变。

        例如R2的150.1.2.2的路由到R3再到R4时,在R4上查看会发现,下一跳为R3。

也就是,10.1.4.4->155.1.34.4->155.1.34.3->..->最终目标,这个过程中下一跳一直在起始路由器上(R4)

        R1ping R4的10.1.4.4的下一跳不可达(10.1.34.4),于是在R3上修改下一跳,告知AS内的ibgp邻居,自己是去往R4的下一跳。

peer 150.1.1.1 next-hop-local 
【BGP基础】(建bgp邻居、邻居状态机、报文)_第54张图片
查看R1的bgp路由表

发现:下一跳变为R3了

【BGP基础】(建bgp邻居、邻居状态机、报文)_第55张图片

但是R2无法与R4通信,因为R2没有R4的路由,R2本身没有bgp邻居,传路由根本传不到它那。

5.import-route带来的问题

把150.1.0.0所有网段都引入的时候,150.1.1.1没法传递路由。

因为在华为里,超网是无法传递的(前缀和下一跳相同),例如150.1.1.1/32这个网段的掩码,下一跳恰巧也是150.1.1.1,是超网,无法传递。

 【BGP基础】(建bgp邻居、邻居状态机、报文)_第56张图片【BGP基础】(建bgp邻居、邻居状态机、报文)_第57张图片

小总结

【BGP基础】(建bgp邻居、邻居状态机、报文)_第58张图片

你可能感兴趣的:(网络安全,安全,web安全)