第四章 BGP协议
4.1 BGP 简介
BGP(Border Gateway Protocol,边界网关协议)是一种用于AS(Autonomous System,自治系统)之间的动态路由协议。AS 是拥有同一选路策略,在同一技术管理部门下运行的一组路由器。
早期发布的三个版本分别是BGP-1(RFC 1105)、BGP-2(RFC 1163)和BGP-3(RFC 1267),当前使用的版本是BGP-4(RFC 1771)。BGP-4 做为事实上的Internet 外部路由协议标准,被广泛应用于ISP(Internet Service Provider,因特网服务提供商)之间。
BGP 特性描述如下:
BGP 是一种外部网关协议(Exterior Gateway Protocol,
EGP),与OSPF、RIP 等内部网关协议(Interior Gateway
Protocol,IGP)不同,其着眼点不在于发现和计算路由,而
在于控制路由的传播和选择最佳路由。
BGP 使用TCP 作为其传输层协议(端口号179),提高了协
议的可靠性。
BGP 支持CIDR(Classless Inter-Domain Routing,无类别域
间路由)。
路由更新时,BGP 只发送更新的路由,大大减少了BGP 传播
路由所占用的带宽,适用于在Internet 上传播大量的路由信
息。
BGP 路由通过携带AS 路径信息彻底解决路由环路问题。
BGP 提供了丰富的路由策略,能够对路由实现灵活的过滤和
选择。
BGP 易于扩展,能够适应网络新的发展。
在Internet 上,BGP 需要通告的路由数目极大,由于TCP 提供了可靠的传送机制,同时TCP 使用滑动窗口机制,使得BGP 可以不断地发送分组,而无需像OSPF 或EIGRP 那样停止发送并等待确认。
发送BGP 消息的路由器称为BGP 发言者(BGP Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP 发言者。当BGP
发言者收到来自其它自治系统的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给自治系统内所有其它BGP 发言者。
相互交换消息的BGP 发言者之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer group)。
BGP 在路由器上以下列两种方式运行:
IBGP(Internal BGP):当BGP 运行于同一自治系统内部
时,被称为IBGP;
EBGP(External BGP):当BGP 运行于不同自治系统之间
时,称为EBGP。
4.2 BGP 的消息类型
4.2.1 消息头格式
BGP有5 种消息类型:Open、Update、Notification、Keepalive和Route-refresh。
这些消息有相同的报文头,其格式如图所示。
BGP 消息的报文头格式
主要字段的解释如下:
Marker:16 字节,用于BGP 验证的计算,不使用验证时所有
比特均为“1”。
Length:2 字节,BGP 消息总长度(包括报文头在内),以
字节为单位。
Type:1 字节,BGP 消息的类型。其取值从1 到5,分别表示
Open、Update、Notification、Keepalive 和Route-refresh 消
息。其中,前四种消息是在RFC1771 中定义,而Type 为5 的
消息则是在RFC 2918 中定义的。
4.2.2 Open消息
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。两个邻居都要发送一个Open 消息,每个邻居都用该消息来标示自己,并规定自己的BGP 运行参数。
BGP Open 消息包含的内容包括:
1)BGP version
它明确了发起者正在运行的BGP 版本号(2,3,4),可以通过neighbor version 修改,缺省版本号为4。如果版本号不相同,路由器将自动降低版本号重发Open 消息,直到版本一致。
2)AS number
发起会话路由器的AS 号,用于确认EBGP 或者IBGP 会话。
3)Hold time
路由器必须收到一个keepalive 或者更新消息之前允许经过的最大秒数。
Holdtime 必须是0(在这种情况下,必须是没有发送Keepalive)或者至少3s。
Cisco 默认的holdtime 为180s,如果两个邻居间holdtime 不一致,选较短的那个做为两者可接受的时间。
4)BGP router-ID
选取方式和OSPF 相同,使用数值最大的loopback 口地址,没有loopback 则使用物理接口上数值最大的地址。
5)Optional parameters
用于一些可选功能的支持,例如鉴别,多协议支持及路由刷新等。
4.2.3 Update消息
Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息,其消息格式如图所示。
BGP Update 消息格式
一条Update 报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer Reachable Information,网络层可达信息)字段中,Path Attributes字段携带了这些路由的属性,BGP 根据这些属性进行路由的选择;同时Update 报文还可以携带多条不可达路由,被撤销的路由放在Withdrawn Routes 字段中。
BGP Update 消息包含的内容包括:
1)Network Layer Reachability Information (NLRI)
用来公布IP 地址前缀和前缀长度的字节组,例如<19,198.24.160.0>
2)Path Attributes
该属性为BGP 提供了选择最短路径,检查到路由环路以及决定路由策略的信息
3)Withdrawn Routes
用来描述已经变成不可达并正从业务中撤销的目的地址字节组(长度和前缀)
注:虽然NLRI 字段可以包含多个前缀,但每一个更新消息只描述一条BGP 路由(因为路径属性只描述一条路径,但该路径可能会到达多个目的地)
4.2.4 Notification消息
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。其消息格式如图所示。
BGP Notification 消息格式
主要字段的解释如下:
Error Code:差错码,指定错误类型。