(十五)网络层--BGP协议
外部网关协议BGP
通过前面的文章,我们学习了内部网关协议:RIP与OSPF,这篇文章来看看外部网关协议BGP。
为何使用外部网关协议
在不同自治系统之间的路由选择,为什么不能使用内部网关协议?因为以下两点:
(1)互联网的规模太大,使得自治系统之间路由选择非常困难。连接在互联网主干网上的路由器,必须对任何有效的IP地址都能在路由表中找到匹配的目的网络。目前在互联网的主干路由器中,一个路由表的项目数早已超过5万个网络前缀。如果使用链路状态协议,则每一个路由器必须维持一个很大的链路状态数据库。对于这样大的主干网,计算最短路径花费的时间也太长。另外,由于自治系统各自运行自己选定的内部路由选择协议,并使用本自治系统指明的路径度量,因此,当一条路径通过几个不同的的自治系统时,要想对这样的路径计算出有意义的代价是不可能的。
(2)自治系统之间的路由选择必须考虑有关策略。由于相互连接的网络的性能相差很大,根据最短距离找出来的路径,可能并不合适。再比如自治系统AS1要发送数据报给自治系统AS2,本来最好是经过自治系统AS3,但AS3不愿意让这些数据报通过本自治系统的网络,因为“这是他们的事情,和我没有关系”。因此,自治系统之间的路由选择协议应当允许使用多种路由选择策略,这些策略包括政治、安全或经济方面的考虑。
由于上述的原因,BGP协议只能是力求寻找一条能够到达目的网络且比较好的路由,并非要寻找一条最佳路由。BGP采用了路径向量路由选择协议。在配置BGP时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,BGP发言人往往就是BGP边界路由器。
一个BGP发言人与其它自治系统的BGP发言人要交换路由信息,就要先建立TCP连接(端口号179),然后在此连接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息,如增加了新的路由,或撤销过时的路由,以及报告出差错的情况等等。使用TCP连接能提供可靠的服务,也简化了路由选择协议。下图描述了BGP发言人和自治系统的关系,每一个BGP发言人除了运行BGP协议外,还必须运行该自治系统所使用的内部网关协议,比如RIP或者OSPF。
BGP协议所交换的网络可达性的信息就是要到达某个网络所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的的策略从收到的路由信息中找出到达各自治系统的较好路由。下图表示AS1上的一个BGP发言人构造出的自治系统连通图,它是树形结构。
下图给出了一个BGP发言人交换路径向量的例子。
自治系统AS2的BGP发言人通知主干网的BGP发言人:“要到达网络N1, N2, N3, N4可经过AS2”。主干网在收到这个通知后,就发出通知:“要到达网络N1, N2, N3, N4可沿路径(AS1, AS2)”。同理,主干网还可能发出通知:“要到达网络N5, N6, N7可沿路径(AS1, AS3)”。
在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时,更新有变化的部分。在RFC 4271中规定了BGP-4的四种报文:
(1)OPEN报文,用来与相邻的另一个BGP发言人建立关系,使通信初始化
(2)UPDATE报文,用来通告某一路由的信息,以及列出要撤销的多条路由
(3)KEEPALIVE报文,用来周期性的证实邻站的连通性
(4)NOTIFICATION报文,用来发送检测到的差错
若两个邻站属于不同的自治系统,而其中一个邻站打算和另一个邻站定期的交换路由信息,这就应当有一个商谈的过程(因为对方路由器的负荷可能很重,不愿意再加重负担)。因此,一开始应当发送OPEN报文,如果邻站接受这种邻站关系,就用KEEPALIVE报文(一般每隔30s)。KEEPALIVE报文只有19字节长,所以不会带来太大的开销。
上图展示了BGP报文的格式。四种类型的BGP报文具有同样的通用首部,长度为19字节。通用首部分为三个字段,标记字段长16字节,用来鉴别收到的BGP报文,当不使用鉴别时,标记字段要置为全1。长度字段指出包括通用首部在内的整个BGP报文以字节为单位的长度,最小值是19,最大值是4096。类型字段的值为1到4,分别对应于上述四种BGP报文中的一种:
(1)OPEN报文
共有6个字段:
- 版本,1字节,现在是的值是4
- 本自治系统号,2字节,使用全球唯一的16位自治系统号,由ICANN地区登记机构分配
- 保持时间,2字节,以秒计算的保持为邻站关系的时间
- BGP标识符,4字节,通常就是该路由的IP地址
- 可选参数长度,1字节
- 可选参数
(2)UPDATE报文
共有5个字段:
- 不可行路由长度,2字节,指明下一个字段的长度
- 撤销的路由,列出所有要撤销的路由
- 路径属性总长度,2字节,指明下一个字段的长度
- 路径属性,指明这个报文中增加的路径的属性
- 网络层可达性信息,指明发出此报文的网络,包括网络前缀的位数、IP地址前缀
(3)KEEPALIVE报文
只有BGP的19字节长的通用首部
(4)NOTIFICATION报文
共有3个字段:
- 差错代码,1字节
- 差错子代码,1字节
- 差错数据,给出有关差错的诊断信息