BGP邻居建立及特点

BGP特点:

  1. 有认证和GTSM机制,保障安全
  2. 有丰富的路由属性,更加灵活的选路
  3. 通过路由聚合,路由衰减防止震荡
  4. 增量式,触发式更新,路由条目太多了
  5. 基于TCP协议,179号端口,支持BFD等,提高可靠性
  6. 邻居多,对于有相同出口的场景,BGP会按组打包,提高打包,发包性能

BGP有两种角色

speaker

发送BGP报文的发送者

peer

相互发送BGP报文之间的关系叫对等体

BGP的邻居:

因为基于TCP协议,所以不需要直连,通过IGP(ospf等)协议,静态等来实现道路畅通,只要TCP可达,即路由也可达

BGP的邻居必须手动指定,不像ospf通过net一下就可以自动获取,
并且,一台BGP路由器只能在一个AS区域内,不能像ospf路由器那样,一台的多个接口属于不同的区域

所以,根据AS又可以分为:

IBGP:内部BGP,在相同AS内的BGP路由器
EBGP:外部BGP,在不同AS内的BGP路由器

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_TCP

这里有三台路由器,需求RT1和RT2建立邻居,RT2和RT3建立邻居

先看RT1和RT2之间的需求

配置:

[rt1-bgp]dis th
[V200R003C00]
#
bgp 12        //bgp进程号
 router-id 1.1.1.1
  //bgp的router-id,和ospf的一样,选举方式也一样    
 peer 10.1.1.2 as-number 12  //指定的邻居ip以及邻居所属的AS
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.1.2 enable
[rt2-bgp]dis th
[V200R003C00]
#
bgp 12  //bgp进程号
 router-id 2.2.2.2  //bgp的router-id,和ospf的一样,选举方式也一样  
 peer 10.1.1.1 as-number 12 //指定的邻居ip以及邻居所属的AS
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.1.1 enable
#

路由器在配置好邻居后,会自动配置enable,反之也说明邻居是可以关闭的

验证:

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络_02

状态为establishe则代表邻居建立成功

peer

指向的邻居地址

V

表示版本号,这里是4

AS

表示区域号

MsgRcvd

表示接受的数据包的个数,是会随着时间不断更新的

MsgSent

表示发送的数据包的个数,也是会不断更新的

out

表示缓存区待发送的数据包

Up/Down

表示建立时长

state

表示状态

pre

表示从对方那里收到多少条路由更新

通过抓包可以看出,邻居建立之前显示TCP的三次握手,只要有一方发起,并且握手成功,peer就建立完成了

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络协议_03

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络协议_04


验证tcp的状态发现:bgp邻居建立成功的最后状态和tcp的状态一模一样(bgp是基于tcp建立邻居的),并且发起方是不定的(纯看运气),谁先发,谁的端口号就是随机的,发送到对方的179端口上面的listening是监听状态

RT1:
eg:我的179端口接收10.1.1.2从任意端口发来的请求
eg:10.1.1.2从50037端口向我的179发起请求,经过三次握手,最终邻居建立成功

在BGP的世界,一台路由器可能用多个端口连接多台设备,建立多个邻居,如果用物理端口,万一端口downl,邻居建立失败,里面这么多路由不就嗝了,所以,可以通过创建loopback口,来进行邻居的建立

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络协议_05

配置完成后,发现等了60S多了还没有建立邻居(BGP默认60S发一次keepalive,更新机制比较慢)一抓包发现,只有arp请求,其他啥都没有,为什么呢?

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络协议_06

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_bgp协议影响EBGP邻居之间选路规则_07

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_bgp协议影响EBGP邻居之间选路规则_08

bgp状态也不对,ping1.1.1.1发现,原来是路由没有通,BGP虽然不用直连就可以建立邻居,但是如果底层的IGP路由都没有通,BGP也无法建立邻居

配置ospf后发现:

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络_09

邻居还是没有建立成功

首先分析一下,bgp邻居建立需要哪些条件:

  1. 邻居地址可达
  2. 本地配置的邻居AS=邻居声明的AS
  3. 源ip=邻居指定的IP地址

前面两条都满足了,但是源ip等于邻居指定的ip是什么意思呢?

通过抓包可以看出,发起方是10.1.1.2或者10.1.1.1(因为数据包发出时,目的地址是2.2.2.2,但是源地址默认是出接口地址),但是我们配置时的peer指定的是2.2.2.2和1.1.1.1,很明显BGP查看之后,不知道10.1.1.2或者10.1.1.1是谁,于是就RST重置,拒绝,再发起,也是重置拒绝

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_TCP_10

所以这里需要加一条命令:

手动指定源地址是哪个接口的地址

peer 1.1.1.1(邻居的回环地址) connect-interface lo1

60秒一过,邻居建立成功

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_TCP_11

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络协议_12

RT1和RT2的需求基本上就完成了,RT3和RT2之间也要建立邻居:

ip route-sta 3.3.3.3 32 10.2.2.3  //保证路由时畅通的
[rt2-bgp]dis th
[V200R003C00]
#
bgp 12
 peer 1.1.1.1 as-number 12 
 peer 1.1.1.1 connect-interface LoopBack1
 peer 3.3.3.3 as-number 3 
 peer 3.3.3.3 connect-interface LoopBack1
 #
ip route-static 2.2.2.2 32 10.2.2.2 //保证路由是畅通的
[rt3-bgp]dis th
[V200R003C00]
#
bgp 3
 peer 2.2.2.2 as-number 12 
 peer 2.2.2.2 connect-interface LoopBack1

等了好久邻居也没有成功,抓包发现:

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_bgp协议影响EBGP邻居之间选路规则_13

TCP建立成功后,双方又发送了notification报文,然后TCP就断开连接了???

点开报文发现,TTL的值变成了1,之前邻居建立成功的报文TTL的值都是255,通过点开notification,里面的FSM状态检测机制说有一个错误,然后标出了TTL值为1的问题:

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_bgp协议影响EBGP邻居之间选路规则_14

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_bgp协议影响EBGP邻居之间选路规则_15


当RT2发送到10.2.2.3时,会查看路由表3.3.3.3在哪里,这里算是一跳TTL的值会减一,所以这里需要将TTL的值进行修改,至少修改成2

peer 2.2.2.2 ebgp-max-hop 255 (后面数字不敲默认时255)

这里和前面不一样,双方都需要修改TTL值才可以邻居建立成功,否则会在成功,失败反复跳转

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_TCP_16

双方都配置后,邻居建立成功:

bgp协议影响EBGP邻居之间选路规则 bgp邻居是什么_网络_17

优化:

RT1和RT2之间可以采用loopback口配置,因为他们属于同一个AS区域内(IBGP),里面会跑动态路由来保证道路畅通;
然而RT2和RT3之间是属于不同的AS内(EBGP),他们之间不能通过跑ospf等建立邻居,否则就不需要BGP了,所以他们之间就需要跑静态,然后修改TTL,但是这样又有点麻烦,所以在不同的AS之间,可以直接通过物理口建立邻居,并且EBGP是默认直连,TTL默认为1,当然如果是非直连,可以通过修改TTL实现