博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
路由器开发(二)—— 路由器工作原理
阅读量:5255 次
发布时间:2019-06-14

本文共 5268 字,大约阅读时间需要 17 分钟。

当信息需要在两个网络之间传输时,常用路由器这种互连设备来负责数据的传输。路由器的主要工作是:路径的决定和数据包的转发(从路由器一个接口输入,然后选择合适接口输出);维护路由表。

      路由器工作的方式非常简洁明了,从接收报文中抽取目的地址,并确定地址中的网络号,查找路由选择表以获得与目标网络相匹配的表项。在路由选择表中的匹配表项中包括下一站、目的地、输出接口和其它与路由有关的参数。报文被封装在适合输出接口的帧中,并由输出接口输出。

     下面具体分析路由器两种工作的工作原理。

一、路由的概念

    路由是将对象从一个地方转发到另一个地方的中继过程。学习和维持网络拓扑结构知识的机制被认为是路由功能。渡越数据流经路由器的进入接口穿过路由器被转移到外出接口的过程称为交换/转发功能。因此,路由设备必须同时具有路由和交换的功能才可以作为一台有效的中继设备。

完成路由功能的几个基本步骤:

1. 路由器必须确定它是否已激活了对某协议组的支持。路由设备在做转发决定时,必须知道逻辑目的地地址。要想知道该目的地地址,就必须启动该逻辑编址方案的协议组,并使其处于当前活跃状态。常用协议组有:TCP/IP、IPX、DECnet。

2. 当路由器能理解该编址方案后,就要判断目的地逻辑网络在其当前路由表中是否有效存在。若目的逻辑网络不存在路由表中,则路由器可能被编程为丢弃这个数据包,并且生成一个出错信息通告发送方。当然若设置了缺省路由,则当目的地逻辑网络没有被包含在设备路由表中时,将缺省路由转发数据包。

3. 若目的地网络存在于路由表中,则路由器必须判断哪个外出接口是到达目的地的最佳路径。此最佳路径将通过路由选择协议进程与某个外出接口相关联,路由选择协议通过度量值来决定到达目的地的最佳路径。

4. 当知道外出接口后,路由器必须使用某种封装方法将数据包进行封装,转发到下一跳逻辑设备

 

    通过路由功能了解到一个指向目的地逻辑网络的路由表条目时,就执行交换操作。交换操作的4个基本步骤:(如图8示)

1、若数据包所在帧的帧头中含有路由器某个接口的第2层地址,或者广播型地址,或者多目组播地址,且该路由器被配置成接收该组播地址的话,则经过路由器的这个数据包将被接收进路由器。当检查该帧时,如果寻址正确,那么帧的内容(数据包)被缓存起来,等待进一步处理。

2、路由器检查数据包头中的目的地逻辑网络部分,将其与路由表中的网络和子网络条目进行比较。若在路由表中有与之相匹配的条目,那么目的地网络就会被与下一跳逻辑设备和路由器的一个外出接口关联起来。

3、知道了下一跳设备的逻辑地址之后,还需要查找出下一跳设备的物理地址;对于局域网接口来说,该查找是在地址解析协议(ARP)表中进行的;而对于广域网接口来说,该查找是在一个第三层与第二层地址的映射表中进行的。

4、在知道了下一跳设备的物理地址后,将在路由器的内存中生成适当的帧头。(对于IP数据包来说,路由器还需要修改IP包头:将生存时间【TTL】域的值减1、更新IP包头校验和)在生成帧头之后,数据帧就被转移到外出接口,以在物理介质上进行传输。当将数据帧放到介质上时,外出接口将在帧上添加循环冗余校验字符和帧结束定界符。这些字符将在下一跳路由设备的接收接口上被校验。

 

 

 

                                            图8路由器执行基本的交换功能

二、路由选择过程

    路由器在诸多路由协议、手工配置和路由策略下,是如何选择最佳路由的?理解这个问题,对于掌握路由器的工作原理大有裨益。

 路由选择牵涉到三个方面:

 1、各种路由协议的处理,包括rip,igrpeigrp,ospf,is-is,bgp等,每个协议都通过IP数据包在路由器间传递网络的路由信息,为路由表的建立提供信息。

 2、路由表,它从路由协议那里接受信息,并为转发数据包提供所需要的信息。

 3、转发过程,它从路由表那里请求所需要信息,为正确转发数据包做出决策。

    数据包的转发决定依赖于三部分的进程:路由协议、路由表、实际的转发交换,这三者的关系图示9:

 

 

              图9 路由协议、路由表和实际转发交换三者关系

 

      路由器从一个报文的网络头中获取目的地址,然后通过与子网掩码进行“与”操作(两个数均为1,则结果为1;其中任何一个数为0,则结果为0)确定网络号。当确定网络号后,就可以通过在路由表中寻找匹配的网络号找出那个能将报文转发到目的地的最好的接口。在大多数情况下,报文到达目的地之前需要经过多个路由器。

     我们分析一个报文在小型网络中传输的例子。在这个例子中,报文来自Tokyo,要发往IP地址为192.168.3.3的NMS工作站。(如图10)

                                        图10远程目的地的路由选择

 

第一步:报文被NY路由器接收,确定它的目的网络号。

第二步:通过查找NY路由器的路由表,找到输出接口名和下一站地址。由于我们采用了串行链路,所以不需要使用ARP。

第三步:报文被发给下一站路由器(London)。

 

当报文到达最后一个路由器,一个本地的发送过程被用来将报文转发到最终目的地。以太网本地发送过程采用ARP。(如图11示)

第一步:路由器London接收目的地址为NMS工作站的报文;

第二步:路由器London查找其路由表,发现目的主机在一个与它的接口直接相连的网络上,因此它将进行一个本地发送;

第三步:路由器London发送一个ARP请求,通过ARP应答包(第四步)中了解到目的主机的MAC地址,则直接将报文发送至目的主机(第五步)。

 

                                          图11本地目的地的路由选择

 

三、路由表的构成、建立与维护

       路由器在创建路由表时并不关心单个的节点地址,它们只关心某组包应往哪个网段上传输。路由表包含了包到达目的地所要经由的路径(硬件接口)。每个路由器接口都和一特定网段相对应。当路由器检查到包的逻辑地址时,它就可以决定包应该转发到哪个子网上去。

1、 路由表的构成

     路由表分为静态路由表和动态路由表,静态路由入口由网络管理员手工配置的静态路由组成,动态路由入口由路由协议如RIP、OSPF、BGP等交换的路由表信息组成。执行路由操作所需要的信息被包含在路由器的路由表中,它们由一个或多个路由选择协议进程生成。路由表的内容被限制为只含有到所有目的地的最佳路由。如果存在多条等佳路径,那么所有这些路径都将被列入路由表。

    理解路由表的各项的功能对了解路由器的路由过程非常重要。一般路由表有以下七项(如图12):

                                                            图12  路由表

 

a -- 路由信息的来源(origin)

      也就是路由机制,表示该路由信息是怎样学习到的。学习方法主要有三种:直连的网络、静态路由、某种动态路由协议。

b -- 目的网络地址(destination)

      也就是目的地逻辑网络或子网络地址。每个路由表入口的两个核心元素就是目的网络地址和将数据包转发出去的本地接口。有时候一个路由条目只列出目的网络和下一跳地址而没有本地接口。没有本地接口是无法将数据包转发出去的,因为交换网板不知道该接通哪个“开关”。这种情况下,必须执行第二次循环查找,用下一跳地址作为目的地址去路由表中查找到一个匹配条目,找到一个本地接口。       

c -- 管理距离(administrative distance)

      标识一种路由学习机制可信赖程度的一个尺度。管理距离决定了来自不同路由表源端的路由信息的优先权。不同的路由来源,其管理距离是不同的。管理距离小的路由协议优先权高。缺省情况下,直连路由优先权最高,静态路由次之,BGP优先于OSPF,OSPF优先于RIP。

d -- 度量值(metric)

度量一条路径总“开销”的尺度,由具体路由选择协议而定义。当一个路由协议提供了多条到达某目的网络的路由时,必须选择一条最佳的路由放在路由表中。度量值用于表示每条可能路由的代价,度量值最小的路由就是最佳路由。

e -- 下一跳网关地址(next hop)

为使IP包到达目的地,需要将该IP包转发到该网关上。路由器不知道到达目的地址的整个路径,只将数据传给下一个路由器,通过“接力”的形式将数据传送到目的网路。下一跳地址就是与之相连的路由器的端口地址。

f -- 计时(age)

也就是路由信息的新旧程度,表示路由条目存在的时间。距离向量协议定时更新该计时,所以该时间值不会超过某个时间值,超出后就进入“保持”状态,一定时间内仍未更新路由条目就被删除。其它路由协议(如OSPF、BGP)对此时间不作处理。

g -- 发送的物理端口(local interface)

也就是与要去往目的地网络相关联的接口。学习到该路由条目的接口,也是数据包离开路由器去往目的地将经过的接口。交换结构单元就是根据该值来选择恰当的“开关”使入口与出口之间建立通道。

 

2 、路由表的建立

    一般而言,在同一个路由域中所有路由器的每个路由协议都有一个“收敛”(convergence)状态或过程。当所有路由器达到一个稳定、准确、一致的网络拓扑状态时,就会获得“收敛”状态。网络拓扑的变化会使路由器重新进行“收敛”。路由器如何获得收敛状态是由它的具体配置和路由协议所决定的。

    每个路由协议处理路由更新时,选择到目的地址的最佳路由,并试图安装到路由表中。如果只有多个动态路由协议运行,存在争先安装路由的问题。必须有机制来管理路由的安装。该机制就是根据各个路由协议的优先级来决定安装过程。每个路由协议都有缺省的管理距离值,值愈小其优先级愈高。各路由协议的缺省管理距离值如图13:

 

                         图13 各路由协议缺省管理距离

 

        假设路由器运行EIGRP、OSPF、RIP、IGRP四种路由协议,它们都得到了到网络192.168.24.0/24的路由,但只有EIGRP(internal)可将其路由安装到路由表中,因为其管理距离值最小,优先权最高。

        可以通过手工的方式来改变路由协议的缺省距离值,但改变路由协议的缺省距离值是比较慎重的动作,有可能导致路由循环或其他奇怪的问题,必须非常小心!其命令为distance后跟具体的值。也可以只改变从某一协议分布进来的路由的管理距离值。在静态路由的最后也可以跟上一个值,改变原来的缺省值1。

3、 路由表的维护

    路由转发表可以是由系统管理员固定设置好的,当网络拓扑发生变换时,由管理员手动调整,也可以由系统依据动态路由协议进行修改。

    RIP只维护一张表:路由表,它们定期与相邻路由器交换全部路由表,如果一个路由被宣布为不可达,则该路由被标记为“possible down”,并被置为抑制状态。过一定时间若仍未从原来的发布该路由的源路由器那里重新学习到该路由,该路由条目将被清除。

OSPF、BGP除了维护一张路由表外,至少还维护另外的两张表:相邻路由器表和拓扑表或路径表。相邻路由器通过HELLO数据包来建立和维护相邻路由器表。一旦正确建立了邻接关系后,彼此交换路由表信息,在此过程中建立了拓扑数据库。根据拓扑数据库,OSPF实现最短路径优先算法,并将结果放在主路由表中。

四、路由选择算法

     选择路由时采取最长匹配的原则,具体实现由路由表的数据结构决定。而路由协议安装路由的优先级取决于管理距离值。

    直观来看,根据子网划分的原理,可以看出哪个表项是“最长匹配”。举例来讲,路由表有这样几个目的网络(斜杠后的数字为子网掩码长度):192.24.96.64/27,192.24.96.96/27,192.24.96.128/26,192.24.96.192/27,192.24.96.224/28,192.24.96.240/28,那么到IP地址为192.24.96.163主机的路由将选中192.24.96.128/26这一表项。其实,该网络地址的主机范围为192.24.96.129~192.24.96.190,唯一包含了目的主机的IP地址。但路由查找软件不是这样设计的,这会影响查找速度,而是根据数据的存储结构选择最快的查找算法。假设数据存储结构为二叉树(Tree)方式,树中只有部分节点是路由条目,并做了标记,那么路由查找软件从目的地址的第一位开始到“树”中遍历,记住最近的一个匹配路由条目(根据标记),如果到某个节点无“路”可走,那么记住的路由条目就作为最后的查找结果。将上述例子的路由条目的数据结构简化如图14所示。

                                图14最长匹配的Tree结构

   

    根据图14,可以直观的看到路由匹配的方法。假设路由表中没有192.24.96.128/26这项,那么对目的地址192.24.96.163的查找进行就没有任何匹配项了,不可能采用其它路由了。如果路由器配置了缺省路由,树中的最顶端的根节点就有指向缺省路由的指针,这样对任何目的地址的路由查找,从顶端开始遍历时就记下了该缺省路由,如果向下的遍历没有匹配的节点,最后用缺省路由转发数据包,如果有匹配节点,就用最后一个匹配节点的路由转发数据包,这就是“最长匹配”的工作原理。

转载于:https://www.cnblogs.com/wanghuaijun/p/6585651.html

你可能感兴趣的文章
Dynamics 365中的批量删除作业执行频率可以高于每天一次吗?
查看>>
HDU-4734 F(x)数位dp
查看>>
玩NOILinux
查看>>
docker--container
查看>>
Linux知识扩展二:lsof命令
查看>>
【算法与数据结构】二叉搜索树的Java实现
查看>>
1.3分布式-分布式通讯(序列化)
查看>>
使用JavaScript代码实现各种数据控件的反选功能,不要只做拖控件的菜鸟
查看>>
tcp窗口
查看>>
主数据0
查看>>
HDU2001
查看>>
sql三维数据
查看>>
XTABLE学习笔记
查看>>
Hashset
查看>>
积累一点ctf需要掌握的常见脚本知识
查看>>
学用MVC4做网站一:用户注册1.1
查看>>
提高Linux安全性--hosts.allow, hosts.deny 文件修改方法
查看>>
手动输入验证码
查看>>
php效率优化
查看>>
Oracle创建表空间创建用户和用户授权
查看>>