全是干货!网工路由基础【路由选路原理】解析!
路由器的是实现网络互连,在不同网络之间转发数据单元的重要网络设备。 路由器主要工作在OSI 参考模型的第三层(网络层 ),路由器的主要任务就是为 经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点 。
为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表( Routing Table),供路由选择时使用。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。
因此,当路由器接收到来自一个网络接口的数据包时,首先根据其中所含的目的地址查询路由表,决定转发路径(转发接口和下一跳地址 ),然后从 ARP缓存中调出下一跳地址的MAC地址, 将路由器自己的MAC地址作为源MAC,下一跳地址的MAC作为目的MAC封装成帧头,同时IP 数据包头的 TTL(Time To Live )也开始减数 , 最后将数据发送至转发端口,按顺序等待,传送到输出链路上去。
在这个过程中, 路由器被认为执行两个最重要的基本功能:路由功能与交换功能。
路由器的基本功能
路由功能
路由功能是指路由器通过运行动态路由协议或其他方法来学习和维护网络拓扑结构,建立,查询和维护路由表。
路由表里则保存着路由器进行路由选择时所需的关键信息,包含了目的地址、 目的地址的掩码、下一跳地址、转发端口、路由信息来源、路由优先级、度量值( metric )等。
路由信息可通过多种协议的学习而来, 其来源方式可分为直连路由、静态路由、缺省路由和动态路由。一个路由器上可以同时运行多个不同的路由协议,每个路由协议都会根据自己的选路算法计算出到达目的网络的最佳路径,但是由于选路算法不同, 不同的路由协议对某一个特定的目的网络可能选择的最佳路径不同。
此时路由器根据路由优先级 (决定了来自不同路由来源的路由信息的优先权)选 择将具有最高路由优先级( 数值最小)的路由协议计算出的最佳路径放置在路由表中,作为到达这个目的网络的转发路径(优先级顺序:直连路由>静态路由 >动态路由(OSPF>RIP))
而对于一个特定的路由协议,可以发现到达目的网络的所有路径,根据选路算法赋予每一条路径metric值,并比较metric值,选择metric数值最小的路径为最佳路径。
在路由器的交换过程中查找路由时也可能会发现能匹配上多条路由条目。此时路由器将根据最长匹配原则 ( 最长匹配原则的优先级最高,大于优先级和metric)进 行数据的转发。路由器会选择匹配最深的,也就是说可以匹配的掩码长度最长的一条路由进行转发。
转发功能
一般来说,路由器的主要工作是对数据包进行存储转发,具体过程如下:
第一步:当一个数据帧到达某一端口,端口对帧进行CRC校验并检查其目的数据链路层地址是否与本端口符合。
第二步:如果通过检查,则去掉帧的封装并读出IP数据包中的目的地址信息,查询路由表,并决定转发接口与下一跳地址。
第三步:根据路由表中所查到的下一跳IP地址,再从ARP缓存中调出下一跳的 MAC地址,并将转发接口的MAC地址作为源MAC,下一跳地址的MAC作为 目的 MAC,封装成帧头。同时,IP 数据包头的TTL减一,并重新计算校验和。
第四步:最后封装成帧,经转发接口发送到输出链路上去。
那么问题来了:路由器在诸多路由协议、手工配置和路由策略下,是如何选择最佳路由的?理解这个问题,对于掌握路由器的工作原理大有裨益。
路由选择牵涉到三个方面:
1、 各种路由协议的处理,包括rip,igrp,eigrp,ospf,is-is,bgp 等,每个协议都通过IP数据包在路由器间传递网络的路由信息,为路由表的建立提供信息。
2、 路由表,它从路由协议那里接受信息, 并为转发数据包提供所需要的信息。
3、 转发过程,它从路由表那里请求所需要信息,为正确转发数据包做出决策。
下面从几个方面对此进行讨论。
建立路由表
每个路由协议处理路由更新时,选择到目的地址的最佳路由,并试图安装到路由表中。如果只有多个动态路由协议运行,存在争先安装路由的问题。
必须有机制来管理路由的安装。该机制就是根据各个路由协议的优先级来决定安装过程。每个路由协议都有缺省的管理距离值,值愈小其优先级愈高。各路由协议的缺省管理距离值如:
假设路由器运行EIGRP 、OSPF、RIP、IGRP 四种路由协议,它们都得到了到网络192.168.24.0/24 的路由, 但只有EIGRP( internal )可将其路由安装到路由表中,因为其管理距离值最小,优先权最高。
备份路由
其他协议对于未安装的协议怎么处理?EIGRP 安装的路由失败了怎么办?对此有两种解决方法:
一是每个路由协议周期性地尝试安装它们的路由到路由表中,如果EIGRP 安装的路由失效了,IGRP会将它的相应路由安装到路由表中。
另一个办法是将未安装的路由挂靠在路由表中,如果先前安装的路由失效了,将挂靠的路由正式安装到路由表中。
对于没有自身路由信息表的路由协议,比如IGRP,将采取第一种方法,每次收到路由更新都尝试安装到路由表中。
对于EIGRP 、IS-IS 、OSPF、BGP 、RIP 这样的有自身路由信息表的路由协议,将采取第二种办法,安装失败的路由将登记在路由表中,当原路由条目失效时,将通知做登记的路由协议的处理进程来安装它们的路由,如果有多个进程来安装,管理距离小的协议优先。
调整管理距离值
改变路由协议的缺省距离值是比较慎重的动作,有可能导致路由循环或其他奇怪的问题,必须非常小心!
其命令为distance 后跟具体的值。也可以只改变从某一协议分布进来的路由的管理距离值。在静态路由的最后也可以跟上一个值,改变原来的缺省值1。
前缀长度
不同前缀长度的路由将视为不同的路由,将同时安装到路由表中,比如三个路由协议分别得到以下路由:
EIGRP (internal): 192.168.32.0/26
RIP: 192.168.32.0/24
OSPF: 192.168.32.0/19
三个路由的前缀长度(子网掩码)不同,所以得到不同目的网络的路由,同时安装到路由表中。
转发决策
先看一下路由器刚才安装的三个路由条目:
router#show ip route .... D 192.168.32.0/26 [90/25789217] via 10.1.1.1 R 192.168.32.0/24 [120/4] via 10.1.1.2 O 192.168.32.0/19 [110/229840] via 10.1.1.3
如果目的地址为192.168.32.1 ,将选择哪条路由呢?这依赖于所匹配的前缀长度,最长匹配的前缀长度优先。
匹配是用路由条目中的掩码与目的地址相与后再与网络地址比较,相同意味着匹配。该地址与这 三条路由都匹配,但第一条匹配的路由前缀(26)最长,所以该包将被转发到10.1.1.1 。
如果目的地址为192.168.32.100,它与第一条路由不匹配,与第二、第三条路由匹配,所以将被转发到 10.1.1.2。
具体的路由查找速度依赖于路由表的结构与硬件速度,如采用二叉树结构的路由表,那么32 位的 IP地址最多查找32次就可以决定是否找到适应的路由条目。
IP CLASSLESS 的影响
该命令只影响转发进程,不影响路由表的建立。看以下的例子:
router#show ip route .... 172.30.0.0/16 is variablysubnetted, 2 subnets, 2 masks D 172.30.32.0/20 [90/4879540] via10.1.1.2 D 172.30.32.0/24[90/25789217] via 10.1.1.1 S* 0.0.0.0/0 [1/0] via 10.1.1.3
假设 ip classless 命令没有配置,那么:
到 172.30.32.1 的包被转发到10.1.1.1,因为该路由是最长匹配。
到 172.30.33.1 的包被转发到10.1.1.2,因为该路由是最长匹配。
到192.30.32.1 的包被转发到10.1.1.3,因为无对应的网络路由,用缺省路由转发。
到 172.30.100.1 的包无法转发,被丢弃。为什么不用缺省路由?因为该目的地址的主网络部分在路由表中已知,并有子网路由,故路由器查找对应的子 网路由,结果没有匹配的路由,最终丢弃该包。如果用IP classless 命令进行了配置,那么最终将应用缺省 路由将数据包转发到10.1.1.3。
数据包的转发决定依赖于三部分的进程:路由协议、路由表、实际的转发交换,这三者的关系图示如下:
选择路由时采取最长匹配的原则,而路由协议安装路由的优先级取决于管理距离值。
路由选择原理
最长掩码匹配
主机地址
子网
一组子网(汇总路由)
主类网络号(ABC类)
超网汇总(CIDR)
缺省地址(默认路由)
示例:
去往172.16.10.1,应该被172.16.10.1/32匹配住
去往172.16.10.2,应该被172.16.10.0/30匹配住
去往172.16.10.100,应该被172.16.10.0/24匹配住
去往172.16.20.1,应该被172.16.0.0/16匹配住
去往172.17.20.1,应该被172.0.0.0/8匹配住
去往192.168.10.1,应该被默认路由匹配住
show ip route
4.0.0.0/24 is subnetted, 1 subnets
S 4.4.4.0 [1/0] via 12.1.1.2
路由标识:也可称为路由来源,S表示静态
目的网络地址:4.4.4.0/24,目的网络地址
[1/0] 管理距离AD,静态路由为1 ,Metric值,静态路由0
AD:管理距离,用于确定路由协议的优先级
Metric:度量值,用于确定到达目的的最佳路径
各类协议的管理距离:
R1#show ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "connected", distance 0, metric 0 (connected) 直连路由
Routing Descriptor Blocks:
* directly connected, via Loopback0
Route metric is 0, traffic share count is 1
R1#show ip route 4.4.4.0
Routing entry for 4.4.4.0/24
Known via "static", distance 1, metric 0 静态路由
Routing Descriptor Blocks:
* 12.1.1.2
Route metric is 0, traffic share count is 1
全局模式下,show ip protocols可以查看动态路由协议的管理距离
show ip protocols
Routing Protocol is "ospf 1"
Outgoing ** filter list for all interfaces is not set
Incoming ** filter list for all interfaces is not set
Router ID 1.1.1.1
Number of areas in this router is 0. 0 normal 0 stub 0 nssa
Maximum path: 4
Routing for Networks:
Routing Information Sources:
Gateway Distance Last **
Distance: (default is 110)
度量值分类:
带宽,负载,延迟,可靠性,EIGRP协议使用
开销 ,OSPF,IS-IS协议使用
跳数 ,RIP协议使用
静态路由配置:
配置要点:通信是双向的,因此要留意往返流量
尽量配置下一跳IP,不要配置出接口,会产生ARP消息,但可以下一跳和出接口一起配置,如:
ip route 192.168.23.0 255.255.255.0 s0/0 192.168.12.2 ,多一个路由属性,比如BFD检测,路由策略会用到。
注意通信双方的源地址,以及目的地址
路由递归查询
何谓路由递归:假设上面的图例,R3后面还有一个网段,比如192.168.20.0,那么在R1上可以这样写:
ip route 192.168.20.0 255.255.255.0 192.168.23.3
那么当R1收到一个去往目的网络192.168.20.0/24的数据包时,先查路由表,发现有去往这个目的网络的路由,但发现下一跳路由器是192.168.23.3,这时路由器会做一个操作,路由递归。那就是再查路由表,看192.168.23.3怎么去,发现去往192.168.23.3,有路由,下一跳是192.168.12.2。
浮动静态路由:
去往一个目的网段,有多个路径,一条为主,一条为备
指定两个下一跳,通过调整AD值,正常情况下,AD值小的路由加表,AD值大的大的隐藏在后台,当主路由出现问题时才加入路由表,
ip route 192.168.23.0 255.255.255.0 192.168.12.2
ip route 192.168.23.0 255.255.255.0 192.168.12.3 10 //AD调整为10
负载均衡:
去往一个目的网段,有多个路径,路由的AD值一致,metric值也一致,流量两条链路同时走
ip route 192.168.23.0 255.255.255.0 192.168.12.2
ip route 192.168.23.0 255.255.255.0 192.168.12.3
汇总路由:
改变子网掩码,通过汇总路由匹配明细,从而简化路由表,减少配置量及路由负器载
ip route 192.168.0.0 255.255.252.0 192.168.254.1
实际上匹配了:
192.168.0.0/24 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24
默认路由:
常用于边缘路由器,比如,最底层接入路由器,或者出口路由器
匹配所有目的网段,
ip route 0.0.0.0 0.0.0.0 192.168.12.2
黑洞路由:
将不需要的流量丢弃到null 0接口,null 0 是路由的一个黑洞接口,
ip route 10.10.10.0 255.255.255.0 null 0
loopback接口:
也叫回环口,是一个逻辑的、虚拟的接口
使用全局配置命令 interface looback x 创建
创建完成后即可为接口配置IP地址 (可以是32位的IP地址)
Looback 接口创建后,除非人为shutdown,否则不会down
作用:
模拟路由器的直连网段,用于测试
可用于设备管理(Loopback接口比较稳定)
供其它协议使用。例如OSPF、BGP、MPLS等
其他用途,总之非常广泛
案例分享:
通过浮动静态路由,结合BFD双向技术检测,保证出口路由冗余,环境如下:
交换机为二层交换机
R5 IP地址:
loopback:5.5.5.5/32 E0/1:100.1.1.5/24 E0/3:200.1.1.5/24
R6 IP地址:
loopback:6.6.6.6/32 E0/0:100.1.1.6/24 E0/2:200.1.1.6/24
配置要点:
接口下开启BFD检测,R5,R6都要开启,并且参数保持一致,因为BFD是双向检测技术
配置静态路由,必须带上出接口字段,否则BFD无法检测
将静态路由与BFD进行关联
查看:show bfd nei
动态路由协议
通过在路由器之间,运行动态路由协议,赋予路由器动态感知网络变化,以及发现网络的能力,并且将发现的网络生成路由条目,自动的添加到本地路由表中,并进行维护。
动态路由协议分类
距离矢量路由协议:
距离矢量路由协议,他并不了解网络的拓扑
只知道自身与目的网络之间的距离
应该往那个方向,从哪个接口转发数据
直接传递路由条目
周期性的更新自己整张路由表
距离=有多远,矢量=方向
链状态路由协议:
传递的不是路由条目,而是自己本地的一些链路状态的信息
全网都能够收集到这些链路信息,了解整个网络的拓扑情况
触发更新
有类路由协议:
在进行路由更新的时候是不带掩码信息;
RIPv1、 IGRP
无类路由协议:
在更新路由协议的时候,包含网络前缀以及子网掩码,更加精准。
RIPv2、ISPF、EIGRP、IS-IS,BGP
有类及无类路由查找区别
无类路由(ip classless,默认打开):
路由器不会注意目的地址的类别,它会在目的地址和本身已知的路由之间进行逐位执行最长匹配。
去往目的IP:192.168.1.1,走F1/0
去往目的IP:192.168.1.33,走F0/0
有类路由(no ip classless或ip classful):
当路由器收到一个数据包时,先查看目的地址所属的主类网络。
去往目的IP:192.168.1.1,主类网络是192.168.1.0/24
查子网,匹配192.168.1.0/27,所以走F1/0
去往目的IP:192.168.1.33,主类网络是192.168.1.0/24
查子网,应该是192.168.1.32/27,所以被丢弃
有主类路由的情况下:
如果路由表中有主类网络,则查找下属子网
如果有该子网的路由,就在该子网中进一步查找
如果查找失败,则丢弃数据包 ,不管有没有配置默认路由。
无主类路由的情况下:
则查看是否有默认路由,有则转发,无则丢弃
|| 备考不用慌,大佬带你飞 : 每三位IE,有两位来自思博 进入全国网络工程师交流群 ,请扫描下方二维码↓↓↓
群里有行业大咖、实战分享、技术交流、技术咨询、企业内推等机会
若群满,请添加老杨微信,邀你进群
【推荐阅读】
|