路由域间路由交换与管理的需求,推动产生了外部网关协议EGP,但EGP的设计非常简单, 只是单纯的发布网络可达信息,不做任何优选,也没考虑环路避免,以至于很快被边界网关协议BGP所替代,目前BGP成为唯一的用于AS间的动态路由协议
BGP着重点不在于发现和计算路由,而在于路由的控制和选择
-
BGP是一种外部网关协议(EGP),是一种“路径矢量”路由协议,基于TCP端口179,路由信息中携带了所经过的全部AS路径列表,若路由源于自己的AS,BGP会丢弃此路由,这就从根本上避免了AS之间产生环路,与IGP不同,BGP最重要的特性是丰富的路由属性及强大的路由过滤和路由策略对路由进行选路和控制
-
BGP基本术语
-
BGP发言者:发送BGP消息的路由器
-
Router ID:用来表示自治系统中唯一标识一台路由器,32b无符号整数
-
BGP对等体(BGP邻居):相互之间存在TCP连接,相互交换路由信息的BGP发言者之间互称对等体
-
IBGP对等体:BGP对等体处于同一AS内,称为IBGP对等体
-
IBGP对等体之间不一定物理直连但 一定要TCP可达
-
BGP从IBGP对等体获得路由后,不向它的IBGP对等体发布
-
为确保所有BGP路由器的路由信息相同,需要使所有的IBGP路由器保持全连接
-
-
EBGP对等体:BGP对等体处于不同AS中,称为EBGP对等体
-
通常情况下要求建立EBGP连接的路由器之间具 有直连物理链路,若非物理直达,可以配置BGP允许之间经过物理多跳建立EBGP连接
-
BGP从EBGP对等体获得路由后,会向所有的BGP对等体通告这些路由,但学习的路由信息不再向原发布者发布
-
-
由于TCP连接时以点到点单播方式来进行报文传输的,所以BG连接只能是基于点到点的连接
-
-
BGP四种消息
-
Open消息:TCP连接后发送的第一条消息,用于建立BGP对等体之间的连接关系并进行参数协商
-
内容包括:使用的BGP版本号,自己所属的AS号,路由器ID,Hold Time值,认证信息等
-
-
KeepAlive消息:BGP会周期性的向对等体发出KeepAlive消息(60s),保持邻居关系的稳定性,还有作用是对收到的Open消息进行回应
-
Update消息:用于对等体之间交换路由信息,既可发布可达路由信息,也可撤销不可达路由信息
-
内容包括:不可达路由列表,与NLRI相关的所有路由属性列表,NLRI(可达路由的前缀和前缀长度)
-
-
Notification消息:通知错误,若检测到对方发过来的消息有错误或主动端口BGP连接,都会发出此消息来通知BGP邻居并关闭连接回到Idle状态
-
-
BGP的六种状态
-
Idle空闲状态:
-
不接受任何BGP连接,等待start事件的产生
-
若有start事件产生开启ConnectRetry定时器向邻居发起TCP连接并变为Connect状态
-
-
-
Connect:
-
等待TCP连接完成
-
若TCP状态为established状态则拆除ConnectRetry定时器并发送Open消息并 变为Open-Sent状态
-
若TCP连接失败重置ConnectRetry定时器 变为Active状态
-
-
-
Active
-
有start事件开启且TCP连接未完成则处于Active状态,响应ConnectRetry timer expiry重传事件重新进行TCP连接同时重置ConnectRetry定时器变为Connect状态
-
若TCP建立成功,发送Open消息变为Open-Sent状态,清除ConnectRetry定时器,重置Hold Timer定时器
-
-
-
Open-Sent
-
表明已发出Open消息,等待BGP邻居发给自己的Open消息
-
收到Open消息且无错误变为Open-Confirm状态,同时将Hold Timer置为协商值,发送KeepAlive消息重置KeepAlive定时器
-
收到Open消息但错误,发送Notification消息断开连接
-
-
-
Open-Confirm
-
表明发出KeepAlive消息,等待BGP邻居发给自己的KeepAlive消息
-
收到KeepAlive消息变为Established状态重置Hold Timer定时器
-
KeepAlive定时器超时重置并发送KeepAlive消息
-
收到Notification消息断开连接
-
-
-
Established
-
BGP连接建立完成,可以发送Update消息交换路由信息
-
收到KeepAlive消息重置Hold Timer定时器
-
KeepAlive定时器超时重置并发送KeepAlive消息
-
检测到错误或收到Notification消息断开连接
-
-
-
-
BGP路由属性
-
BGP路由属性包含以下4类:公认必遵,公认可选,可选传递,可选非传递
-
公认必遵:所有BGP路由器必须能够识别这种属性,且必须存在于Update消息中
-
-
公认可选:所有BGP路由器必须能够识别这种属性,但不必须存在于Update消息中
-
可选传递:BGP路由器可以不支持此属性,但仍然接收带有此属性的路由并通告给其他对等体
-
可选非传递:BGP路由器如果不支持此属性,该属性被忽略不通告给其他对等体
-
AS_PATH属性:公认必遵,该属性域指示出该路由更新信息经过了哪些AS路径,主要是保证AS之间无环路
-
路由到达一个目的地所经过的一系列AS号码的有序列表,当BGP将一条路由通告到其他AS时,便会把自己的AS号添加到AS_PATH列表前面
-
-
-
NEXT_HOP属性:公认必遵,为BGP发言者指示了去往目的地的下一跳,不一定是邻居路由器的IP地址,从得到路由的发言者不同而不同
-
自己产生的路由发给所有邻居时:设置为本地与对端连接的接口地址
-
从EBGP邻居得到的路由发给IBGP邻居时:不改变下一跳属性值
-
接收到的路由发给EBGP对等体时:设置为本地与对端连接的接口地址
-
还有多路访问网络中.......未写
-
-
-
ORIGIN属性:公认必遵,指示该路由的起源,即这条路由通过何种方式注入BGP中
-
-
在其他选路因素相同的情况下,BGP会比较ORIGIN属性来确定到达相同目的地的最佳路由
-
IGP>EGP>Incomplete
-
-
-
LOCAL_PREF属性:公认可选,类BGP路由器的优先级,用于在一个AS有多个出口的情况下,判断流量 离开AS时的最佳路由
-
用于AS内IBGP邻居选择离开AS时的最佳路由,仅在IBGP对等体之间交换,不传递或通告给其他EBGP对等体
-
-
-
MED属性:可选非传递,相当于IGP使用的度量值,用于EBGP邻居有多条路径到达本AS的情况下,用途是告诉EBGP邻居 进入本AS的较优路径
-
相当于IGP中的度量值,当一个AS有多个入口点时,用于判断进入AS时的最佳路由,仅在相邻的两个AS之间传递
-
-
-
Preferred-value(首选值)属性:私有BGP属性只在本地有效不随路由信息传播,为从不同EBGP对等体接收的路由分配不同的首选值,可以改变从EBGP对等体学到路由的优先级,去往目的地址有多条路由时,选择首选值最大的走
-
(系统会给所有从不同EBGP对等体学来的路由分配初始默认值0)也可以自己手动配置, 比如从RTB上学到的路由设置成100,学到相同目的地址多条路由中,拥有最高的Preferred-value值将被选作到达指定网络的路由,比如RTA去往9.0.0.0则都会走RTC这条路
-
-
-
-
BGP选路规则
-
对于一个BGP路由器来说,其路由来源有两种:从对等体接收和从IGP引入
-
路由处理过程
-
-
路由优选
-
Preferred-value值大---LOCAL_PREF最高---依次选择network,import,聚合命令引入的路由---AS_PATH列表最短---依次ORIGIN属性为IGP,EGP,Incomplete的路由---MED值最低的路由
-
-
-
路由发布策略
-
只将BGP表中最优路由发布给对等体,如果配置了advertise-rib-active,则BGP发布IP路由表中最优路由
-
-
-
-
BGP反射和BGP联盟
-
解决IBGP全连接,信息交互重复,占用资源的问题
-