TCP/IP协议族——单播路由选择协议RIP、OSPF、BGP

每个自治系统内部可以选择一个或多个域内路由选择协议来处理本自治系统内部的路由选择,但是,处理自治系统之间的路由选择只能使用一种域间路由选择协议。

一 距离向量路由选择协议

该方法视AS及其所有路由器和网络如同一张由结点连接结点的边的集合构成的图。

1.1 Bellman-Ford算法——任意两个点之间的最短路径

基本原理:结点i到结点j之间的最短Dij=min{di1+D1j,di2+D2j,di3+D3j,...,din+Dnj},其中点1到n为点i的n个邻点。

1.2 距离向量路由选择算法

(1)路由器创建一个初始的路由表,只能用于将分组转发到与它的接口直接相连的网络。如:

目的网络   代价  下一跳

————————————

网络1         1        ----

————————————

网络2         1        ----

————————————

网络6         1        ----

(2)对于每一个表项,向每一个邻站发送记录,该记录包含两个字段:目的地址和代价。

(3)每当路由器收到一个来自邻站的记录,就要更新自己的路由表,更新之后,路由器又将路由表的每一个表项发送给它的每一个邻站,以便这些邻站各自完成更新。

(4)当一个记录到达时,路由器搜索路由表以找到相应的目的地址。

(5)如果找到相应的表项,分两种情况检查并修改路由信息。

a.如果这个记录的代价加上1之后小于路由表中的相应代价,意味着该站发现了更好的路径,更改下一条和代价。

b.如果下一条是相同的,则意味着某一部分网络发生了变化,更新代价。

(6)如果路由表中没有相应的表项,路由器就将其添加到路由表中,并根据目的地址对路由表进行排序。

问题:有关代价下降的消息(好消息)扩散的非常快,有关代价上升的消息(坏消息)扩散很慢。如:

二结点循环问题:

结点X--------------------结点A-----------------------结点B

开始时,结点A和B都知道怎样到达X,但是在A和X之间的链路突然出来故障,结点A改变其路由表,如果A能够立即把它的路由表发送给B,那么一切问题都没有了。但是,如果B在收到A的路由表之前,已经向A先发送了它自己的路由表,那么这个系统就会变得不稳定:结点A收到这个更新,它认为B已经找到了到达X的路,于是立即对自己的路由表更新,然后A又将此次更新发给B,B认为A周围网络发生了一些变化,因而更新其路由表。到达X的代价逐渐增大,直到增加到无穷大,此时A和B才知道X是不可达的(坏消息传的慢),在这个过程中,如果A收到了要发往X的分组,他就会被转发到B,然后又被转发到A,...,如此循环往复。

解决办法

(1)定义无穷大:把16定义为无穷大。优点:该系统会在较少的几次更新内达到稳定。缺点:距离向量不能用于大系统中。

(2)分割范围:不让每个结点通过所有接口用洪范方法发送更新。而是只发送它的路由表的一部分。如果结点B根据其路由表认为到达X的最佳路由要经过A,那么它就不需要再把这个信息通告给A了。缺点:距离向量协议使用一个计时器,若长时间没有关于某个路由的消息,就要从路由表中删除该路由。

(3)分割范围和毒性逆转:为解决分割范围的缺点,上述情况下,节点B可以仍然通知关于X的数值,但如果信息源是A,就把代价换成为无穷大作为一种警告:不要使用该值,我的该值时根据你的消息计算出来的。

分割范围和毒性逆转可以解决二结点的不稳定性,但是三结点的不稳定性无法保证。

1.3 路由信息协议RIP

1.3.1 RIP是基于距离向量路由选择的简单协议,并有以下考虑:

(1)路由器和网络被表示为结点。

(2)终点是一个网络,即路由表第一列目的地址为一个网络地址。

(3)使用跳数作为度量。

(4)无穷大被定义为16。

(5)“下一个节点”是为了达到终点而要发往的下一个路由器的地址。

1.3.2 RIP报文格式


命令(8位):指明报文类型,请求(1)、响应(2)。

版本(8位):RIP协议版本,1或2。

系列(16位):所使用协议系列,TCP/IP该值为2。

网络地址:目的网络地址,14个字节,可用于包括IP(4字节)在内的任何协议。

距离(32位):从发出通告的路由器一直到目的网络所经过的跳数。

1.3.3 请求和响应

当路由器刚刚接入到网络上,或者路由器有一些表项超时了,就发送请求报文。可以询问某些特定的表项或者所有表项。

响应可以是询问的或非询问的,询问的响应仅在回答请求时才发出,它包含了在对应的请求中指明的终点的信息,而非询问的响应则是定期发送的,如每隔30秒或当路由表中有变化时,这种响应也称更新分组

1.3.4 RIP的计时器

RIP使用三个定时器来支持它的操作:


(1)定期计时器:控制更新报文的定期发送,倒数计时,为0时发送更新报文。

(2)截止期计时器:管理路由的有效性,为每个路由项设置一个计时器(180s),若该时间内没收到该路由项的任何更新报文,则将路由跳数设置为16。

(3)无用信息收集计时器:通知某个路由出了故障,当某个路由信息变成无效时,并不立即清除,而是设置无用信息收集计时器120秒,当计数倒数为0时删除该表项。这个计时器使得邻站在某个路由被清除之前能够了解该路由是无效的。

二 链路状态路由选择

2.1 原理

如果某个域的每一个结点都有这个域的完整拓扑,那个这个结点就能够使用 Dijkstra算法构造一个路由表。通过以下四组动作来确保每一个结点的路由表能给出到达其他各结点的最小代价结点:

(1)每个结点先创建一个有关链路状态的分组,称为链路状态分组或LSP。产生LSP的场合:

a.当这个域的拓扑发生变化时。

b.基于定期更新。周期较长(如60分钟),目的是为了确保旧的信息可以从该域删除。防止洪范不会再网络上产生太大的通信量。

(2)以可靠和有效的方法向其它各结点(所有结点,并非相邻结点)散发LSP,称之为洪泛。

a.产生LSP的节点把LSP的副本从他的每一个接口发送出去。

b.节点把收到的LSP和可能已有的副本进行比较。如果新到达的LSP比原有的还旧(检查序号可知),就丢弃该LSP。如果它比较新,这个结点丢弃旧的LSP,保留新的。并且将该LSP从除了接收该分组的接口以外的所有接口发送出去——保证了洪范会在某处(只有一个接口的节点)处停止。

(3)为每个结点形成一个最短路径树——选择作为树的根节点,可以从这个跟经过仅一条路径到达其他所有结点,从跟到其它每个结点的路径都是最短的。

(4)基于这个最短路径树计算路由表——Dijkstra算法。

2.2 OSPF协议(开放最短路径优先)

一种基于链路状态路由选择的域内路由选择协议,它的域是一个自制系统。OSPF使用五种不同类型的分组: 问候分组、数据库描述分组、链路状态请求分组、链路状态更新分组、链路状态确认分组。


2.2.1 公共首部

所有的OSPF分组都有相同的公共首部,如下所示:


类型: 值1到5表示五种类型。 

报文长度:包括首部在内的总报文长度。

鉴别字段为64位(上图有误),公共首部总长度为24字节

2.2.2 链路状态更新分组

OSPF运行的核心,路由器用它来通告自己的链路状态,其通用格式如下:


每个更新分组可包含数个不同的LSA(链路状态通告),所有五种LSA具有相同的通用首部,格式如下:


链路状态类型:定义了五种LSA的类型之一。

2.2.3 其他分组

(1)问候报文:用于建立邻站关系,并测试邻站的可达性。

(2)数据库描述报文: 邻站收到新连接路由器发送的问候报文后,若是第一次收到该消息,他们就发送数据库描述报文给新连接路由器,数据库描述分组并不包含完整的数据库信息,它只给出了概要,即数据库中每一行的标题,新连接上的路由器检查这些标题,并找出哪些行的信息它还没有,然后再发送一个或多个链路状态请求报文,以便得到这个特定链路的完整信息。

(3)链路状态请求分组:对它的回答是链路状态更新分组。

(4)链路状态确认分组:对所收到的每一个链路状态更新分组进行确认,使得路由选择更加可靠。

2.2.4 封装

OSPF分组被封装成IP数据报,这些数据报包括确认机制,以实现流量控制和差错控制。它们不需要通过运输层协议来提供这些服务。

三 路径向量路由选择
3.1 原理和特点

距离向量路由选择:运行区域跳数比较多时会变得不稳定。

链路状态路由选择:需要大量的资源用于计算路由表,洪泛法会产生很大的通信量。

——不适于自制系统之间的路由选择

路径向量路由选择:路由器有一个网络列表,列出了到达每个网络的路径,每个AS至少有一个收集了其内部所有网络可达性信息的路径向量路由表,收集的信息仅仅表示哪个网络是存在的,不同AS之间共享可达性列表,特点如下:

(1)防止环路

收到可达性信息后,检查自己的自制系统是否在到达终点的路径上,如果是就说明会出现环路,丢弃该报文。

(2)聚合

CIDR记法和地质聚合使得路由表简短,路由器之间信息交换更快。

(3)策略路由选择

收到报文就检查其路径,如果路径中列出的一个自治系统与策略相违背,就忽略这条路径和这个终点。

3.2 边界网关协议BGP

一个使用路径向量路由选择的域间路由选择协议。

分组类型:打开、更新、保活和通知。所有BGP分组共享相同的公共首部,如下所示:


长度:包括首部在内的报文总长度。

类型:1到4定义的四种类型。

3.2.1 分组类型

(1)打开报文:为了建立邻站关系,运行BGP的路由器需要打开与邻站的TCP连接,因而要发送打开报文,若对方接受这种关系就用保活报文来响应,表示在这两个路由器之间已经建立了关系。

(2)更新报文:用来撤销以前曾通告过的终点,或宣布到一个新终点的路由。

(3)保活报文:定期互相交换保活报文,用来告诉对方自己是工作的。

(4)通知报文:当检测出差错状态或路由器打算关闭连接时,路由器就发送通知报文。

3.2.2 封装

BGP报文封装成TCP报文段,并使用熟知端口179,这表示不需要使用差错控制和流量控制,在TCP连接被打开后,就不停的交换着更新报文,直到发出停止类型的通知为止。