路由协议

有了IP地址以及路由表的设计之后,我们就要继续考虑如何去获取路由信息,也就是路由器之间如何去交换信息,如如何表达自己对其他路由器的可达性,获取路由信息之后,我们还要想办法构造路由表。

网际控制报文协议ICMP

为了有效地转发IP数据包并提高成功交付的机会,在网际层使用了网际控制报文协议,但是ICMP并不是高层协议(看起来是高层协议,因为ICMP是装在IP数据报中,作为其中数据部分),其格式如下:

ICMP

ICMP报文分为两个类型,ICMP差错报告报文ICMP询问报文,ICMP报文的前四个字节的格式是统一的,共有三个字段,分别为类型,代码,检验和,接下来4个字节的内容与ICMP类型有关,最后的是数据字段,其长度取决于ICMP的类型。

常见的ICMP报文类型有:

ICMP报文种类类型的值ICMP报文的类型
差错报告报文3终点不可达
11时间超过
12参数问题
5改变路由
询问报文8或0请求或回答
13或14时间戳请求或回答

ICMP报文的代码字段是为了进一步区分某种类型中的几种不同情况,检验和字段用来检验整个ICMP报文,因为IP数据报首部的检验和并不检验IP数据包的内容。

差错报文

上表中的差错报文共有四种:

  • 终点不可达:当路由器或者主机不能交付数据报时就向源点发送终点不可达报文。
  • 时间超过:当路由器收到生存时间为0的数据报时,丢弃该数据报的同时,向远点发送时间超过报文。同时当中点在预先规定的时间不能收到一个数据报的全部数据报片时,就把已收到的全部数据报片丢弃,并向源点发送时间超过报文。
  • 参数问题:当主机或路由器收到的数据报首部中有的字段不正确时,就会丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向):路由器把改变路由的报文发送给主机,让主机知道瑕疵的数据报发送给另外的路由器。

当主机刚开始工作的时候,一般都在路由表中设置一个默认路由器的IP地址,不管数据报要发送到那个目的地址,都一律先把数据报发送到默认路由器。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由应当经过当前网络上的另一个路由器时,就用改变路由报文把这个情况告诉主机。

所有的ICMP差错报告报文中的数据字段都具有相同的样式,把收到的需要进行差错报告的IP数据包的首部和数据字段的前8个字节提取出来,作为ICMP数据报的数据字段,再加上ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文,之所起提取需要进行差错报告的IP数据报前8个字段是为了获得运输层 的端口号

以下几种情况不应该发送ICMP差错报告报文:

  • 对ICMP差错报告报文,不再发送ICMP差错报告报文。
  • 对于第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。
  • 对具有多播地址的数据包,都不发送差错报文。
  • 对特殊地址(如127.0.0.1),不发送差错报文。

询问报文

常用的询问报文有两种:

  • 回送请求和回答:ICMP回送请求报文是主机或路由器向一个特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文,这种询问报文用来测试目的站是否可达以及其有关状态。
  • 时间戳请求和回答:请求某台主机回答它当前的日期和时间。

应用举例

PING

PING命令其实就是使用了ICMP的回送请求与回答报文。

Traceroute

Traceroute其实就是源主机向目的主机发送的一连串的IP数据报,数据报中封装的是无法交付的UDP数据报,第一个数据报P1的TTL设置为1,当P1到达路径上的第一个路由器R1时,R1手下它,然后把TTL减1,由于TTL等于0了,R1就把P1丢弃,并向源主机发送一个ICMP时间超过差错报文。

接下来一次发送第n个数据报Pn,TTL设置为n,最终某个数据报到达目的主机,由于是无法交付的UDP数据报,目的主机向源主机发送ICMP终点不可达差错报文

路由选择协议

理想的路由算法

路由选择协议的核心就是路由算法,即需要何种算法来获取路由表中的各项目。

一个理想的路由算法应该具有:

  • 算法必须是正确和完整的。这里“正确”的含义是,通过各路由表所指出的路径,分组最终一定能够到达目的网络和目的主机。
  • 算法在计算上必须简单。不能在网络通信上增加太多的开销。
  • 算法应该能够适应通信量和网络拓扑的变化,也就是要有自适应能力。
  • 算法应具有稳定性。在网络通信量和网络拓扑相对稳定时,算法应该收敛到一个可以接受的解。
  • 算法应该是公平的。路由选择算法应对所有的门户都是平等的。
  • 算法应该是最佳的。所谓的最佳,只是相对于与某一种特定要求下得出较为合理的选择而已。

分层次路由选择协议

如果从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,可以分为两类,非别为静态路由选择策略动态路由选择策略

静态路由选择策略也叫作非自适应路由选择,其特点是简单和开销小,但不能及时适应网络状态的的变化,对于很简单地小网络,我们可以采用静态路由选择。

互联网采用的路由选择协议主要是动态的,分布式的路由选择协议

  • 互联网规模非常大,如果让所有路由器知道所有网络应该怎样到达,路由表将非常大,路由处理时间也会变得非常长。
  • 许多单位不愿意外界了解自己单位网络的的布局细节和本部门采用的路由选择协议。

为此我们可以把互联网划分为许多小的自治系统(autonomous system, AS),AS指的是在单一技术管理下的一组路由器,一个AS对另一个AS所表现出的就是一个单一和一致的路由选择策略。

一个大的ISP就是一个大的自治系统,互联网就把路由选择协议分为两大类:

  • 内部网关协议IGP,即在一个自治系统内部使用的路由选择协议,这与互联网中其他自治系统选择什么路由选择协议没有关系。
  • 外部网关协议EGP,当源主机和目的主机不在同一个自治系统中时,如果一个数据报传送到自治系统边界时,就需要一种协议将路由选择信息传送到另外一个自治系统中。

内部网关协议RIP

RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,它要求网络中的每一个路由器都要维护从自己到其他每一个目的网络的距离记录。

RIP将**”距离“**定义如下:

从一个路由器到直接连接的网络的距离定义为1,从路由器到非直接连接的网络距离定义为未经过的路由器数加1。

RIP协议的距离,也成为**“跳数”**,因为每经过一个路由器,跳数就加一,RIP认为最好的陆幽就是它通过的路由器数目少,即距离短。RIP允许一条路径最多包含15个路由器,因此距离等于16时就相当于不可到达,可见RIP只适用于小型网络。

RIP不能再两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由,哪怕还存在一条高速低时延但是路由器较多的路由

RIP协议的特点如下:

  • 仅和相邻的路由器交换信息。
  • 路由器交换的信息是当前本路由器知道的所有信息,也就是自己现在的路由表。
  • 按照固定的时间交换路由信息。

路由器在刚开始工作的时候,它的路由表是空的,然后路由器就只能得出自身和相邻的几个网络的距离为1。每个路由器也只能和数目有限的相邻路由器交换并更新路由信息,但是经过若干次交换后,所有路由器最终都会得知到达自治系统中任何一个网络的最短距离和下一跳路由器的地址。这个过程叫做**“收敛”**。

RIP协议的路由表中最主要的信息就是:到达某个网络的距离,以及经过的下一跳地址。

距离向量算法:

  1. 对于地址为X的相邻路由器发送来的RIP报文,先修改此报文中的所有项目,把下一跳地址字段中的地址都改为X,并把所有的距离字段加1.每一个项目都有三个关键数据:到目的网络N,距离是d,下一跳路由地址是X。
  2. 对修改后的RIP的报文中的每一个项目,进行以下步骤:
    • 若原来的路由表中没有目的网络N,则把该项目添加到路由表中。
    • 如果路由表中有目的网络N,再查看下一跳路由地址,若下一跳路由地址是X,则把收到的项目替换进原项目中。如果下一跳地址不是X,查看收到的项目中的d是否小于路由表中的距离,如果小,则更新,否则什么也不做。
  3. 若三分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器标记为不可到达。

内部网关协议OSPF

**开发最短路由优先OSPF(Open Shortest Path First)**是为了克服RIP的缺点而开放出来了。“开放”表明OSPF协议并不是受某一家厂商控制,“最短路径优先”是因为采用了Dijkstra提出的最短路径算法SPF。

OSPF协议最主要的特征就是采用了分布式的链路状态协议(link state protocol),而不是RIP的距离向量,与RIP相比,OSPF的三个特点与RIP都不一样:

  • 向本自治系统的所有路由器发送信息,这里使用的方法是洪泛法,也就是路由器向所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再将此信息发送给其所有相邻的路由器(不再发送给刚刚发来信息的那个路由器)。
  • 发送的信息是本路由器与所有相邻路由器的链路状态,但这是只该路由器知道的部分信息,所谓的“链路状态”就是说明本路由器和那些路由器相邻,以及该链路的“度量”。OSPF将这个度量用于表示费用,距离,时延,带宽等,由网络管理人员决定。
  • 只有当链路状态发生变化时,路由器才想所有路由器用洪泛法发送信息。

由于各路由器之间频繁地交换信息,因此所有的路由器最终都会建立一个链路状态数据库,这个数据库其实就是全网的拓扑结构图。

OSPF将一个自治系统再划分为若干个更小的范围,叫做区域(area),每个区域都有一个32位的区域标识符。

划分区域的好处就是把利用洪泛法交换的链路状态信息的范围局限在每一个区域而不是整个自治系统。OSPF使用层次结构的区域划分,在上层的区域叫做主干区域,主干区域的标识符默认为0.0.0.0 ,主干区域的作用是用来连通其他在下层的区域,从其他区域来的信息都由区域边界路由器进行概括。

外部网关协议BGP

首先要搞清楚,为什么在不同的自治系统之间不能使用前面讨论的内部网关协议,这主要有两个原因:

  • 互联网规模过大,是的自治系统AS之间的路由选择非常困难。连接在互联网主干网上的路由器,必须对任何有效的IP地址都能在路由表中找到匹配的目的网络。而目前在互联网主干网路由器上,一个路由表的项目早就找过5w的网络前缀。,使用OSPF计算路径花费时间太长。而且由于每个AS内部协议不同,当一条路径通过多个AS时,再想计算出有意义的路径代价不太可能。
  • AS之间的路由选择必须考虑相关的策略,包括政治经济等因素,例如我国国内的站点在相互传递数据报的时候不能去国外兜圈子。

BGP只能是力求寻找一条能够到达目的网络且比较好的路由,并非要找一条最佳路由。BGP采用路径向量路由选择协议。在配置BGP,每一个自治系统的管理员至少要选择一个路由器作为该自治系统的**”BGP发言人“**。而BGP发言人往往就是BGP的边界路由器。

一个BGP发言人与其他AS的BGP发言人交换信息,就要先建立TCP连接(port:179),然后在此连接上建立BGP session。。

每个BGP发言人除了必须运行BGP之外,还必须运行该AS的内部网关协议。。

BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列自治系统。当BGP发言人交换了网络可达性后,各BGP发言人就根据所采用的的策略从收到的路由信息中找到到达各AS的较好路由。