一、BGP协议的特点
1、无类别的路径矢量协议—距离矢量协议的升级版–AS BY AS
2、使用单播的方式更新发送所有信息,基于TCP 179端口工作
3、增量更新—仅触发,无周期
4、具有丰富的属性代替IGP中的度量进行选路—多个参数控制
5、可以在进向和出向实施强大的策略—可控性
6、默认不被用于负载均衡—通过各种各样的规则仅仅产生一条最佳路径
7、BGP支持认证和聚合(汇总)
二、BGP建邻过程
1.以TCP随机的源端口(1024~50000)目的端口179(BGP)发送SYN包。(在此之前是Idle,此时是connect连接状态一直到TCP三次握手成功)
2.对端收到第一个SYN后会以源端口179(BGP)目的端口(1024~50000)发送SYN 及 ACK。
3.收到对端的ACK SYN后,还是以TCP随机的源端口(1024~50000)目的端口179(BGP)发送ACK包至此TCP三次握手结束。(如果三次握手成功就会直接进入打开发送状态,没成的话就会初始化TCP连接到Active状态。)
4.结束TCP三次握手时本端还会发送BGP的OPEN 消息以TCP S D:179(此时应该是Opensent打开发送状态状态)
5.收到BGP的OPEN 消息后,会给对端以TCP S:179 D发送BGP的OPEN消息及KEEPALIVE消息。(此时是OpenConfirm打开确认状态)
6.收到对端BGP的OPEN及KEEPALIVE消息后,会立即回复个BGP的KEEPALIVE 消息以TCP S D:179。
7.收到对端的KEEPALIVE消息后会立即回复个TCP的ACK包,以TCP S:179 D此时BGP邻居已经建立。(此时过后才算是Established建立状态)
三、数据包
首先通过TCP三次握手来寻找邻居关系:
Open:仅负责邻居关系的建立,正常仅收发一次即可。携带Router-ID,
Keepalive:保活,周期1min查询邻居关系是否存在,hold time 3分钟;实际保活的是TCP会话
Update:携带路由条目的数据包—目标网络号+各种属性
Notification:正常不会出现,只有出现错误的时候才收到此报文。
Route-refresh:强制更新
四、状态机
Idle:空闲状态,BGP系统发出start事件(就是管理员配置BGP的过程),BGP初始化资源,复位连接计时器(32s),发起TCP连接,同时转入Connect状态
Connect:在此状态,BGP发起第一个TCP连接,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。(TCP连接失败两种情况:1.收到TCP参数协商失败的回复,则进入Active状态,2.对方长时间没有回复,超时,则保持在Connect状态
Active:BGP总是在试图建立TCP连接,如果连接计时器超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
OpenSent:BGP也已经发送了第一个Open报文,BGP就在等待其对等体发送Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器(180s),开始计时。同时转入OpenConfirm状态。
OpenConfirm:BGP等待一个Keepalive报文,如果收到了一个Keepalive报文,就转入Established阶段
Established:BGP对等体交换update、keepalive、route-refresh报文
以后会周期性发送keepalive报文(60s)
如果收到notification报文或者收到TCP拆除链接通知,BGP转至idle状态
五、BGP属性
所有的属性都可以在设备的入向操作,但可能不会向下传递。
- 公认必遵 所有的路由器必须识别,必须携带 (Origin、AS_path、next_hop)
- 公认任意 所有路由器必须识别,不一定携带 (local_pref、atomic-aggregate)
- 可选过渡 有传递性,路由器不识别,但可接受和传递 (community、aggregator)
- 可选非过渡 路由器不识别,不接受,不传递 (MED、originator-id、cluster-id、preference value)
六、选路规则
- 优先协议首选值(PrefVal)最高的路由
- 优选本地优先级(Local_Pref)最高的路由
- 优选本地生成的路由(本地生成的路由优先级高于从邻居学来的路由)
- 优选AS路径(AS_Path)最短的路由
- 比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
- 优选MED值最低的路由
- 优选从EBGP学习到的路由(EBGP路由优于IBGP路由)
- 优选下一跳IGP Metric较小的路由
- 优选Cluster_List最短的路由
- 优选Router id最小的路由器发布的路由
- 比较对等体的IP Address,优选具有较小的IP Address的对等体学来的路由