路由器开发(二)—— 路由器工作原理

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

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

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


一、路由的概念

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

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

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

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



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


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

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


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


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

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

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

 

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

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

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

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

 

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

 

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

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

1、 路由表的构成

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

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


                                                            图12  路由表


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

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

b -- 目的网络地址(destination

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

c -- 管理距离(administrative distance

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

d -- 度量值(metric

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

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

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

f -- 计时(age

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

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

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


2 、路由表的建立

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

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

 

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


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

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

3、 路由表的维护

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

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

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


四、路由选择算法

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

    直观来看,根据子网划分的原理,可以看出哪个表项是“最长匹配”。举例来讲,路由表有这样几个目的网络(斜杠后的数字为子网掩码长度):192.24.96.64/27192.24.96.96/27192.24.96.128/26192.24.96.192/27192.24.96.224/28192.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的查找进行就没有任何匹配项了,不可能采用其它路由了。如果路由器配置了缺省路由,树中的最顶端的根节点就有指向缺省路由的指针,这样对任何目的地址的路由查找,从顶端开始遍历时就记下了该缺省路由,如果向下的遍历没有匹配的节点,最后用缺省路由转发数据包,如果有匹配节点,就用最后一个匹配节点的路由转发数据包,这就是“最长匹配”的工作原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android颜色渐变的分隔线(ListView)

2019独角兽企业重金招聘Python工程师标准>>> shape.xml xx <?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android" > <gradient android:startColor&qu…

项目实践中Linux集群的总结和思考

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;作为一名Linux/unix系统工程师、项目实施工程师&#xff0c;这几年一直在涉及到对外项目&#xff0c;经手过许多小中型网站的架构&#xff0c;F5、LVS及Nginx接触的都比较多&#xff0c;我想一种比较通俗…

路由器基础知识详解

第一章 网络互联 网络的根本目的非常简单&#xff1a;方便人们交换所获得的信息。但是网络的应用需求非常复杂&#xff1a;有的用户希望高带宽&#xff0c;但并不要求很长的传输距离&#xff1b;有的用户要求很长的距离&#xff0c;但对带宽要求很低&#xff1b;有的对网络的…

事务与锁机制

2019独角兽企业重金招聘Python工程师标准>>> 事务定义&#xff1a; 访问并可能更新数据库&#xff1a;一句或一组SQL&#xff0c;或者是一段程序&#xff0c;反正update了就是事务 ACID的4原则&#xff1a; 原子性&#xff1a; 一致性&#xff1a; 隔离性&#xff1…

路由器 VS OSI七层模型

OSI Open Source Initiative&#xff08;简称OSI&#xff0c;有译作开放源代码促进会、开放原始码组织&#xff09;是一个旨在推动开源软件发展的非盈利组织。OSI参考模型&#xff08;OSI/RM&#xff09;的全称是开放系统互连参考模型&#xff08;Open System Interconnection …

Linux Wireless架构总结

1、无线网络驱动(ath9k_htc) ath9k_htc是一个基于USB接口的SoftMAC无线网络适配器。为了其驱动能正常工作&#xff0c;首先必须调用usb_register来注册驱动定义的usb_driver&#xff0c;以借助USB Core的力量来处理与USB协议相关的事件。其代码如下&#xff1a;[cpp] view plai…

MySQL 日志文件 说明

MySQL 5.5 官方文档上有关日志的分类&#xff1a;By default, nologs are enabled. The following log-specific sections provide information about the server options that enable logging.--默认情况下&#xff0c;没有启动任何log&#xff0c;可以通过如下log 选项来启动…

Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析

前面学习了SDIO接口的WiFi驱动&#xff0c;现在我们来学习一下USB接口的WiFi驱动&#xff0c;二者的区别在于接口不同。而USB接口的设备驱动&#xff0c;我们前面也有学习&#xff0c;比如USB摄像头驱动、USB鼠标驱动&#xff0c;同样都符合LinuxUSB驱动结构&#xff1a; USB设…

Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块&#xff0c;内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈&#xff0c;能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快&#xff0c;兼容SD、MMC接口等特点。 对于SDIO接口的w…

Erlang并发机制 –进程调度

2019独角兽企业重金招聘Python工程师标准>>> Erlang调度器主要完成对Erlang进程的调度&#xff0c;它是Erlang实现软件实时和进程之间公平使用CPU的关键。Erlang运行时&#xff0c;有4种任务需要被调度&#xff1a;进程&#xff0c;Port&#xff0c;Linked-in drive…

Linux 下wifi 驱动开发(二)—— WiFi模块浅析

一、什么是wifi 模块 百度百科上这样定义&#xff1a; Wi-Fi模块又名串口Wi-Fi模块&#xff0c;属于物联网传输层&#xff0c;功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块&#xff0c;内置无线网络协议IEEE802.11b.g.n协议栈以及TCP/IP协议栈。传统的硬件…

Linux 下wifi 驱动开发(一)—— WiFi基础知识解析

一、WiFi相关基础概念 1、什么是wifi 我们看一下百度百科是如何定义的&#xff1a; Wi-Fi是一种可以将个人电脑、手持设备&#xff08;如pad、手机&#xff09;等终端以无线方式互相连接的技术&#xff0c;事实上它是一个高频无线电信号。[1] 无线保真是一个无线网络通信技术…

Linux 网络设备驱动开发(一) —— linux内核网络分层结构

Linux内核对网络驱动程序使用统一的接口&#xff0c;并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配&#xff0c;既能简化数据包处理流程&#xff0c;又便于扩展和维护。 一、内核网络结构 在Linux内核中&#…

Linux 网络设备驱动开发(二) —— Linux 网络栈剖析

一、协议简介 虽然对于网络的正式介绍一般都参考了 OSI&#xff08;Open Systems Interconnection&#xff09;模型&#xff0c;但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型&#xff08;如图 1 所示&#xff09;。 图 1. 网络栈的 Internet 模型 这个栈的最底…

Linux 网络设备驱动开发(三) —— 网络设备驱动基本原理和框架

一、协议栈层次对比 二、Linux网络子系统 Linux网络子系统的顶部是系统调用接口层。它为用户空间提供的应用程序提供了一种访问内核网络子系统的方法&#xff08;socket&#xff09;。位于其下面是一个协议无关层&#xff0c;它提供一种通用的方法来使用传输层协议。然后是具…

国产杀毒软件也开始支持虚拟化

今天不小心看到一个较老的“新”闻&#xff0c;国产安全软件厂商瑞星已经推出支持VMware vshield Endpoint技术的防病毒产品&#xff0c;也就是说如果客户今天使用的是VMware的虚拟化软件&#xff0c;上面运行的所有虚拟机就不需要安装传统的防病毒软件程序&#xff0c;而可以直…

VRP平台基本操作

一、显示系统信息 <Huawei>display version 图上所示可以知道VRP平台信息&#xff0c;运行的版本&#xff0c;运行的时间 二、修改和查看设备系统时间参数 1.查看时间 <Huawei>display clock 2.修改系统日期和时间 三、进入系统视图界面 <Huawei>system-view…

Android中获取应用程序(包)的信息-----PackageManager的使用(一)

本节内容是如何获取Android系统中应用程序的信息&#xff0c;主要包括packagename、label、icon、占用大小等。具体分为两个 部分&#xff0c;计划如下&#xff1a; 第一部分&#xff1a; 获取应用程序的packagename、label、icon等 &#xff1b; 第二部分&#xff1a; 获取应用…

VRP平台总体介绍及基础配置

前言 1、VRP软件系统基础 VRP系统在启动时需要加载“系统软件”和“配置文件”两部分&#xff0c;这与其它品牌网络交换机的操作系统是一样的。如果指定了下次启动的补丁文件&#xff0c;还需加载补丁文件。修改VRP系统启动的场景一般有以下几种&#xff1a; a-- 对交换机进行升…

小强的HTML5移动开发之路(43)——JqueryMobile页眉、工具栏和标签栏导航

一、页眉1、添加页眉和页脚<div data-role"header"><h1>第 1 页</h1></div><div data-role"footer"><h4>页面脚注</h4></div>默认的页眉在屏幕的顶部边缘显示&#xff0c;而且在在屏幕滚动时&#xff0c;…