DA000011 BGP路由协议 ISSUE2.0 错误!未找到引用源。
错误!未找到引用源。
BGP的报文和状态机边界网关协议1.1 报文种类BGP报文种类●BGP报文有四种类型:→Open:打招呼“你好,跟我交个朋友吧!”→KeepAlive:我还活着呢,别不理我→Update:有新闻......→Notification:我不跟你玩了!EGP 内部网关协议BGP 控制路由划分边界BGP 采用的TCP路由协议Ospf 采用的是ipv4Ospf 的端口号是89BGP的端口号是179运行两个层次之间的IBGP LOOPBACKEBGP 物理接口BGP有4种类型的报文,分别为OPEN、UPDATE、NOTIFICATION和KEEPALIVE。
BGP对等体间通过发送OPEN报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。
UPDATE报文携带的是路由更新信息。
其中包括撤销路由信息和可达路由信息及其路径属性。
当BGP检测到差错(连接中断、协商出错、报文差错等)时,发送NOTIFICATION 报文,关闭同对等体的连接。
KEEPALIVE报文在BGP对等体间周期地发送,以确保连接保持有效。
OPEN报文主要用于建立邻居(BGP对等体)关系,它是BGP路由器之间的初始握手消息,应该发生在任何通告消息之前。
其他在收到OPEN消息之后,即以KEEPALIVE消息作为响应。
一旦握手成功,则这些BGP邻居就可以进行UPDATE(更新)、KEEPALIVE(保持激活)以及NOTIFICATION (通知)等消息的交换操作。
DA000011 BGP路由协议 ISSUE2.0 错误!未找到引用源。
错误!未找到引用源。
1.2 报文内容及格式BGP报文头BGP报文的格式是一样的,都是”报文头+报文体“的格式,下面给出的是BGP报文头:Marker(16 byte)Length(2 byte)Type(1 byte)BGP报文头的格式如图所示,每行的宽度为4个字节。
BGP 是发现控制路由协议Marker 鉴权信息:16 字节,全1。
这个标记的作用主要是用来检测BGP对等体之间的同步是否丢失,并对进来的BGP消息进行验证。
Length 消息的长度:2 字节,指示整个消息的长度,包括头标长度,最小的BGP消息长度是19字节(Keepalive报文),最大的长度是4096字节。
Type 消息的类型:1 字节,指示报文类型,如OPEN、UPDATE报文等。
1 :OPEN2 :UPDATE3 :NOTIFICATION4 :KEEPALIVEOpen报文Open报文是由报文头加如下结构构成的。
VisionMy Autonomous SystemHold TimeBGP IdentifierOptional ParamentersLengthOptional ParamentersVersion :(1字节)发端BGP版本号My Autonomous System :(2字节无符号整数)本地AS号Hold Time :(2字节无符号整数)发端建议的保持时间 BGP Identifier :(4字节)发端的路由器标识符Optional parameters Len :(1字节)可选的参数的长度Optional Parameters :(变长)可选的参数消息的开始部分包括BGP的版本号和发送方的自治系统编号。
接下来是保持时间(HOLD TIME)字段,这是发送方提供建议的保持定时器的设定秒数。
保持定时器规定了BGP邻居认为发送方信息有效的时间长度。
再下一个字段是BGP标识(BGP ID),也就是BGP发送方的标识。
该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。
DA000011 BGP路由协议 ISSUE2.0 错误!未找到引用源。
错误!未找到引用源。
KeepAlive报文KeepAlive报文只有报文头。
Marker(16 byte)Length(2 byte)Type(1 byte)KeepAlive 报文主要用于对等体路由器间的运行状态以及链路的可用性确认。
KeepAlive 报文的组成只包括一个BGP数据报头。
KeepAlive 消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive 报文,表明该连接是否还可保持。
缺省情况下,发送Keepalive 的时间间隔为 60 秒。
Update报文Update报文由报文头加如下结构构成。
Unfeasible Routes LengthWithdrawn RoutesPath Attribute LengthPath AttributeNetwork Layer Reachability InformationUnfeasible Routes Len :(2字节无符号整数)不可达路由长度Withdrawn Routes :(变长)撤消路由Path Attribute Len :(2字节无符号整数)路径属性长Path Attributes :(变长)路径属性(以下详细说明)Network Layer Reachability Information :(变长)网络可达信息(目标)其中撤消路由和目标地址的表示方法为一<length,prefix> 的二元组。
length一个字节,指示地址前缀的长度。
prefix为地址前缀,长度1至4字节。
UPDATE 报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:不可达路由(unreachable)、路径属性(path attributes)、网络可达性信息(NLRI,network layer reachability information)。
UPDATE 消息可以向BGP对等体通告一条路由,也可以撤消多条“行不通”的路由。
不可达路由字段包括一个所撤消路由的IP地址前缀列表。
路径属性字段是一个路径属性的列表,包括:属性类型、属性长度和属性值等。
网络可达字段包括了BGP路由器所知道的且可到达的IP地址前缀列表。
一个UPDATE 消息一次只能通告一个路由,但它可以携带多个路径属性。
一个UPDATE 消息一次也可通告多条路由,但它的路径属性必须相同。
DA000011 BGP路由协议 ISSUE2.0 错误!未找到引用源。
错误!未找到引用源。
一个UPDATE 消息可以同时列出多个被撤消的路由。
Notification 报文Notification 报文由报文头加如下结构构成。
DataError Code Error Subcode消息头错1OPEN 消息错2UPDATE 消息错3保持时间超时4状态机错5退出错误类型6错误代码Notification 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),包括错误代码、辅助错误代码及错误信息。
Errorcode :(1字节) 错误代码。
Errsubcode :(1字节) 辅助错误代码。
Data :(变长) 依赖于不同的错误代码和辅助错误代码。
用于诊断错误原因。
DA000011 BGP 路由协议 ISSUE2.0错误!未找到引用源。
错误!未找到引用源。
1.3 BGP 协议的状态机BGP 协议的状态机ActiveOpen-sentOpen-confirmEstablishedIdleConnectConnect-Retry timer expiryTCP connection failsConnect-Retry timer expiryStartOthersTCP connection failsErrorErrorErrorKeepAlive timer expiryKeepAlive packet received1. KeepAlive timer expiry2. Update received3. KeepAlive receivedCorrect OPEN packet receivedTCP connection setupTCP connection setupOthersBGP 协议有限状态机有六个状态,它们之间的转换过程示意了BGP 邻居关系建立的过程。
首先是Idle 状态,BGP 协议 一旦Start ,状态机就进入Connect 状态 ,在Connect 状态 ,如果Connect- Retry 定时器超时,BGP 状态机会停留在Connect 状态 ,同时, BGP 试图建立TCP 连接,如果TCP 连接建立失败,BGP 状态机进入Active 状态。
如果TCP 连接建立成功,BGP 状态机就直接进入OpenSent 状态。
在Active 状态,如果TCP 连接依然不能建立起来,那么BGP 状态机就会一直停留在Active 状态,直到TCP 连接建立成功,才会进入OpenSent 状态。
在OpenSent 状态 ,BGP 一旦收到了一个正确的Open 报文,就会进入OpenConfirm 状态。
在OpenConfirm 状态 ,如果KeepAlive 定时器超时,BGP 状态机就会停留在OpenConfirm 状态。
直到BGP 收到KeepAlive 报文,BGP 状态机才会进入Established 状态。
这时BGP 连接才算建立起来。
另外,在除Idle 状态以外的其它五个状态出现任何Error 的时候,BGP 状态机就会退回到Idle 状态。
Idle (空闲):Idle 是BGP 连接的第一个状态,在空闲状态,BGP 在等待一个启动事件,启动事件出现以后,BGP 初始化资源,复位连接重试计时器(Connect-Retry ),发起一条TCP 连接,同时转入Connect (连接)状态。
Connect (连接):在Connect 状态,BGP 发起第一个TCP 连接,如果 连接重试计时器(Connect-Retry )超时,就重新发起TCP 连接,并继续保持在Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就转入Active 状态。
Active(活跃):在Active状态,BGP总是在试图建立TCP 连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就继续保持在Active状态,并继续发起TCP连接。