BGP:Border Gateway Protocol,边界网关协议
特征
- BGP使用TCP以确保可靠传输,TCP端口号179;
- BGP路由器之间建立TCP连接,这些路由器称为BGP对等体也叫BGP邻居。有两种BGP邻居关系:eBGP邻居关系,以及iBGP邻居关系。
- BGP的邻居关系可以跨路由器建立,而不像OSPF及RIP那样,必须要求直连。
- BGP对等体在邻居关系建立时交换整个BGP路由表。
- 在邻居关系建立完成后,BGP路由器只发送增量更新或触发更新(不会周期性更新)。
- BGP具有丰富的路径属性和强大的策略工具。
- BGP能够承载大批量的路由前缀,用于大规模的网络中。
报文
BGP报文是被承载在TCP报文之上的,端口号179。
| 报文 | 作用 | 发送时间 |
| ------------- | ------------------------------------- | ------------------------------------------------------------ |
| OPEN | 协商BGP邻居的各项参数, 建立邻居关系 | 通过TCP建立BGP连接,发送open报文 |
| UPDATE | 进行路由信息的交换 | 连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息 |
| NOTIFICATION | 报告错误,中止邻居关系 | 当 BGP 在运行中发现错误时,要发送NOTIFICATION报文通告BGP对端 |
| KEEPALIVE | 维持邻居关系 | 定时发送KEEPALIVE报文以保持BGP邻居关系的有效性 |
| Route-refresh | 为保证网络稳定,触发更新 路由的机制 | 当路由策略发生变化时,触发请求邻居重新通告路由 |
状态机
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、其他
选路原则
一、到达目的地只有唯一路由的,直接优选。
二、对到达同一目的地的多条路由,优选优先级最高的。
- 丢弃下一跳不可达的路由。
- 优选Preference_Value值最高的路由(私有属性,仅本地有效)。
- ?优选本地优先级(Local_Preference)最高的路由。
- ?优选手动聚合>自动聚合>从对等体学到的路由。
- ?优选AS_Path较短的路由。
- ?优选起源类型IGP>EGP>Incomplete的路由。
- ?对于来自同一AS的路由,优选MED值较小的。
- ?优选从EBGP学到的路由(EBGP>IBGP)。
- ?优选AS内部IGP学到Metric值较小的路由。
- 优选Cluster_List最短的路由。
- ? 优选Orginator_ID最小的路由。
- ? 优选Router_ID最小的路由器发布的路由。
- ? 优选从邻居学习到具有较小IP地址的路由。
通告原则
- 仅将自己最优的路由发布给邻居。
- 通过EBGP获得的最优路由发布给所有邻居。
- 通过IBGP获得的最优路由不会发布给其他IBGP邻居。