BGP
BGP建立邻居采用有限状态机,有6种状态(基于TCP协议)
1. IDLE状态:BGP协议初始时的状态,在这个状态时,系统不分配任何资源,也拒绝所有BGP接入。收到StraEven时开始分配BGP资源,启动ConnectRetry计时器,同时侦听是否有来自其它对等体的连接请求
2. connect:这个状态下,BGP等待TCP完成连接,若连接成功,本地清空计时器,并向对等体发送OPEN报文然后改变状态为OpenSent状态,若连接不成功,本地重置计时器,侦听是否有对等体启动连接,并移至Active状态
3. Active:BGP初始化TCP连接来获得一个对等体,如果连接成功,清空本地清空计时器,并向对等体发送OPEN报文,并转至OpenSent状态
4. OpenSent:BGP等待对等体OPEN报文,收到报文后检查报文,如果发现错误,本地发送notification报文给对等体,并改状态为IDLE。如果报文正确,BGP发送keepalive报文,并转至OpenConfirm状态
5.OpenConfirm:BGP等待Keepalive报文或NOTIFICCATION报文。如果收到keepalive报文,则进入established状态,如果收到notification报文,则变为IDLE状态
6. Established:BGP可以和其它对等体交换update,NOTIFICATION,KEEPALIVE报文。
如果收到正确的update或keepalive报文就认为对端正常运行,本地重置Hold Timer
如果收到错误的UPDATE,本地发送notification报文通知对端,并改变状态为IDLE
如果收到notification报文,本地转IDLE状态
如果收到TCP拆链通知,本地关闭BGP连接,转回IDLE状态
BGP对等体间通过5种报文进行交互:(keepalive报文为周期性发送,其余为触发式发送)
Open报文:用于建立BGP对等体连接
Update报文:用于在对等体之间交换路由信息
Notification报文:用于终端BGP连接
Keepalive报文:用于保持BGP连接
Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新能力的BGP设备才会发送和响应此报文
BGP对等体之间的交互原则:
1. 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
2. 从EBGP对等体获得的BGP路由,BGP设备发布给它的所有EBGP和IBGP对等体
3. 当存在多条到同一目的地路由时,只选最优路由发布给对等体
4. 路由更新时,路由设备只发送更新的BGP路由
5. 所有对等体发送的路由,BGP设备都会接收
缺省情况下Keepalive报文时间间隔为60s,timeout为180s
Notification报文错误码:
-1:消息头错误 -2:open消息错误 -3:update消息错误 -4:hold计时器溢出 -5:FSM错误 -6:终止
错误子码:
(消息头错误子码)
1 - 连接未同步 2 - 错误消息长度 3 -错误消息类型
(open 消息错误子码)
1 - 不支持版本号 2 - 错误对端AS 3 - 坏的BGP标示 4 - 不支持的选项参数 5 - 认证失败 6 - 不支持的hold时间
(update消息错误子码)
1 - 畸形属性链表 2 -不认识公认属性 3 - 缺少公认属性 4 - 属性标志错误 5 -属性长度错误 6 - 无效origion属性 7 - AS路由环路 8 - 无效的next-hop 9 - 可选参数错误 10 - 无效网络域 11 - 畸形AS_PATH
BGP属性分类:
公认属性:1. 公认必遵 2. 公认可选
可选属性:1. 可选过渡 2.可选非过渡
origin: 标示路径信息的来源,是公认必遵属性(三种值:IGP-EGP-INCOMPLETE)
AS_PATH: 由一系列AS路径组成,是公认必遵属性
next_hop: 它定义了到达目的地的下一跳的设备IP地址,是公认必遵属性
LOCAL_PREF: 用来通告路由优先程度,是公认可选属性
ATOMIC_AGGREGATE: 用来通告路由接收者,该路由是经过聚合的,是公认可选属性
aggregator: 是atomic_aggregate属性的补充,是可选过渡属性
community: 是一组共享相同属性的目的地集合,是可选过渡属性
originator_id: 用于标识路由反射器,是可选非过渡属性
cluster_id: 用于标识路由反射器组,是可选非过渡属性
multi_exit_disc: 用来区分同一个邻接AS的多个接口,是可选非过渡属性(MED)
BGP公认团体属性:
1. NO-Export 2. No_advertise 3. Internet 4. Local_AS
BGP的MED属性值,类似于ospf的cost值,默认值为0,值越小越优先,只能是对于同一个AS来说,不同AS无法比较,可以传递出AS,控制数据进入AS
Local-preference默认本地优先级为100,值越大越优先,只能在AS内传递,控制数据出AS
BGP Speaker 从EBGP获得的路由会向它所有的BGP对等体通告(包括EBGP,IBGP)
peer 10.1.12.1 next-hop-local 当BGP路由下一跳不可达是使用
peer 1.1.1.1 connect-interface loopback 0 本设备使用loopback 0 接口做为更新源地址
IBGP一般使用Loopback 建立对等体关系
EBGP一般使用直连链路建立对等体关系
缺省时,EBGP对等体间的BGP报文的TTL值为1,所有缺省EBGP使用Loopback 建立对等体将失败
使用peer ebgp-max-hop 改变TTL值,值必须大于1
路由反射器:
从非客户对等体学到的IBGP路由将会反射给所有客户
从客户对等体学到的IBGP路由将会反射给所有非客户,以及除了该客户之外的其他客户(华为路由器支持关闭路由在客户之间的反射行为,使用undo reflect between-clients)
执行路由反射时,只会将自己使用的最优的BGP路由进行反射
peer 2.2.2.2 reflect-client 将自己配置为路由反射器, 2.2.2.2 配置为客户(只需在反射器配置)