BGP的工作过程:
1, 基于IGP协议实现IP可达
2, 指定邻居关系,通过三次握手,建立TCP的会话通道
。之后所有BGP的数据报都将基于TCP会话通道来进行传递。
3, 使用open报文和keeplive报文进行邻居关系的建立。之后将邻居关系收集到一张表中,即邻居表
。
4, 通过update报文传递路由信息。传递的路由条目信息中主要包含目标网络号,掩码信息,以及各种路径属性
。之后,设备会将所有自己发出的以及收到的路由信息记录在一张表中,即BGP表
。
5, 之后将BGP表中的最优路径加载到路由表中。
6, 收敛完成后,BGP将周期使用keeplive报文进行保活。保活时间默认为180S,周期发送时间默认为保活时间的1/3,即60S。
7,若出现错误信息,将使用notification报文进行告警。
8,若发生结构突变,则将使用update报文进行触发更行。
BGP数据库组成:
类型 | 描述 |
---|---|
IP路由表 | 全局路由信息库,包括最优的IP路由信息。 |
BGP路由表 | BGP路由信息库,包括本地BGPSpeak通告的路由信息,将其最优的添加到路由表中 update BGP datebase |
邻居表 | 对等体邻居清单表,包括对等体两端的邻居信息及邻居列表。 |
Adi-RIB-In | 对等体宣告给本地的Speak的未处理的路由信息库。 |
Adjust-RIB-OUT | 本地Speak宣告给指定的对等体路由信息库。 |
<R2>dis bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 123
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre fRcv
1.1.1.1 4 123 10 12 0 00:08:14 Established 0
24.0.0.4 4 100 7 7 0 00:05:11 Established 0
V版本、 MsgRcvd从对端收到报文数量(open、keeplive报文)、MsgSent发送报文数量、OutQ队列、UP开始时间、State状态、Established状态已建立。
PrefRcv表示的是接收到的前缀数目,若此时BGP内还无任何路由引入只是形成邻居关系,PrefRcv应为0表示此时无路由信息接收。
状态为Established,表示邻居关系建立成功。
状态为active,表示TCP连接建立失败,反复尝试重新建立TCP会话。
上面1.1.1.1为IBGP邻居,24.0.0.4为R2的EBGP邻居。
<R1>dis bgp rou
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 111.1.1.1/32 0.0.0.0 0 0 i
*>i 44.4.4.4/32 2.2.2.2 0 100 0 i
i指是通过IBGP学过来的路由。*可用的;>代表最佳的;
Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network:显示BGP路由表中的网络地址
NextHop:报文发送的下一跳地址
MED:路由度量值
LocPrf:本地优先级
PrefVal:协议首选值
Path/Ogn:显示AS路径号及Origin属性
Community:团体属性信息
<R1>dis ip rou pro bgp //查看bgp协议路由表 EBG
Public routing table : BGP
Destinations : 1 Routes : 1
BGP routing table status : <Active>
Destinations : 1 Routes : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
44.4.4.4/32 IBGP 255 0 RD 2.2.2.2 G0/0/0
<R1>dis ip rout
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 15 Routes : 15
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 Direct 0 0 D 127.0.0.1 LoopBack0
2.2.2.2/32 OSPF 10 1 D 12.0.0.2 GigabitEthernet0/0/0
3.3.3.3/32 OSPF 10 1 D 13.0.0.3 GigabitEthernet0/0/1
12.0.0.0/24 Direct 0 0 D 12.0.0.1 GigabitEthernet0/0/0
12.0.0.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
12.0.0.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
13.0.0.0/24 Direct 0 0 D 13.0.0.1 GigabitEthernet0/0/1
13.0.0.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
13.0.0.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
24.0.0.0/24 OSPF 10 2 D 12.0.0.2 GigabitEthernet0/0/0
35.0.0.0/24 OSPF 10 2 D 13.0.0.3 GigabitEthernet0/0/1
BGP路由条目的来源:
路由来源 | 描述 |
---|---|
宣告 - Network | 在bgp模式下将已有的igp路由进行宣告,BGP宣告的直连,宣告从其他路由协议得到的路由:IGP。network优先级>本地通过import-route命令引入的路由。 |
引入 - import-router | 通过直接引入协议的方式进行进入,可支持协议为直连路由、静态路由、OSPF路由、ISIS路由等,例如:import-router ospf/static。华为设备尽量不做重分布直连,常出问题。重分布、引入产生的,代码是?,incomplete。 |
聚合路由 | 有手工聚合(精确常用)和系统自动聚合两种方式,无论手工还是自动生成后都会和明细路由进行并列,如果不想让对等体接收到明细路由(默认明细和聚合一起传输),就可以使用明细抑制来保证只有聚合路由 |
Network配置命令:
[R2]bgp 123
[R2-bgp]ipv4-family unicast
[R2-bgp-af-ipv4]network 2.2.2.2 32 //配置BGP逐条引入IPv4路由表或IPv6路由表中的路由。
Import方式:按协议类型,将RIP路由、OSPF路由、ISIS路由等协议的路由引入到BGP路由表中。
[R2]bgp 123
[R2-bgp]ipv4-family unicast
[R2-bgp]import-router ospf //引入路由,可以是rip、ospf、isis
[R2-bgp]default-route imported //引入本地IP路由表中已经存在的缺省路由。
1、宣告 - Network方式配置:
R4增加环回并在BGP中宣告。
int lo 1
ip add 41.1.1.1 32
int lo 2
ip add 42.2.2.2 32
int lo 3
ip add 43.3.3.3 32
bgp 100
ipv4-family unicast //进入IPv4单播地址族
network 41.1.1.1 32
network 42.2.2.2 32
network 43.3.3.3 32
R4与R2建立EBGP的邻居关系,R4通过network命令宣告41.1.1.1/32,42.2.2.2/32与43.3.3.3 3/24的路由,使对端EBGP邻居R2学习到R4路由表里的路由。
<R2>display bgp routing-table
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 41.1.1.1/32 24.0.0.4 0 0 100i
*> 42.2.2.2/32 24.0.0.4 0 0 100i
*> 43.3.3.3/32 24.0.0.4 0 0 100i
注意:R3上是不会有上面三条路由条目,BGP只传一跳。IBGP的水平分割,IBGP只能update一跳,从R4学到的路由–>R2 -->R21,不会到达R3。
2、引入 - import-router配置:
[R1-LoopBack1]int lo1
[R1-LoopBack1]ip add 100.1.1.1 32
[R1-LoopBack1]int lo2
[R1-LoopBack2]ip add 100.2.2.2 32
[R1-LoopBack2]int lo3
[R1-LoopBack3]ip add 100.3.3.3 32
[R1-ospf-1]a 0
[R1-ospf-1-area-0.0.0.0]network 100.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0]network 100.2.2.2 0.0.0.0
[R1-ospf-1-area-0.0.0.0]network 100.3.3.3 0.0.0.0
[R1-ospf-1]q
R2引入import-router在ospf中宣告的三个网段。
[R2]ip ip-prefix import index 10 permit 100.1.1.1 32
[R2]ip ip-prefix import index 20 permit 100.2.2.2 32
[R2]ip ip-prefix import index 30 permit 100.3.3.3 32
[R2]route-policy import permit node 10
Info: New Sequence of this List.
[R2-route-policy]if-match ip-prefix import
[R2-route-policy]q
[R2]bgp 123
[R2-bgp]ipv4-family unicast
[R2-bgp-af-ipv4]import-route ospf 1 route-policy import
[R2-bgp-af-ipv4]dis bgp rou
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 41.1.1.1/32 24.0.0.4 0 0 100i
*> 42.2.2.2/32 24.0.0.4 0 0 100i
*> 43.3.3.3/32 24.0.0.4 0 0 100i
*> 100.1.1.1/32 0.0.0.0 1 0 ?
*> 100.2.2.2/32 0.0.0.0 1 0 ?
*> 100.3.3.3/32 0.0.0.0 1 0 ?
重分布、引入产生的,代码是*?*,incomplete。
3、路由聚合是会使用Aggregator属性和AutoAggregator属性,后面再讲。
连接建立时,BGP Speaker只把本身用的最优路由通告给对等体。
多条路径时,BGP Speaker只选最优的路由放入路由表。
存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。
RD可以从BGP邻居RB与RC学习到100.0.0.0/24的路由,同时RD将自己的直连路由200.0.0.0/24发布到BGP中。
在RE上使用命令display bgp routing-table查看如图所示。可以发现,RD将自己标为有效且最优的路由发布给了BGP邻居RE。
<RD>display bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.0.0/24 10.1.12.1 0 100 0 100i
* i 10.1.13.1 0 100 0 100i
*> 200.0.0.0 0.0.0.0 0 0 i
*>i 100.0.0.0/24 10.1.12.1这一线路为最优路由。
RE查看
<RE>display bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 100.0.0.0/24 10.1.45.4 0 200 100i
*> 200.0.0.0 10.1.45.4 0 0 200i
Path/Ogn:显示经过AS100、AS200路径及Origin属性,i - IGP由IGP宣传的路由。
BGP邻居:IBGP邻居和EBGP邻居。
RA上有一个100.0.0.0/24的用户网段,并通过EBGP将该网段发布给BGP邻居RB。RB收到EBGP邻居发送来的100.0.0.0/24的路由后,将会通告给自己的IBGP邻居RC与EBGP邻居RD。
BGP是AS by AS的协议
,不同于IGP的下一跳是路由器地址,BGP的下一跳是如何去往其他AS的一个设备;而且在不同AS之间保持不变。
配置IBGP,R2和R3:
在配置上首先保证IBGP下一跳可达。
[R2]bgp 200
[R2-bgp]peer 3.3.3.3 as 200
[R2-bgp]peer 3.3.3.3 connect-interface lo0
[R3]bgp 200
[R3-bgp]peer 2.2.2.2 as 200
[R3-bgp]peer 2.2.2.2 con lo0
[R3]dis bgp rout
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
i 100.0.0.0/24 10.1.12.1 0 100 0 100i
没有带*和>,就不最优路由,不可能收到路由表,为什么会出现这种状况。这是因为下一跳不是邻居而是2跳。
解决方案:在边界处修改更新源为本设备更新源。IBGP邻居的下一跳更新源是本设备。
[R2-bgp]peer 3.3.3.3 next-hop-local
<R2>refresh bgp all export //刷新BGP出方向
<R3>refresh bgp all import //刷新BGP入方向
注意:在BGP配置中常用的命令:
refresh bgp all export //刷新BGP出方向
refresh bgp all import //刷新BGP入方向
reset bgp all //重启BGP
peer 2.2.2.2 ignore //暂停或关闭邻居
修改后就是可以看到最优路由发布给所有BGP邻居。
[R3]dis bgp rout
Total Number of Routes: 1 下一跳变成22.1.1.1
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.0.0/24 2.2.2.2 0 100 0 100i
从IBGP对等体获取的路由,不会发送给IBGP对等体,十分重要!! 主要是为了防环。
从IBGP获得的路由不会通告给其它的IBGP邻居,也不会通告给EBGP。
IBGP内的路由需要从边界路由通告给EBGP邻居。
IBGP的水平分割,IBGP只能update一跳,从RA学到的路由–>RB–>RD、从RA学到的路由–>RB -->RC不会到达RE。
R2宣告2.2.2.2的路由
[R2]bgp 123
[R2-bgp]ipv4-family unicast
[R2-bgp-af-ipv4]net 2.2.2.2 32
R1上可买看到
<R1>dis bgp rout
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
i 2.2.2.2/32 2.2.2.2 0 100 0 i
但是在R3上是不能看到到的。
这样设计的目的是防止在AS内部形成路由环路。根据规定,BGP路由在同一个AS内进行传递时,AS_Path属性不会发生变化。也就是说R2–>R1时,AS_Path属性不变,i。假如R1能将IBGP路由2.2.2.2/32发布给R3,AS_Path依旧为i。则R3也有可能将2.2.2.2/32的路由发布给R2。路由环路产生。因此,上述通告原则是为了防止在AS内部形成路由环路。
BGP Speaker 从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定。
BGP不会把从IBGP得到的路由更新给EBGP邻居,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。IGP无法承载这么多bgp路由。
可以想象一个AS自治系统内,由成百上千台路由器组成,它庞大的路由表,如果都更新给EBGP邻居,对于EBGP邻居内路由器带来极大的开销,甚至可能导致设备宕机,这是非常危险的事情。
不开启同步,默认是关闭的,华为设备开启不了同步。
[R2]bgp 123
[R2-bgp]dis th
ipv4-family unicast
undo synchronization 同步
peer 1.1.1.1 enable
总结:BGP如何更新路由:1、最优的 2、IBGP仅仅传递一跳 3、更新EBGP(同步规则)