BGP是一种自治系统间的动态 路由发现 协议,它的基本功能是在自治系统间自动交换无环路的 路由信息。与OSPF和RIP等在自治区域内部运行的 协议对应,BGP是一类EGP(Edge Gateway Protocol) 协议,而OSPF和RIP等为IGP(Interior Gateway Protocol) 协议
  
  BGP是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的 路由发现 协议,广泛应用于NFSNET等主干网络上。但是,EGP被 路由环路问题所困扰。BGP通过在 路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除 路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展, 路由表的体积也迅速增加,自治区域间 路由信息的交换量越来越大,都影响了网络的性能。BGP支持无类型的区域间 路由CIDR(Classless Interdomain Routing),可以有效的减少日益增大的 路由表。
  
  BGP运行时刻分别与本自治区域外和区域内的BGP伙伴建立连接(使用Socket)。与区域内伙伴的连接称为IBGP(Internal BGP)连接,与自治区域外的BGP伙伴的连接称为EBGP(External BGP)连接。本地的BGP 协议对IBGP和EBGP伙伴使用不同的机制处理。
  
   1、BGP协议的层次位置
  
 
 
  BGP使用Socket服务建立连接,端口号为179。
  
   2、BGP的消息结构
  BGP有4种类型的消息。分别为OPEN,UPDATE,KEEPALIVE和NOTIFY。它们有相同的消息头。
  
  ⑴消息头结构:
  
 
 
  Marker : (16字节) 鉴权信息
  
  Length : (2字节) 消息的长度
  
  Type : (1字节) 消息的类型
  
  0 :OPEN
  
  1 :UPDATE
  
  2 :NOTIFICATION
  
  3 :KEEPALIVE
  
  ⑵OPEN消息结构:
  
  消息头加如下结构 :
  
 
 
  Version :(1字节) 发端BGP版本号
  
  My Autonomous System :(2字节无符号整数) 本地AS号
  
  Hold Time :(2字节无符号整数) 发端建议的保持时间
  
  BGP Identifier :(4字节) 发端的 路由器标识符
  
  OptParmLen :(1字节) 可选的参数的长度
  
  Optional Parameters :(变长) 可选的参数
  
  ⑶KEEPALIVE消息结构
  
  KEEPALIVE消息只有一个消息头。
  
  ⑷NOTIFY消息结构
  
  消息头加如下结构:
  
 
 
  
 
 
  Errsubcode :(1字节) 辅助错误代码,略。
  
  Data :(变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。
  
  ⑸UPDATE消息结构
  
  消息头加如下结构:
  
 
 
  Unfeasible Routes Len :(2字节无符号整数) 不可达 路由长度
  
  Withdrawn Routes :(变长) 退出 路由
  
  Path Attribute Len :(2字节无符号整数) 路径属性长
  
  Path Attributes :(变长) 路径属性(以下详细说明)
  
  Network Layer Reachability Information :(变长) 网络可达信息(信宿)
  
  其中退出 路由和信宿地址的表示方法为一 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度1至4字节。
  
   3、BGP路径的属性
  每个路径属性由1字节的属性标志位,1字节的属性类型,1或2字节 路由属性长度和路径属性数据组成。
  
  属性标志位:
  
 
 
  位0:0 表示此属性必选,1 表示此属性可选。
  
  位1:0 表示此属性为非过渡属性,1表示此属性为过渡属性。
  
  位2:0 表示所有属性均为 路由起始处生成,1 表示中间AS加入了新属性。
  
  位3:0 表示 路由属性长度由1字节指示,1表示由2字节指示。
  
  位4至位7:未用置0
  
  位0和位1标识了BGP的4类 路由属性:
  
  -(01) 公认必选:BGP的UPDATE报文中必须存在的属性。它必须能被所有的BGP工具识别。公认必选属性的丢失意味着UPDATE报文的差错。这是为了保证所有的BGP工具统一于一套标准属性。
  
  -(01) 公认自决:能被所有BGP识别的属性,但在UPDATE报文中可发可不发。
  
  -(11) 可选过渡:如果BGP工具不能识别可选属性,它就去找过渡属性位。如果此属性是过渡的,BGP工具就接受此属性,并把它向前传递给其它BGP 路由器。
  
  -(10) 可选非过渡:当可选属性未被识别,且过渡属性也未被置位时,此属性被忽略,不传递给其它BGP 路由器。
  
   路由属性类型:
  
  ⑴ORIGIN (Type Code = 1,公认必选属性)
  
  指示此 路由起始类型:
  
 
 
  ⑵AS_PATH (Type Code = 2,公认必选属性)
  
  AS路径属性由一系列AS路径段(Segment)组成。每个AS路径段为一三元组<路径段类型,路径段长度,路径值>。
  
  路径类型有:
  
 
 
  路径段长度用1字节表示AS号的数量,即最长为255个AS号。
  
  路径值为若干AS号,每个AS号为2字节。
  
  ⑶NEXT_HOP (Type Code = 3,公认必选属性)
  
  此属性为UPDATE消息中的信宿地址所使用的下一跳。
  
  ⑷MULTI_EXIT_DISC (Type Code = 4,公认自决属性)
  
  简称MED属性。为一4字节无符合整数。它在AS区域间传播,用来帮助一个其它AS区域的BGP伙伴选择进入本AS区域的人口。
  
  ⑸LOCAL_PREF (Type Code = 5,公认自决属性)
  
  本地优先级属性。为一4字节无符合整数。它在AS区域内传播,用来帮助一个本AS区域内BGP伙伴选择进入其它AS区域的出口。
  
  ⑹ATOMIC_AGGREGATE (Type Code = 6,公认自决属性)
  
  元聚合属性。长度为零。它表示本地BGP在若干 路由中选择了一个较抽象的(less specific) 路由,而没有选择较具体(specific)的 路由
  
  ⑺AGGREGATOR (Type Code = 7,可选过渡属性)
  
  聚合者属性。长度为6字节,分别为最后进行 路由聚合的 路由器的AS号(2字节)和IP地址(4字节)。
  
   4、BGP协议的特点
  BGP是一种AS(自治区域)外部 路由 协议,主要负责本自治区域和外部的自治区域间的 路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构,BGP通过UPDATE消息中 路由的AS属性来构造AS的拓扑结构图,进一步通过此结构图来选择 路由
  
  与OSPF,RIP等IGP 协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP 协议构造的是AS内部的 路由器的拓扑结构图。IGP把 路由器抽象成若干端点,把 路由器之间的链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的 路由。这里有一个假设,即 路由器 (端点)转发数据包是没有的代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价 就不能假设为0了,此代价要由IGP来负责计算。这体现了EGP和IGP是分层的关系。即IGP负责在AS内部选择花费最小的 路由,EGP负责选择AS间花费最小的 路由
  
  BGP作为EGP的一种,选择 路由时考虑的是AS间的链路花费,AS区域内的花费(由BGP 路由器配置)等因素。
  
  如上所述,内部网关 协议IGP需引入AS自治区域内部网络拓扑图其它各点的 路由,同时向其它端点发送本端点( 路由器)所知的 路由,如直接 路由、静态 路由等。作为外部网关 协议,BGP发送和引入 路由的单位是整个AS自治区域,即BGP要发送本地 路由器所在的AS内部的所有 路由,引入其它AS自治区域的所有 路由(假设不使用 路由策略控制发送和引入)。其 路由数量显然要远远大于IGP发送和引入的 路由数量。因此,类似于IGP那样定时对外广播 路由信息是不可取的。BGP采用发送 路由增量(Incremental)的方法,完成全部 路由信息的通告和维护:初始化时发送所有的 路由给BGP对端(BGP Peer),同时在本地保存了已经发送给BGP对端的 路由信息。当本地的BGP收到了一条新 路由时(如通过IGP注入了新 路由或加入了新的静态 路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的 路由进行比较,如新 路由花费更小,则发送此新 路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条 路由失效时(如对应端口失效),如此 路由已发送过,则向BGP对端发送一个退出 路由消息。
  
  总之,BGP不是每次都广播所有的 路由信息,而是在初始化全部 路由信息后只发送 路由的变化量(增量)。这样保证了BGP和对端的最小通信量,但同时增加了BGP的复杂程度。因为对于IGP,本地 路由 协议只需发送发送时刻所知的全部 路由,而不保存任何已发送信息, 路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经发送的 路由信息,以便发送一条新 路由前确认其是否真的应该发送。
  
  为了减小 路由表的体积和发送 路由的通信量,BGP还支持CIDR(Classless InterDomain Routing)。它使用带有较短的掩码(相对于自然掩码)的 路由来在一条