《网络协议栈分析与设计》大作业
边界网关协议(BGP)RFC分析与设计Border Gateway Protocol
学生:吕卿网络1101班 201192334
2013/12/16
1.背景介绍
边界网关协议是用来连接网络上不同自治系统(AS)的路由选择协议。BGP是为了取代最初的外部网关协议EGP所设计的,也被认为是路径矢量协议。它通过维护IP路由表和前缀表来实现自治系统(AS)间的可达性。BGP的主要功能是和其他BGP系统交换网络可达性信息。必须要注意的是BGP是建立在可靠连接的基础之上的。
2.操作总结
在两个系统建立的连接中他们互相交互信息更改数据。初始数据流是整个BGP路由表。BGP不要求整个BGP路由表的周期性更新。保持存活信息定期的被发送以确保连接的存活。通知信息被发送来回馈错误通知和特殊情况。执行边际路由协议的主机不必是路由器。一个非路由器的主机可以和路由器经由EGP甚至内部路由协议进行交互。如果一个特殊的自治系统(AS)有多个BGP发言者,那么一定要注意在一个AS内要的几个发言者要有一致的路由视野。
3.信息格式
信息在可靠传输协议连接上发送。信息只有在被完全接收之后才能够被处理。最大的信息大小是4096字节。所有的实现必须支持这一最大信息规格。最小的数据规格要包含BGP头部不含数据部分。
3.1数据头格式
每个信息有个固定大小的头部。包括标识物·长度·类型。标识物:这16字节大小的领域包含信息接收方可以对信息进行确认的信息。长度:这2字节无符号整数表明这则信息的总长度。长度的值必须在19到4096之间类型:这一字节无符号整数表明这则信息的代码模式。共有四种类型:
1 - OPEN
2 - UPDATE
3 - NOTIFICATION
4 - KEEPALIVE
3.2 OPEN信息格式
传输协议连接建立之后,每一边发送的第一条信息都是OPEN格式。如OPEN 信息被接收,一个KEEPALIVE信息确认OPEN被接收并被发回。一旦这个OPEN 被确认,接下来的其他信息如UPDATE,KEEPALIVE,NOTIFICATION才能够被交换。
Version(版本):这一字节表明这一条信息的协议版本号。
My Autonomous System(我的自治系统):这两字节表明发送方的AS号。
Hold Time(保持时间):这两字节表明KEEPALIVE等信息成功接收间隔的最大时间。
BGP identifier(BGP识别码):这四字节无符号整数表明发送方的识别码。
Authentication Code(认证码):这一字节无符号整数表明认证机制被使用。
Authentication Data(认证数据):这部分区域的结构和内容根据认证数据的不同而变化。如果认证码为0,那么认证区域的长度必须为0。
Message Length = 29 + Authentication Data Length。
3.3 UPDATE信息格式
UPDATE信息被用来在BGP对等体间进行路由信息的传递。更新包中的信息被用来构建不同自治系统的描述信息。通过应用规则来加以讨论,一些循环和异常可以被从AS路由间去除。
全路径属性长度:这两字节无符号整数表明路径属性区域的总长度。
路径属性:每个UPDATE中列出一个不同长度的路径属性序列。每个路径属性包括<属性类型,属性长度,属性值>
网络:每个四字节的网络号表明一个被路径属性描述的内部自治系统路由。Update中的网络区域总数被下面公式决定。
Message Length = 19 + Total Path Attribute Length + 4 * #Nets
3.4 KEEPALIVE信息格式
BGP不使用任何以传输协议为基础的保持存活机制来确保对等体可到达。相反,KEEPALIVE信息在对等体间交换信息通常足够不引起保持时间来终止。KEEPALIVE信息间的合理最大时间间隔是保持时间的三分之一。KEEPALIVE信息只包含一个消息头并且只有19字节大小。
3.5 NOTIFICATION信息格式
一个NOTIFICATION信息只有在错误条件被检测出来之后才会被发送。在发送过这个信息之后BGP连接被立刻终止。NOTIFICATION包括如下部分。
Error Code(错误码):这1字节无符号整数表明NOTIFICATION的类型。
Error subcode(错误子码): 这1字节无符号整数提供了更为详细的错误报告的信息。每一个错误码有一个或多个与子关联的错误子码。如果没有定义适当的错误子码,那么错误子码的区域被定义为0值。
Data(数据):这一可变长度区域用来诊断错误的原因。数据区域的内容决定于错误码和错误子码。注意数据区域的长度可以有下面公式决定:Message Length = 21 + Data Length。
4.路径属性
这一节讨论更新消息的路径属性。路径属性分为四个不同的部分:
1. 众所周知强制性
2. 众所周知可选择的
3. 可选过渡
4. 可选非过渡
众所周知的属性必须被所有的BGP实现所支持。所有的众所周知的属性必须被传递到其他BGP对等体上。除了众所周知的属性,每个路径可以有一个或多个可选择属性。并不要求所有的BGP实现支持所有的可选择属性。无法识别的可选择属性的处理由属性标志字节中的传递位的设置来决定。带有无法识别转发可选择属性的路径应该被接收。如果一个带有无法识别转发可选择属性的路径被接收并且被传递到其他BGP对等体,那么这个路径连同这个无法识别转发可选择属性必须被传递到其他对等体并且属性标志字节集设为1。如果一个带有可识别转发可选择属性被接受并且被传递到其他对等体,并且属性标志字节被以前的AS设置为1,那么属性标志字节不能被现在的AS设置回0。无法识别的非传递可选择属性必须被悄悄地忽略并被传递到其他对等体。
新的转发属性可以有发送端或路径上的AS附加到路径上。所有的属性可以被路径上的AS更新。
下表列出了文中定义的路径属性的属性类型代码,属性长度,属性类型。
属性名称类型代码长度属性类型
ORIGIN 1 1 well-known, mandatory
AS_PATH 2 variable well-known, mandatory
NEXT_HOP 3 4 well-known, mandatory
UNREACHABLE 4 0 well-known, discretionary
INTER-AS METRIC 5 2 optional, non-transitive ORIGIN:
ORIGIN 路径属性定义了发端的路径信息八位字节数据确保了下列数据
Value Meaning
0 IGP - network(s) are interior to the originating AS
1 EGP - network(s) learned via EGP
2 INCOMPLETE - network(s) learned by some other means
AS-PATH:AS-PATH 属性列出了UPDATE消息中能够到达的网络自治系统即AS。
NEXT_HOP:这个属性定义了将在UPDATE消息中作为通往下一个网络的下一跳的边界路由器的IP地址。如果这个边界路由器属于同一个AS那么通告它,