bgp协议简介
bgp概述和特征:
传输协议TCP,端口号179,是一种外部路由协议,同来在AS之间传递路由信息,是一种增强的路径矢量路由协议,拥有可靠的路由更新机制,具备丰富Metric度量方法,无环路协议设计,为路由条目附带多种属性信息,支持CIDR(无类别试间选路),拥有丰富的过滤和路由策略,无需周期性更新,路由更新时先发送增量路由,周期性发送KeepAlive报文来保持TCP连通性。
BGP的运行是通过报文驱动的,BGP使用以下报文类型:
(1)Open:TCP连接建立后发送的第一个消息,用于建立BGP对等体间的连接关系
(2) Update:BGP系统中最重要的信息,用于在对等体之间交换路由信息/更新
(3)Notification:错误通告消息
(4)Route-refresh:用于通知对等体自己支持路由刷新能力
(5)KeepAlive:用于通知对等体自己支持路由刷新能力
bgp状态机
BGP邻居状态机
可以利用邻居状态机描述BGP连接的建立和维护,它将有以下的6种状态:
1.ldle (空闲)状态
BGP总以ldle状态为起点,该状态拒绝所有入站的连接。只有在BGP起动之后,BGP进程将初始化所有BGP资源,初始化去往邻居的TCP连接,监听来自邻居的TCP初始化消息,并更改为连接状态。启动事件一般是配置BGP进程。
2. Connect(连接)状态
进入Connect状态后,BGP进程将一直等待TCP连接的完成(三次握手),当TCP连接建立成功,BGP将会向邻居发送Open消息,并进入OpenSent(打开发送)状态。如果TCP会话没有建立,BGP将继续监听邻居初始化的连接,开启连接重试定时器,迁移到Active(激活)状态。Connect→→OpenSent(TCP连接建立);Connect→→Active(TCP连接暂未建立)。
3.Active(激活)状态
该状态下,BGP进程继续尝试和邻居建立TCP连接,如果TCP连接建立成功,BGP进程清除连接重试定时器,完成初始化过程,并向邻居发送Open报文,迁移到OpenSent(打开发送)状态。
如果连接重试定时器到期BGP进程依然处在激活状态,进程将返回连接状态,监听邻居发起的TCP会话,这个过程将反复循环,直到监听到由邻居发起的TCP会话。
4.OpenSent(打开发送)状态
进入了该状态,已经发送了Open消息,BGP将一直等待来自邻居的Open消息。一旦接收到Open消息后,将检查该消息的每一个字段,如果有差错,将会发送Notification消息迁入Idle状态。
如果接收到的Open消息没错,就会发送Keepalive消息并商讨Keepalive定时器和Keepalive发送的时间。 并迁移到OpenConfirm(打开确认)状态。
5.OpenConfirm(打开确认)状态
进入了这个状态下,BGP进程将等待邻居确认的Keepalive或Notification消息。如果接收到的是Keepalive消息则迁移到Established(建立)状态,如果是Notification消息那么就将迁移到Idle状态。
6.Established(建立)状态
进入了这个状态就说明了BGP的对等连接正式建立了,对等体之间交互Update,Keepalive和Notification消息,如果接受到的是Update或Keepalive消息,则重启保持定时器,如果接受到一个Notification消息,则会迁移到Idle状态。
对等体交换原则
(1)从IBGP对等体获得的BGP路由,BGP设备只传递给他的EBGP路由
(2)从EBGP对等体获得的BGP路由,BGP设备只传递给它所有EBGP和IBGP对等体
(3)当存在多条到达同一目的地地址时,BGP设备只讲最有路由发布给对等体
(4)路由更新时,BGP设备只发送更新的BGP路由
(5)所有对等体发送的路由,BGP设备都会接受
(6)所有EBGP对等体在传递过程中吓一跳改变
(7)所有IBGP对等体在传递过程中吓一跳不变
(8)默认EBGP传递时TTL值为1
(9)默认IBGP 传递时TTL值为255
建立邻居有两种方法:直连建邻居和环回口建邻居
直连建邻居时注意:
建立IBGP邻居时需要保证吓一跳可达,处于边界的IBGP 邻居需要将下一跳指向自己,这样才能建立IBGP邻居
用环回口建邻居时注意:
需要修改更新源,默认更新源是物理口,你需要修改成自己的环回口,建立IBGP时需要保证下一跳可达,建立IBGP邻居时需要保证吓一跳可达,处于边界的IBGP 邻居需要将下一跳指向自己,这样才能建立IBGP邻居
建立EBGP邻居时因为EBGP路由只传一跳,所以在建立EBGP时需要修改EBGP 多跳的跳数为2以上(自己环回到对端环回是2跳,默认只传1跳)
为啥用环回口建邻居?
因为环回稳定,只要路由器启动着,环回口就不down,而物理链路可能会受线路或者是接口等因素的影响导致邻居关系有问题,所以建立邻居都是用环回来做。
BGP选路原则
(1)若去往目的网络的路由下一跳不可达,则可以忽略此路由
(2)preferred-value优先级以数值高的路由优先
(3)local-preference优先级以数值高的路由优先,默认为100
(4)聚合路由优先级高于非聚合路由
(5)本地手动聚合路由的优先级高于本地自动聚合路由的优先级
(6)本地通过network命令引入的路由的优先级高于通过import-route命令引入的路由
(7)AS路径长度最短(最少个位数的)的路径优先级高
(8)比较Origin属性,IGP优先级高于EGP,EGP优先级高于Incomplete的
(9)选择med优先级较小的路由(默认为0)
(10)EBGP路由优先级高于IBGP 的路由
(11)BGP优先选择到BGP下一跳的IGP度量低的路径
当以上全部相同,则为等价路由,可以负载分担(注:as-path必须一致)当负载分担时,以下3条原则无效
(12)比较Cluster-List长度,短的优先
(13)比较Originator-ID(如果没有Originator-id,则用router-id比较)选择数值较小的路径
(14)比较对等体的IP地址,选择IP地址数值最小的路径