PersonalCorpus 版 (精华区)

发信人: qubo (qubo), 信区: Network
标  题: 边界网关协议版本4(BGP-4)(rfc1771) 
发信站: 哈工大紫丁香 (2003年09月30日11:17:10 星期二), 站内信件

组织:中国互动出版网(http://www.china-pub.com/) 
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm) 

E-mail:ouyang@china-pub.com 
译者:kevin73(kevin73,panzhenyu_2@263.net) 
译文发布时间:2001-4-26 
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必 
须 
保留本文档的翻译及版权信息。 

Network Working Group                                         Y. Rekhter 
Request for Comments: 1771        T.J. Watson Research Center, IBM Corp. 
Obsoletes: 1654                                                    T. Li 
Category: Standards Track                                  cisco Systems 
                                                                 Editors 
                                                              March 1995 

边界网关协议版本4(BGP-4)  
(RFC1771 A Border Gateway Protocol 4 (BGP-4)) 

本备忘录的状态 
本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和 
建议以得到改进。请参考最新版的“Internet正式协议标准” (STD1)来获得本协议的标准
 

化程度和状态。本备忘录的发布不受任何限制。 

摘要 
    本文档,以及随同文档,“边检网关协议在互联网中的应用”,定义了互联网的自治 
系 
统间路由协议。 
目录 
1.  致谢    3 
2. 介绍    3 
3.  操作总结    4 
3.1 路由:通告和存储    5 
3.2 路由信息库    5 
4. 消息格式    5 
4.1 消息头格式    6 
4.2 OPEN消息格式    6 
4.3 UPDATE消息格式    8 
4.4 KEEPALIVE消息格式    13 
4.5 NOTIFICATION消息格式    13 
5. 路径属性    15 
5.1 路径属性使用    16 
5.1.1 ORIGIN    16 
5.1.2 AS-PATH    16 
5.1.3 NEXT-HOP    16 
5.1.4 MULTI-EXIT-DISC    17 
5.1.5 LOCAL_PREF    17 
5.1.6 ATOMIC_AGGREGATE    17 
5.1.7 AGGREGATOR    18 
6. BGP错误处理    18 
6.1 消息头错误处理.    18 
6.2 OPEN 消息错误处理    19 
6.3 UPDATE 消息错误处理    19 
6.4 NOTIFICATION 消息错误处理    20 
6.5 HOLD TIMER 溢出错误处理    20 
6.6 有限状态及错误处理.    20 
6.7 终止    21 
6.8 连接冲突检测    21 
7.  BGP版本商议    21 
8.  BGP 有限状态机    22 
9.  UPDATE 消息处理    25 
9.1 决策过程    26 
9.1.1 Phase 1: 优先级的计算    26 
9.1.2 Phase 2: 路由选择    27 
9.1.3 Phase 3: 路由分发    28 
9.1.4 路由重叠    29 
9.2 UPDATE发送过程    29 
9.2.1 内部更新    30 
9.2.2 外部更新    31 
9.2.3 控制路由流量开销    31 
9.2.4 路由信息的有效组织    32 
9.3  路由选择标准    34 
9.4   产生BGP路由    34 
附录 1.  BGP FSM 状态转换和行为    34 
附录 2.  对比RFC1267    37 
附录 3.  对比RFC1663    38 
附录4.  对比 RFC 1105    38 
附录5. BGP可能使用的TCP选项    39 
附录6.  应用建议    39 
6.1 每个消息的多网络前缀    39 
6.2 使用流协议    40 
6.3 减少路由抖动    40 
6.4 BGP 计时器    40 
6.5 路径属性顺序    40 
6.6 AS_SET 排序    41 
6.7 版本商议控制    41 
6.8 复杂 AS_PATH 聚合    41 
参考    41 
安全考虑    42 
作者地址    42 

1.  致谢 
    本文档初版是1991年10月的RFC1267,由Kirk Lougheed (cisco 系统) 和 Yakov  
Rekhter (IBM)合作。 
    我们意欲感谢Guy Almes (ANS), Len Bosack(cisco 系统), 和Jeffrey C. Honig  
(Cornell 大学) 对本文档早期版本的贡献。 
    我们特别感谢Bob Braden (ISI) 回顾本文档的早期版本并作出了建设性有价值的评论
 
。 
    我们同时感谢Bob Hinden, Internet Engineering Steering Group路由主管, 以及他
 

组织回顾早期版本(BGP-2)的小组。本小组,包括Deborah Estrin, Milo Medin, John  
Moy,  
Radia  Perlman, Martha Steenstrup, Mike St. Johns, 和 Paul Tsuchiya, 工作顽强专
 

业谦逊。 
    本文档作为更新版本是编者Yakov Rekhter and Tony Li 的IETF IDR 工作组的产品。
 

本文档某些部分广泛参考了IDRP[7],BGP的OSI对等协议。为此感谢ANSI X3S3.3 组,主席
 

是Lyman Chapin (BBN), 编辑是Charles Kunzinger(IBM Corp.)。 同时感谢Mike Crare 
n  
(Proteon, Inc.), Dimitry Haskin (Bay Networks, Inc.), John Krawczyk (Bay Netwo 
rks,  
Inc.), 和 Paul Traina (cisco Systems) 的深刻评论。 
    我们特别感谢 Dennis Ferguson (MCI)的巨大贡献。 
    Yakov Rekhter 的工作资金部分来自National Science Foundation ,批号NCR-92192 
16. 

2. 介绍 
    边界网关协议(BGP)是自治系统间路由协议。它的建立来源于RFC904[1]中定义的EG 
P以及RFC1092[2]和RFC1093[3]中描述的EGP在NSFNET骨干网中的使用。 
    BGP交互系统的主要功能是和其他的BGP系统交换网络可达信息。网络可达信息包括可 
达信息经过的自治系统(AS)列表上的信息。这些信息有效地构造了AS互联图并由此清除 
了路由环路同时在AS级别上实施了策略决策。 
    BGP-4提供了一套新的机制来支持无类别域间路由。这些机制包括支持网络前缀的通告
 
取消BGP网络中“类”的概念。BGP-4也引入机制支持路由聚合,包括AS路径的聚合。这些 
改变为[8, 9]建议的超网方案提供了支持。 
    为了描述BGP执行的策略决策集,集中讲述BGP发言者通告他自己使用的路由到相邻AS 
中对端(与之通信的别的BGP发言者)的规则。这些规则反映了当今互联网广泛使用的“一
 
跳一跳”路由范例。注意一些策略不被“一跳一跳路由范例支持,所以需要执行比如源路 
由之类的技术。例如,BGP不支持AS发送流量到相邻的AS,并想要产生于邻居AS的流量带有
 
不同的路由。 
另一方面,BGP支持任何与“一跳一跳”一致的策略。由于当前互联网只使用“一跳一跳”
 
路由范例同时BGP支持与范例一致的策略,BGP作为AS间路由协议非常适用于当今互联网。 

    BGP能否执行哪些策略超出了本文档的讨论范围(请参考讨论BGP使用的随同文档[5])
 
。 
    BGP运行在稳定的传输协议上。这样就不用再更新分段,重传,应答和排序。传输协议
 
使用的认证机制可以作为BGP自己的认证机制的附加。BGP的错误通知机制假定传输协议支 
持“体面”关闭,也就是说,在联接关闭之前所有的突出数据要被发送。 
    BGP使用TCP[4]作为传输协议。TCP满足BGP的传输需求并在所有的商业路由器和主机上
 
使用。在后面的叙述中,术语“传输协议连接”可以理解为TCP连接。BGP使用TCP端口179 
建立连接。 
    本文档使用术语自治系统(AS)。自治系统的经典定义是在统一技术管理下的一系列 
路由器,在AS内部使用内部网关协议和通用的度量路由数据包,在AS外部使用外部网关协 
议路由数据包到其他的ASs。由于本定义的发展,通常一个AS可以使用几个内部网关协议同
 
时在AS内部使用多种度量。使用自治系统这个术语强调了以下事实,即使使用了多个IGP和
 
度量,对别的AS而言,AS的管理对于其他的ASs来说表现出一致的路由计划和一致的目的地
 
可达。 
    在互联网中使用BGP的计划,包括拓扑问题,BGP和IGP的交互,路由策略规则的实施,
 
在随同文档[5]中表述。本文档是一系列探究BGP应用各方面问题计划的开始。请发表评论 
到 
BGP邮件列表(bgp@ans.net). 
  
3.  操作总结 
两个系统通过传输协议互联。他们交换消息来打开和确认连接参数。初始的数据流是整个 
BGP路由表。路由表改变时发送增加的更新。BGP不需要对整个的BGP路由表作周期性的更新
 
。因此,BGP发言者必须保存在连接期间所有对等体的整个BGP路由表的当前版本。KeepAl 
ive心跳消息周期性发送来保证连接的存在。通知消息用于报错或者特别情况。如果一个连
 
接遇到一个错误情况,要发送通知消息并且关连接。 
    执行边界网关协议的主机不一定是路由器。一个非路由主机可以通过EGP甚至内部网关
 
协议和路由器交换路由信息。然后非路由主机可以通过BGP和别的AS中的边界路由器交换路
 
由信息。这种应用构架可以用于更进一步的研究。 
    如果一个特定AS有多个BGP发言者同时为别的AS提供中转业务,应该注意保证本AS中对
 
路由有一致的观点。AS内部路由的一致看法由内部路由协议提供。AS外部对路由的一致看 
法由所有AS内部的BGP发言者保持BGP一一互联提供。使用通常的策略,BGP发言者对哪一个
 
边界路由器作为和别的AS的外出/进入点服务达成了一致。这些信息可能通过内部网关协议
 
通信到AS的内部路由器。注意在BGP发言者把中转业务通告到别的AS之前所有的内部路由器
 
需要更新中转信息。 
    不同AS之间的BGP发言者的连接被称为“外部”链接。同一个AS内部的BGP连接被称为 
“内部”链接。同样,不同AS之间的对端被称为外部对端,相同AS之间的对端被称为内部 
对端。 
3.1 路由:通告和存储 
    从协议的用途出发,路由被定义为组合了一个目的地和到这个目的地的路径属性的信 
息单位。 
   -路由在一对BGP发言者之间通过UPDATE消息通告。目的地也就是在网络层可达信息(N 
LRI)内报告的IP地址,路径是在UPDATE消息路径属性字段内报告的信息。 

    -路由存储在路由信息库(RIB)内:也就是the Adj-RIBs-In, the Loc-RIB, and th 
e Adj-RIBs-Out. 将被通告到别的BGP发言者的路由放在Adj-RIB-Out里;在本地BGP发言者
 
使用的路由放在Loc-RIB, 这些路由的下一跳信息保存在BGP发言者的转发信息库内;从别 
的BGP发言者收到的路由信息保存在Adj-RIBs-In内部。 
    如果一个BGP发言者选择路由通告,他可以在通告路由到对端之前加入和修改路由的路
 
径属性。 
   BGP提供了机制告诉对端先前的路由通告不再能使用。有三种方式供BGP发言者指示撤销
 
某条路由的服务。 
    a) 对于先前通告的路由,在UPDATE消息的WITHDRAWN ROUTES字段内通告了到目的地I 
P前缀,这样相应的路由被标志为不再使用, 
    b)有相同网络层可达信息的替代路由能够被通告, 
    c)BGP发言者-发言者的连接能够关闭,这意味着从服务里撤销这一对发言者互相通告 
的所有的路由。 
3.2 路由信息库 
     
BGP发言者的路由信息库(RIB)包括三个不同部分: 
a)Adj-RIBs-In: Adj-RIBs-In 保存了从输入UPDATE消息学习到的路由信息,这是决策过程
 
的输入。 
b)Loc-RIB: Loc-RIB保存了BGP发言者根据本地策略在Adj-RIBs-In内选择的本地路由信息 
。 
c)Adj_RIBs_Out: Adj_RIBs_Out保存了本地BGP发言者通告到对端的路由。 
本地BGP发言者的UPDATE消息包含了放在Adj_RIBs_Out内部的路由信息发送到对端。 
    总之,Adj_RIB_In包括了对端通告到本地BGP发言者的未处理的路由信息;Loc_RIB包 
括了被本地决策过程选择的路由信息;使用UPDATE消息通告,Adj_RIBs_Out组织路由通告 
到特定对端。 
    尽管本概念模型区分Adj-RIBs-In,Loc-RIB,和 Adj-RIBs-Out,这并不意味着也没有
 
必要在具体应用中维护路由信息的独立拷贝。应用的选择(例如,信息库的三份拷贝或者 
一个拷贝的指针)不受协议限制。 

4. 消息格式 
    本章描述BGP的消息格式。 
    消息通过一个稳定的传输协议互联发送。消息只有在被完整收到之后才会处理。最大 
的消息是4096字节。所有应用都支持最大消息长度。最小的消息就是一个不包括消息体的 
BGP消息头,19字节。 
4.1 消息头格式 
    每一个消息包括一个定长的消息头。消息头后面可以/可以不包含数据部分,这取决于
 
消息类型。这些字段设计如下: 
       0                   1                   2                   3 
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                              | 
      +                                                               + 
      |                                                               | 
      +                                                               + 
      |            Marker                             | 
      +                                                               + 
      |                                                               | 
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
      |          Length               |      Type     | 
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

Marker(标记): 
    本16字节的字段包含消息接收者可以预测的值。如果消息类型是OPEN,或者OPEN消息 
没有承载认证信息(作为可选参数),标记必须是全1。否者,标记的值要使用认证机制来
 
计算(认证机制是通过认证信息的一部分来指定的)。标记可以用来探测BGP对端的同步丢
 
失,认证进入的BGP消息。 

长度(Length): 
    两字节无符号整数指定了消息的全长,包括头部字节。这也就是说,允许在 
传输层数据流定位下一个消息(的标记字段)。长度的值必须最少19字节最大4096字节, 
同时由于不同的消息类型有更多的约束。不允许“填充”多余的数据在消息后,所以长度 
字段是需要有最小值。 

类型(Type): 
    一字节的无符号整数制定了消息类型编码。如下定义: 
                                    1 - OPEN 
                                    2 - UPDATE 
                                    3 - NOTIFICATION 
                                    4 - KEEPALIVE 

4.2 OPEN消息格式 

     
在传输协议连接建立之后,两边发送的第一个消息是OPEN消息。如果OPEN消息可以接受, 
需要发回一个KEEPALIVE消息来确认OPEN消息。一旦确认了OPEN消息,UPDATE,KEEKPALIV 
E和NOTIFICATION消息可以交换。 
    在定长的BGP消息头后面,OPEN消息包含下列字段: 

        0                   1                   2                   3 

                    
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+ 
       |    Version    | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       |     My Autonomous System      | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       |           Hold Time           | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       |           BGP Identifier                        | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       | Opt Parm Len  | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       |                                                               | 
       |          Optional Parameters                     | 
       |                                                               | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

Version(版本): 
        1字节无符号整数指示消息的协议版本号。当前的BGP版本号是4。 
     
My Autonomous System(我的自治系统): 
        2字节无符号整数指示发送者自治系统号。 
     
Hold Time(保持时间): 
2字节的无符号整数指示了发送者期望的Hold计时器的秒数。在接收OPEN消息后,BGP发言 
者必须使用自己配置的Hold计时器和收到的Hold计时器的较小值来计算Hold计时器的值。 
Hold计时器必须是0或最少3秒。应用可以根据Hold计时器来拒绝连接。计算好的值指示了 
在连续的KEEPALIVE和/或UPDATE消息之间可以流逝的最大秒数。 
     
BGP Identifier (BGP标示符): 
4字节无符号整数指示了BGP发言者的标示符。给定的BGP发言者设置BGP标示符为IP地址。 
在启动的时候决定BGP标示符,对每一个本地端口和每一个对端是一样的。 


Optional Parameters Length(可选参数长度): 
1字节无符号整数指示可选参数字段的字节总长度。如果这个字段是0,说明没有可选参数 
。 
     
Optional Parameters(可选参数): 
这个字段包含了可选参数列表,每一个参数编码为<参数类型,参数长度,参数值>三元组 
。 
     


            0                   1 
          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... 
         |  Parm. Type   | Parm. Length  |  Parameter Value (variable) 
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... 

参数类型是1个字节,明确指示了单个的参数。参数长度1字节包含参数值的字节长度。参 
数值是变长字段,根据参数类型有不同的解释。 
         
本文档定义了下列可选参数: 
        a)认证消息(参数类型1): 
        可选参数用来认证BGP对端。参数值包含1字节认证编码后面是变长的认证数据。 

                    0 1 2 3 4 5 6 7 8 
                +-+-+-+-+-+-+-+-+ 
                |  Auth. Code   | 
                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
                |                                                     | 
                |  Authentication Data                    | 
                |                                                     | 
                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

Authentication Code(认证编码): 

1字节无符号整数指示了使用的认证机制。当认证机制指定用于BGP的时候,需要说明三件 
事情: 
            -认证编码的值用来指示认证机制, 
-认证数据的格式和含义, 
            -计算Marker字段值的算法。 
        注意在建立传输层连接时可以使用另外的认证机制。 
0             
Authentication Data(认证数据): 

        这个字段的格式和含义取决于认证编码,它是变长的。 

OPEN消息的最小长度是29字节(包括消息头)。 
4.3 UPDATE消息格式 
    UPDATE消息用来发送路由信息到BGP对端。UPDATE消息报内的信息可以被用来构造AS之
 
间的关系描述。通过应用以下讨论的规则,路由环路和别的异常可以测出并清除出AS间路 
由。 
    UPDATE消息用来通告一条可用的到对端的路由,或者撤销多条不可用路由(见3。1) 
。UPDATE消息可以同时通告一个可用路由并撤销多个不可用路由。UPDATE消息总是包括定 
长消息头,同时可选的包括下面的字段: 


      +-----------------------------------------------------+ 
      |   Unfeasible Routes Length (2 octets)               | 
      +-----------------------------------------------------+ 
      |  Withdrawn Routes (variable)                        | 
      +-----------------------------------------------------+ 
      |   Total Path Attribute Length (2 octets)            | 
      +-----------------------------------------------------+ 
      |    Path Attributes (variable)                       | 
      +-----------------------------------------------------+ 
      |   Network Layer Reachability Information (variable) | 
      +-----------------------------------------------------+. 

 Unfeasible Routes Length(不可用路由长度): 
2字节无符号整数指示了撤销路由的字节总长度。这个值必须保证网络层可达信息字段的长
 
度被确定。0说明没有撤销路由, UPDATE消息内部没有撤销路由。 
Withdrawn Routes(撤销路由): 
这是一个可变长字段,包括一系列的IP前缀将要撤销的路由。每一个IP前缀编码为〈长度 
,前缀〉二元组,如下描述: 
                  +---------------------------+ 
                  |   Length (1 octet)        | 
                  +---------------------------+ 
                  |   Prefix (variable)       | 
                  +---------------------------+ 

        使用和含义如下: 

        a) Length(长度): 

长度指示了IP前缀的比特数。0长度指示了匹配所有IP地址的前缀(前缀本身 
为0字节) 

         b) Prefix(前缀): 

前缀包含了IP地址前缀,后面是填充比特保证字段结尾符合字节边界。注意填充比特的值无
 
意义。 

     Total Path Attribute Length(总的路径属性长度): 

2字节无符号整数值是路径属性字段字节总长度。值必须使下文中网络层可达字段的长度能
 
够被决定。值0指示在UPDATE消息中没有网络层可达信息字段。 

      Path Attributes(路径属性): 

在每一个UPDATE消息中有变长的路径属性序列。每一个路径属性是<属性类型, 
属性长度,属性值>变长三元组 
        属性类型是2字节字段包括了属性标志字节和属性类型码字节。 


                0                   1 
                0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
               |  Attr. Flags  |Attr. Type Code| 
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
属性标志字节第一高位比特(比特0)是可选比特。定义了属性是否是可选的 
(设为1)或者是公认的(设为0)。 
属性标志字节第二高位比特(比特1)是转发比特。定义一个可选的属性是否 
是转发的(如果设置为1)或者不是转发的(设为0)。公认属性的转发位必须设为1。看部
 
分5讨论转发属性)。 
属性标志字节的第三比特(比特2)是部分比特。它定义了包括在可选转发属 
性内的信息是部分的(设置为1)还是完整的(设置为0)。(公认属性和可选非转发属性 
)的部分位必须是0。 
属性标志字节的第四比特(比特3)是扩展长度比特。定义了属性长度是1 
字节(如果设置为0)还是2字节(如果设置为1)。仅仅当属性值超过255字节的时候,扩 
展长度可以使用。 
属性标志字节低字节顺序4比特没有被使用。必须填0(接收时不处理)。 
             
属性类型编码字节包含了属性类型码。当前定义的属性类型码在部分5讨论。 

如果属性标志字节的扩展长度比特被设置为0,路径属性的第三个字节包含了 
属性数据的字节长度。 

如果属性标志字节的扩展长度比特设置为1,那末路径属性的第三和第四个字 
节包含了属性数据的字节长度。 

路径属性剩下的字节代表属性值并且通过属性标识和属性类型码表示。支持的 
属性类型码,它们的属性值和使用如下定义: 


         a)   ORIGIN (类型码 1): 


ORIGIN是公认强制属性定义了路径信息的来源。本数据字节设定如下值: 

                  值      含义 

                  0         IGP – 网络层可达信息和来源AS同内部 

                  1         EGP – 网络层可达信息通过EGP学习 

                  2         INCOMPLETE –网络层可达信息通过别的方式学习 

            它的使用在5.1.1定义。 


         b) AS_PATH (类型编码2): 

AS-PATH是公认强制属性由一系列AS路径段组成。每一个AS路径段表示为三元 
组<路径段类型,路径段长度,路径段值>。 
路径段类型是1字节长度字段有下列定义值。 
             
                  值      段类型 
                  1         AS_SET: 在UPDATE消息中的路由经过的AS的无序集 

                  2         AS_SEQUENCE: 在UPDATE消息中的路由经过的AS的有序集 


路径段长度是1字节长度的字段包含了在路径段值字段的AS的数量。 

            路径段值字段包含了一个或者多个AS号,每一个编码为2字节长度的字段。 


            属性的使用定义在5.1.2。 

         c)   NEXT_HOP (类型码3): 

这是一个公认强制属性,它定义了作为到达目的地作为下一跳的边界路由器的 
IP地址,目的地列表于UPDATE消息的网络层可达字段。 
             


            属性的使用定义在5.1.3。 

         d) MULTI_EXIT_DISC (类型码4): 

可选非转发属性是4字节非负整数。属性值可以被BGP发言者决策过程在相邻自治系统中区 
分多个出口。  
        它的使用在5.1.4.定义。 

         e) LOCAL_PREF (类型编码 5): 

LOCAL-PREF是公认自决属性4字节非负整数。BGP发言者使用它通知别的BGP在 
自己的自治系统中源发言者通告路由的优先程度。使用属性在5。1。5中描述。 

          

f) ATOMIC_AGGREGATE (类型编码6) 

ATOMIC-AGGREGATE是公认自决属性长度为0。BGP发言者使用它通知别的BGP发言者本系统选
 
择了一条更不特殊的路由而不是选择了一条更特殊的包括在内的路由。 
使用这个属性描述在5。1。6。 

         g) AGGREGATOR (类型编码7) 
AGGREGATOR是可选转发属性长度为6。属性包含了形成聚合路由最后的AS号码(编 
码为2字节),后面是形成聚合路由的BGP发言者的IP地址(编码为4字节)。使用这个属性
 
描述在5。1。7。 




      Network Layer Reachability Information(网络层可达信息): 

这个变长字段包含了IP地址前缀的列表。网络层可达信息的字节长度不是明确编 
码的,但是可以计算如下: 
UPDATE消息长度-23-总的路径属性长度-不可用路由长度。 

其中UPDATE消息长度是定长BGP消息头的编码值,总的路径属性长度和不可用 
路由长度是作为部分UPDATE消息的编码值。23是定长的BGP消息头,总的路径属性长度字段
 
和不可用路由长度字段的组合长度。 


可达信息编码时作为一个或者多个二元组格式为〈长度,前缀〉,它们的字段描 
述如下: 

                  +---------------------------+ 
                  |   Length (长度,1字节 )   | 
                  +---------------------------+ 
                  |   Prefix (变量    )       | 
                  +---------------------------+ 
字段使用和含义如下: 
a) 长度: 

长度字段指示了IP地址前缀的比特长度。0指示一个匹配了所有IP地址的前缀(前缀本身0 
字节) 

b) 前缀: 
前缀区字段包含了IP地址前缀并跟随足够的填充比特使该区字段的结尾能够落在字节边界 
。注意填充比特的值不关紧要。 

UPDTAE消息的最小长度是23字节—19字节定长消息头+2字节不可用路由长度 
+2字节总的路径属性长度(不可用路由长度是0同时总的路径属性长度是0)。 




UPDATE消息能够通告至少一条路由,路由可用几个路径属性描述。所有的包含在一个给定 
的UPDATE消息里的路径属性适用于带在UPDATE消息中的网络层可达信息区字段里的目的地 
。 

一个UPDATE消息能够列出多个路由撤销服务。每一个路由通过目的地制定(表 
示为IP前缀),明白的根据上下文指定了先前通告过的BGP发言者-BGP发言者连接里的 路 
由 
一个UPDATE消息可以仅仅撤销路由,这样就不需要包括路径属性或者网络层可 
达信息。相反,也可以仅仅通告可达路由,这样WITHDRAWN ROUTES不需要了。 


4.4 KEEPALIVE消息格式 
BGP不使用任何基于传输协议的keep-alive机制来确定对端是否可达。相反, 
KEEPALIVE消息在对端之间交换的频率要满足HOLD计时器不溢出的标准。合理的最大两个K 
EEPALIVE消息之间的时间是HOLD计时器间隔的1/3。KEEPALIVE消息必须不能比每秒一个更 
频繁。应用可以调整发送KEEPALIVE消息的速率作为HOLD TIME 间隔的函数。如果议定的H 
OLD TIME 间隔是0,周期性的KEKPALIVE消息必须不发送。 

KEEPALIVE消息只包含消息头,长度是19字节。 
4.5 NOTIFICATION消息格式 
       NOTIFACATION消息在探测到错误情况时发送。发送之后BGP连接要立即关闭。 

除了定长BGP消息头,NOTIFICATION消息包括下面的字段。 

        0                   1                   2                   3 
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
       | Error code    | Error subcode |           Data                | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               + 
       |                                                               | 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

          错误码: 

            1字节的无符号整数指示了NOTIFICATION的类型。下列的错误类型编码定义:
 


            错误码       符号名称                       参考 

              1         消息头错误                        部分 6.1 

              2         OPEN消息错误                       部分6.2 

              3         UPDATE消息错误                     部分6.3 

              4         Hold Timer溢出                   部分6.5 

5 有限状态机错误                       部分6.6 

              6         终止                            部分6.7 

      错误子码: 

一个字节的无符号整数提供了更多的关于错误报告种类的信息。每一个错误可以有一个或 
者多个错误子码,如果没有特别的错误子码定义,在错误子码字段填充0(不具体)。 


         Message Header Error subcodes(消息头错误子码): 

                               1  - 连接未同步. 
                               2  - 错误消息长度. 
                               3  - 错误消息类型. 

         OPEN Message Error subcodes(OPEN 消息错误子码): 

                               1  - 不支持版本号. 
                               2  - 错误对端AS. 
                               3  - 错误的BGP标示符. ' 
                               4  - 不支持的选项参数. 
                               5  - 认证失败. 
                               6  - 不支持的HOLD时间. 

         UPDATE Message Error subcodes(UPDATE消息错误子码): 

                               1 – 畸形属性表. 
                               2 – 未识别的公认属性 
                               3 – 缺少公认属性 
                               4 – 属性标志错误 
                               5 – 属性长度错误 
                               6 – 无效ORIGION属性 
                               7 – AS路由环路 
                               8 – 无效的NEXT-HOP属性 
                               9 – 可选参数错误 
                              10 – 无效网络字段 
                              11 – 畸形AS_PATH. 

      数据: 

这个变长的字段用来诊断NOTIFICATION的原因。数据字段的内容依赖于错误码和错误子码 
。部分6有详细说明。 
注意数据字段的长度可以利用公式从消息长度来确定。 

                  Message Length = 21 + Data Length 

NOTIFICATION消息最小的长度是21字节,(包括消息头) 


5. 路径属性 
这个部分讨论UPDATE消息的路径属性。 

路径属性分为下面四类。 

               1. Well-known mandatory.(公认强制) 
               2. Well-known discretionary.(公认自决) 
               3. Optional transitive.(可选转发) 
               4. Optional non-transitive.(可选非转发) 


公认属性是所有BGP应用都要识别的。有一些属性是强制的而且必须被包括在每一个APDAT 
E消息内部。别的是自决的可以也可以不在特定的UPDATE消息内部发送。 

所有的公认属性必须发送到BGP对端(在必要的更新之后)。 

除了公认属性,每一个路径可以包括一个或者多个可选属性。不是所有的BGP应用都要支持
 
所有的可选属性。可选属性的处理是通过设置属性标志字节的转发比特来确定的。带有未 
识别转发可选属性的路径应该被接受。如果一个未识别的转发可选属性的路经被接受并且 
被转发到别的BGP 对端,则未识别的路径转发可选属性必须和路径一起传递到别的BGP对端
 
,同时属性标志字节的部分位设置为1。如果一个路径有可识别的转发可选属性被接受并且
 
转发到别的BGP对端,他的属性标志字节的部分比特被先前的AS设置为1,当前的AS不能把 
他设置为0。未识别的非转发可选属性必须默默丢弃不能发送到别的BGP对端。 

新的转发可选属性可以被起源者和别的AS附加到路径上。如果不是被其源者附加的,属性 
标志字节的部分位被设置为1。附加新的非转发可选属性法则依赖于特定属性的特性。每一
 
非转发可选属性的文档要包括这些法则。(MULTI-EXIT-DISC属性的描述给出了一个例子)
 
所有可选的属性(转发和非专发的)可以被路径上的ASs更新(如果合适)。 
UPDATE消息的发送者要排序路径属性在UPDATE消息内为属性类型的升序。UPDATE消息的接 
收者必须准备在乱序的UPDATE消息中处理路径属性。 
同样的属性不能在特定UPDATE消息的路径属性字段内出现两次。 

5.1 路径属性使用 
每一个BGP路径属性的使用描述如下:    
   5.1.1 ORIGIN 
   ORIGIN是一个公认强制属性。ORIGIN 属性是由产生相关路由信息的自治系统产生的。 
所有选择通告路由到别的BGP发言者的BGP发言者可以把这个包括在UPDATE消息内。 
5.1.2 AS-PATH 
AS-PATH是公认强制属性。本属性定义了带有路由信息的UPDATE消息经过的AS。列表的元素
 
可以是AS_SET或者AS_SEQUENCE。 

1.当BGP发言者通告从别的BGP发言者的 UPDATE消息学习到的路由,应该根据路由发送到 
的BGP发言者的位置,修改路由 AS-PATH的属性。 

a)当给定的BGP发言者通告路由到本AS的别的BGP发言者,通告发言者不应该修改路由的AS 
-PATH属性。 

b)当给定的BGP发言者通告路由到邻居AS的BGP发言者,通告发言者因该修改路由的AS-PAT 
H属性如下: 

    1)如果AS-PATH的第一个路径段是AS-SEQUENCE类型,本地系统应该把自己的AS号码作
 
为序列的最后一个元素加在后面(放在最左面)。 
    2)如果AS-PATH的第一个路径段是AS-SET类型,本地系统应该添加一个新AS-SEQUENC 
E类型的路径段到 AS_PATH,包括段的内部的自己AS号码。 

2.当BGP发言者产生路由: 


a)起源发言者应该把自己的AS号码包括在发送到邻居AS自治系统的BGP发言者的所有UPDAT 
E消息的AS-PATH属性中。(在这种情况下,起源发言者的自治系统号因该是AS-PATH属性的
 
唯一入口)。 

b)起源发言者因该把一个空的AS-PATH属性包括在发送到本地自治系统的BGP发言者的所有 
UPDATE消息的AS-PATH属性中。(空的AS-PATH属性是长度字段是0的属性) 
5.1.3 NEXT-HOP 
    NEXT-HOP路径属性定义了边界路由器的IP地址,作为到达的目的地下一跳而列表于UP 
DATE 消息中。如果边界路由器和对端属于同一个AS,对端是内部边界路由器。否则,是外
 
部边界路由器。BGP发言者可以通告任何内部边界路由器作为下一跳,前提是边界路由器接
 
口和它相应的ip地址(说明在NEXT-HOP路径属性中)和本地以及远端边界路由器共享公共 
的子网。BGP发言者可以通告任何外部边界路由器作为下一跳,前提是本边界路由器的IP地
 
址是通过对端BGP发言者学习到的,同时边界路由器的IP地址和它相应的接口(在NEXT-HO 
P路径属性中说明)和本地以及远端的BGP发言者共享公共的子网。BGP发言者需要能够支持
 
外部边界路由器的通告能力不足。 
BGP发言者必须不通告对端的一个地址作为NEXT-HOP到这个对端,作为这个发言者产生的路
 
由。BGP发言者必须不能安装路由把自己作为下一跳。 

当BGP发言者通告路由到本地AS的BGP发言者,通告发言者不应该修改路由的NEXT-HOP属性 
。当BGP发言者通过内部链路收到路由,可以转发包到NEXT-HOP地址,如果属性中包含的地
 
址是和本地以及远端BGP发言者在公共的子网上。 

5.1.4 MULTI-EXIT-DISC 
MULTI-EXIT-DISC属性可以被用来在外部(AS间)链路上区分同一个邻居AS的多个出口或者
 
入口点。MULTI-EXIT-DISC属性的值是四个字节的无符号数称为一个metric。所有别的因素
 
相等,具有较低的度量的出口或者入口有较高的优先级。如果在外部链路上收到,MULTI- 
EXIT-DISC属性可以通告到内部链路的同一个AS的别的BGP发言者。MULTI-EXIT-DISC属性不
 
能再通告到邻居AS的别的BGP发言者。 
5.1.5 LOCAL_PREF 
LOCAL-PREF是公认自决属性,可以包括在发送到本地AS的BGP发言者的UPDATE消息内。BGP 
发言者应该为每一条外部路由计算优先级程度同时在通告路由到内部对端的时候包括这个 
优先级。优先级高的路由应该优先。BGP发言者因该使用通过LOCAL-PREF学习到的优先级用
 
于决策过程(见部分9。1。1)。 

BGP发言者不应该把这个属性包括在发送到邻居AS的发言者的UPDATE消息中。如果BGP发言 
者收到一条不在同一个AS内的BGP发言者的UPDATE消息包括了这个属性,这个属性将要被接
 
收路由器忽略掉。 
5.1.6 ATOMIC_AGGREGATE 
ATOMIC-AGGREGATE是公认自决属性。如果BGP发言者,当得到一个对端的一些重叠的路由(
 
见9。1。4),选择了一条更不特殊的路由而不是选择一条更特殊的路由,那末当通告到别
 
的BGP发言者的时候本地系统应该附加ATOMIC-AGGREGATE属性到路由,(如果属性没有表示
 
在接收的更不特殊的路由中)。当通告路由到别的BGP发言者的时候,接收具有ATOMIC-AG 
GREGATE属性的路由BGP发言者不应该使任何的路由的NLRI更特殊。收到具有ATOMIC-AGGRE 
GATE属性的路由的BGP发言者需要知道如下事实:实际的到达目的地的路由,在路由的NLR 
I内说明,当有自由回环特性时,可以穿越AS-PATH属性内没有列出的ASs。 
    
5.1.7 AGGREGATOR 
AGGREGATOR是可选转发属性,可以包括在聚合形成的更新中,(见9。2。4。2)。  
执行聚合的BGP发言者可以加入AGGREGATOR属性,里面包括自己的AS号和IP 地址。 
6. BGP错误处理 
本部分讨论当处理BGP消息探测到错误的时候采取的行动 
   
当下面描述的任何情况被探测到,NOTIFICATION消息包括制定的错误码,错误子码,数据 
字段,发送出去,BGP连接断开。如果错误子码没有指定,必须要使用0。 

术语“BGP连接关闭”意思是传输协议连接被关闭同时BGP连接的所有资源被释放。远端对 
应的路由表入口被标记无效。在路由被系统删掉之前,路由无效的事实被发送到BGP对端。
 
除非特别说明,发送指示错误的NOTIFICATION消息的数据字段是空的。 

6.1 消息头错误处理. 
当处理消息头时所有探测的错误在发送NOTIFICATION消息时用错误码Message HeaderErro 
r指示.错误子码依赖于具体的错误。 

    (1)消息头的Marker字段的期望值是全1,如果消息类型是OPEN。别的所有类型的BG 
P消息的Marker字段的期望值决定于认证信息可选参数的表达和实际的认证机制(如果BGP 
 OPEN消息表达了认证信息)。如果消息头的Marker字段不是期望的,就发生了同步错误,
 
错误子码设置为Connection Not Synchronized。 

    (2)如果消息头的长度字段小于19字节或者大于4096字节,或者OPEN消息的长度字段
 
小于最小的OPEN消息长度,或者UPDATE消息的长度字段小于UPDATE消息的最小长度,或者 
KEEPALIVE消息的长度字段不等于19,或者NOTIFICATION消息的长度小于最小的NOTIFICAT 
ION消息的长度。则错误子码设置为Bad Message Length。数据字段包含了错误的长度。 


(3)如果消息头的类型字段未识别,则错误子码设置为Bad Message Type。数据字段包含
 
了错误的Type字段。 

6.2 OPEN 消息错误处理 
    处理OPEN消息探测到的错误通过发送NOTIFACAITION来指示,错误码是OPEN MessageE 
rror。错误子码取决于特定的错误。 

    (1)如果OPEN消息Version字段内的版本号不支持,错误子码设置为Unsupported Ve 
rsion Number。数据字段是2字节的无符号整数,说明最大的本地支持的版本号码小于对端
 
BGP提出的版本。(在OPEN消息中收到) 

(2)如果OPEN消息的Autonomous System字段不支持,错误子码设置为Bad Peer AS。可接
 
受的AS号码的确定超出了文档的范围。 

     (3)如果OPEN消息的Hold Time字段不可接受,错误子码必须设置为Unacceptable  
Hold Time。应用必须拒绝一到两秒的Hold Time值。应用可以拒绝任何建议的Hold Time。
 
接受Hold Time的应用必须使用Hold Time的商议值。 

     (4)如果OPEN消息的BGP Identifier字段语法错误。错误子码设置为Bad BGP Iden 
tifier。语法正确意味着BGP Identifier 是有效的IP主机地址。 

     (5)如果OPEN消息的一个Optional Parameter未识别,错误子码设置为Unsupporte 
d Optional Parameters。 

     (6)如果OPEN消息承载了Authentication Information (作为可选参数), 激活相应
 
的认证过程。如果认证过程(基于认证码和认证数据)失败,错误子码设置为 Authentic 
ation Failure。 

6.3 UPDATE 消息错误处理 
处理UPDATE消息时探测到的所有错误通过发送NOTIFACATION说明,错误码是UPDATE Messa 
ge Error。错误子码决定于具体的错误。 



(1)UPDATE消息的错误检查开始是路径属性检查。如果不可用路由长度或者整个属性长度
 
太大(也就是说,如果Unfeasible Routes Length + Total  Attribute Length + 23  超
 
过了消息长度) message Length), 错误子码是Malformed Attribute List。 

(2)如果任意识别的属性的属性标志和属性类型码矛盾,错误子码设置为Attribute Fla 
gs Error。数据字段包含了错误的属性 (类型,长度和值)。 

(3)如果任意识别的属性的属性长度和期望的长度矛盾(根据属性类型码),错误子码是
 
Attribute Length Error。数据字段包含了错误的属性 (类型,长度和值)。 

(4)如果强制公认属性没有表示,错误子码设置为Missing Well-known Attribute。数据
 
字段包括了漏掉的公认属性的属性类型码。 

(5)如果任何强制公认属性未识别,错误子码设置为Unrecognized Well-known Attribu 
te。数据字段包含了未识别的属性(类型,长度,值)。 

(6)如果ORIGIN属性值不识别,错误子码是Invalid Origin Attribute.  数据字段包含 
了不识别的属性(类型,长度,值)。 

(7)如果NEXT-HOP属性是语法错误,错误子码是Invalid NEXT_HOP Attribute。数据字段
 
包含了不正确的属性(类型,长度,值)。语法错误意思是NEXT-HOP属性表示无效IP地址 
。语义检验只用在外部BGP链接上。这意味着IP地址的接口,在NEXT-HOP中说明,和接受BG 
P发言者共享了公共的子网但不是接收BGP发言者的IP地址。如果NEXT-HOP属性是语义不正 
确,错误要记录,路由被忽略。在这种情况下,不发送NOTIFACAITON消息。 

(7)AS-PATH属性要检查语法错误。如果路径语法错误,错误子码是Malformed AS_PATH。
 


(8)如果可选参数识别,参数值要检查。如果发现错误,属性被丢弃,错误子码是Optio 
nal Attribute Error.数据字段是这个属性(类型,长度和值)。 

(9)如果任何属性在UPDATE消息中出现多次,错误子码是Malformed Attribute List。 


(10)UPDATE消息的NLRI字段作语法有效性检查。如果语法错误,错误子码是Invalid Ne 
twork Field。 

6.4 NOTIFICATION 消息错误处理 
如果对端发送NOTIFICATION消息,在消息中有错误,很不幸没有办法通过又 
一个NOTIFICAITON消息报告这个错误,。任何这种错误,,比如不识别的错误码或者错误 
子码,应该注意,在本地记录,同时引起对端管理的注意。实现手段就不是本文档讨论的 
问题了。 

6.5 Hold Timer 溢出错误处理 
如果系统在OPEN消息的Hold Time字段说明的周期内没有收到连续的KEEPALIVE和/或UPDAT 
E和/或NOTIFACATION消息,则错误子码设为Hold Timer Expired Error Code 的NOTIFICA 
TION消息发送出去同时BGP连接断开。 

6.6 有限状态及错误处理. 
BGP 有限状态机探测的任何错误(比如,接收到不识别事件)通过发送错误子码是Finite 
 State Machine Error。的NOTIFICATION消息指示。  
6.7 终止 
如果出现任何致命错误(在这个部分说明),BGP对端可以选择在给定的任何时间关闭BGP 
连接,通过发送错误码是Error Code Cease的NOTIFACATION消息。然而,Cease NOTIFACA 
TION消息必须不使用,当这个部分说明的致命错误不存在。 

6.8 连接冲突检测 
如果一对BGP发言者尝试互相同时建立TCP连接,在一对发言者之间的两个并行的连接形成 
,我们称为连接冲突。很明显,一个连接应该关闭。 

基于BGP标示符的值,建立了约定来探测当冲突发生的时候哪一个BGP连接是先来的。约定 
是比较冲突的BGP对端的标示符同时保留使用较高的BGP标示符的BGP发言者初始化的连接。
 



收到OPEN消息,本地系统应该检测所有的处于OpenConfirm状态的连接。BGP发言者也可以 
检测在OpenSent状态的连接,如果他通过本协议以外的手段知道对端的BGP标示符。如果在
 
这些连接中,有一个连接到远端的BGP发言者,他的BGP标示符等于在OPEN消息中的标示符 
,本地系统执行下面的冲突解决过程: 

1.本地系统的BGP标示符比较远端系统的BGP标示符。(在OPEN消息中说明) 

2.如果本的BGP标示符的值小于远端,本地系统关闭已经存在的BGP连接(已经在OpenCon 
firm 状态的那个),同时接受远端系初始化的BGP连接。 

3.否则,本地系统关闭新建立的BGP连接(和新收到的OPEN消息关联的),继续使用存在 
的那个(已经在OpenConfirm 状态的那个)。 

比较BGP标示符是把他们看作(4字节长)无符号整数。 

带有处在建立状态的BGP已存在连接的连接冲突导致无条件关闭新建立的连接。注意连接冲
 
突不能被探测,如果有连接在Idle,或者Connect,或者Active状态。 

关闭这个BGP连接(这是冲突解决过程的结果)是通过发送NOTIFICATION消息,错误子码是
 
Error Code Cease. 


7.  BGP版本商议 


BGP发言者可以商议协议版本,通过多次尝试打开一个BGP连接,使用两边都支持的最高版 
本。如果建立尝试失败,错误码是OPEN Message Error, 错误子码是Unsupported Versio 
n Number,BGP发言者得到他尝试的版本号,对端尝试的版本号,在NOTIFICATION消息中对
 
端发送的版本号,是支持的版本号。如果两个对端支持一个或多个公共版本,可以很快决 
定最高的支持版本。为了支持BGP版本商议,未来的BGP版本保留OPEN和NOTIFACATION 消息
 
的格式。 


8.  BGP 有限状态机 
本部分使用状态机(FSM)说明BGP的操作。下面是BGP操作的FSM简要的说明和回顾。BGP  
FSM 
精华版本在附录1中说明。 

开始BGP在Idle状态。 

Idle状态: 

    在这个状态,BGP拒绝任何进入的BGP连接。不为对端分配任何资源。为响应Start事件
 
(系统或者操作者初始化),本地系统初始化所有的BGP资源,开启ConnectRetry计时器,
 
初始化传输连接到别的BGP对端,当检听到由远端BGP对端初始化的BGP连接,改变状态到连
 
接。ConnectRetry计时器的确切值是本地设置,但是要足够大以允许TCP初始化。 
如果BGP发言者探测到错误,关闭连接并转换状态到Idle。脱离Idle状态需要Start事件的 
产生这个事件自动产生,连续的BGP错误会导致连续的发言者的抖动。为了避免这个。如果
 
情况,建议先前由于错误而转换到Idle状态的对端的Start事件不应该立即产生。在连续产
 
生的Start事件之间的时间,如果事件是自动产生的,应该指数增长。初始计时器的值应该
 
是60秒。时间应该每连续产生一次就加倍。 

    在Idle状态下收到的任何别的事件被忽略。 

    连接状态: 

    在这个状态BGP等待传输协议连接的完成。 

    如果传输协议连接成功,本地系统清除ConnectRetry计时器,完成初始化,发送OPEN 
消息到对端,改变状态到OpenSent. 

    如果传输协议连接失败(比如,重新传送超时),本地系统重启ConnnectRetry计时器
 
,继续侦听远端BGP对端初始化的连接,改变它的状态到Active状态。 

    响应ConnectRetry计时器溢出事件,本地系统重启ConnectRetry计时器,初始化传输 
连接到BGP对端,继续侦听远端BGP对端初始化的连接,停留在Connect状态。 

    Start事件在Active状态被忽略。 

    响应其他的事件(被系统或者操作者初始化),本地系统释放连接占有的所有的BGP资
 
源,转换状态到Idle。 

    Active状态: 

    在这个状态,BGP尝试通过初始化传输协议连接来得到对端。 

    如果传输协议连接成功,本地系统清除ConnectRetry计时器,完成初始化,发送OPEN 
消息到对端,设置Hold计时器为一个很大值,改变状态到OpenSent。计时器值建议是4分钟
 
。 

    响应ConnectRetry计时器溢出事件,本地系统重启ConnectRetry计时器,初始化传输 
连接到别的BGP对端,继续侦听远端BGP对端初始化的连接,改变状态到Connect. 

如果本地系统探测到远端尝试建立BGP连接到自己,远端的IP地址不是期望的,本的系统重
 
启ConnectRetry计时器,拒绝尝试连接,继续侦听远端BGP对端初始化的连接,停留在Act 
ive状态。 

    Start事件在Active状态被忽略。 

    响应任何别的事件(系统或者操作者初始化),本地系统释放连接占有的所有的资源 
,改变状态到Idle. 

     
OpenSent状态: 

    在这个状态BGP等待来自对端的OPEN消息。当OPEN消息收到,所有的字段要检查正确性
 
,如果BGP消息头检查或者OPEN消息检查探测到错误(见部分6。2),或者连接冲突(见部
 
分6。8),本地系统发送NOTIFACATION消息,改变状态到Idle。 

    如果在OPEN消息内没有错误,BGP发送KEEPALIVE消息设置KeepAlive计时器。先前被设
 
置为一个大值的Hold计时器,(见上面),被商议的Hold Time值替代(见部分4。2)。如
 
果商议的Hold Time值是0,Hold Time计时器和KeepAlive计时器不被重启。如果Autonomo 
us System 字段的值是和本地AS号码一样的,则连接是“内部”连接,否则是“外部”连 
接。(这会影响下面所描述的UPDATE消息的处理。)最后,转态转换到OpenConfirm。 

    如果从承载传输协议收到断开通告,本地系统关闭BGP连接,重启ConnectRetry计时器
 
,同时继续侦听远端BGP初始化的连接,进入Active状态。 
     
    如果Hold计时器溢出,本地系统发送NOTIFICATION消息,错误码是Hold Timer Expir 
ed ,同时改变状态到Idle。 

    响应Stop事件(系统或者操作者初始化),本地系统发送NOTIFICATION消息,错误码 
是Cease同时改变状态到Idle。 

    Start事件在OpenSent状态被忽略。 

    对别的事件的响应,本地系统发送NOTIFICATION消息,错误码是Finite State Machi 
ne Error同时改变状态到Idle。 

    无论何时BGP改变状态从OpenSent到Idle,关闭BGP(以及传输层)连接释放连接占用的
 
所有的资源。 

    OpenConfire状态: 

    在这个状态,BGP等待KEEPALIVE或者NOTIFICATION消息。 

    如果本地系统收到KEEPALIVE消息,改变状态到Established。 

    如果在收到KEEPALIVE消息之前,Hold 计时器溢出,本地系统发送NOTIFICATION消息 
,错误码是Hold Timer Expired,改变状态到Idle. 

    如果本地系统收到NOTIFICATION消息,改变状态到Idle。 

    如果KeepAlive计时器溢出,本地系统发送KEEPALIVE消息,重启他的KeepAlive计时器
 
。 

    如果从底层的传输协议收到断开通告,本地系统状态转换到Idle。 

    响应Stop事件(系统或者操作者初始化)本地系统发送NOTIFICATION消息,错误码是 
Cease ,改变状态到Idle。 

    Start事件在OpenConfirm状态被忽略。 

    响应别的事件,本地系统发送NOTIFICATION消息,错误码是Finite State Machine E 
rror,改变状态到Idle。 

    无论何时BGP改变状态从OpenConfirm到Idle,关闭BGP(传输层)连接同时释放所有连
 
接占用的资源。 

    建立状态: 

    在建立状态,BGP能够交换UPDATE, NOTIFICATION,和KEEPALIVE消息到对端。 

    如果本地系统收到UPDATE或者KEEPALIVE消息,开启Hold计时器,如果商议的Hold Ti 
me值不是零。 


    如果本地系统收到NOTIFICATION消息,状态转换到Idle. 

    如果本地系统收到UPDATE消息,UPDATE消息的错误处理过程(见部分6。3)探测到错 
误,本地系统发送NOTIFICATION消息,改变状态到Idle。 

    如果断开通告通过底层传输协议收到,本地系统改变状态到Idle。 

    如果Hold计时器溢出,本地系统发送NOTIFICATION消息,错误码是Hold Timer Expir 
ed ,改变状态到Idle。 


    如果KeepAlive计时器溢出,本地系统发送KEEPALIVE消息,重启KeepAlive计时器。 


    每次本地系统发送KEEPALIVE或者UPDATE消息,重启KeepAlive计时器,除非商议的计 
时器值是零。 

    响应Stop事件(通过系统或者操作者初始化),本地系统发送NOTIFICATIOIN消息,错
 
误码是Cease,改变状态到Idle。 

    Start事件在Established状态被忽略。 

    响应别的事件,本地系统发送NOTIFACATION消息,错误码是Finite State Machine E 
rror,改变状态到Idle。 


    无论何时BGP改变状态从Established到Idle,关闭BGP(以及传输层)连接,释放连接
 
占用的所有资源,删除所有的连接产生的路由。 

9. UPDATE 消息处理 
UPDATE消息仅仅在建立状态可以被接收。当一个UPDATE消息被接收,每一个字段要有效性 
检查,说明见部分6。3。 

如果可选的非转发的属性不识别,默默丢弃。如果可选转发属性不识别,属性标志字节的 
部分位设置为1(第三个高位顺序位),保留属性公告到别的BGP发言者。 

如果可选的属性被识别,而且值有效,要根据可选参数的类型在本地处理,保留更新,如 
果必要通告到别的BGP发言者。 

如果UPDATE消息包括非空的WITHDRAWN ROUTES字段,先前通告的路由如果目的地包括在这 
个字段里面需要从Adj-RIB_In中移出来。BGP发言者应该运行决策过程,原因是先前的公告
 
路由不再可用。 

如果UPDATE消息包括了一个可用的路由,应该放在相应的Adj-RIB_In内部,同时做下面的 
步骤: 
i)如果NLRI和当前保存在Adj-RIB-In中的一条路由相同,则新路由要改变Adj-RIB-In中的 
老路由,则从服务中收回老路由。BGP发言者要运行他的决策过程因为老路由不可再用。  
    

ii)如果新的路由重叠包含在Adj-RIB-In老路由内部(见9。1。4),BGP发言者应该运行决策
 
过程,因为更特殊路由使得原来的更不特殊路由的一部分不可用了。 

iii)如果新路由有和Adj_RIB_In内包含的路由同样的路径属性,并且更特殊(见9。1。4)
 
。不需要做任何事情。 

iv)如果新路由的NLRI不同于Adj-RIB-In存储的任何路由,新路由应该放入。BGP发言者应 
该运行决策进程。 

v)如果新路由是更不特别的重叠路由,BGP发言者应该运行对更不特殊的路由运行决策进程
 
。 

9.1 决策过程 
决策过程选择路由用于下一步的通告,方法是应用本地策略信息库(PIB)的策略处理Adj 
-RIB-In中的路由。决策过程的输出是通告到所有对端的路由集合;被选的路由存储在Adj 
-RIB-Out中。 

选择过程可以定义为一个函数,给定路由的属性作为参数,返回非负的整数指示路由的优 
先级别。计算路由优先级别的函数不能把以下的情况作为输入:别的路由的存在,别的路 
由的不存在,或者别的路由的路径属性。路由选择对每一个可用路由运用优先程度算法, 
选择最高优先程度的路由。 

决策过程操作Adj-RIB-In包括的路由,同时负责: 
-选择通告到本地的AS中别的BGP发言者的路由 
-选择通告到邻居AS中的BGP发言者的路由 
-路由聚合和路由信息简化 

决策过程分三期,通过不同的事件触发。 
a)一期负责计算来自邻居AS的BGP发言者的每条路有的优先级,并通告路由到本地AS的别的
 
BGP发言者,该路由到每个不同的目的地的具有最高的优先级。 

b)二期在一期完成的时候激活。负责从到达目的地的所有路由中选择最好的路由,同时安 
装每个选择的路由到相应的Loc-RIB。 

c)在Loc-RIB修改后激活三期。负责发布Loc_RIB中的路由到邻居AS的每个对端。根据在PI 
B中的规则,路由聚合和信息简约在这期可选的执行。 

9.1.1 Phase 1: 优先级的计算 
无论何时本地的BGP发言者接收到邻居AS的对端的通告新的路由,替代路由,测销路由的U 
PDATE消息,都要激活一期决策过程, 
一期决策过程是独立的过程,当没有别的工作要做的时候就停止。 
一期决策函数在操作任何包含路由之前锁定Adj-RIB-In,在操作完成所有新的或者不可用 
的路由之后,解开Adj-RIB-In。 

每一个新收到或者替代的可用路由,本地BGP发言者应该确定一个优先级。如果路由是通过
 
本地AS的BGP发言者学习到的,或者LOCAL-PREF值被当作优先级,或者本地系统应该根据预
 
先配置的策略信息计算路由优先级。如果路由通过邻居AS中的BGP发言者学习,优先级的计
 
算是根据预先配置的策略。策略信息的确切特性和相关计算是本地的问题。本地发言者应 
该运行内部更新进程9。2。1选择并且通告最佳路由。 


9.1.2 Phase 2: 路由选择 

第二期决策函数在第一期完成后激活。第二期函数是独立的过程当没有更进一步的工作要 
做的时候就停止。第二期进程要考虑Adj_RIB_In中的所有路由,包括从自己的AS中和邻居 
的AS中的BGP发言者接收的路由。 

当运行第三期决策函数,第二期决策函数可以阻塞。第二期函数应该在开始函数前锁定所 
有的Adj-RIB-In,在完成后解开。 

如果BGP路由的NEXT-HOP属性描述了一个地址,在本地Loc-RIB中BGP发言者没有到该地址的
 
路由,BGP路由应该排除在第二期决策函数外面。 

对于Adj_RIB_In中的路由的每一个目的地集合,本地BGP发言者应该确定路由: 
该路由 
a)对同一个目的地集合有路由的最高优先级,或者 
    
b)是唯一的到目的的地路由,或者 

c)是9.1.2.1.第二期解扣规则的选择结果。 

本地发言者应该安装路由到Loc-RIB中,替代Loc-RIB中保存的任何到相同目的地的路由。 
本地发言者必须根据选择路由的NEXT-HOP属性立即确定下一跳地址,通过查找IGP选择IGP 
中的可能的路径。当安装选择路由在Loc_RIB中,下一跳立即必须被使用。如果NEXT-HOP属
 
性描述的地址改变,路由选择应该按照上面的说明重新计算。 

不可用的路由应该从Loc-RIB中拿出,相应的不可用路由应该从Adj-RIBs-In拿出。 

9.1.2.1 解扣(第二期) 

   在Adj-RIBs-In中一个BGP发言者可以有多个有相同的优先级的路由到同一个目的地。本
 
的发言者可以选择包含在相应Loc-RIB中的一条路由。本地发言者认为所有的路由,不论是
 
邻居AS的BGP发言者收到的路由,还是本地AS的BGP发言者收到的路由是一样的。 

下面的解扣过程假设对于每一个候选路由一个自治系统的所有BGP发言者的能够确定到NEX 
T-HOP属性描述的地址的路径代价(内部距离)。根据下面的算法解扣。 

a)如果本地系统配置考虑MULTI_EXIT_DISC,候选路由的MULTI_EXIT_DISC 属性不同,选择
 
MULTI_EXIT_DISC属性值最小的。 

b)否则,选择到入口的代价(内部距离)最小的路由,该入口由路由的NEXT-HOP属性描述 
。如果有几个路由有相同的代价,按照下面的过程解扣 
-如果最少有一个路由是通过邻居AS的BGP发言者通告的,选择邻居AS的BGP发言者通告的路
 
由,该BGP的标示符的值是所有邻居AS的BGP发言者中最小的。 
-否则,选择BGP标示符最小的BGP发言者通告的路由。 

9.1.3 Phase 3: 路由分发 
第三期路由决策过程可以被第二期的完成激活,或者下面的事件发生: 
a)Loc-RIB中的到本地目的地的路由改变。 

b)当本地产生的通过BGP以外的方式学习的路由改变。 

C)当新的BGP发言者-BGP发言者连接建立。 

第三期函数是独立的过程当没有进一步的工作去做的时候停止。如果第二期决策过程在运 
行,第三期路由决策过程应该被阻塞,。 

所有的Loc-RIB中的路由应该被处理到相应的到Adj-RIBs-Out的入口。路由聚合和信息简约
 
技术(见9.2.4.1) 可选执行。 

    为了更好支持未来的AS间组播能力,参加AS间组播路由的BGP发言者应该通告 
他从外部对端收到的路由同时如果安装在Loc-RIB内,因该通告回接收路由的对端 
。对没有参加AS间组播路由的BGP发言者这个通告是可选的。如果做这样一个通告, 
NEXT-HOP属性应该被设置为对端地址。应用可以优化这个通告,截断AS-PA 
TH属性的信息而只包括自己的AS号码和通告路由的对端的AS号码(这个截断要求O 
RIGIN属性被设置为INCOMPLETE)。另外,应用不需要传递可选的或者自 
决的路径属性在这种通告中 。 

当Adj-RIBs-Out更新而且转发信息库(FIB)完成,本地BGP发言者应该运行外部更 
新进程9。2。2。 

9.1.4 路由重叠 
BGP发言者可以传送具有重叠的网络层可达信息(NLRI)的路由到别的BGP发言者。
 
NLRI重叠发生在一系列目的地由非匹配的多个路由来鉴别。由于BGP使用IP前缀 
对NLRI编码,重叠一般要展示子网关系。路由描述了更小范围的目的地(更长的前缀 
)称为更特别路由,路由描述了更大范围的目的地(更短的前缀)成为更一般路由。反之 
同样。 

这种优先关系有效分解了更一般路由为两部分: 

-一系列目的地,仅仅使用更一般路由来描述。 

-一系列路由,使用更一般和更特殊路由的重叠来描述。 

当重叠路由发生在同样的Adj-RIB-In,更特殊的路由应该有优先权,顺序是更特殊到更一 
般。  

重叠描述的目的地的集合表明一部分更一般路由是可用的,但是当前不可用。如果一个更 
特殊的路由后来撤销了,重叠描述的目的地的集合将可以使用更一般的路由到达。 

如果BGP发言者接收了重叠路由,决策过程应该考虑重叠路由的语义。特别是,如果B 
GP发言者接收了同一个对端的更一般的路由同时拒绝了更特殊的路由,那末重叠表示的 
目的地可能不转发到路由的AS-PATH属性列出的AS那里。因此,BGP发言者可 
以有下面的选择: 
a)同时安装更一般和更特殊的路由 
b)只安装更特殊的路由 
c)只安装更一般路由的非重叠部分(这意味着解聚和) 
d)聚合着两条路由同时安装聚合路由 
e)安装更一般的路由 
f)都不安装 

如果一个BGP发言者选择e),应该加入ATOMIC-AGGREGATE属性到路由中。承载 
ATOMIC-AGGREGATE属性的路由不能被解聚和(de-aggregate)。也就是说,路由的NLRI不能 
被做得更特殊。向这个路由转发不保证IP包实际沿着路由的AS-PATH属性中列出的AS中转。
 
如果BGP发言者选择a),必须在没有更特殊的路由的时候不通告更一般的路由。 


9.2 Update发送进程 

Update-Send 进程负责通告UPDATE消息到所有的对端。例如,他发布决策进程选择的路由 
到位于同样的自治系统或者邻居自治系统的BGP发言者。不同自治系统的BGP发言者之间信 
息交换的法则参看9。2。2;相同自治系统的BGP发言者之间信息交换的法则参看9。2。1。
 


在BGP发言者集合之间的路由信息的发布,所有BGP发言者如果在同一个自治系统,称为内 
部发布。 
9.2.1 内部更新 
内部更新进程是发布路由信息到本地自治系统的BGP发言者。 

当BGP发言者从在本地自治系统的别的BGP收到了UPDATE消息,接收BGP发言者不应该再分配
 
UPDATE消息中的路由信息到别的本地自治系统的BGP发言者。 

当BGP发言者接收了邻居自治系统的BGP发言者的一条新的路由,如果下面的情况之一发生 
,应该使用UPDATE消息通告路由到本的自治系统的所有的BGP发言者: 

1)    本地BGP发言者安排给新接收的路由的优先程度高于本地发言者已经安排的接受自 
邻居自治系统的别的路由的优先级,或者 
2)    没有接收到别的邻居自治系统的BGP发言者发送的路由,或者 
3)    新接收路由是几个最高优先级,同样目的的的路由解扣的结果,(解扣过程在9。 
2。1。1中说明。 

当BGP发言者收到了UPDATE消息,有非空的WITHDRAWN RJOUTES字段,应该从Adj-RIB-In里 
去掉所有的在这个字段中(IP前缀表示)的目的地。 

发言者应该做下面的附加步骤: 

1)    如果相应的可用路由先前没有被通告,不需要做更多的行动。 

2)    如果相应的可用路由先前被通告,那末: 

i)    如果被选择通告的新的路由和不可用路由有相同的网络层可达信息,本地系统因该 
通告替代路由。 

ii)    如果替代路由不能用于通告,BGP发言者应该包括不可用路由的目的的(IP前缀形 
式)在UPDATE消息的WITHDRAWN ROUTES字段,因该发送这个消息到先前通告了相应的可用 
路由的对端。 

所有的通告过的可用路由因该放入相应的Adj-RIBs-Out,所有不可用的但是通告过的路由 
应该被从Adj-RIBs-Out清除。 

9.2.1.1解扣 (内部更新) 

如果一个本地的BGP发言者连接到邻居AS的几个BGP发言者,有多个Adj-RIBs-In和这些对端
 
相关联。这些Adj-RIB-In可以包含到同一个目的的的多个等价优先级的路由,所有的路由 
被邻居自治系统通告。本的BGP发言者应该根据下面法则选择其中一条路由: 

    a)如果候选路由只是NEXT-HOP和MULTI-EXIT-DISC属性不同,本地系统配置中考虑了M 
ULTI-EXIT-DISC属性,选择有最低的MULTI-EXIT-DISC属性的路由。 

b)如果本地系统能够确定到入口路径的代价,该入口被候选路由中NEXT-HOP属性描述,选 
择代价较低的路由。 

    c)在所有别的情况中,选择的路由由具有较低的BGP标示符的BGP发言者通告。 

9.2.2 外部更新 

外部更新过程和发布路由信息到邻居AS的BGP发言者的有关。作为阶段3路由选择过程的一 
部分,BGP发言者已经更新他的Adj-RIBs-Out 和转发表.所有新的安装的路由和所有新的没
 
有替代路由的不可用的路由要通过UPDATE消息通告到邻居AS内部的BGP发言者。 

任何位于LOC-RIB的路由,如果是不可用的应该被撤销。在自己的AS内部如果可达地址改变
 
应该发送UPDATE消息。 

9.2.3 控制路由流量开销 

BGP协议限制路由流量(也就是UPDATE消息),目的是限制通告UPDATE消息的链路带宽和消
 
化UPDATE消息里的信息决策过程的处理能力。 

9.2.3.1 路由通告的频率 

参数MinRouteAdvertisementInterval确定了BGP发言者到特定目的地的两个路由通告之间 
的最小时间。这个速率限制过程是基于每个目的地的,但是这个MinRouteAdvertisementI 
nterval值是基于每一个对端设置的。 

UPDATE 消息被MinRouteAdvertisementInterval分离,该消息从邻居AS 的BGP发言者接收 
而来,从通告可用路由的单个BGP发言者发送到目的地集合. 无疑, 只有精确保持目的地集
 
合的计时器才能做到这一点。这是不现实的开销。任何保证BGP发言者接受自邻居AS通告的
 
两个UPDATE消息之间时间间隔的技术通告可用路由到目的的地最小间隔是MinRouteAdvert 
isementInterval,也要保证大于间隔的一个常量是可以接受的。 

由于需要在AS内部快速收敛,本过程不能用于从本AS中别的BGP发言者发来的路由。为了避
 
免永久黑洞,本过程不能用于明确的撤销或者不可用路由(也就是,目的地(通过IP前缀 
表示)在UPDATE消息中WITHDRAWN ROUTEST字段的路由)。 

这个过程不限制路由选择的速率,但是仅仅限制路由通告的速率。当等待 
MinRouteAdvertisementInterval溢出时,如果新的路由被选择多次, 在 
   MinRouteAdvertisementInterval的结尾通告最后选择的路由. 

9.2.3.2 路由产生的速率 

参数MinASOriginationInterval确定了在BGP发言者本身的AS中报告变化的UPDATE消息的  
连续通告的最小间隔 

9.2.3.3 Jitter 
为了减少给定的BGP发言者的BGP消息产生尖峰,jitter应该被使用于 
MinASOriginationInterval, Keepalive,  MinRouteAdvertisementInterval计时器.给定 
的BGP发言者应该应用同样的jitter数量,无论UPDATE被送到那个目的地;也就是说,jit 
ter不能被基于“每个对端” 使用。 
引入的Jitter的数量使用相应的计数器的基本值乘以一个范围是0。75到1的随机因子。 

9.2.4 路由信息的有效组织 

选择将要通告的路由信息,一个BGP发言者可以采用几个方法,组织信息为一个有效形式。
 


9.2.4.1 信息简约 

信息简约可以在策略控制的程度上使用简约-在信息崩溃之后,相同的策略在等价类上使用
 
在所有的目的地和路径。 

决策进程使用下面方法可选的减少放在Adj-RIB_Out中的信息数量: 

a)网络层可达信息(NLRI) 

目的IP地址可以被看作IP地址前缀。若地址结构和在AS管理者控制下的系统能够达成一致 
,有可能减少UPDATE消息中NLRI的尺寸。 

b)   AS_PATHs(AS 路径): 

AS 路径信息可以表达为顺序AS-SEQUENCE和无序AS-SET。S-SET可以用在路由聚合算法,描
 
述在9。2。4。2中。无论在聚合的AS-PATH上出现了几次,通过只列出每个AS号码一次,他
 
们减少了AS-PATH的尺寸。 

一个AS-SET意味着NLRI列出的目的地能够通过由AS-SET中的部分AS组成的路径到达。AS-S 
ET提供有效的信息来避免回环;然而使用他们可能会剪除一些潜在的有用路径,原因是一 
些路径不再被单独通过AS-SEQUENCE的方式列出。实际使用中这不是个问题,因为一旦IP报
 
到达AS组的边界,这个点上的BGP发言者更可能有更多的详细路径信息并能够区分到目的地
 
的路径。 

9.2.4.2 聚合路由信息 

聚合是一个过程用来组合几个不同的路由来通告一个单独的路由。聚合作为决策的一个部 
分发生,这样可以减少放在Ajd_RIBs_Out中路由信息的数量 

聚合减少了BGP发言者存储并且和别的BGP发言者交换的路由。路由聚合使用下面的独立于 
期望类型的路径属性和网络层可达信息的过程。 

有下面属性的路由不能被聚合。除非相应的属性是唯一的MULTI_EXIT_DISC, NEXT_HOP. 

具有不同类型码的路径属性不能被聚合在一起.有同样类型码的路径能够被聚合,使用下面 
的规则: 
ORIGIN属性:如果至少一个被聚合路由它的ORIGIN指示INCOMPLETE,聚合路由ORIGIN的属性 
值是IMCOMPLETE.否则,如果最少一个路由的属性是EGP,聚合路由的属性是EGP.在所有别的 
情况下ORIGIN属性是INTERNAL. 

AS-PATH属性:如果路由聚合有单一的AS-PATH属性,聚合的路由有同样的AS-PATH属性. 

为了聚合路由属性,我们建模AS-PATH属性作为二元组<类型,值>,"类型"定义了路径段的属 
性(比如AS-SEQUENCE,AS_SET),"值"定义了AS号码.如果路由被聚合有不同的AS-PATH属性, 
聚合的AS-PATH属性应该满足: 
-所有在聚合AS-PATH的AS-SEQUENCE二元组应该在最早的路由集的AS-PATH中都出现. 

在聚合的AS-PATH中AS-SET类型的所有的二元组应该出现在最少一个AS-PATH类型中(可以 
出现为AS-SET或者AS-SEQUENCE)。 

-在聚合AS-PATH中,任何AS-SEQUENCE类型的二元组X领先于Y,在初始的集合中,X在每一 
个AS-PATH中领先于Y,不论Y的类型。 

-在AS-PATH中不能由同一个二元组具有相同值却出现了两次,不论二元组的类型。 

应用可以选择任何算法只要符合这些规则。最少的一个构造应用应该能够执行下面的算法 
来满足上面所有的条件。 

-确定最长的对所有的聚合AS-PATH属性来说的二元组序列(如上定义)。把这个序列作为 
聚合后的排头AS-PATH属性序列。 

-设置剩下的AS-PATH属性二元组为AS-SET,把他们加入到AS-PATH后面。 

-如果聚合AS-PATH属性有多个相同的二元组(不论二元组的类型),清除所有的,通过从 
聚合AS-PATH属性中去掉AS-SET类型的二元组来只留下一个。 

附录6,部分6。8提出另外一个算法来满足这个条件同时允许复杂的策略配置。 

ATOMIC_AGGREGATE: 如果最少一个路由有这个路径属性,那末聚合后的路由应该有这个属 
性。 
AGGREGATOR: 聚合者属性应该被忽略。 

9.3  路由选择标准 

总的来说,在几个可替代路由中比较路由的额外法则是在本文讨论问题之外的。有两个例 
外。 

-如果新路由中AS路径出现了本地AS,新路由不能被看作比别的路由更好的路由。如果使用
 
这样的一个路由,路由环路会发生。 

-为了成功实现发布操作,只有具有稳定可能性的路由被选择。这样,一个AS必须避免使用
 
不稳定的路由,必须不使路由自发选择快速改变。前面句子中“不稳定”和“快速”的名 
词量化需要经验,但是原理是清楚的。 

9.4   产生BGP路由 

一个BGP发言者可以通过某些方式(比如通过IGP)获得的注入BGP的路由信息产生BGP路由 
。 
BGP发言者产生BGP路由应该通过决策进程(见部分9。1)来安排路由的优先级别。这些路 
由可以被发布到别的在本地AS的BGP发言者作为内部更新进程的一部分(见9。2。1)。在 
一个AS内部决定是否发送非BGP获得的路由,取决于AS内部的环境(也就是IGP类型)而且 
可以通过配置来控制。 

附录 1.  BGP FSM 状态转换和行为 

这个附录讨论BGP FSM 响应BGP事件的状态转换。下面是当商议的Hold Time值不是0的时候
 
状态和事件的列表 

       BGP 状态: 

                1 - Idle 
                2 - Connect 
3 - Active 
                4 - OpenSent 
                5 - OpenConfirm 
                6 - Established 


       BGP 事件: 


                1 - BGP Start 
                2 - BGP Stop 
                3 - BGP Transport connection open 

                4 - BGP Transport connection closed 
                5 - BGP Transport connection open failed 

                6 - BGP Transport fatal error 
                7 - ConnectRetry timer expired 
                8 - Hold Timer expired 
                9 - KeepAlive timer expired 
               10 - Receive OPEN message 
               11 - Receive KEEPALIVE message 
               12 - Receive UPDATE messages 
               13 - Receive NOTIFICATION message 


下面的表描述BGP FSM的状态转换,以及转换触发的行为。 


    事件                行为               发送的消息       下一个状态 
    -------------------------------------------------------------------- 
    Idle (1) 
     1            资源初始化                        none             2 
                  Start ConnectRetry timer 
                  初始化传输连接 
     others               none                    none             1 

    Connect(2) 
     1                    none                    none             2 
     3            完成初始化                      OPEN             4 
                  Clear ConnectRetry timer 
     5            Restart ConnectRetry timer      none             3 
     7            Restart ConnectRetry timer      none             2 
                  初始传输连接 
     others       释放资源                         none             1 

    Active (3) 
     1                    none                    none             3 
     3            完成初始化                       OPEN             4 
                  Clear ConnectRetry timer 
     5            关闭连接                                         3 
                  Restart ConnectRetry timer 
     7            Restart ConnectRetry timer      none             2 
                  初始传输连接 
     others       释放资源                        none             1 

    OpenSent(4) 
     1                    none                    none             4 
     4            Close transport connection      none             3 
                  Restart ConnectRetry timer 
     6            Release resources               none             1 
    10            Process OPEN is OK            KEEPALIVE          5 
                  Process OPEN failed           NOTIFICATION       1 
    others        Close transport connection    NOTIFICATION       1 
                  Release resources 

    OpenConfirm (5) 
     1                   none                     none             5 
     4            Release resources               none             1 
     6            Release resources               none             1 
     9            Restart KeepAlive timer       KEEPALIVE          5 
    11            Complete initialization         none             6 
                  Restart Hold Timer 
    13            Close transport connection                       1 
                  Release resources 
    others        Close transport connection    NOTIFICATION       1 
                  Release resources 

    Established (6) 
     1                   none                     none             6 
     4            Release resources               none             1 
     6            Release resources               none             1 
     9            Restart KeepAlive timer       KEEPALIVE          6 
    11            Restart Hold Timer            KEEPALIVE          6 
    12            Process UPDATE is OK          UPDATE             6 
                  Process UPDATE failed         NOTIFICATION       1 
    13            Close transport connection                       1 
                  Release resources 
    others        Close transport connection    NOTIFICATION       1 
                  Release resources 
   --------------------------------------------------------------------- 

下面是以上状态转换表的精华版本 


   Events| Idle | Connect | Active | OpenSent | OpenConfirm | Estab 
         | (1)  |   (2)   |  (3)   |    (4)   |     (5)     |   (6) 
         |-------------------------------------------------------------- 
    1    |  2   |    2    |   3    |     4    |      5      |    6 
         |      |         |        |          |             | 
    2    |  1   |    1    |   1    |     1    |      1      |    1 
         |      |         |        |          |             | 
    3    |  1   |    4    |   4    |     1    |      1      |    1 
         |      |         |        |          |             | 
    4    |  1   |    1    |   1    |     3    |      1      |    1 
         |      |         |        |          |             | 
    5    |  1   |    3    |   3    |     1    |      1      |    1 
         |      |         |        |          |             | 
    6    |  1   |    1    |   1    |     1    |      1      |    1 
         |      |         |        |          |             | 
    7    |  1   |    2    |   2    |     1    |      1      |    1 
         |      |         |        |          |             | 
    8    |  1   |    1    |   1    |     1    |      1      |    1 
         |      |         |        |          |             | 
    9    |  1   |    1    |   1    |     1    |      5      |    6 
         |      |         |        |          |             | 
   10    |  1   |    1    |   1    |  1 or 5  |      1      |    1 
         |      |         |        |          |             | 
   11    |  1   |    1    |   1    |     1    |      6      |    6 
         |      |         |        |          |             | 
   12    |  1   |    1    |   1    |     1    |      1      | 1 or 6 
         |      |         |        |          |             | 
   13    |  1   |    1    |   1    |     1    |      1      |    1 
         |      |         |        |          |             | 
         --------------------------------------------------------------- 


附录 2.  对比RFC1267 

BGP-4使用在可达目的地的集合可以表示为一个单独的IP前缀的环境中。网络类,或者说子 
网 
的概念,对BGP-4来说是没用的.为了提供这种能力,BGP-4改变了AS-PATH属性的语义和编码 

新的文本被加入来定义IP前缀的语义.这些能力使得BGP-4支持提议中的超网计划[9]. 

为了简化配置,本版本引入了新的属性,LOCAL-PREF,简化了路由选择过程. 

INTER_AS_METRIC属性被重新命名为MULTI_EXIT_DISC.一个新的属性,ATOMIC_AGGREGATE,被
 

引入来保证某些聚合不能再被反聚和.另外一个新的属性,AGGREGATOR,被加入聚合路由用来
 

通告是哪一个AS和AS内部的哪一个BGP发言者引起了聚合. 

为了保证HOLD计时器的对称, Hold Time现在在单链接的基础上协商. Hold Time为0现在可
 

以支持. 

附录 3.  对比RFC1663 

所有的改变在附录2中列出,还有下面的: 

为了探测和恢复BGP连接冲突,新的字段(BGP 标示符)被引入OPEN消息.新的文本(部分6.8) 
被 

加入,说明探测和恢复冲突的过程. 

新的文档不再限制在NEXT-HOP路径属性中传递的边界路由器,需要和BGP发言者是同一个A 
S. 

新的文档优化和简化了关于以前的可达路由信息的交换. 

附录4.  对比 RFC 1105 

所有附录2和3所列,加上下面的: 

需要对RFC1105有限状态机作很小改变适应BSD4.3提供的TCP用户接口. 

RFC1105中表达的Up/Down/Horizontal关系的概念被驱除出协议。 

RFC1105消息格式的改变如下: 

1.Hold Time字段被从BGP消息头移到OPEN消息。 

2.版本字段被从BGP消息头移动到OPEN消息。 

3.Link Type字段被从OPEN消息中去掉。 

4.OPEN CONFIRM消息被取消,替代为KEEPALIVE消息的隐含确认。 

5.UPDATE消息的格式改变显著。新的字段被加入到UPDATE消息中支持多个路由属性。 

6.Marker字段被扩展,现在他可以支持认证。 

注意通常的BGP,在RFC1105中说明的,被称为BGP-1,BGP,在RFC1163中说明的,被称为B 
GP-2, 
BGP,在RFC1267中说明的,被称为BGP-3,在本文当说明的BGP被称为BGP-4。 

附录5. BGP可能使用的TCP选项 

如果本地系统的TCP用户接口支持TCP PUSH函数,每一个BGP消息应该在传输的时候设置PU 
SH 

标志位。设置PUSH标志强制BGP消息迅速发送到接收者。 

如果本地系统的TCP用户接口支持TCP连接的设置过程,BGP传送连接应该使用Internetwor 
k  
Control (110)[参见6] 值设置下进行TCP连接过程。 

附录6.  应用建议 

  本部分提出一些应用建议。 


6.1 每个消息的多网络前缀 

BGP协议使得具有相同的AS路径和下一跳网关的多个地址前缀能够在同一个消息里说明。非
 
常推荐使用这个能力。每一个消息传递一个地址前缀会显著的增加接收者的开销。不但由 
于接收多个消息导致系统开销,而且扫描路由表更新BGP对端和别的路由协议(发送和协商
 
消息)也会导致多倍的时间开销。一个从不是按照单个AS路径组织的路由表中建立单个AS 
路径和网关中包含多个地址前缀的消息的方法是当路由表扫描的时候建立多个消息。当每 
一个地址前缀被处理时,相应AS路径和网关的消息被确定,如果不存在,新的地址前缀需 
要加入。 
如果消息存在,新的地址前缀仅仅附加就可以。如果消息缺少空间包含新的地址前缀,发 
送,新的消息被分配,新的地址前缀插入在新的消息内部。扫描整个路由表,所有的分配 
消息被发送同时资源被释放。如果所有的地址前缀重叠的目的的共享一个网关和通用的路 
径属性就可以达到最大的压缩。这样就可以在一个4096字节的消息中发送多个地址前缀。 


当对端的BGP应用没有压缩多个地址前缀在一个消息中,当对端需要的时候或者网络拓扑的
 
改变发生的时候有必要采取措施减少接收数据泛洪的开销。一个方法是减少更新的速率。 
这样就去掉了多余的提供快速的BGP对端和别的路由协议的更新路由表扫描。这个实现的一
 
个缺点是增加了路由信息的通告延迟。选择一个最小的快速更新间隔,不能很大超过处理 
多个消息的时间能够最小化这个延迟。一个更好的办法是在发送UPDATE之前读所有的接收 
消息。 

6.2 使用流协议 

BGP使用TCP作为传输机制。由于TCP的流特性,所有的接收消息的数据不需要同时到达。这
 
样可能难于处理数据,因为消息,特别是使用BSD Unix的系统不可能探测有多少数据已经 
被接收但是还没有被处理。 

在这种情况下的一个办法是首先尝试读消息头。对KEEPALIVE消息类型,这是个完整的消息
 
;对别的消息类型,需要首先确认消息头,特别是整个长度。如果所有的检查是成功的, 
这个长度,减去消息头的长度是剩下的需要读出的数据。愿意“挂起”路由信息进程应用 
在尝试读出对端的时候为每一个对端设置一个消息缓冲区(4096字节)填充数据直到一个 
完整的消息被收到,  

6.3 减少路由抖动 

为了抑制过分的路由抖动,BGP发言者在如果需要撤销一个目的的同时更新一个更特殊或者
 
更不特殊的路由应该把他们组合在一个UPDATE消息中。 

6.4 BGP 计时器 

BGP使用5个计时器:ConnectRetry, Hold Time, KeepAlive,   MinASOriginationInterv 
al, 和 MinRouteAdvertisementInterval 。ConnectRetry 计时器的建议值是120秒。Hol 
d Time 计时器的建议值是90秒。KeepAlive计时器的建议值是30秒。 MinASOriginationI 
nterval的计时器的建议值是15秒。MinRouteAdvertisementInterval 计时器的建议值是3 
0秒。 

一个BGP应用必须保证这些计时器是可配置的。 

6.5 路径属性顺序 

如6。1叙述组合更新消息的应用更喜欢把所有的路径消息看成一个有序的集合。这样允许 
他们从不同的在语义上相同的更新消息中快速确定属性集。为了有利,对路径属性根据类 
型码排序是有用的优化项。这个优化是完全可选的。 

6.6 AS_SET 排序 

另外一个有用的选项备用来简化情况是排序AS-SET中找到的AS号码。这个选项时完全可选 
的。 
6.7 版本商议控制 

由于BGP-4能够承载聚合路由,这是在BGP-3中不能正确表达的,一个支持BGP-4和别的BGP 
版本的应用应该提供只在端到端基础上使用BGP-4的能力。 

6.8 复杂 AS_PATH 聚合 
选择提供路由聚合算法的应用来保留显著数量的路径信息可以使用下面的过程。 

为了聚合两个路由的AS-PATH属性,我们为AS建模为二元组<类型,值>,“类型”定义了AS 
属于的路径段的种类(比如AS-SEQUENCE,AS-SET),“值”是AS号码。如果相应的〈类型
 
,值〉二元组相同,两个AS被看成是一样的。 

聚合两个AS-PATH属性的算法工作如下: 

a)    识别每一个AS-PATH属性内部相通的具有相同相关顺序的AS。两个AS,X和Y,被认为
 
顺序相同: 
-X在每一个AS-PATH属性中领先于Y,或者Y在每一个AS-PATH属性中领先于X。 

b)    聚合的AS-PATH属性包含a)中表示的AS,顺序完全和在被聚合的AS-PATH属性相同。 

如果两个连续的a)中表示的AS不是在两个被聚合的AS-PATH属性中紧密跟随,那末中间AS(
 
AS在连续的相同AS之间)被组合成AS-SET路径段,它由两个AS-PATH属性中都有的AS组成。
 
这个段被放入在两个连续的a)中定义的聚合属性的AS之间。如果两个连续的a)中表示的AS 
在一个属性中紧密跟随,但是在另外一个中不是,那末后者的中间AS被组合成AS-SET路径 
段;这个段被放在这两个a)中表示的AS 之间。 

如果作为前面过程的结果,一个给定的AS号码在聚合AS-PATH属性中出现不止一次,所有的
 
,除了最后一个(最右边)的AS号码,应该被从聚合AS-PATH属性中除掉。 

参考 


   [1] Mills, D., "Exterior Gateway Protocol Formal Specification", RFC 
       904, BBN, April 1984. 

   [2] Rekhter, Y., "EGP and Policy Based Routing in the New NSFNET 
       Backbone", RFC 1092, T.J. Watson Research Center, February 1989. 

   [3] Braun, H-W., "The NSFNET Routing Architecture", RFC 1093, 
       MERIT/NSFNET Project, February 1989. 

   [4] Postel, J., "Transmission Control Protocol - DARPA Internet 
       Program Protocol Specification", STD 7, RFC 793, DARPA, September 
       1981. 
   [5] Rekhter, Y., and P. Gross, "Application of the Border Gateway 
       Protocol in the Internet", RFC 1772, T.J. Watson Research Center, 
       IBM Corp., MCI, March 1995. 

   [6] Postel, J., "Internet Protocol - DARPA Internet Program Protocol 
       Specification", STD 5, RFC 791, DARPA, September 1981. 

   [7] "Information Processing Systems - Telecommunications and 
       Information Exchange between Systems - Protocol for Exchange of 
       Inter-domain Routeing Information among Intermediate Systems to 
       Support Forwarding of ISO 8473 PDUs", ISO/IEC IS10747, 1993 

   [8] Fuller, V., Li, T., Yu, J., and K. Varadhan, "Classless Inter- 
       Domain Routing (CIDR): an Address Assignment and Aggregation 
       Strategy", RFC 1519, BARRNet, cisco, MERIT, OARnet, September 
       1993 

   [9] Rekhter, Y., Li, T., "An Architecture for IP Address Allocation 
       with CIDR", RFC 1518, T.J. Watson Research Center, cisco, 
       September 1993 

安全考虑 

   本文档没有讨论安全问题 

作者地址 

   Yakov Rekhter 
   T.J. Watson Research Center IBM Corporation 
   P.O. Box 704, Office H3-D40 
   Yorktown Heights, NY 10598 

   Phone:  +1 914 784 7361 
   EMail:  yakov@watson.ibm.com 


   Tony Li 
   cisco Systems, Inc. 
   170 W. Tasman Dr. 
   San Jose, CA 95134 

   EMail: tli@cisco.com 




RFC1771  A Border Gateway Protocol 4 (BGP-4)                 边界网关协议(版本 
4) 



RFC文档中文翻译计划 

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.228.146]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:610.474毫秒