BGP外部网关协议
BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的距离矢量路由协议。
目录
自治系统AS
自治系统AS是指同一个技术管理机构管理、使用统一选路策略的一些路由的集合。
AS号
BGP网络中的每一个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节的AS号的范围是1 ~ 65535,其中1 ~ 64511是互联网上注册公有AS号,类似公网IP地址;64512 ~ 65535是私有AS号,类似私网地址。IANA(互联网数字分配机构)负责AS号的分发。
BGP的特点
- BGP能承载大批量的路由信息,能够支撑大规模网络。
- BGP使用过TCP作为其传输层协议(端口号179),提高可靠性。
- BGP是外部路由协议,用来在AS之间传递数据,对稳定性要求非常高,因此TCP协议的可靠性保证了BGP的稳定性。
- BGP的对等体之间必须逻辑上连通,并进行TCP连接,目的端口179,本地端口任意。
- BGP对等体和IGP对等体不同,BGP对等体(peer)是指使用TCP建立连接的两端,而非与IGP同概念的直连邻居,只需要TCP能建立连接,不一定必须是直连。
- BGP本身只是负责控制路由,数据转发依然依靠静态或IGP路由。
- BGP支持无类别域间路由CIDR。
- 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量路由信息。
- BGP是一种增强的距离矢量路由协议,从设计上避免了环路的发生。
- AS之间:BGP通过携带AS Path信息标记途径的AS,带有本地AS号的路由将被丢弃,从而避免域间产生环路。
- AS内部:BGP在AS内学习到的路由不会通告给AS内的BGP邻居,避免AS内产生环路。
- BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
- BGP提供了防止路由震荡的机制(路由衰减),有效提高了Internet网络的稳定性。
- BGP易于扩展,能够适应网络新的发展。主要通过TLV进行扩展。
BGP的分类
按运行方式分为EBGP和IBGP。
EBGP:运行与不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内部产生环路,BGP设备不将从IBGP对等体学习到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器和BGP联盟。
BGP工作原理
五种报文
1.Open报文:是TCP建立连接发送的第一个报文
协商BGP对等体的各种参数,包括版本、AS号等信息,建立BGP对等体连接。
2.Update报文:对等体之间交换路由信息。
连接建立后,有路由需要发送或路由变化时,发送Update报文通告对端可达或撤销路由信息及路径。
3.Notification报文:用于中断BGP连接。
BGP发现错误时,发送报文通告BGP对端,随后与之相关的邻居将被关闭。
4. Keepalive报文:用于保持BGP连接。
定时发送keepalive报文以保持BGP对等体关系的有效化,响应正确的Open报文。
5.Route-refresh报文:用于在改变路由策略后软复位BGP路由表请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
六个状态机
- Idle状态
- Conenect状态
- Active状态
- OpenSent状态
- OpenConfirm状态
- Established状态
对等体交互原则
- 从对等体获得的BGP路由,BGP设备只传递给它的EBGP对等体
- 从EBGP对等体获得的BGP路由,BGP设备传递给他所有EBGP和IBGP对等体(对等体是IBGP只能传递一跳,对等体是EBGP则不限制)
- 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
- 路由更新时,BGP设备只发送更新的BGP路由
- 所有对等体发送的路由,BGP设备都会接收
- 所有IBGP对等体在传递下一跳不变
- 所有EBGP对等体在传递过程中下一跳改变
- 默认EBGP传递时,TTL值为1
- 默认IBGP传递时,TTL值为255
BGP路径属性
公认属性
公认必遵:所有BGP设备都可以识别此类属性,且必须存在于Update报文中。
公认自觉:所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中。
可选属性
可选传递:BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
可选非传递:BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
BGP路径选择
路径选择的原则
- 若此路由下一跳不可达,忽略此路由
- Preferred_value值大的路由优选
- Local_preference值高的路由优先
- 聚合路由优先于非聚合路由
- 本地手动聚合路由的优先级高于本地自动聚合的路由
- 本地network命令引入的路由优先级高于本地通过import-route命令引入的路由
- As_path的长度最短的路径优先
- 比较origin属性,IGP优先于EGP,EGP优先于Incomplete
- 选择MED较小的路由
- EBGP路由优先与IBGP
- BGP优先选择到BGP下一跳的IGP度量值最低的路径
- 当以上全相同,则为等价路由,可负载分担(As_path必须一致,负载分担时,以下三条无效)
- 比较Cluster_List长度,短者优先
- 比较Originator_ID(如果没有,则比较Router-ID),选择小的路径
- 比较对等体的IP,选择较小的路径
路径选择方法
- 根据Local_preference控制选路(越大越优)
- 使用As_path属性控制选路(越少越优)
- 通过MED属性控制选路(越小越优)