跟我学TCP/IP系列6

    终于又到了TCP/IP时刻了,今天将和大家一起分享一下网络基础中常见的路由控制协议,首先将会给大家介绍一下路由控制表的基础知识以及常用的两种路由控制算法,然后再给大家介绍了RIP,OSPF,BGP,MPLS等几种常见的路由协议。好了,老司机要准备开车了。

1路由控制

定义与分类

    什么是路由控制?

    我们都知道,互联网是由路由器连接的网络组合而成的,前面的文章说过,路由器是工作在网络层的。在网络中为了能让数据包正确地到达目标主机,就必须通过路由器在途中进行正确地转发。这种转发数据所进行的处理就叫做路由控制或者路由。

    路由器根据路由控制表转发数据包,它根据所受到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。

因此这个过程中路由控制表的记录一定要正确无误。但凡出现错误,数据包就有可能无法到达目标主机。

    路由控制分为静态和动态路由:静态路由是指事先设置好路由器和主机并将路由信息固定的一种方法;而动态路由是指让路由协议在运行过程中自动设置路由控制信息的。

    静态路由的设置通常是由使用者手工操作完成的。假如有N个IP网的时候,就需要设置近N个路由信息。并且每增加一个新的网络,就需要将这个新被追加的网络信息设置在所有的路由器上。因此,静态路由给管理者带来很大的负担,其次,一旦某一个路由器发生故障,基本无法自动绕过发生故障的节点,只有在管理员手工设置后才能恢复正常。

跟我学TCP/IP系列6_第1张图片

静态路由

    使用动态路由时,管理员必须设置好路由协议,其设定过程的复杂程度与具体要求设置路由协议的类型有直接关系。若有一个新的网络被追加到原有的网络中时,只要在新增加网络的路由器上进行一个动态路由的设置即可。而不用像静态路由那样还必须在其他所有的路由器上进行修改。不仅如此,假若网络上一旦发生故障,只要有一个可绕的其他路径,那么数据包就会自动选择这个路径,路由器的设置也会自动重置。

跟我学TCP/IP系列6_第2张图片    动态路由


动态路由的基础

    如下图所示,动态路由时会给相邻的路由器发送自己已知的网络连接信息,而这些信息又将依次传递给其他路由器,直到整个网络的各个路由器都拥有这个网络的网络联系信息,此时路由控制表也就制作完成了。此时也就可以将IP数据包正确转发到目的主机了。

跟我学TCP/IP系列6_第3张图片根据路由协议交换路由信息


2路由控制范围

    随着IP网络的发展,相对所有的网络统一管理变得越来越不可能,因此人们根据路由控制的范围常使用IGP(interior Gateway protocol)和EGP(Exterior Gateway Protocol)两种类型的路由协议,其实联系我们前面说过的,IGP和EGP就跟我们所学的IP的网络地址和主机地址是类似的。稍后给大家带来IGP和EGP的分析。

IGP和EGP

    在讲IGP和EGP之前,先来谈谈什么是自治系统?顾名思义,自治系统是指自己制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫做自治系统(AS,Autonmouns System),也叫做路由选择域(Routing Domain)。

    自治系统内部动态路由采用的协议是域内路由协议,即IGP;自治系统之间的路由控制采用的是域间路由协议,即EGP.

    前面我们说过,路由协议大致分为外部网关协议EGP和内部网关协议IGP。从IP地址中我们可以得到一些启示,根据IP地址中网络部分在网络之间进行路由选择、根据主机部分在链路内部进行主机识别一样,可以根据EGP在区域网络之间进行路由选择,也可以根据IGP在区域网络内部进行主机识别。

跟我学TCP/IP系列6_第4张图片

EGP和IGP

    由此,路由协议分为EGP和IGP两个层次,没有EGP就不可能有世界上各个组织机构之间的通信,没有IGP机构内部也就不可能进行通信。IGP中还可以使用RIP(Routing Information Protocol,路由信息协议)、RIP2/OSPF(Open Shortest Path First,开放式最短路径优先)等众多协议。与之相对,EGP使用的是BGP(Border Gateway Protocol,边界网关协议)。


3路由算法

    路由算法有很多,但是在大致简述一下最具有代表性的距离向量(Distance-Vector)算法和链路状态(Link-Satte)算法这两种路由算法的实现原理,具体的实现过程有兴趣的读者可以去查询相关的资料进行学习。

距离向量算法

    距离向量算法(DV)是指根据距离和方向决定目标网络或者主机位置的一种方法。

跟我学TCP/IP系列6_第5张图片

距离向量

    路由器之间可以互换目标网络的方向及其距离相关的信息,并以这些信息为基础制作路由控制表。这种方法在处理上极为简单。但是太过于简单未必是件好事,由于只有距离和方向的信息,所有网络构造变得格外复杂,在获得稳定的路由信息之前需要消耗一定的时间,也极易造成路由循环等问题。与此同时,由于每个路由器掌握的信息都不一样,通往每个网络所消耗的代价也根据路由器的不同而不同,因此这个算法的一个显著的缺点就是不太容易判断每个路由器上的信息是否正确。


链路状态算法

    链路状态算法是路由器在连接网络整体连接状态的基础上生成路由控制表的一种方法。在该方法中,每个路由器必须保持同样的信息才能进行正确的路由选择。而链路状态算法中所有路由器持有相同的信息,对于任何一台路由器,网络拓扑完全一样,因此只要某一台路由器与其他路由器保持同样的路由控制信息,就意味着该路由器上的路由信息是正确的,只要每个路由器尽快地与其他路由器同步路由信息,就可以使路由信息达到一个稳定的状态。因此,即使网络结构变得复杂每个路由器也能够保持正确的路由信息、进行稳定的路由选择。

    为了实现上述的机制,链路状态算法也需要付出不小的代价从网络代理中获取路由信息表,这个过程及其复杂,当处在一个规模巨大而又复杂的网络结构中时,管理和处理信息需要高速CPU处理能力以及大量的内存。

跟我学TCP/IP系列6_第6张图片

链路状态


主要路由协议

    路由协议分很多种,图中给出了主要的几种协议,由于EGP不支持CIDR,现在已经不再用作互联网的对外连接协议了。

跟我学TCP/IP系列6_第7张图片

路由协议

接下来会分析RIP,RIP2,OSPF,BGP等几种协议的基础知识


4RIP

    前面说过RIP(Routing Information Protocol)路由消息协议是距离向量型的一种协议,广泛用于LAN。

广播路由控制信息

    RIP将路由控制信息定期(30S一次)向全网广播,如果没有收到路由控制信息,连接就会被断开。不过这有可能是丢包导致的,因此RIP规定等等5次。如果等了6次仍未收到路由消息,才会真正关闭连接。

跟我学TCP/IP系列6_第8张图片

RIP概要

  • 根据距离向量确定路由

    RIP基于距离向量算法决定路径。距离的单位为跳数。跳数是指所经过的路由器的个数。RIP希望尽可能少通过路由控制器将数据包转发到目标IP地址。如下图所示,根据距离向量生成距离向量表,再抽出较小的路由生成最终的路由控制表。如果距离相等,那么根据路由器的类型选择路由也会不同,通常是随机选择一个或是轮换使用。

跟我学TCP/IP系列6_第9张图片


根据距离向量生成路由控制表

  • 使用子网掩码时的RIP处理

    RIP虽然不交换子网掩码信息,但可以用于使用子网掩码的网络环境。但需要注意几点:从接口的IP地址对应分类得出网络地址后,与根据路由控制信息流过此路由器的包中IP地址对应的分类得出的网络地址进行比较。如果两者的网络地址相同,那么就以接口的网络地址长度为准;如果两者的网络地址不同,那么以IP地址的分类所确定的网络地址长度为准。

跟我学TCP/IP系列6_第10张图片

RIP与子网掩码

    例如,路由器的接口地址为192.168.1.33/27。因此按照IP地址分类它的网络地址为192.168.1.33/24。与192.168.1.33/24相符合的IP地址,其网络地址长度都被视为27位。除此之外的地址,则采用每个地址的分类所确定的网络地址长度。因此,采用RIP进行路由控制的范围内必须注意两点:一是,因IP地址的分类而产生不同的网络地址时。二是,构造网络地址的长度不同的网络环境时。

  • RIP中路由变更时的处理

    RIP的基本行为可归纳为:将自己所知道的路由信息定期进行广播。一旦认为网络被断开,数据将无法流过此路由器,其他路由器也就可以得知网络已经断开。

跟我学TCP/IP系列6_第11张图片

跟我学TCP/IP系列6_第12张图片

无限计数问题

路由器A将网络A的连接信息发送给路由器B,路由器B又将自己掌握的路由信息在原来的基础上加1跳后发送给路由器A和路由器C。假定这时与网络A发生了故障。路由器A虽然觉察到自己与网络A的连接已经断开,无法将网络A的信息发给路由器B,但是它会收到路由器B曾经获知的消息。使得路由器A误认为自己的信息还可以通过路由器B送达网络A。

    像这样收到自己发出去的消息,这个问题被称为无限计数,为解决这个问题可采用以下两种方法:一是最长距离不超过16,由此即使发生无限计数的问题,也可以从时间上进行控制。二是规定路由器不再把所收到的路有消息原路返还给发送端,这也被称为水平分割。

跟我学TCP/IP系列6_第13张图片

水平分割

    然而,上述的方法在网络本身有环路测情况下仍然会出现问题,反向的回路会成为迂回的通道,路由信息会不断地被循环往复地转发。当环路内部某一处发生通信故障时,通常可以说设置一个正确的迂回通道。对于下图来说,当网络A的通信发生故障时,将无法传送正确的路由信息,尤其是在环路有多余的情况下,需要很长时间才能产生正确的路由信息。因此出于上述原因。人们提出了毒性逆转和触发更新两种方法。

跟我学TCP/IP系列6_第14张图片

毒性逆转和触发更新

    毒性逆转是指当网络中发生链路被断开的时候,不是不再发送这个消息,而是将这个无法通信的消息传播出去。即发送一个距离为16的消息。触发更新是指路由信息发生变化时,不等待30秒而是立刻发送出去的一种方法。有了这两种方法,在链路不通时,可以迅速传送消息以使路由信息尽快收敛。

跟我学TCP/IP系列6_第15张图片

带有环路的网络


RIP2

    顾名思义RIP2即是RIP第二版,它是在RIP使用过程中总结了经验的基础上进行改良后的一种协议。在保持与第一版相同工作机制的前提下,增加了不少特点:

  • 使用多播:RIP中当路由器之间交换路由信息时采用广播的形式,然而在RIP2中改用了多播,这样不仅减少了网络流量,还缩小了对主机的影响。

  • 支持子网掩码:与OSPF类似的,RIP2支持在其交换的路由器信息中加入子网掩码信息。

  • 路由选择域:与OSPF的区域类似,在同一个网络中可以使用逻辑上独立的多个RIP。

  • 外部路由标志:通常用于把从BGP等获得的路由控制信息通过RIP传递给AS内。

  • 身份验证密钥:与OSPF一样,RIP包中携带密码。只有在自己能够识别这个密码时才接收数据,否则忽略这个RIP包。


5OSPF

    OSPF(Open Shortest Path First)是根据OSI的IS-IS协议而提出的一种链路状态型路由协议。由于采用链路状态类型,即使网络中有环路,也能够进行稳定的路由控制。另外,OSPF支持子网掩码,由此曾经在RIP中无法实现的可变长度子网构造的网络路由控制成为现实。不仅如此,OSPF为减少网络流量,还引入了区域这一概念。区域是将一个自治网络划分为若干更小的范围。由此可以减少路由协议之间不必要的交换。OSPF可以针对IP首部中的区分服务(TOS)字段,生成多个路由控制表,不过也会出现已经实现了OSPF功能的路由器无法支持这个TOS的情况。

OSPF是链路状态型路由协议

    OSPF为链路状态型路由,路由器之间交换链路状态生成网络拓扑信息,然后根据这个拓扑信息生成路由控制表。

跟我学TCP/IP系列6_第16张图片

跟我学TCP/IP系列6_第17张图片

由链路状态确定路由

    RIP的路由选择,要求途中所经过的路由器个数越少越好。与此相比,OSPF可以给每条链路赋予一个权重,并始终选择一个权重最小的路径作为最终路由。也就是OSPF以每个链路上的代价为度量标准,始终选择一个总的代价最小的路径。

跟我学TCP/IP系列6_第18张图片

网络权重与路由选择


OSPF基础知识

    在OSPF中,把连接到同一个链路的路由器称作相邻路由器。在一个相对简单的网络结构中,例如每个路由器仅跟一个路由器相互连接时,相邻路由器之间可以交换路由信息。但是在一个比较复杂的网络中,例如在同一个链路中加入了以太网或者FDDI等路由器时,就不需要在所有相邻的路由器之间都进行控制信息的交换,而是确定一个指定路由器并以它为中心交换信息即可。

    RIP中包的类型只有一种,它利用路由控制信息,一边确认是否连接网络,一边传送网络信息。但是这种方式存在一定的缺陷,在网络的个数越多,每次所要交换的路由控制信息就越大。而且当网络已经处于比较稳定的、没什么变化的状态时,还是要定期交换相同的路由控制信息,这也会造成网络带宽的浪费。在OSPF中,根据作用的不同可以分为5种类型的包:

跟我学TCP/IP系列6_第19张图片

OSPF包类型

    OSPF首先通过发送问候包确认是否连接,每个路由器为了同步路由控制信息,利用数据库描述包相互发送路由摘要信息和版本信息。如果版本比较老,则首先发出一个链路状态请求包请求控制信息,然后又链路状态更新包接收路由状态信息,最后再通过链路状态确认包通知大家本地已经接收到路由控制信息。


OSPF工作原理

    OSPF中进行连接确认的协议叫做HELLO协议。

跟我学TCP/IP系列6_第20张图片

OSPF中根据链路状态生成路由控制表

    LAN中每10秒发送一个问候包,如果没有问候包到达,则进行连接是否断开的判断。具体为,允许空等三次,知道第四次仍无任何反馈就认为连接已经断开。之后在进行连接断开或者恢复连接操作时,由于链路状态发生了变化,路由器会发送一个链路状态更新包通知其他路由器信息状态的变化。

    链路状态更新包所要传达的信息大致分为两类:一类是网络LSA,另一个是路由器LSA。网络LSA是以网络为中心生成的信息,表示这个网络都与哪些路由器相连。而路由器LSA是以路由器为中心生成的信息,表示这个路由器与哪些网络相连接。

层次化

    链路状态型路由协议的潜在问题在于,当网络规模越来越大时,表述链路状态的拓扑数据库就变得越来越大,路由控制信息的计算也变得越来越困难。OSPF为减少计算负荷,引入了区域的概念。

    区域是指将连接在一起的网络和主机划分为小组,使一个自治系统内可以拥有多个区域。不过具有多个区域的自治系统必须要有一个主干区域,并且所有其他区域必须都与这个主干区域相连。连接区域与主干区域的路由器称作区域边界路由器;而区域内部的路由器叫做内部路由器;只与主干区域内连接的路由器叫做主干路由器;与外部相连接的路由器就是AS边界路由器。

跟我学TCP/IP系列6_第21张图片

AS与区域

    每个区域内的路由器都持有本区网络拓扑的数据库。然而,关于区域之外的路径信息,只能从区域路由器那里获知它们的距离。区域边界路由器也不会将区域内的链路状态信息全部原样发送给其他区域。只会发送自己到达这些路由器的距离信息,内部路由器所持有的网络拓扑数据库就会明显变小。

跟我学TCP/IP系列6_第22张图片

OSPF路由器分类

    也就是说,内部路由器只了解区域内部的链路状态信息,并在该信息的基础上计算出路由控制表。这样不仅有效减少了路由控制信息,还能减轻处理的负担。

跟我学TCP/IP系列6_第23张图片

区域内和区域之间的路由控制

    除此之外,作为区域出口的区域边界路由器若只有一个的话叫做末端区域(上图中的区域2)。末端区域内不需要发送区域外的路由信息。它的区域边界路由器将成为默认路径传送路由信息即可。由于不需要了解到其他各个网络的距离,所以它可以减少一定的路由信息。


6BGP

    BGP(Border Gateway Protocol),边界网关协议是连接不同的组织机构(或者说是连接不同的自治系统)的一种协议。因此它属于外部网关协议EGP。它主要用于ISP之间的连接部分,只有BGP、RIP和OSPF共同进行路由控制才能够进行整个互联网的路由控制。

BGP与AS号

    在RIP和OSPF中利用IP的网络地址部分进行着路由控制,然而BGP则需要放眼整个互联网进行路由控制。BGP的最终路由控制表由网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。

跟我学TCP/IP系列6_第24张图片

BGP与AS号

    ISP、区域网络等会将每个网络域编配成一个个自治系统进行管理。他们为每个自治分配一个16比特的AS编号。BGP就是根据这个编号进行路由控制。

BGP是路径向量协议

    根据BGP交换路由控制信息的路由器叫做BGP扬声器。BGP扬声器为了在AS之间交换BGP信息,必须与所有的AS建立对等的BGP连接。

    BGP中数据包到达目标网络时,会生成一个中途经过所有AS的编号列表。这个表格也叫做AS路径信息访问列表(AS Path List)。如果针对同一个目标地址出现多条路径时,BGP会从AS路径信息访问列表中选择一个较短的路由。

    在做路由选择时使用的度量,RIP中表示路由器的个数,而OSPF中则表示为每个子网的成本,而BGP则用AS进行度量标准。RIP和OSPF本着提高转发效率为目的,考虑到网络跳数和网络的带宽,BGP则基于AS之间的合约进行数据包的转发,BGP一般选择AS数最少的路径,不过仍然需要遵循各个AS之间签约的细节进行更细粒度的路由选择。

    在AS路径信息访问列表中不仅包含转发方向和距离,还涵盖了途径所有AS的编号,因此他不是一个距离向量型协议。对网络构造仅用一元化表示,因此也不属于链路状态型协议。像BGP这种根据所要经过的路由信息访问列表进行路由控制的协议属于路径向量型协议。路由向量型网络避免了无限计数的问题,所以令网络更容易进入一个稳定的状态,同时还支持策略路由的优势。

跟我学TCP/IP系列6_第25张图片

生成路由控制表时需要到AS路径信息访问列表


7MPLS

    路由技术基于IP地址中最长匹配原则进行转发,而标记交换则对每个IP包都设定一个叫做’标记‘的值,然后根据这个标记再进行转发。标记交换技术中最具有代表性的当属多协议标记交换技术,即MPLS(Multi Protocol Label Switching)。

MPLS的网络基本动作

先来看看MPLS网络的基本架构:

跟我学TCP/IP系列6_第26张图片

MPLS网络 

   

说完MPLS网络,那MPLS网络与IP的基本转发行为有什么异同呢?

跟我学TCP/IP系列6_第27张图片

MPLS与IP网络转发的基本行为对比

    MPLS的标记不像MAC地址直接对应到硬件设备。因此,MPLS不需要具备以太网或者ATM等数据链路层协议的作用,而只需要关注它与下面一层IP层之间的功能和协议即可。

    MPLS中实现MPLS功能的路由器叫做标记路由器(LSR,Label Switching Router)。特别是与外部网络连接的那部分LSR叫做标记边缘路由器(LER,Laber Edge Rounter)。MPLS正是在LER上对数据包进行追加标记和删除标记的操作。

    在一个数据包上附上标记是一个及其简单的动作,如果数据链路本来就有有个相当于标记的信息,那么可以直接进行映射。如果数据链路中没有携带任何相当于标记的信息,就需要追加一个全新的垫片头(Shim Header)。这个垫片头中就包含标记信息。

跟我学TCP/IP系列6_第28张图片


    MPLS中目标地址与数据包都要通过由标记决定的同一个路径,这个路径叫做标记交换路径(LSP,Label Switch Path)。LSP又可以划分为一对一连接的点对点LSP和一对多绑定的合并LSP两类。

    拓展LSP有两种方式,可以通过各个LSR向自己相邻的LSR中分配MPLS标记,也可以由路由协议载着标记信息进行交互。LSP属于单方向的通路,如果需要双向的通信则需要两个LSP。


MPLS的优点

MPLS的优势大概有以下两点:

  • 一是转发速度快:通常路由转发IP数据包时,首先要对目标地址和路由控制表中可变长的网络地址进行比较,然后从中选择最长匹配的路径才进行转发,而MPLS则使用固定长度的标记信息,使处理更加简单,可以通过高速的硬件实现转发。此外,相比于互联网中主干路由器需要保存大量路由表才能进行处理的现状,MPLS只需要设置必要的几处信息即可,所要处理的数据量也大幅减少。而且除了IPv4,IPv6之外,对于其他协议MPLS仍可以实现高速转发。

  • 二是在于利用标记生成虚拟的路径,并在它的上面实现IP数据包的通信,这样IP网也可以提供基于MPLS的通信质量控制,带宽保证和VPN等功能。


    以上就是路由协议的相关知识了,小伙伴们有不明白的地方都可以在下面留言,下一期将会更新应用协议和网络安全相关知识,敬请期待



你可能感兴趣的:(Android)