上面我们聊RIP、OSPF协议都是基于AS即自治系统内的协议,可以把它们认为是域内路由协议;而下面我们要聊的就是AS之间的协议了,这也叫做域间路由协议,或者叫做外部网关协议,其最著名的一个协议就是BGP协议,目前使用最多的协议版本就是BGP的第四个版本BGP-
4,简称为BGP(BorderGatewayProtocol)。
在RIP和OSPF这些协议中,是由IP的网络地址进行路由控制,而BGP协议则需要通过整个互联网进行路由控制,范围要大很多。
BGP的环境与RIP、OSPF的环境不一样,主要在于互联网的规模过于庞大,使得自治系统之间的路由选择比较困难。互联网上的路由器对任何IP地址都能通过路由表找到它的目的网络。这是一个非常庞大的集合,如果使用链路状态协议RIP和OSPF的话,必须要维护一个非常大的了路由集合,一方面路由表检索起来效率很低,而且如此庞大的数据项也不方便维护。还有一点是每个路由器的metric不一样,有可能这个metric是经过了100个路由,而那个链路到达100个路由可能就直接报错了。
而且自治系统间的路由选择必须考虑策略问题,这些策略需要把政治、地缘、安全或者经济方面考虑在内。
由于上面这些特殊情况的存在,BGP协议只是满足选择一条到达目的网络比较好的路由,而非选择一条最佳路由,BGP采用了路径向量路由选择协议,它与RIP和OSPF有很大的差别。
在BGP协议中,每个AS自治系统内部都有许多BGP边界路由器,这个BGP边界路由器就相当是自治系统内部的发言人。不同AS之间的BGP边界路由器如果要交换路由信息的话,就需要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话,通过TCP能够提供可靠的服务。两个交换报文的BGP边界路由器都被称为彼此的临站(天使)或者对等站。
BGP所交换的网络可达性信息就是要到达某个网络所要经过的一系列的路由。当各个BGP边界路由器一旦交换了可达性信息之后,就会选择出来一条到达各个AS比较好的路由路径。
BGP支持无分类域间路由选择CIDR,因此BGP的路由表也就应当包括当前目的网络前缀、下一跳路由器,以及到达目的网络所经过的AS。
在BGP刚刚运行时,BGP的临站是交换整个BGP路由表,以后只要在发生变化时更新有新变化的部分即可。这样对节省网络带宽和减少路由器开销有很大好处,这个特性和OSPF非常相似。
如果两个临站属于两个不同的自治系统,而且其中一个临站打算和其他临站进行路由交换的时候,这时候应当有一个路由商量的过程。商量的过程包括临站路由器是否还能够接受额外的路由信息。因此一开始进行商谈的时候应该要先发送OPEN报文,如果临站可以接受这种关系,就用KEEPALIVE报文响应。响应完成后,两个临站就算是建立关系了。
关系建立之后,是需要相互维持的,这就和情侣之间确定关系之后,你作为老爷们总不能三天两头不搭理人家吧?俗话说的好,感情是需要维持的,那么这个路由关系也是需要维持的。通信双方中的每一方都需要确信对方是否已经存在,因此两个BGP边界路由器需要定期交换KEEPALIVE报文,一般这个定期的时间就是30s。
BGP边界路由器可以使用UPDATE报文来更新路由:包括撤掉以前通知过的路由和增加新的路由。撤销路由时一次可以撤销多条,但是新增路由一个UPDATE报文只能增加一条。
当然在BGP中不存在"好消息传播的快坏消息传播慢"的问题(感觉RIP的这个问题被玩出梗了)。因为BGP边界路由器不只有一个,而且当某个路由器或者链路出现故障时,由于BGP边界路由器可以不止从一个临站获得路由信息,因此很容易选出新的路由。
上面介绍的四种报文类型它们具有通用的报文首部,首部为19字节,通用首部主要分为三个字段。
前三个字段是BGP通用报文首部,下面的几个字段依次是Version版本(1字节,值为4),MyAS本自治系统号(2字节,使用的是全球唯一的16位系统号),HoldTime保持时间(2字节,以秒计算的保持为临站关系的时间),BGPIdentifierBGP标识符(4字节,路由器的IP地址),下面是可选长度和可选参数。
报文中的Unfeasiblerouteslength表示不可行路由长度,后面有个字段报文没有列出来,就是WithdrawnRoutes,要撤销的路由列表,后面的TotalPathAttributeLength表示路径属性总长度,后面的Pathattributes就表示路径属性,最后的NLRI标识发出这个报文的网络。