BGP基础

BGP基础

BGP:Border Gateway Protocol,边界网关协议

特征

  • BGP使用TCP以确保可靠传输,TCP端口号179;
  • BGP路由器之间建立TCP连接,这些路由器称为BGP对等体也叫BGP邻居。有两种BGP邻居关系:eBGP邻居关系,以及iBGP邻居关系。
  • BGP的邻居关系可以跨路由器建立,而不像OSPF及RIP那样,必须要求直连。
  • BGP对等体在邻居关系建立时交换整个BGP路由表。
  • 在邻居关系建立完成后,BGP路由器只发送增量更新或触发更新(不会周期性更新)。
  • BGP具有丰富的路径属性和强大的策略工具。
  • BGP能够承载大批量的路由前缀,用于大规模的网络中。

报文

3689045069

BGP报文是被承载在TCP报文之上的,端口号179。
| 报文 | 作用 | 发送时间 |
| ------------- | ------------------------------------- | ------------------------------------------------------------ |
| OPEN | 协商BGP邻居的各项参数, 建立邻居关系 | 通过TCP建立BGP连接,发送open报文 |
| UPDATE | 进行路由信息的交换 | 连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息 |
| NOTIFICATION | 报告错误,中止邻居关系 | 当 BGP 在运行中发现错误时,要发送NOTIFICATION报文通告BGP对端 |
| KEEPALIVE | 维持邻居关系 | 定时发送KEEPALIVE报文以保持BGP邻居关系的有效性 |
| Route-refresh | 为保证网络稳定,触发更新 路由的机制 | 当路由策略发生变化时,触发请求邻居重新通告路由 |

状态机

683074833

Peer状态 发什么包 作用
Idle 尝试建立TCP连 接 本地寻找一条到邻居的路由,并开始准备TCP的连接及监视远程 peer启动TCP连接。启用BGP时,要准备足够的资源
Connect 发TCP包 本地找到一条到邻居的路由,并尝试TCP三次握手,等待完成中, 认证都是在TCP建立期间完成的。如果TCP连接不上则进入 Active状态,反复尝试连接。如果TCP建立成功,BGP进程会向邻居发送Open消息并进入Opensent状态
Active 发TCP包 TCP连接没建立成功,反复尝试TCP连接。
OpenSent 发Open包 TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立。 如果接收到open消息后,存在差错,则发送Notification消息。如果没有差错,则进入OpenConfirm状态
OpenConfirm 发Keepalive包 参数、能力特性协商成功,自己开始发送Keepalive包,等待对方的Keepalive包。 如果收到对方的keepalive消息则迁移到Established状态
Established 发Update包 已经收到对方的Keepalive包,双方能力特性一致,开始使用 Update通告路由信息。

路由生成方式

BGP通过Network(网络)与Import(注入)两种方式生成BGP路由。在邻居关系建立后才开始将路由封装在Update报文中通告给邻居。
1、Network
2、Import

常用属性

BGP提供丰富的属性来实现对路由的灵活控制和优选,包含三类:

?公认属性(公认必遵,公认可选)
可选属性(可选过滤,可选非过滤)
私有属性

一、公认必遵(Well-known Mandatory)

BGP的Update消息中必须包含的属性。

1、Origin(起源):

如果到达同一目的有多条使用不同方式学习到的路径,则可用该属性选择最优的一条。

三种Origin属性的优先级为:i>e>Incomplete

即(IGP>EGP>Incomlete)。

(1)i:表明BGP路由通过network命令注入。

(2)e:表明BGP路由是从EGP学到的。

(3)Incomplete(不完全的):由其他方式学习到的路由,例如import。

2、AS_Path(AS路径)

该属性记录了该条路由经过的所有AS编号(类似于TTL)。用于在到达同一目的多条相同方式学习到的路径中选择最优的一条。

(1)记录格式为(A,B……X)。

(2)AS_Path越短,说明经过的自治区域越少,即总路径越短,路径越优。

包含四种类型

? (1)AS_Sequence(用于BGP路由聚合)。

? (2)AS_Set(用于BGP路由聚合)。

? (3)AS_Confed_Sequence(应用于联盟)。

? (4)AS_Confed_Set(应用于联盟)。

3、Next_hop(下一跳)

(1)BGP路由器将本端始发路由发布给IBGP邻居时,会将Next_hop设置为本端建立邻居关系所使用的接口IP。

(2)BGP路由器向EBGP邻居发布路由时时,会将Next_hop设置为本端与对端建立BGP邻居关系所使用的接口IP。

(3)BGP路由器向IBGP邻居通告从EBGP学来的路由时,不改变Next_hop属性(可避免环路)。

二、公认可选(Well-known Discretionary)

不必须存在于BGP的Update消息中,可根据需求自由选择。

1、Local_Preference(本地优先)

当BGP路由器通过多个IBGP邻居获得目的地址相同但下一跳不同的多条路由时,用该属性来优选(选择优先级最大的一条)。

?(1)仅在IBGP邻居之间有效,不通告给其他AS。

(2)用于判明流量离开AS时的最佳路由。

(3)是路由器的BGP优先级,默认100(越大越优先)。

2、Atomic_aggregate

三、可选过滤(Optional Transitive)

BGP不能识别但可以接受该属性,并可以将其发布给他的邻居。

1、Aggregator

2、Community(共同体)

可对发出BGP路由器的报文打标记,限定路由的传播范围同时便于对符合相同条件的路由进行统一处理。

格式类似于MPLS VPN的标签(始发AS号,对端AS号)。

例:(10,11)、(25,40)

细分为四种公认团体属性:

(1)Internet(互联):接收方收到该属性的报文后,可以将其通告给所有BGP邻居(为缺省属性)。

(2)No_Export(不传播):接收方收到该属性的报文后,不会再将其转发到其他AS。

(3)No_Advertise(不宣传):接收方收到该属性的报文后,不会将其通告给任何其他BGP邻居

(4)No_Export_Subconfed:在联盟中使用。

拓展团体属性:

(1)使用一组4字节为单位的列表来表示。

(2)格式为aa:nn(或团体号),aa通常为AS编号,nn是管理员定义的团体属性标识。

(3)范围为0~4294967295。

(4)RFC1997中规定065535和42949017604094967295为预留值。

四、可选非过滤(Optional Non-transitive)

BGP可以忽略包含该属性的消息并不向他的邻居发布。

1、MED(多出口分辨器,Multi-Exit-Discriminator)

(1)当从不同的EBGP邻居获得目的地址相同但下一跳不同的多条进入AS的路由时,用于判断最佳路由。

?(2)MED值越小越优(默认为0)

(3)仅在相邻两个AS之间传递,收到此属性的AS不会再将其通告给第三方AS。

2、其他

五、私有属性

1、优先级(Preference_Value)

? (1)为华为私有BGP属性。

? (2)仅在本地路由器中有效(相当于BGP选路规则中的Weight值)。

? (3)值越大越优先。

2、其他

选路原则

一、到达目的地只有唯一路由的,直接优选。

二、对到达同一目的地的多条路由,优选优先级最高的。

  1. 丢弃下一跳不可达的路由。
  2. 优选Preference_Value值最高的路由(私有属性,仅本地有效)。
  3. ?优选本地优先级(Local_Preference)最高的路由。
  4. ?优选手动聚合>自动聚合>从对等体学到的路由。
  5. ?优选AS_Path较短的路由。
  6. ?优选起源类型IGP>EGP>Incomplete的路由。
  7. ?对于来自同一AS的路由,优选MED值较小的。
  8. ?优选从EBGP学到的路由(EBGP>IBGP)。
  9. ?优选AS内部IGP学到Metric值较小的路由。
  10. 优选Cluster_List最短的路由。
  11. ? 优选Orginator_ID最小的路由。
  12. ? 优选Router_ID最小的路由器发布的路由。
  13. ? 优选从邻居学习到具有较小IP地址的路由。

通告原则

  1. 仅将自己最优的路由发布给邻居。
  2. 通过EBGP获得的最优路由发布给所有邻居。
  3. 通过IBGP获得的最优路由不会发布给其他IBGP邻居。