IT技术互动交流平台

BGP(三) BGP的消息格式

作者:墙外行人  发布日期:2013-03-14 19:31:28

昨天足球赛只是打平了,但是因为之前连胜了两场,净胜4球,贵班顺利小组出线,估计还是以第一出线。虽然我是超级板凳球员,但是,拥有这么强烈班级荣誉感的在下,开心一下总是应该的。还有就是最近很头疼浏览器兼容性问题,特别是IE6这个脑残浏览器,另外就是纠结编码问题,有时候我想啊,如果我们的母语就是英语就好了(当然我很爱国)。总之,头很大。

还有一件恶心的事情,就是博主写的文章都被非法转载到一些垃圾网站上,简直令人发指!这还不算,即使我google自己的博文题目出来的第一条搜索结果居然不是我自己的,而是那些转载文章的混蛋们的网站,让我简直想一巴掌拍死他们。所以今天在写博客之前怒添了一个版权声明,希望那些混蛋们转载之前摸摸自己的良心,你应该么?另外希望读者们注意了,这时候你支持正版是不需要付钱的…何乐而不为呢。

接下来讲BGP报文的四种消息格式.

一点说明
所有多字节域都是网络字节序。之所以没有配图,因为我觉得会使网页加载变慢。

报文头格式
因为BGP本身也是一种协议,具有相应的协议头。如果从网络抓包,那么去掉TCP头之后便是BGP报文。格式如下:


Marker:
16个字节,被设置成1.

Type:
1个字节,表示该报文的类型(1表示OPEN,2表示UPDATE,3表示NOTIFICATION,4表示KEEPALIVE).

Length:
2个字节表示BGP报文长度(包含头部),因为BGP限制最长长度为4096,因此Length取值范围为19-4096.

OPEN消息
在BGP Speaker之间建立TCP连接之后,便会发送OPEN消息商定连接属性。除却BGP协议头之外,OPEN消息包含如下字段:


Version:
1个字节,标识使用的BGP版本,此时为4.

My Autonomous System:
2个字节,标识发送方的AS号.

Hold Time:
2个字节,标识BGP Speaker双方等待对方消息的等待时间,一旦超过这个时间则连接断开.

BGP Identifier:
4个字节,标识BGP Speaker的身份,即其所分配的IP地址.

Optional Parameters Length:
1个字节,标识可选参数的长度(以字节为单位).

Optional Parameters:
长度可变,由Optional Parameters Length指定,是形如的三元组组成(在RFC3392中有详细定义,因为和博主关心的东西不一样,所以未详细看).

其中对于Hold Time需要做一点说明,本地BGP Speaker在收到OPEN消息时会计算本地的Hold Time和对方的发过来的Hold Time,取较小值为约定值。另外规定Hold Time要么为0,要么必须大于3秒。由上面各字段可以看出,OPEN消息最小长度为10字节,加上BGP协议头19字节,因此OPEN消息最短为29字节。

UPDATE消息格式
UPDATE消息用来沟通BGP Speaker之间路由变化,它可以告知哪些路由被撤销,或者告知可用路由(那些拥有统一路径参数的可用路由).UPDATE消息格式如下:


Withdrawn Routes Length:
2个字节,撤销路由的长度(以字节为单位), 如果为0,则表示下一个Withdrawn Routes字段为空.下同.

Withdrawn Routes:
可变长度,以形如储存,标识应该撤销的路由.

Total Path Attribute Length:
2个字节,标识Path Attributes长度.

Path Attributes:
可变长度,以形如三元组的形式存储.

Network Layer Reachability Information:
可变长度,且由UPDATE message length - 23 - Total Path Attribute Length - Withdrawn Routes Length决定(其中23由19字节的BGP协议头,4字节的Total Path Attribute Length和Withdrawn Routes Length).此字段包含了一系列二元组以表示网络可达信息(即路由终点)。

对上面各字段,其中Path Attribute比较复杂,会在下一篇BGP的路径参数中详细讲解。我们稍微解释下二元组.其中Length表示IP地址前缀中有用的比特数。而Prefix则表示IP前缀,但是值得注意的是,它必须要在末尾补全0,以满足字节边界。下面讲个小例子.比如Length是13,为了满足Prefix至少有13位比特,且满足字节边界,则Prefix应该有16比特,即2字节。那么下一个二元组则从第三字节开始.以此类推。www.it165.net

另外对Withdrawn Routes和NLRI有一点说明,因为他们都是以二元组储存了一系列IP前缀,他们表示的是路由的终点。比如说Withdrawn Route中有个1.1.0.0/13则表示撤销到1.1.0.0、13的路由。以此类推。

KEEPALIVE消息格式
KEEPALIVE只是用来告知对端连接的正常,因此无需任何其他参数,也就是说一个KEEPALIVE就等于一个BGP协议头,即19字节.

NOTIFICATION消息格式
NOTIFICATION消息用来传递BGP Speaker双方的错误信息。格式如下:


Error Code:
1个字节,分为几种(这里不叙述了,很多,博主不关心)

Error Subcode:
1个字节,每个Error Code都有对应的subcode,也不叙述了.

Data:
(Message Length - 21)个字节,标识错误的一些原因和说明.

最后
此篇博文描述了四种BGP消息的格式以及各字段的说明,下篇我们将对Path Attribute做详细讨论.


Tag标签: BGP   消息格式  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规