《网络协议栈分析与设计》大作业边界网关协议(BGP)RFC分析与设计Border Gateway Protocol学生:吕卿网络1101班 2011923342013/12/161.背景介绍边界网关协议是用来连接网络上不同自治系统(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 - OPEN2 - UPDATE3 - NOTIFICATION4 - KEEPALIVE3.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 * #Nets3.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, mandatoryAS_PATH 2 variable well-known, mandatoryNEXT_HOP 3 4 well-known, mandatoryUNREACHABLE 4 0 well-known, discretionaryINTER-AS METRIC 5 2 optional, non-transitive ORIGIN:ORIGIN 路径属性定义了发端的路径信息八位字节数据确保了下列数据Value Meaning0 IGP - network(s) are interior to the originating AS1 EGP - network(s) learned via EGP2 INCOMPLETE - network(s) learned by some other meansAS-PATH:AS-PATH 属性列出了UPDATE消息中能够到达的网络自治系统即AS。
NEXT_HOP:这个属性定义了将在UPDATE消息中作为通往下一个网络的下一跳的边界路由器的IP地址。
如果这个边界路由器属于同一个AS那么通告它,它被称为一个内部边界路由器。
如果这个边界路由器属于不同的AS 那么通告它,它被称为外部边界路由器。
BGP发言者可以通告任何外部边界路由器作为下一跳,提供这种边界路由器的IP地址是从上一跳BGP发言者的对等体学到,以及与此边界路由器的IP地址关联的接口(在NEXT-HOP规定路径属性)共享公共的子网与当地和远程BGP发言者。
BGP发言者需要能够支持在外部边界路由器中禁用通知。
UNREACHABLE:这个UNREACHABLE属性用于通知BGP对等体一些旧有的通告路由器已经不可达。
INTER-AS METRIC:这个属性用在外部链接,用来区分对于同一个相邻AS的多个不同进出点。
5 .BGP错误处理当下面描述的任何情况被探测到,NOTIFICATION消息包括制定的错误码,错误子码,数据域,被发送出去,BGP连接断开。
如果错误子码没有指定,必须要使用0。
5.1 消息头错误处理当处理消息头部时所有探测到的错误在发送NOTIFICATION消息时,用错误码Error Code OPEN Message Error指示.错误子码依赖于具体的错误。
如果消息头的长度出现问题,错误子码设置为Bad Message Length。
5.2 OPEN 消息错误处理处理OPEN消息探测到的错误通过发送NOTIFACAITION指示,错误子码是Error Code OPEN Message Error.。
错误子码取决于特定的错误。
如果OPEN消息在Version域内不被当前版本号支持,错误子码设置为Unsupported Version Number。
数据域是2字节的无符号整数。
5.3 UPDATE 消息错误处理处理UPDATE消息探测的错误通过发送NOTIFACATION说明,错误码是Error Code UPDATE Message Error.错误子码决定于具体的错误。
5.4 NOTIFICATION 消息错误处理如果对等方发送NOTIFICATION消息,在消息中有错误,很不幸没有办法通过后来的NOTIFICAITON消息报告这个错误。
5.5 Hold Timer 溢出错误处理如果系统在OPEN消息的Hold Time域说明的时间内没有收到连续的KEEPALIVE和/或UPDATE和/或NOTIFACATION消息,错误子码是Hold Timer Expired Error Code 的NOTIFICATION消息发送出去同时BGP连接断开。
5.6 有限状态及错误处理.BGP 有限状态机探测到的的任何错误通过发送NOTIFICATION消息指示,错误子码是Error Code Finite State Machine Error。
5.7 终止如果出现任何致命错误,BGP对端可以选择在给定的任何时间关闭BGP连接,通过发送错误码是Error Code Cease的NOTIFACATION消息。
5.8 连接冲突检测如果一对BGP发言者尝试互相同时建立TCP连接,在一对发言者之间的两个并行的连接形成,我们称为连接冲突。
很明显,一个连接应该关闭。
本地系统执行下面的冲突解决过程:1.本的系统的BGP发言者比较远端系统的BGP标示符。
(在OPEN消息中说明)2.如果本的BGP标示符的值小于远端,本的系统关闭已经存在的BGP连接(已经在OpenConfirm 状态的那个),同时接受远端系初始哈的BGP连接。