路由器用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可以通过路由器的路由功能来完成。
因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,并可用完全不同的数据分组和介质访问方法连接各种子网。
路由器只接受源站或其他路由器的信息,属于网络层的一种互联设备,它虽与各个子网使用的硬件设备无关,但要求其运行与网络层协议相一致的软件。
如图3-14所示。路由器一般由硬件和软件组成,其功能类似一台计算机。路由器硬件主要由中央处理器CPU、内存、接口、控制端口等物理硬件和电路组成;软件主要由路由器的IOS操作系统组成。路由器的CPU负责路由器的配置管理和数据包的转发工作,如维护路由器所需的各种表格以及路由运算等,路由器对数据包的处理速度在很大程度上取决于CPU的类型和性能。
图3-14路由器
所有路由器都有接口,每个接口都有自己的名字和编号。一个接口的全名称由它的类型标志与数字编号构成,编号从0开始。对于如Cisco 2500系列接口固定的路由器或如Cisco 4700系列采用模块化接口的路由器,在接口的全名称中,只采用一个数字,并根据它们在路由器的物理顺序进行编号,例如Ethernet0表示第1个以太网接口,Serial1表示第2个串口。
路由器是互联网的主要节点设备,通过路由决定数据的转发。转发策略称为路由选择,这也是路由器名称的由来。
路由器执行两个基本功能:路径选择和数据转发。
无论使用何种协议,包括IP、IPX和Appletalk等,路由器的目标就是将信息从一个地方转发到另一个地方。当接收到一个数据报时,路由器先查询它的路由表,以找到下一跳地址,之后通过相应接口向外进行转发。
路由选择协议运行在路由器上,提供将数据报从源地址转发到目的地址的路径选择策略。为了完成路由转发功能,路由器需要检查数据报的目的地址,确定目的网络号,查看路由表,并将分组转发到对应的出口。路由选择表即路由表,包含目的网络号、网络状态、下一跳地址等信息。
路由表的建立有静态手动配置和动态自动学习两种方式。
路由器建立静态路由有以下两种方式:
查看其活动接口和检查接口的配置地址,确定相应的网络号,根据该信息生成路由器的路由表,这种路由叫直连路由。
手动配置一个特殊的静态路由,也称为默认路由。如果在路由表中没有找到指定接收站的路径,则分组通过默认路由转发。默认路由的IP地址和子网掩码均为0.0.0.0,通常表示为0.0.0.0/0。默认路由常用于出口路由器,指向ISP。
动态路由协议包括RIP(Router Information Protocol)、OSPF(Open Shortest Path First)和BGP(Border Gateway Protocol)等,路由器可以从运行在相同路由选择协议的其他路由器中学习并建立路由。动态路由协议共享路由器已知的网络号和相关的可达性信息,通过这一过程,最终路由器将学习到网络中所有可到达的网络和子网号,并建立自己的路由表。
RIP(Router Information Protocol)属于距离向量路由协议,采用跳数衡量路由距离以决定最优路径,跳数指数据报从源地址到目的地址所经过的路由器数目。
RIP路由表中的每一项均包含目的地址、下一跳IP地址和距离。如果数据报目的地址与当前路由器端口的地址在同一网段内,则直接交付;否则,根据路由表所示的下一跳地址,把数据报转发给下一个路由器,由下一个路由器再进行数据报的转发。
RIP把跳数作为其度量值,若从源地址到目的地址之间存在两条链路,且链路上经过的路由器的数目相同,而带宽和速率不同,则RIP认为这两条链路具有同等优先级。RIP支持的最大跳数为15条,即从源地址到达目的地址所经过的路由器数目最多为15个,若超过15个则丢弃数据报,所以RIP协议只能应用于小型网络中。
如图3-15所示,数据报由路由器R1发送到路由器R5,其中路由器R1到达路由器R5有两条路径,一条经过路由器R2到达路由器R5,链路带宽为10Mbps;另一条经过路由器R3和路由器R4到达路由器R5,链路带宽均为100Mbps。第二条路径的带宽高于第一条路径的带宽,但RIP选择第一条路径作为其最优路径。
图3-15 RIP最优路径选择
RIP路由表的更新是通过路由器广播来交换路由信息的,默认情况下,路由器每隔30秒向其所有相邻路由器广播全部路由信息。每经过一台路由器,相应的路由条目的跳数将增加1。接收到路由更新的路由器,选择跳数最小的路由条目加入路由表中。通过这种方式,每个路由器都能够获取全网的路由信息。
路由器会把接收到的更新信息和自己路由表的信息进行对比,进而产生新的路由表。
对比路由信息采用的策略主要包括三个方面:
1)如果路由更新中的路由条目是新的,路由器则将新的路由连同通告路由器的地址(作为路由的下一跳地址)一起加入到自己的路由表中,这里通告路由器的地址可以从更新数据报的源地址字段中读取。
2)如果目的网络的RIP路由已经在路由表中,那么只有在新的路由拥有更小的跳数时,才能替换原来存在的路由条目。
3)如果目的网络的RIP路由已经在路由表中,但是路由更新通告的跳数大于或等于路由表中已记录的跳数,这时RIP路由器将判断这条更新是否来自于自已记录条目的下一跳路由器(也就是来自于同一个通告路由器)。若是来自同一个通告路由器,则路由器接受这个路由条目,更新自己的路由表,重置更新计时器;否则,这条路由将被忽略。
RIP广播更新周期由更新计数器控制,广播的信息是整个路由表。如图3-16所示为一个采用RIP作为路由选择的网络,每台路由器初始的路由表中只有自己的直连路由,用大写字母C表示,跳数均设为0。若路由器R1的更新计时器超时,则向外广播自己的路由表。路由器R1发出的路由更新信息中仅有直连网段的路由,即172.16.1.0/24和12.1.1.0/24,并把其跳数设为l。
图3-16某网络中的路由器
该路由更新信息经过链路传输到达路由器R2,由于R2没有与172.16.1.0网段直连,所以它会将此条路由加入路由表中,跳数仍然为1,用RIP的第一个大写字母R表示。若路由器R2的更新计数器超时,则它会向网络广播自己的路由表,这条路由广播信息不仅包含了R2的直连路由12.1.1.0和23.1.1.0,其跳数为1,也包含了从R1学到的新路由172.16.1.0,其跳数为2,如图3-17所示。
图3-17 RIP路由器发送路由更新
路由更新信息172.16.1.0、12.1.1.0和23.1.1.0在到达路由器R3后,由于它的路由表中不存在前两条路由,所以会先将它们加入到路由表中,跳数分别是2和1。路由器R1也会接收到此路由的更新信息,会将路由表和更新路由信息进行对比,路由器R1与172.16.1.0网段直连,它的跳数小于从R2传送的172.16.1.0的跳数,因此不会对原路由表172.16.1.0进行更改。23.1.1.0是路由表中没有的条目,需将网络23.1.1.0加入到路由表中,设置跳数为1。
若路由器R3的更新计时器超时,那么,它就将自己的路由表信息广播出去,如图3-18所示。路由器R2收到的路由更新消息中,到达网段23.1.1.0和192.168.1.0的跳数为1,到达网段12.1.1.0的跳数为2,而到达网段172.16.1.0的跳数则增加为3。
图3-18 RIP路由器C发送路由更新
路由器R2接着会将路由更新消息与路由表进行对比,若路由表中不存在192.168.1.0网段,则将此网段添加到路由表中。由于其他的路由条目已经存在,并且跳数都小于更新的跳数,所以忽略其他几个路由条目。若路由器R2的下一个更新计时器超时,则将新的路由表广播给路由器R1和R3。这时,路由器R3发现这个更新信息已存在其路由表中,则忽略这个更新信息;而路由器R1发现路由条目192.168.1.0不在路由表中,便会将网段192.168.1.0添加到路由表中,并设置跳数为2。
经过上述过程后,路由器R1、R2和R3的路由表信息同步完成,网络的所有路由已经更新成功,如图3-19所示。在此后的路由更新时间中,若拓扑结构没有被改变,则路由器R1、R2和R3以后每次更新发送的路由信息都将是完全相同的。
图3-19 更新后的路由表
上述实例中,假设网络拓扑结构中仅存在三个路由器,而每次路由更新条目并不是很多,但是在实际网络环境中,RIP网络自治系统中有可能会存在较多的路由器。如果每台路由器的更新时间均不相同,则网络链路就不会发生拥塞;若存在多个路由器的更新时间相同,此时当它们同时发送路由更新信息时,就将产生较大的数据流量,会导致普通数据流量的延时甚至数据包的丢失。为了防止出现这种情况,在路由器启动或复位时,更新时间会产生一个在25秒和35秒之间的随机秒数,这样可以让不同的路由器具有不同的更新时间,以减少数据突发流量的情况发生。
OSPF(Open Shortest Path First)是一种链路状态动态路由协议,不同于距离矢量协议(RIP),其路由收敛快,占用网络资源少,可以保证整个网络拓扑结构中没有路由环路,支持VLSM和CIDR,支持大型网络。
OSPF作为一种内部网关协议,在同一个自治区域(AS,Autonomous System)中的路由器之间更新路由信息。运行OSPF的每一台路由器都维护一个描述自治系统拓扑结构的统一的数据库,该数据库存储本自制系统中的每一个路由器的可用的接口信息和邻居信息等链路状态信息、路由器相连的网络状态信息和自治系统的外部路由状态信息等。
所有的路由器根据各自路由器的拓扑数据库,运行最短路径优先算法(SPF,Shortest Path First),构造出以它为根结点的最短路径树,该最短路径树的叶子节点是自治系统内部的其他路由器。
1)路由器ID
2)邻居
3)邻接
4)链路状态
5)链路开销
6)邻居表、拓扑表、路由表OSPF路由协议维护三张表:邻居表、拓扑表和路由表。
7)指定路由器(Designative router,DR)。
8)备份指定路由器BDR(Backup Designative router,BDR)。
9)区域。OSPF可用于大型网络环境,是由于其引入分层路由的概念,将整个网络拓扑分割成相互独立的部分。每一独立的部分被称为“区域”(Area)。
10)路由器的类型
根据路由器在区域中的位置不同,路由器可分为如下4种类型,如图3-20所示。
①内部路由器:所有端口在同一区域的路由器,维护一个链路状态数据库,如R4、R5、R6和R7都属于内部路由器。
②主干路由器:具有连接主干区域端口的路由器,如R3、R4、R5、R6、R7、R8和R9都属于主干路由器。
③区域边界路由器:具有连接多区域端口的路由器,一般作为一个区域的出口。区域边界路由器为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的区域边界路由器负责将这些信息发送到各个区域,如R3、R8和R9都属于边界路由器。
④自治域系统边界路由器:至少拥有一个连接外部自治域网络端口的路由器,负责将非OSPF网络信息传入OSPF网络,如R8就属于自治域系统边界路由器。
图3-20 路由器的类型示意图
11)OSPF数据报
OSPF包含如下5种类型的数据报。
①Hello数据报,与相邻的路由器建立邻居关系;
②链路状态描述包,发送路由器的链路状态数据库聚合数据报;
③链路状态请求包,请求链路状态数据库中某一条目的完整信息;
④链路状态更新包,给出链路状态数据库中某一条目的完整信息;
⑤链路状态确认包,收到一个链路状态更新包后的确认。
运行OSPF协议的路由器首先通过互相发送Hello数据报建立邻居关系,接着发送链路状态信息询问信息包和接受链路状态更新信息包。OSPF将链路状态更新信息包中的链路状态信息存放在本地链路状态数据库中。经过一段时间的路由器间数据报交互,全网每个路由器的链路状态数据库信息相一致,每一个OSPF路由器以自己为根结点,用单源最短路径算法构造出到其他结点的最短路径树SPF,从而构造出自己的路由表。
OSPF的具体工作流程步骤如下:
第l步:建立路由器的邻居关系。
第2步:进行必要的DR/BDR选举。
第3步:同步链路状态数据库。
第4步:产生路由表。
第5步:维护路由信息。
以点到点的网络为例,如图3-21和图3-22所示。由于路由器R1和路由器R2通过交换Hello分组选择路由器R1为主路由器,路由器R2为从路由器。路由器R1发送链路状态描述包。路由器R2收到链路状态描述包后,向路由器R1发送链路状态确认包,并检查自己的链路状态数据库。如果发现链路状态数据库里没有某些项,则添加它们并将这些项加到链路状态请求列表中,并向路由器R2发送链路状态请求包。当路由器R1收到链路状态请求包时,发出链路状态更新包,进行链路状态的更新。路由器R2收到链路状态更新包后发出确认包,确认并表示收到该更新包,否则路由器A就在重发定时器的启动下进行重复发送。之后,路由器R2和路由器R1与之前的行为正好相反,最终路由器R2也学到了路由器R1的链路状态数据库信息。
当所有的数据库请求包都已被路由器R1处理后,路由器R1和路由器R2也就进入了邻接完成状态。
图3-21链路状态数据库同步过程一 |
图3-22链路状态数据库同步过程二 |
同理,在多路访问网络中,当指定路由器与整个区域内所有的路由器都完成邻接关系后,整个区域中所有路由器的数据库也就同步了,进入了邻接完成状态。
BGP边界网关协议(Border Gateway Protocol),是用来连接Internet上独立系统的路由选择协议。BGP是一种外部路由协议,目前正在使用的BGP协议版本号为4,即BGP4。BGP4支持CIDR寻址方案,该方案增加了Internet上的可用IP地址数量。BGP是为取代最初的外部网关协议EGP设计的,它也被认为是一个路径矢量协议。不同于RIP路由协议和OSPF路由协议,BGP边界网关协议用于不同自治系统间的可达性信息交换。
可达性信息是到达某个网络要经过的自治系统序列,BGP路由器通过可达性信息交换,生成关于各个自治系统连通性的结构图。当两个自治系统需要交换可达性信息时,每个自治系统都必须在系统中指定一个路由器运行BGP,这两个运行BGP的路由器称为对等端或BGP发言人。两个对等端在建立BGP会话后,可达性信息交换就可以开始进行了。BGP支持基于策略的路由选择, BGP协议寻找的路由不一定是到达目的网络的最优路由。
BGP协议具有如下特点:
1)BGP协议是一种外部路由协议,属于距离矢量协议。
2)BGP报文采用AS路径作为关键属性,并解决了路由循环问题。
3)BGP协议使用TCP协议传输报文,可靠性较高。
4)BGP在更新路由时,只更新发生变化的路由表项,降低了网络的带宽开销,适合在Internet上大规模传播路由信息。
如图3-23所示,BGP报文由首部和报文主体组成。其中,首部包含标记、长度和类型3个字段,长度依次为16个字节、2个字节和1个字节。
图3-23 BGP报文格式
1)标记字段:用于标记BGP报文的开始。
2)长度字段:用于表示BGP报文的长度,单位为字节。在BGP协议中,允许的最短报文长度为19字节,即报文主体为空;允许的最长报文长度为4096字节。
3)类型字段:取值范围在1~4,对应BGP报文的类型。
BGP报文可分为4种类型:
1)打开报文。
BGP协议使用TCP协议传输报文,在TCP连接建立后,发送打开报文,建立两个对等端之间的BGP会话连接。
2)更新报文。
在对等端路由器之间,使用更新报文发布新路由或撤销已发布的路由。发布新路由的信息和撤销路由的信息可存在于同一条更新报文中,但是一次只允许发布一条新路由信息,撤销路由的信息则可发布多条。更新报文由待撤销的不可达路由信息、路径属性和网络层可达性信息(NLRI,Network Layer Reachability Information)组成。
3)保持激活报文。
在对等端路由器建立会话连接时,使用保持激活报文作为打开报文的应答。在连接建立后,使用保持激活报文来维持连接。
4)通知报文。
在检测到网络故障后,BGP路由器向所连接的对等端路由器发送通知报文,告知所检测到的差错,并关闭相应BGP会话连接。
如图所示,BGP路由器具有IBGP(Internal BGP)和EBGP(External BGP)两种工作模式。当BGP路由器运行在同一自治系统内部时,称为IBGP工作模式;当BGP路由器运行在不同的自治系统中时,称为EBGP工作模式。
图3-24 IBGP和EBGP
1)BGP边界路由器初始化。
BGP使用TCP协议传输报文,在两个路由器开始BGP会话前,必须首先建立TCP连接。其次,由一个路由器发送打开报文,确定此次会话所使用的BGP协议版本号、所在自治系统的AS号和BGP标识等信息。若另一个路由器同意进行BGP会话,则回应一条保持激活报文,BGP会话连接建立。为保持会话连接,通常要求周期性地发送保持激活报文。BGP会话的第一步为交换BGP路由表,BGP路由表项的格式为:
(目的网络IP地址前缀,下一跳路由器,到达目的网络所经过的AS序列)
2)路由更新。
BGP路由表交换完成后,路由器仅在路由条目变化或失效时,才通过更新报文进行路由更新操作。在更新过程中,不再交换整个路由表,而只是更新发生变化的路由表项,这有利于降低网络的带宽开销和路由器的处理开销。
更新报文中的路径属性是一组记录了BGP路由信息的参数,用于路由的选择和过滤。目前,在BGP协议中共定义了16种路径属性,其中,AS路径为关键属性,其保存了从源AS到目的AS所经过的AS序列。BGP路由器在发布路由时,会在AS路径中附加自己所在的AS号。
如图3-25所示,网络10.1.0.0/17和10.1.128.0/17同属于AS4,从AS2可直接到达AS4, AS2中的BGP路由器可能向AS1中的对等端路由器发送目的网络为10.1.0.0/17,AS路径为的更新报文。在AS1中的BGP路由器更新路由后,又可能发送目的网络为10.1.0.0/17,AS路径为
然而,BGP路由器也可能重复、循环地更新路由,产生目的网络为10.1.0.0/17,AS路径为
图3-25 BGP路由更新