路由查找算法
㈠ 使用二叉线索能否查找路由表
使用CIDR后,由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。例如,连接路由器的线路的速率为10Gbit/s,而分组的平均长度为2000bit,那么路由器就应当平均每秒钟能够处理500万个分组(常记为5Mpps)。或者说,路由器处理一个分组的平均时间只有200ns(1ns=10-9秒)。因此,查找每一个路由所需的时间是非常短的。可见在路由表中必须使用很好的数据结构和使用先进的快速查找算法,这一直是人们积极研究的热门课题。对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。例如,给定一个目的地址D。对每一个可能的网络前缀长度M,路由器从D中提取前M个位成一个网络前缀,然后查找路由表中的网络前缀。所找到的最长匹配就对应于要查找的路由。这种最简单的算法的明显缺点就是查找的次数太多。最坏的情况是路由表中没有这个路由。在这种情况下,算法仍要进行32次(具有32位的网络前缀是一个特定主机路由)。就是要找到一个传统的B类地址(即/16),也要查找16次。对于经常使用的默认路由,这种算法都要经历31次不必要的查找。为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)",它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
㈡ 路由器的原理
路由器的概念及基本构成
路由器是一种用于网络互连的计算机设备,它工作在 OSI 参考模型的第三层
(网络层),为不同的网络之间报文寻径并存储转发。
作为路由器,必须具备:
Ⅰ 两个或两个以上的接口:用于连接不同的网络。
Ⅱ 协议至少实现到网络层:只有理解网络层协议才能与网络层通讯。
Ⅲ 至少支持两种以上的子网协议:异种子网互联。
Ⅳ 具有存储、转发、寻径功能 :实现速率匹配与路由寻径。
Ⅴ 一组路由协议:包括域内路由协议、域间路由协议。
路由器的作用
Ⅰ 异种网络互连:主要是具有异种子网协议的网络互连。
Ⅱ 子网协议转换:不同子网间包括局域网和广域网间协议转换。
Ⅲ 路由(寻径):路由表建立、刷新、查找。
Ⅳ 速率适配:不同接口具有不同的速率,路由器可以利用自己 缓存及流控协议适配。
Ⅴ 隔离网络:防止广播风暴,网络安全(防火墙)。
Ⅵ 报文分片与重组:接口的 MTU 不同,超过接口的 MTU 的报文会被分片,到达目的地的报文会被重组。
Ⅶ备份、流量流控:主备线路的切换及复杂的流量控制。
路由器工作原理
路由器中时刻维持着一张路由表,所有报文的发送和转发都通过查找路由表。从相应端口发送。这张路由表可以是静态配置的,也可以是动态路由协议产生的。物理层从路由器的一个端口收到一个报文,上送到数据链路层。数据链路层去掉链路层封装,根据报文的协议域上送到网络层。网络层首先看报文是否是送给本机的,若是,去掉网络层封装,送给上层。若不是,则根据报文的目的地址查找路由表,若找到路由,将报文送给相应端口的数据链路层,数据链路层封装后,发送报文。若找不到路由,报文丢弃。
电子产品世界
路由器工作原理
手机与无线通信 作者:何富和 时间:2015-05-27来源:电子产品世界
导读:说起路由器,大家对它一定非常熟悉吧,上网都靠他,但它是靠什么原理工作的呢,它的工作流程是怎样呢?今天小编带大家了解一下路由器的工作原理。
路由器的概念及基本构成
路由器是一种用于网络互连的计算机设备,它工作在 OSI 参考模型的第三层
(网络层),为不同的网络之间报文寻径并存储转发。
作为路由器,必须具备:
Ⅰ 两个或两个以上的接口:用于连接不同的网络。
Ⅱ 协议至少实现到网络层:只有理解网络层协议才能与网络层通讯。
Ⅲ 至少支持两种以上的子网协议:异种子网互联。
Ⅳ 具有存储、转发、寻径功能 :实现速率匹配与路由寻径。
Ⅴ 一组路由协议:包括域内路由协议、域间路由协议。
路由器的作用
Ⅰ 异种网络互连:主要是具有异种子网协议的网络互连。
Ⅱ 子网协议转换:不同子网间包括局域网和广域网间协议转换。
Ⅲ 路由(寻径):路由表建立、刷新、查找。
Ⅳ 速率适配:不同接口具有不同的速率,路由器可以利用自己 缓存及流控协议适配。
Ⅴ 隔离网络:防止广播风暴,网络安全(防火墙)。
Ⅵ 报文分片与重组:接口的 MTU 不同,超过接口的 MTU 的报文会被分片,到达目的地的报文会被重组。
Ⅶ备份、流量流控:主备线路的切换及复杂的流量控制。
路由器工作原理
路由器中时刻维持着一张路由表,所有报文的发送和转发都通过查找路由表。从相应端口发送。这张路由表可以是静态配置的,也可以是动态路由协议产生的。物理层从路由器的一个端口收到一个报文,上送到数据链路层。数据链路层去掉链路层封装,根据报文的协议域上送到网络层。网络层首先看报文是否是送给本机的,若是,去掉网络层封装,送给上层。若不是,则根据报文的目的地址查找路由表,若找到路由,将报文送给相应端口的数据链路层,数据链路层封装后,发送报文。若找不到路由,报文丢弃。
子网寻径及路由
标准的寻径表表目是一个二维组(信宿网络地址,下一驿站地址),其中不携带子网信息,不能满足子网寻径。引入子网编址以后,子网寻径表的每一表目中加入子网模,于是子网寻径表表目变为三维组:子网模、信宿网络地址、下一驿站地址。
路由算法、路由协议、寻径
路由器依据路由表来为报文寻径,路由表由路由协议建立和维护。路由协议的设计则是依据某种路由算法。
选径是否是最佳:
以什么参数来衡量路由,如时延、距离、中间网关数等。
简洁性:路由算法应设计的尽可能简洁。
强壮性:路由算法必须具有鲁棒性,应经得起各种网络环境的考验。
快速收敛性:即所有路由器就最优路径达成一致的过程路由算法如果收敛的慢,就会引起路径循环或网络消耗。
灵活性、弹性:路由算法能否适应网络环境的各种变化,例如网络带宽、路由器的缓存、网络时延等发生变化,路由算法能否根据这些变化做出调整。路由表包含的信息用来交换路由信息和选择最佳路由路由表是路由器的核心,其中的路由信息来源有两种:一种是手动添加的静态路由,另外一种是路由器运行过程中由动态路由协议学习而得来。路由算法使用了许多不同的权决定最佳路由。
通常采用的权如下:
Ⅰ 路径距离:指所经过的每条链路的权值之和,有的路由协议指节点数目;
Ⅱ 可靠性:指网络链路是否容易出故障;
Ⅲ 时延:指网络链路造成的网络延时;
Ⅳ 带宽:指链路传输信息流容量的能力;
Ⅴ 承载量:指网络资源如路由器的繁忙程度;
路由器与相关网络设备的比较
Hubs(中继器):对应 7 层模型的物理层,它的作用是放大电信号。主要用于连接具有相同物理层的 LAN。Hubs 还将以太网的总线结构变成星状结构。Bridges(Switches):是一种在数据链路层实现互连的存储转发设备,广泛用于局域网的扩展。Bridges 从一个网段接收完整的数据帧,进行必要的比较和验证,然后决定是丢弃还是发送给另外一个网段。Bridges 具有隔离网段的作用。在网络上适当地使用 Bridges 可以调整网络负载,提高传输性能。
Router(路由器):与 Bridges 相比,路由器实现网络互连是发生在网络层,它实现了相对复杂的功能:路由选择、多路重发、错误检测等。路由器的异构网互连能力、阻塞控制能力和网段的隔离能力要强于 Bridges。路由器可以阻止网络风暴、支持多协议、提供多种接口。
㈢ 使用子网掩码和使用CIDR写出因特网的IP层查找路由的算法。
(1) 从收到的分组的首部提取目的 IP 地址 D。
(2) 先用各网络的子网掩码和 D 逐位相“与”,看是否和
相应的网络地址匹配。若匹配,则将分组直接交付。
否则就是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则将
分组传送给指明的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和 D 逐位相“与”,
若其结果与该行的目的网络地址匹配,则将分组传送
给该行指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表
中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
㈣ 路由算法的类型有
路由算法有很多种,如果从路由表对网络拓扑和通信量变化的自适应能力的角度划分,可以分为静态路由算法和动态路由算法两大类,这两大类又可细分为几种小类型,比较典型常见的有以下几种:
一、静态路由算法
1.Dijkstra算法(最短路径算法)
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN,CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。
Dijkstra算法执行步骤如下:
步骤一:路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i,j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。
步骤二:路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
前序字段———表示当前节点之前的节点。
长度字段———表示从源节点到当前节点的权值之和。
标号字段———表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
步骤三:路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
步骤四:路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。
步骤五:路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
步骤六:路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
步骤七:如果这个节点不是V2(目的节点),路由器则返回到步骤5。
步骤八:如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。
2.扩散法
事先不需要任何网络信息;路由器把收到的每一个分组,向除了该分组到来的线路外的所有输出线路发送。将来会有多个分组的副本到达目的地端,最先到达的,可能是走了“最优”的路径常见的扩散法是选择性扩散算法。
3.LS算法
采用LS算法时,每个路由器必须遵循以下步骤:
步骤一:确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
步骤二:测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
步骤三:向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
步骤四:使用一个合适的算法,确定网络中两个节点之间的最佳路由。
路由算法有哪些类型?路由算法与路由协议的区别
在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
二、动态路由算法
1.距离向量路由算法
距离向量路由算法,也叫做最大流量算法,其被距离向量协议作为一个算法,如RIP、BGP、ISO IDRP、NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输(我们叫这个为“成本”)。这个在那个算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量,等等。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。其优点是算法简单容易实现。缺点是慢收敛问题,路由器的路径变化需要像波浪一样从相邻路由器传播出去,过程缓慢。
每一个相邻路由器发送过来的路由表都要经过以下步骤:
步骤一:对地址为X的路由器发过来的路由表,先修改此路由表中的所有项目:把”下一跳”字段中的地址改为X,并把所有”距离”字段都加1。
步骤二:对修改后的路由表中的每一个项目,进行以下步骤:
(1)将X的路由表(修改过的),与S的路由表的目的网络进行对比。若在X中出现,在S中没出现,则将X路由表中的这一条项目添加到S的路由表中。
(2)对于目的网络在S和X路由表中都有的项目进行下面步骤:
1)在S的路由表中,若下一跳地址是x,则直接用X路由表中这条项目替换S路由表中的项目。
2)在S的路由表中,若下一跳地址不是x,若X路由表项目中的距离d小于S路由表中的距离,则进行更新。
步骤三:若3分钟还没有收到相邻路由器的更新表,则把此相邻路由器记为不可到达路由器,即把距离设置为16。
2.链路状态最短路由优先算法SPF
1)发现邻居结点,并学习它们的网络地址;
2)测量到各邻居节点的延迟或者开销;
3)创建链路状态分组;
4)使用扩散法发布链路状态分组;
5)计算到每个其它路由器的最短路径。
㈤ BT达人们,在下虚心求教~~~~~~~~!
SP2的连接数只有10.这个用比特精灵的破解补丁就OK了.不过如果是你的上网方式是ADSL,就要看你的猫能不能受得了那么多那么多连接数了.如果不行,会造成断流.也就是你说的网页打不开,断网再上又行了.这种情况下,把DHT功能关掉,就可以防止这一情况.所谓DHT,在这转一个帖,解释一下.
{BT软件的DHT技术基础——Kademlia协议原理简介
一、前言
Kademlia协议(以下简称Kad)是美国纽约大学的PetarP. Maymounkov和David Mazieres.在2002年发布的一项研究结果《Kademlia: A peerto -peer information system based on the XOR metric》。
简单的说,Kad是一种分布式哈希表(DHT)技术,不过和其他DHT实现技术比较,如Chord、CAN、Pastry等,Kad通过独特的以异或算法(XOR)为距离度量基础,建立了一种全新的DHT拓扑结构,相比于其他算法,大大提高了路由查询速度。
在2005年5月着名的BiTtorrent在4.1.0版实现基于Kademlia协议的DHT技术后,很快国内的BitComet和BitSpirit也实现了和BitTorrent兼容的DHT技术,实现trackerless下载方式。
另外,emule中也很早就实现了基于Kademlia类似的技术(BT中叫DHT,emule中也叫Kad,注意和本文简称的Kad区别),和BT软件使用的Kad技术的区别在于key、value和node ID的计算方法不同。
二、节点状态
在Kad网络中,所有节点都被当作一颗二叉树的叶子,并且每一个节点的位置都由其ID值的最短前缀唯一的确定。
对于任意一个节点,都可以把这颗二叉树分解为一系列连续的,不包含自己的子树。最高层的子树,由整颗树不包含自己的树的另一半组成;下一层子树由剩下部分不包含自己的一半组成;依此类推,直到分割完整颗树。图1就展示了节点0011如何进行子树的划分:
图1:节点0011的子树划分
虚线包含的部分就是各子树,由上到下各层的前缀分别为0,01,000,0010。
Kad协议确保每个节点知道其各子树的至少一个节点,只要这些子树非空。在这个前提下,每个节点都可以通过ID值来找到任何一个节点。这个路由的过程是通过所谓的XOR(异或)距离得到的。
图2就演示了节点0011如何通过连续查询来找到节点1110的。节点0011通过在逐步底层的子树间不断学习并查询最佳节点,获得了越来越接近的节点,最终收敛到目标节点上。
图2:通过ID值定位目标节点
需要说明的是,只有第一步查询的节点101,是节点0011已经知道的,后面各步查询的节点,都是由上一步查询返回的更接近目标的节点,这是一个递归操作的过程。
三、节点间距离
Kad网络中每个节点都有一个160bit的ID值作为标志符,Key也是一个160bit的标志符,每一个加入Kad网络的计算机都会在160bit的key空间被分配一个节点ID(node ID)值(可以认为ID是随机产生的),<key,value>对的数据就存放在ID值“最”接近key值的节点上。
判断两个节点x,y的距离远近是基于数学上的异或的二进制运算,d(x,y) = x⊕y,既对应位相同时结果为0,不同时结果为1。例如:
010101
XOR 110001
-------------
100100
则这两个节点的距离为32+4=36。
显然,高位上数值的差异对结果的影响更大。
对于异或操作,有如下一些数学性质:
d(x, x) = 0
d(x, y) > 0, if x ≠ y
∨x, y : d(x, y) = d(y, x)
d(x, y) + d(y, z) ≥ d(x, z)
d(x, y) ⊕ d(y, z) = d(x, z)
∨a≥ 0, b≥ 0, a + b≥ a ⊕ b
正如Chord的顺时针旋转的度量一样,异或操作也是单向性的。对于任意给定的节点x和距离⊿≥0,总会存在一个精确的节点y,使得d(x,y)= ⊿。另外,单向性也确保了对于同一个key值的所有查询都会逐步收敛到同一个路径上,而不管查询的起始节点位置如何。这样,只要沿着查询路径上的节点都缓存这个<key,value>对,就可以减轻存放热门key值节点的压力,同时也能够加快查询响应速度。
四、K桶
Kad的路由表是通过一些称之为K桶的表格构造起来的。这有点类似Tapestry技术,其路由表也是通过类似的方法构造的。
对每一个0≤i≤160,每个节点都保存有一些和自己距离范围在区间 内的一些节点信息,这些信息由一些(IP address,UDP port,Node ID)数据列表构成(Kad网络是靠UDP协议交换信息的)。每一个这样的列表都称之为一个K桶,并且每个K桶内部信息存放位置是根据上次看到的时间顺序排列,最近(least-recently)看到的放在头部,最后(most-recently)看到的放在尾部。每个桶都有不超过k个的数据项。
一个节点的全部K桶列表如表1所示:
I 距离 邻居
0
1
2
……
i
……
160
表1:K桶结构
不过通常来说当i值很小时,K桶通常是空的(也就是说没有足够多的节点,比如当i=0时,就最多可能只有1项);而当i值很大时,其对应K桶的项数又很可能会超过k个(当然,覆盖距离范围越广,存在较多节点的可能性也就越大),这里k是为平衡系统性能和网络负载而设置的一个常数,但必须是偶数,比如k=20。在BitTorrent的实现中,取值为k=8。
由于每个K桶覆盖距离的范围呈指数关系增长,这就形成了离自己近的节点的信息多,离自己远的节点的信息少,从而可以保证路由查询过程是收敛。因为是用指数方式划分区间,经过证明,对于一个有N个节点的Kad网络,最多只需要经过logN步查询,就可以准确定位到目标节点。这个特性和Chord网络上节点的finger table划分距离空间的原理类似。
当节点x收到一个PRC消息时,发送者y的IP地址就被用来更新对应的K桶,具体步骤如下:
1.计算自己和发送者的距离:d(x,y) = x⊕y,注意:x和y是ID值,不是IP地址
2.通过距离d选择对应的K桶进行更新操作。
3.如果y的IP地址已经存在于这个K桶中,则把对应项移到该该K桶的尾部
4.如果y的IP地址没有记录在该K桶中
⑴如果该K桶的记录项小于k个,则直接把y的(IP address,UDP port,Node ID)信息插入队列尾部
⑵如果该K桶的记录项大于k个,则选择头部的记录项(假如是节点z)进行RPC_PING操作
①如果z没有响应,则从K桶中移除z的信息,并把y的信息插入队列尾部
②如果z有响应,则把z的信息移到队列尾部,同时忽略y的信息。
K桶的更新机制非常高效的实现了一种把最近看到的节点更新的策略,除非在线节点一直未从K桶中移出过。也就是说在线时间长的节点具有较高的可能性继续保留在K桶列表中。
采用这种机制是基于对Gnutella网络上大量用户行为习惯的研究结果,既节点的失效概率和在线时长成反比关系,如图3(横坐标为分钟,纵坐标为概率):
图3:Gnutella网络中在线时长和继续在线的概率关系
可以明显看出,用户在线时间越长,他在下一时段继续在线的可能性就越高。
所以,通过把在线时间长的节点留在K桶里,Kad就明显增加K桶中的节点在下一时间段仍然在线的概率,这对应Kad网络的稳定性和减少网络维护成本(不需要频繁构建节点的路由表)带来很大好处。
这种机制的另一个好处是能在一定程度上防御DOS攻击,因为只有当老节点失效后,Kad才会更新K桶的信息,这就避免了通过新节点的加入来泛洪路由信息。
为了防止K桶老化,所有在一定时间之内无更新操作的K桶,都会分别从自己的K桶中随机选择一些节点执行RPC_PING操作。
上述这些K桶机制使Kad缓和了流量瓶颈(所有节点不会同时进行大量的更新操作),同时也能对节点的失效进行迅速响应。
五、Kademlia协议操作类型
Kademlia协议包括四种远程操作:PING、STORE、FIND_NODE、FIND_VALUE。
1、PING操作的作用是探测一个节点,用以判断其是否仍然在线。
2、STORE操作的作用是通知一个节点存储一个<key,value>对,以便以后查询需要。
3、FIND_NODE操作使用一个160bit的ID作为参数。本操作的接受者返回它所知道的更接近目标ID的K个节点的(IP address,UDP port,Node ID)信息。
这些节点的信息可以是从一个单独的K桶获得,也可以从多个K桶获得(如果最接近目标ID的K桶未满)。不管是哪种情况,接受者都将返回K个节点的信息给操作发起者。但如果接受者所有K桶的节点信息加起来也没有K个,则它会返回全部节点的信息给发起者。
4、FIND_VALUE操作和FIND_NODE操作类似,不同的是它只需要返回一个节点的(IP address,UDP port,Node ID)信息。如果本操作的接受者收到同一个key的STORE操作,则会直接返回存储的value值。
注:在Kad网络中,系统存储的数据以<key,value>对形式存放。根据笔者的分析,在BitSpirit的DHT实现中,其key值为torrent文件的info_hash串,其value值则和torrent文件有密切关系。
为了防止伪造地址,在所有RPC操作中,接受者都需要响应一个随机的160bit的ID值。另外,为了确信发送者的网络地址,PING操作还可以附带在接受者的RPC回复信息中。
六、路由查询机制
Kad技术的最大特点之一就是能够提供快速的节点查找机制,并且还可以通过参数进行查找速度的调节。
假如节点x要查找ID值为t的节点,Kad按照如下递归操作步骤进行路由查找:
1、 计算到t的距离:d(x,y) = x⊕y
2、 从x的第[㏒d]个K桶中取出α个节点的信息(“[”“]”是取整符号),同时进行FIND_NODE操作。如果这个K桶中的信息少于α个,则从附近多个桶中选择距离最接近d的总共α个节点。
3、 对接受到查询操作的每个节点,如果发现自己就是t,则回答自己是最接近t的;否则测量自己和t的距离,并从自己对应的K桶中选择α个节点的信息给x。
4、 X对新接受到的每个节点都再次执行FIND_NODE操作,此过程不断重复执行,直到每一个分支都有节点响应自己是最接近t的。
5、 通过上述查找操作,x得到了k个最接近t的节点信息。
注意:这里用“最接近”这个说法,是因为ID值为t的节点不一定存在网络中,也就是说t没有分配给任何一台电脑。
这里α也是为系统优化而设立的一个参数,就像K一样。在BitTorrent实现中,取值为α=3。
当α=1时,查询过程就类似于Chord的逐跳查询过程,如图4。
图4:α=1时的查询过程
整个路由查询过程是递归操作的,其过程可用数学公式表示为:
= x(即查询操作的发起者)
这个递归过程一直持续到 =t,或者 的路由表中没有任何关于t的信息,即查询失败
由于每次查询都能从更接近t的K桶中获取信息,这样的机制保证了每一次递归操作都能够至少获得距离减半(或距离减少1bit)的效果,从而保证整个查询过程的收敛速度为O(logN),这里N为网络全部节点的数量。
当节点x要查询<key,value>对时,和查找节点的操作类似,x选择k个ID值最接近key值的节点,执行FIND_VALUE操作,并对每一个返回的新节点重复执行FIND_VALUE操作,直到某个节点返回value值。
一旦FIND_VALUE操作成功执行,则<key,value>对数据会缓存在没有返回value值的最接近的节点上。这样下一次查询相同的key时就会更加快速的得到结果。通过这样的方式,热门<key,value>对数据的缓存范围就逐步扩大,使系统具有极佳的响应速度,如图5所示。
图5:缓存原则
七、数据存放
存放<key,value>对数据的过程为:
1、 发起者首先定位k个ID值最接近key的节点;
2、 发起者对这k个节点发起STORE操作
3、 执行STORE操作的k个节点每小时重发布自己所有的<key,value>对数据。
4、 为了限制失效信息,所有<key,value>对数据在初始发布24小时后过期。
另外,为了保证数据发布、搜寻的一致性,规定在任何时候,当节点w发现新节点u比w上的某些<key,value>对数据更接近,则w把这些<key,value>对数据复制到u上,但是并不会从w上删除。
八、节点加入和离开
如果节点u要想加入Kad网络,它必须要和一个已经在Kad网络的节点,比如w,取得联系。
u首先把w插入自己适当的K桶中,然后对自己的节点ID执行一次FIND_NODE操作,然后根据接收到的信息更新自己的K桶内容。通过对自己邻近节点由近及远的逐步查询,u完成了仍然是空的K桶信息的构建,同时也把自己的信息发布到其他节点的K桶中。
在Kad网络中,每个节点的路由表都表示为一颗二叉树,叶子节点为K桶,K桶存放的是有相同ID前缀的节点信息,而这个前缀就是该K桶在二叉树中的位置。这样,每个K桶都覆盖了ID空间的一部分,全部K桶的信息加起来就覆盖了整个160bit的ID空间,而且没有重叠。
以节点u为例,其路由表的生成过程为:
1. 最初,u的路由表为一个单个的K桶,覆盖了整个160bitID空间,如图6最上面的路由表;
2. 当学习到新的节点信息后,则u会尝试把新节点的信息,根据其前缀值插入到对应的K桶中:
① 如果该K桶没有满,则新节点直接插入到这个K桶中;
② 如果该K桶已经满了,
⑴ 如果该K桶覆盖范围包含了节点u的ID,则把该K桶分裂为两个大小相同的新K桶,并对原K桶内的节点信息按照新的K桶前缀值进行重新分配
⑵ 如果该K桶覆盖范围没有包节点u的ID,则直接丢弃该新节点信息
3. 上述过程不断重复,最终会形成表1结构的路由表。达到距离近的节点的信息多,距离远的节点的信息少的结果,保证了路由查询过程能快速收敛。
图6:节点000的路由表生成演化
在图7中,演示了当覆盖范围包含自己ID值的K桶是如何逐步分裂的。
图7:节点0100的K桶分裂过程
当K桶010满了之后,由于其覆盖范围包含了节点0100的ID,故该K桶分裂为两个新的K桶:0101和0100,原K桶010的信息会根据其其前缀值重新分布到这两个新的K桶中。注意,这里并没有使用160bit的ID值表示法,只是为了方便原理的演示,实际Kad网络中的ID值都是160bit的。
节点离开Kad网络不需要发布任何信息,Kademlia协议的目标之一就是能够弹性工作在任意节点随时失效的情况下。为此,Kad要求每个节点必须周期性的发布全部自己存放的<key,value>对数据,并把这些数据缓存在自己的k个最近邻居处,这样存放在失效节点的数据会很快被更新到其他新节点上。}
现在最新的BT软件都讲求功能强大,速度高,但只要好好调一下参数,你还是可以让稍差一点的网络用户端BT如飞的
㈥ 怎样才能快速搜索路由表有哪些着名的搜索算法
有三个路由器,a,b和c。路由器a的两个网络接口f0和s0
分别连接在
10.1.0.0和10.2.0.0网段上;路由器b的两个网络接口s0和s1
分别连接在
10.2.0.0和10.3.0.0网段上;路由器c的两个网络接口s0和e0
分别连接在
10.3.0.0和10.4.0.0网段上;
如上图中各路由表的前两行所示,通过路由表的网络接口到与之直接相连的网
络的网络连接,其向量距离设置为0。这即是最初的路由表。
当路由器b和a以及b和c之间相互交换路由信息后,它们会更新各自的路由表。
例如,路由器b通过网络端口s1收到路由器c的路由信息(10.3.0.0,s0,0)和(10.4.0.0,e0,0)后,在自己的路由表中增加一条(10.4.0.0,s1,1)路由信息。该信息表示:通过路由器b的网络接
口s1可以访问到10.4.0.0网段,其向量距离为1,该向量距离是在路由器c的基础上加1获得的。
同样道理,路由器b还会产生一条(10.1.0.0,s0,1)路由,这条路由是通过网络端口s0从路由器a
获得的。如此反复,直到最终收敛,形成图中所示的路由表。
概括地说,距离向量算法要求每一个路由器把它的整个路由表发送给与它直接连接的其它路由
器。路由表中的每一条记录都包括目标逻辑地址、相应的网络接口和该条路由的向量距离。当一个路
由器从它的相邻处收到更新信息时,它会将更新信息与本身的路由表相比较。如果该路由器比较出一条
新路由或是找到一条比当前路由更好的路由时,它会对路由表进行更新:将从该路由器到邻居之间的
向量距离与更新信息中的向量距离相加作为新路由的向量距离。
㈦ 什么是路由啊 路由的组成 以及路由的算法
路由:路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议(如TCP/IP、IPX/SPX、AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议。路由器通常连接两个或多个由IP子网或点到点协议标识的逻辑端口,至少拥有1个物理端口。路由器根据收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过网络上其他路由器交换路由和链路信息来维护路由表。
路由器的组成:
RAM(随机存储器)
功能:存放路由表;存放ARP告诉缓存;存放快速交换缓存;存放分组交换缓冲;存放解压后的IOS;路由器加电后,存放running配置文件;
特点:重启或者断电后,RAM中的内容丢失。
NVRAM(非易失性RAM)
功能:存储路由器的startup配置文件;存储路由器的备份。
特点:重启或者断电后内容不丢失。
FLASH(快速闪存)
功能:存放IOS和微代码。
特点:重启或者断电后内容不丢失;可存放多个IOS版本(在容量许可的前提下);允许软件升级不需替换CPU中的芯片。
ROM(只读存储器)
功能:存放POST诊断所需的指令;存放mini-ios;存放ROM监控模式的代码。
特点:ROM中的软件升级需要更换CPU的芯片(还好这种情况比较少遇到)
CPU(中央处理器)
衡量路由器性能的重要指标,负责路由计算,路由选择等。
背板:
背板能力是一个重要参数,尤其在交换机中。
路由算法:又名选路算法,可以根据多个特性来加以区分。算法的目的是找到一条从源路由器到目的路由器的“好”路径(即具有最低费用的路径[1])。算法设计者的特定目标影响了该路由协议的操作;具体来说存在着多种路由算法,每种算法对网络和路由器资源的影响都不同;由于路由算法使用多种度量标准(metric),从而影响到最佳路径的计算。
算法分类:主要有RIP、IGRP(IGRP为 Cisco公司的私有协议);链路状态路由协议基于图论中非常着名的Dijkstra算法,即最短优先路径(Shortest Path First, SPF)算法,如OSPF。在距离向量路由协议中,路由器将部分或全部的路由表传递给与其相邻的路由器;而在链路状态路由协议中,路由器将链路状态信息传 递给在同一区域内的所有路由器。 根据路由器在自治系统(AS)中的位置,可将路由协议分为内部网关协议 (Interior Gateway Protocol,IGP)和外部网关协议(External Gateway Protocol,EGP,也叫域 间路由协议)。域间路由协议有两种:外部网关协议(EGP)和边界网关协议(BGP)。EGP是为一个简单的树型拓扑结构而设计的,在处理选路循环和设置 选路策略时,具有明显的缺点,已被BGP代替。
㈧ 路由器中的路由表是怎样得出的
路由器中的路由表有直连路由,是本机算出来的,有手工指定的静态路由,同时还有起的ergip、ospf、bgp等用户起的动态路由进程学习到的,相邻路由能够起邻居,相互之间学习到发布的路由指令。
所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。
在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。
在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由算法选择的数据包传输优先路径,这个表格通常为了优化硬件存储和查找而被压缩或提前编译。
路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用,表中包含的信息决定了数据转发的策略。打个比方,路由表就像我们平时使用的地图一样,标识着各种路线,路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路由表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。
1.静态路由表
由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。
2.动态路由表
动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
路由器通常依靠所建立及维护的路由表来决定如何转发。路由表能力是指路由表内所容纳路由表项数量的极限。由于Internet上执行BGP协议的路由器通常拥有数十万条路由表项,所以该项目也是路由器能力的重要体现。