相关基本概念
AS
- AS指在同一个组织管理下,使用统一选路策略的设备集合
- AS号存在16bit、32bit两种表示方式。IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)负责AS号的分发
使用BGP传递路由
- BGP基于TCP,只要能够建立TCP连接即可建立BGP
- 只传递路由信息,不会暴露AS内的拓扑信息
- 触发式更新,而不是进行周期性更新
BGP的特点
- 使用TCP作为其传输层协议(端口号为179),使用触发式路由更新
- 能够承载大批量的路由信息,能够支撑大规模网络
- 支持MPLS/VPN的应用,传递客户VPN路由
- 每条BGP路由都携带多种路径属性(Path attribute),BGP可以通过这些路径属性控制路径选择
TCP连接源地址
- 缺省情况下,BGP使用报文出接口作为TCP连接的本地接口
- 在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性
- 在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题
报文类型
BGP五种报文都拥有相同的报文头,主要字段解释:
- Marker:16Byte,用于标明BGP报文边界,所有bit均为“1”。用于检测对等体同步信息是否完整
- Length:2Byte,BGP报文总长度(包括报文头在内),以Byte为单位
- Type:1Byte,BGP报文的类型。其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh报文
Open报文
- 作用:协商BGP对等体参数,建立对等体关系
- 发送时刻:BGP TCP连接建立成功之后
Open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系,主要字段解释:
- Version:BGP的版本号。对于BGP4来说,其值为4
- My AS(autonomous system):本地AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS
- Hold Time:保持时间。在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文,则认为BGP连接中断。默认为180s
- BGP Identifier(类似Router ID):BGP标识符,以IP地址的形式表示,用来识别BGP路由器
Update报文
- 作用:发送BGP路由更新
- 发送时刻:BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文
- Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由
- 一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络层可达信息)中。同时Update报文还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routers字段中
- 主要字段解释:
-
- Withdrawn routes:不可达路由列表
-
- Path attributes:与NLRI相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)三元组构成
-
- NLRI:可达路由的前缀和前缀长度二元组
Notification报文
- 作用:报告错误信息,中止对等体关系
- 发送时刻:当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体
当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification报文,告知对端错误原因。之后BGP连接将会立即中断
- Error Code、Error subcode:差错码、差错子码,用于告知对端具体的错误类型
- Data:用于辅助描述详细的错误内容,长度并不固定
Keepalive报文
- 作用:标志对等体建立,维持BGP对等体关系
- 发送时刻:BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接
- BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接
- Keepalive报文格式中只包含报文头,没有附加其他任何字段
Route-refresh报文
- 作用:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文
- 发送时刻:当路由策略发生变化时,触发请求对等体重新通告路由
- Route-refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由
- 主要字段解释:
-
- AFI:Address Family Identifier,地址族标识,如IPV4
-
- Res:保留,8个bit必须置0
-
- SAFI:Subsequent Address Family Identifier,子地址族标识
BGP状态
| Peer状态名称 | 用途 |
|---|---|
| Idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
| Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接 |
| Active | TCP连接没建立成功,反复尝试TCP连接 |
| OpenSent | TCP连接已经建立成功,开始发送Open报文,Open报文携带参数协商对等体的建立 |
| OpenConfirm | 参数、能力特性协商成果,自己发送Keepalive报文,等待对方的Keepalive报文 |
| Established | 已经收到对方的Keepalive报文,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
BGP对等体表
主要字段解释:
- Peer:对等体地址
- V:version,版本号
- AS:对等体AS号
- Up/Down:该对等体已经存在up或者down的时间
- State:对等体状态
- PrefRcv:prefix received,从该对等体收到的路由前缀数目(路由信息)
BGP路由的生成
- 不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体
- BGP注入路由的方式有两种:
-
- Network
-
- import-route
- 与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由
BGP聚合路由命令
//进入bgp进程
aggregate 10.1.0.0 22 detail-suppressed//聚合成10.1.0.0 子网掩码22