网络路由相关的知识

配置静态路由

手工配置的路由信息,包括网络地址 子网掩码和下一跳地址。在没有配置静态路由的情况下,这两个子网中的计算机a、b之间是不能通信的。从计算机a发往计算机b的ip包,在到达router后,router不知道如何到达计算机b所在的网段。

浮动静态路由

路由优先级范围0-255,数值越小越优先,静态路由默认的优先级为60。

通过配置去往相同的目的网段,但是优先级不同的静态路由,为了保证在网络中优先级较高的路由,即主路由失效的情况下,提供备份路由。正常情况下,备份路由时不会出现在路由表中的。

例如:在R1上配置静态路由,目的网段是主机b所在的网段,掩码为24位,下一跳是R2,同时将优先级设置为100(默认为60)。

ip route-static 192.168.10.0 24 10.0.10.2 preference 100

dis ip routing-table 查看路由表

备份路由表不会显示在路由表中,需要使用display ip routing-table protocol static查看静态路由路由信息。

负载

根据逐包

根据目的地址

逐流负载

路由递归查询(静态路由)

路由器逐跳将数据包发送到目的地,静态路由可以指定到目的地的每一跳,但是如果路径上某个节点出现问题,整条静态路由就不能工作了,合理的递归路由规划可以大大简化静态路由的维护工作量。

动态路由

最重要的作用是检测和补偿拓扑的更改,如果网络的最佳路径变得不可到达,协议必须寻找下一个最佳路径

路径选择

度量 最少Hop 带宽 负载 延迟 可靠性 汇聚 负载均衡

距离矢量路由协议

RIP是一种距离矢量算法协议,通过udp报文进行路由信息的交换。是简单的内部网关协议IGP,主要应用于规模较小的网络。可以深入了解一下Routing Information Protocol路由信息协议RIP。

大多数路由协议都属于两个类中的一个,距离矢量或链路状态。

典型的距离矢量路由协议使用一种路由算法,其中路由器定期向所有的邻居发送路由更新,通过广播他们的整个路由表。

距离矢量算法

Bellman-Ford or Ford-Fulkerson算法

定期更新

如果更新发送得太频繁,可能会出现拥塞,如果更新发送得太频繁,那么聚合时间可能会高得无法接受。

距离矢量路由协议将其更新发送到邻居路由器们,依赖他们将更新信息传递给他们的邻居路由器。

广播更新

当路由第一次在网络中变成有效的,最简单的办法是将更新信息发送到广播地址(IP为255.255.255.255),相邻的路由器说同样的路由协议将会听到广播并采取适当的行动,主机和其他对路由更新不关心的设备将会直接删除数据包。

发完整的路由表更新

大多数距离矢量路由协定采用了非常简单的方法通过广播他们的整个路由表来告诉他们的邻居他们知道的一切,接收到这些更新的邻居会收集他们需要的信息,然后丢弃所有的信息。

路由无效计时器

路由更新到路由表时,为其设置一个定时器,当这个路down掉将不会听到其更新信息,导致超时,标记该路径不可到达,并将在下一次更新中传递信息。如不这么做,那么一个黑洞在网络中打开了。

典型的路由器超时更新周期从3到6个不等,在一次更新被错过之后,路由器不希望使路由失效,因为这个事件可能是一个损坏或丢失的包或某种网络延迟的结果,如果周期太长,再汇聚将会非常缓慢。

水平分割

水平分割原理是RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。

水平分割两种:简单的水平分割,毒性逆转水平分割。

简单水平分割

当想指定接口发送更新,不要包含从这个接口到学习的更新。

例如:路由器C发送一个更新到路由器D,网络10.1.1.0,10.1.2.0和10.1.3.0。不包括网络10.1.4.0和10.1.5.0,因为它们是从路由器D中学到的。

对路由器B的更新包括10.1.4.0和10.1.5.0,没有提到10.1.1.0、10.1.2.0和10.1.3.0。

毒性逆转水平分割

在向指定接口发送更新信息时,指定从该接口上接收到的更新的任何网络都是不可访问的。

例如:路由器C实际上会向路由器D通知10.1.4.0和10.1.5.0,但是网络会被标记为不可到达的,可通过将度量值设置为无穷大,路径被标记为不可到达的,意味网络是无限远的。

毒性逆转比简单水平分割更安全、坚固,”坏消息总比没消息好“,假设B接收一个损坏的信息,导致相信,可以通过路由器C可以访问子网10.1.1.0。

简单水平分割什么也不会去做去更正这个错误,然而来自C的毒性逆转更新,会立刻停止这个可能出现的Loop,所以,大多数现代距离矢量实现使用毒性逆转水平分割,代价是路由更新包更大,这可能会加剧连接上的任何拥塞问题。

反向路由

路由器A广播它从路由器B中学到的网络,再给B,浪费资源B已经知道这些网络了。A从B收到再给B水平分割是一种防止两种路由器之间反向路由的技术。

--10.1.1.0-->A<--10.1.2.0-->B<--10.1.3.0-->C<--10.1.4.0-->D<--->10.1.5.0

比如:路由D的10.1.5.0网络down了,D会察觉这个故障,标记10.1.5.0网络不可访问,在下一个更新间隔传递这个信息给C,但是在D更新计时器触发更新之前,意想不到的事情发生了,C的更新信息来了,声称可以到达10.5.1.0网络,一个hop(跳)距离。

D不知道C在通告非法的下一个最佳路径,它会增加hop数,进入它的路由表,表明10.1.5.0可以通过路由器C的接口10.1.4.1到达,2个hop(跳)距离。

现在,带有10.1.5.3的目标地址的包到达路由器C,C查询其路由表并将包转发到D,D查阅它的路由表并将数据包转发到C,C将其转发到D,......一个路由循环发生了。

hop无穷大(maximum hop coun)

定义最大跳数(最大为15跳),当跳数为16跳时,目标为不可达。

ospf hello报文

hello协议将定义一个Hello包格式,用于交换数据包和处理数据包包含的信息的过程。

Hello包将包含一个路由器ID,要发送的数据包网络的地址。

在指定的最大期限内,路由器将等待听到一个Hello,然后再声明这个邻居dead。

两个路由器互相发现对方是邻居,他们通过一个进程同步他们的数据库中,他们交换和验证数据库信息,直到他们的数据库是相同的,关于数据库同步细节部分见OSPF。

执行数据库同步,邻居必须是临近的,他们必须在特定的特定协议的参数上达成一致,比如计时器、、支持可选功能。

用hello包建立邻接,链接状态协议可以以一种受控的方式交换信息,

hello和距离矢量比,距离矢量简单地广播更新为该路由协议配置的任何接口。

hello除了建立邻接,Hello包充当保持对邻接的监视,如果在某个确定的时间内,没有从相邻的邻居那里听到hellos,邻居被认为是不可到达的,and相邻的则被破坏了。

hello包交换的一个典型间隔是10秒,典型的死亡周期是四倍。

链路状态flooding

在建立了邻接之后,路由器就可以开始发送LSAs了。通告被发送给每个邻居,每个接收到的LSA都被复制并转发给每个邻居,除了发送LSA的那个。

这个过程是链接状态比距离矢量的优点之一,LSAs几乎立即被转发,而距离矢量必须运行它的算法并在路由更新之前更新它的路由表,当拓扑改变时,链路状态协议比距离向量协议汇聚速度快得多。

flooding过程是链接状态协议中最复杂的部分,有几种方法可以使flood更有效,更可靠,例如使用单播和多播地址、校验和和正确认,

这些主题在特定于协议的章节中进行了检查,但是两个过程对于flooding的过程至关重要:排序和老化。

序列号

正如目前所描述的,flooding的难度很大,当所有路由器接收到所有的LSAs时,flooding必须停止,包中的生存时间值可以简单地依赖于过期,但是让LSAs在网络间游荡直到它们过期,这几乎是不可能的。

网络路由相关的知识_第1张图片

在路由器A上的子网172.22.4.0已经失败,A已经将LSA淹没到它的邻居B和D中,并为链接的新状态做广告。B和D忠实地涌向他们的邻居,诸如此类。

接下来看看路由器C发生了什么,LSA在t1时刻从路由器B到达,被输入到C的拓扑数据库中。然后转发给F,在后来的t3期,相同的LSA的copy从a-d-e-f-c路由,路由器C看到它的数据库中已经有了LSA,C应该把这个LSA转发给路由器B吗?答案是否定的因为B已经收到了广告路由器C知道这一点,因为它从路由器F接收到的LSA的序列号与它从路由器b接收到的LSA的序列号相同。当路由器发送出LSA时,它在每个副本中包含一个相同的序列号。

这个序列号被记录在路由器的拓扑数据库中,以及LSA的其他部分当一个路由器接收到一个已经在数据库中的LSA,它的序列号是相同的,接收到的信息就会被丢弃。

如果信息是一样的但是序列的数量更大,接收到的信息和新的序列号被输入到数据库中,LSA被洪水淹没,这样,当所有路由器都看到了最新的LSA副本时,洪水就会减少。

似乎路由器仅仅可以验证它们的链路状态数据库包含与新接收到的LSA相同的LSA,并根据该信息做出一个不确定的/丢弃的决策

路由器A可能发出一个LSA的广告,这个网络是down的,它的序列号是166,然后它发送一个新的LSA,它宣布了相同的网络是up的,它的序列号是167,路由器C接收down的LSA,然后从a-b-C路径接收up的LSA,但是它从a-d-f-c通道接收到一个延迟的down的LSA,如果没有序列号,C就不知道是否相信延时的down的LSA,有了序列号,C的数据库就会表明,来自路由器A的信息有一个编号为167的序列编号,LSA的序列编号为166,因此被认为是旧信息并被丢弃。

因为序列号是在LSAs中的一个集合字段中进行的,所以数字必须有一定的上界。当达到这个最大的序列号时,会发生什么?

线性序列号空间

一种方法是使用一个线性序列空间,如此之大,以至于不太可能达到上限,一个32位的字段被使用,有2的3次方2=4,294,967,296个可用的序列编号从0开始,即使路由器每10秒创建一个新的链路状态包,也要花费大约1361年的时间来耗尽序列的数量,很少有路由器会持续这么长时间。

如果一个链路状态路由进程在某种程度上耗尽了序列数,它必须自己关闭,以及保持足够长的时间,让它的LSAs在所有数据库中退出,然后以最低的顺序开始,在路由器重启过程中出现一个更常见的困难,如果路由器A重新启动,它可能就无法记住它上次使用的序列号并且必须重新开始。如果它的邻居仍然有路由器A之前的序列号在他们的数据库中,较低的序列数将被解释为较老的序列数,并且将被忽略同样,路由过程必须保持下去,直到所有旧的LSA都从网络中退出。考虑到最大寿命可能是一个小时或更长,这个解决方案不太有吸引力。

更好的解决方案是为目前所描述的flooding行为添加一个新规则,如果一个重新启动的路由器向邻居发送一个带有一个序列号的LSA,这个数字看起来比邻居的存储序列号要老。邻居会把自己储存的LSA和序列号发送回路由器,这样,路由器就会知道它在重启之前所使用的序列号,并相应地进行调整。但是必须注意,最后使用的序列号并不是最接近于最大值的,否则,重启路由器将不得不重新启动。必须设置一个规则,限制路由器可能以序列数进行的“跳转”—例如规则可能会说,序列号不能使单个的增加超过整个序列空间的1/1。(实际的公式比这个例子要复杂得多,考虑到年龄限制。)

循环序列号空间

另一种方法是使用循环序列号空间,数字“包装”——也就是说,在32位空间中,数字4,294,967,295后面是0,故障可能导致有趣的两难境地,一个重新启动路由器可能会遇到与线性序列数字所讨论的相同的可信度问题。

循环序列编号产生了一种奇怪的逻辑。如果x是1和4,294,967,295之间的任意数,那么0小于x小于0。这种情况可以在行为良好的网络中进行管理,通过断言两个规则来确定一个序列数大于或小于另一个序列数的规则,给定一个序列数字n和两个序列a和b,a被认为是最近的(更大的)在下列情况中的一个:

网络路由相关的知识_第2张图片

为了简单起见,取一个6位的序列号空间,n=26=64,所以n/2=32

网络路由相关的知识_第3张图片

给定两个序列数字48和18,48是最近的因为根据规则1

48 > 18and(48 – 18) = 30,and30 < 32.

给定两个序列数字3和48,3是最近的因为根据规则

3 < 48and (48 – 3) = 45,and45 > 32.

给定两个序列数字3和18,18是最近的,因为规则

18 > 3and(18 – 3) = 15,and15 < 32>

所以这些规则似乎是在执行循环性

但是,一个行为不那么好的网络又如何呢? 如果一个运行6位序列空间的网络,假设网络上的一个路由器决定要垮台,它脱口而出,3个相同的LSAs和一个44序列号(101100),不幸的是,邻近的路由器也会出现故障,它正在位下降drop bits。这个邻居在第二个LSA的序列号上drop 1 bit,在第三个LSA上又drop 1 bit,三次都是洪水。结果是三个相同的LSAs和三个不同的序列数:

网络路由相关的知识_第4张图片

应用循环规则表明,44比40更近,比8更近,比44更近!其结果是,每个LSA都将被不断地淹没,数据库将不断地被“最新”LSA所覆盖,直到最终缓冲区被LSAs阻塞,cpu过载,整个网络崩溃。

这一连串的事件听起来很牵强。然而,这是事实。ARPANET是现代互联网的先驱,它运行了一个早期的链路状态协议,它有一个六比特的环形序列空间;在1980年10月27日,两个正在经历故障的路由器将整个ARPANET暂停了。

棒棒糖形状序列号空间

一种线性和循环序列空间的混合,棒棒糖有一个线性分量和一个圆形分量,循环空间的问题在于没有比其他数更少的数,线性空间的问题是它们不是圆的。也就是说,它们的序列数是有限的。

当路由器重新启动时,最好从数字A开始,它比所有其他的数字都要少,邻居们会意识到这个数字是什么,如果他们的数据库中有一个从路由器a开始的b,他们可以把这个数字发送到路由器A和路由器A会跳转到这个序列号,在重新启动之前,路由器A可能能够发送多于一个LSA,然后才会听到它所使用的序列号,因此,有足够的重新启动编号是很重要的,因此,A不能在邻居使用之前使用它们,或者将之前使用的数字或之前使用的数字从所有数据库中使用。

这些线性重启的数字构成了棒棒糖的棒状,当它们被用完后,或者是邻居提供了一个可以跳跃的序列数,输入一个圆形的数字空间,棒棒糖的糖果部分。

你可能感兴趣的:(网络安全,路由算法,交换机,计算机网络,网络互联)