1989年,公布了新的外部网关协议——边界网关协议。为简单起见,后面把目前使用最多的版本BGP-4简写为BGP。最近已经陆续发布了一些BGP-4的更新文档,但目前BGP-4仍然是草案标准[RFC 4271]。
首先应当明确,在不同自治系统之间的路由选择为什么不能使用前面讨论过的内部网关协议,如RIP或OSPF协议。
我们知道,内部网关协议(如RIP或OSPF协议)主要是设法使数据报在一个自治系统中尽可能有效地从源站传送到目的站。在一个自治系统内部也不需要考虑其他方面的策略,然而BGP使用的环境却不同。这主要是因为以下两个原因:
第一,互联网的规模太大,使自治系统之间路由选择非常困难。连接在互联网主干网上的路由器,必须对任何有效的IP地址都能在路由表中找到匹配的目的网络。目前在互联网的主干网路由器中,一个路由表的项目数早已超过了5万个网络前缀。如果使用链路状态协议,则每个路由器必须维持一个很大的链路状态数据库。对于这样大的主干网用Dijkstra算法计算最短路径时花费的时间也太长。另外,由于自治系统各自运行自己选定的内部路由选择协议,并使用本自治系统指明的路径度量,因此,当一条路径通过几个不同自治系统时,要想对这样的路径计算出有意义的代价是不太可能的。例如,对某自治系统来说,代价为1 000可能表示一条比较长的路由,但对另一自治系统,代价为100却可能表示不可接受的坏路由。因此,对于自治系统之间的路由选择,要用“代价”作为度量来寻找最佳路由也是很不现实的。比较合理的做法是在自治系统之间交换“可达性”信息(即“可到达”或“不可到达”)。例如,告诉相邻路由器:“到达目的网络N可经过AS x”。
第二,自治系统之间的路由选择必须考虑有关策略。由于相互连接的网络的性能相差很大,根据最短距离(即最少跳数)找出来的路径,可能并不合适。另外,也有的路径的使用代价很高或很不安全。还有一种情况,如AS1要发送数据报给AS2,本来最好是经过AS3,但AS3不愿意让这些数据报通过本自治系统的网络,因为“这是它们的事情,和我们没有关系。”另外,AS3愿意让某些相邻自治系统的数据报通过自己的网络,特别是对那些付了服务费的某些自治系统更是如此。因此,自治系统之间的路由选择协议应当允许使用多种路由选择策略。这些策略包括政治、安全或经济方面的考虑。例如,我国国内的站点在互相传送数据报时不应经过国外,特别是不要经过某些对我国的安全有威胁的国家。这些策略都是由网络管理人员对每个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。另外,还可举出一些策略的例子,如“仅在到达下列这些地址时才经过AS x”“AS x和AS y相比时应优先通过AS x”等。显然,使用这些策略是为了找出较好的路径,而不是最佳路径。
由于上述情况,BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP采用了路径向量(Path Vector)路由选择协议,它与距离向量协议(如RIP)和链路状态协议(如OSPF协议)都有很大的区别。
在配置BGP时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一般说来,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,但也可以不是BGP边界路由器。
一个BGP发言人与其他自治系统的BGP发言人要交换路由信息,就要先建立TCP连接端口(端口号为179),然后在此连接上交换BGP报文以建立BGP会话(Session),利用BGP会话交换路由信息,如增加了新的路由或撤销过时的路由,以及报告出差错的情况等。使用TCP连接能提供可靠的服务,也简化了路由选择协议。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站(Neighbor)或对等站(Per)。
图4-40所示为BGP发言人和自治系统的关系示意。图4-40中画出了3个自治系统中的5个BGP发言人。每个BGP发言人除了必须运行BGP外,还必须运行该自治系统所使用的内部网关协议,如OSPF协议或RIP。
图4-40 BGP发言人和自治系统的关系示意
BGP所交换的网络可达性的信息就是要到达某个网络(用网络前缀表示)所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由。图4-41表示从图4-40的AS1上的一个BGP发言人构造出的自治系统连通图,它是树形结构的,因此不存在回路。
第1章中已经介绍过当前互联网的多级结构特点。这种多级结构的网络拓扑决定了BGP路由选择协议的特点。
图4-42给出了一个BGP发言人交换路径向量的例子。AS2的BGP发言人通知主干网的BGP发言人:“要到达网络N1,N2,N3和N4可经过AS2。”主干网收到这个通知后,就发出通知:“要到达网络N1,N2,N3和N4可沿路径(AS1,AS2)。”同理,主干网还可发出通知:“要到达网络N5,N6和N7可沿路径(AS1,AS3)。”
图4-41 自治系统连通图示例
图4-42 BGP发言人交换路径向量的例子
从上面的讨论中可看出,BGP交换路由信息的结点数量级是自治系统个数的量级,这要比这些自治系统中的网络数少很多。要在许多自治系统之间寻找一条较好的路径,就是要寻找正确的BGP发言人(或边界路由器),而在每个自治系统中,BGP发言人(或边界路由器)的数目是很少的。这样就使自治系统之间的路由选择不致过分复杂。(www.xing528.com)
BGP支持无分类域间路由选择CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的自治系统序列。由于使用了路径向量的信息,就可以很容易地避免产生兜圈子的路由。如果一个BGP发言人收到了其他BGP发言人发来的路径通知,它就要检查一下本自治系统是否在此通知的路径中。如果它在这条路径中,就不能采用这条路径(因为会兜圈子)。
在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
在RFC4271中规定了BGP的4种报文:
(1)OPEN(打开)报文,用来与相邻的另一个BGP发言人建立关系,使通信初始化。
(2)UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。
(3)KEEPALIVE(保活)报文,用来周期性地证实邻站的连通性。
(4)NOTIFICATION(通知)报文,用来发送检测到的差错。
若两个邻站属于两个不同的自治系统,而其中一个邻站打算和另一个邻站定期地交换路由信息,这就应当有一个商谈的过程(因为很可能对方路由器的负荷已很重因而不愿意再加重负担)。因此,一开始向邻站进行商谈时就必须发送OPEN报文。如果邻站接受这种邻站关系,就用KEEPALIVE报文响应。这样,两个BGP发言人的邻站关系就建立了。
一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个BGP发言人彼此要周期性地交换KEEPALIVE报文(一般每隔30 s)。KEEPALIVE报文只有19 Byte长(只用BGP报文的通用首部),因此不会造成网络上太大的开销。
UPDATE报文是BGP的核心内容。BGP发言人可以用UPDATE报文撤销它以前曾经通知过的路由,也可以宣布增加新的路由。撤销路由可以一次撤销许多条,但当增加新路由时,每个更新报文只能增加一条。
BGP可以很容易地解决距离向量路由选择算法中的“坏消息传播得慢”这一问题。当某个路由器或链路出故障时,由于BGP发言人可以从不止一个邻站获得路由信息,因此很容易选择出新的路由。距离向量算法往往不能给出正确的选择,是因为这些算法不能指出哪些邻站到目的站的路由是独立的。
图4-43所示为BGP报文的格式。4种类型的BGP报文具有同样的通用首部,其长度为19 Byte。通用首部分为3个字段。标记marker字段为16 Byte长,用来鉴别收到的BGP报文(这是假定将来有人会发明出合理的鉴别方案)。当不使用鉴别时,标记字段要置为全1。长度字段指出包括通用首部在内的整个BGP报文以字节为单位的长度,最小值是19,最大值是4 096。类型字段的值为1~4,分别对应于上述4种BGP报文中的一种。
图4-43 BGP报文的格式
OPEN报文共有6个字段,即版本(1 Byte,现在的值是4)、本自治系统号(2 Byte,使用全球唯一的16 bit自治系统号,由ICANN地区登记机构分配)、保持时间(2 Byte,以秒计算的保持为邻站关系的时间)、BGP标识符(4 Byte,通常就是该路由器的IP地址)可选参数长度(1字节)和可选参数。
UPDATE报文共有5个字段,即不可行路由长度(2 Byte,指明下一个字段的长度)、撤销的路由(列出所有要撤销的路由)、路径属性总长度(2 Byte,指明下一个字段的长度)、路径属性(定义在这个报文中增加的路径的属性)和网络层可达性信息(Network Layer Reachability Information,NLRI)。最后这个字段定义发出此报文的网络,包括网络前缀的位数、IP地址前缀。
KEEPALIVE报文只有BGP的19 Byte长的通用首部。
NOTIFICATION报文有3个字段,即差错代码(1 Byte)、差错子代码(1 Byte)和差错数据(给出有关差错的诊断信息)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。