路由器的作用是实现不同网段之间的互联。在路由器上运行路由协议,通过生成路由条目用于数据包选择最佳路径转发。因此,当路由器接收到来自一个网络接口的数据包时,首先根据数据包中的目的地址查询路由表,决定转发路径(转发接口和下一跳地址),然后从ARP缓存中找到下一跳地址的MAC地址,路由器将出接口的MAC地址作为源MAC,下一跳地址的MAC作为目的MAC封装成帧头,同时IP数据包里的TTL属性开始减数(-1),最后将数据发送到转发端口,按顺序等待,转发到传输链路上去。
路由的基本功能
路由功能
路由器通过动态路由协议或静态路由协议来学习和维护网络拓扑结构,从而建立和维护路由表,用于数据包查询最佳路径。
路由表里保存了路由器进行路由选择时所需要的关键信息,包含目的地址、目的地址的子网掩码、下一跳地址、转发接口和路由信息的来源、路由优先级和度量值metric等等。路由来源有直连路由、静态路由、缺省路由(默认路由)和动态路由。
路由表里的路由条目可以通过多种路由协议生成。同协议之间互相宣告自己已知的路由信息,完成路由的更新和同步;不同路由协议之间可以相互引入,完成路由同步。
路由器上可以同时运行多个不同的路由协议,每个路由协议都具有自己的选路算法来计算出到达目的网络的最佳路径,因为选路算法不同,所以不同的路由协议针对同一目的网络可能会选择出不同的最佳路径。路由器根据路由优先级决定放入路由表的路由来自那种路由协议。同一个目的网段,来自不同路由协议的路由,路由协议优先级越小,越被优先选择放入路由表中,作为这个目的网段的最佳路由。其中,直连路由>静态路由>动态路由(EIGRP汇总路由 > 外部BGP > 内部EIGRP > IGRP > OSPF > RIP > 外部EIGRP > 内部BGP )。
同一种路由协议下,去往同一网段可能存在多条路径,根据选路算法每一条路径都有一个metric值。通过比较metric值,选择metric值最小的路径为最佳路径。
在路由器上查表可能会匹配上多条路由条目。此时路由器将根据最长匹配原则进行数据的转发。会依据匹配中的掩码长度最长的一条路由进行转发。
转发功能
路由器的主要工作是对数据包进行存储转发,具体过程是:
-
第一步。数据帧到达端口后,端口对帧进行CRC效验并检查目的数据链路层地址是否与本端口一致。
-
第二步。目的数据链路层地址与本端口若一致,则去掉帧的封装并读出IP数据包中的目的地址,查询路由表,决定转发接口和下一跳IP地址。
-
第三步。根据路由表中的下一跳IP地址,从ARP缓存表中查找IP地址对应的MAC地址。将转发接口的MAC地址作为源MAC,下一跳地址的MAC作为目的MAC,封装成帧头。同时,IP数据包的TTL值减一,并重新计算帧效验和。
-
最后,封装成帧,通过转发接口发送到传输链路上。
路由选择涉及三个方面:
- 各种路由协议的处理,都通过IP数据包在路由器间传递网络的路由信息,为路由表的建立提供信息。
- 路由表,从路由协议接收信息,为转发数据包提供所需要的信息。
- 转发过程,从路由表那里请求所需要的信息,为转发数据包做出正确决策。0
建立路由表
每个路由协议处理路由更新,选择到目的地址的最佳路由,提交安装到路由表中。如果有多个动态路由协议运行,会存在多条路由被提交,期望被安装进路由表。
这就需要有一个管理机制,来抑制加表。该机制根据各个路由协议的优先级来决定安装。每个路由协议都有缺省的管理距离值,值越小其优先级越高。各路由协议的缺省管理距离值如下:
- 直接相连:0
- 静态路由:1
- EIGRP汇总路由:5
- EBGP:20
- 内部EIGRP:90
- IGRP:100
- OSPF:110
- IS-IS:115
- RIP:120
- 外部EIGRP:170
- IBGP:200
例,路由器运行着EIGRP、OSPF、RIP和IGRP四种路由协议,他们都有去往192.168.24.0/24的路由。但只有内部EIGRP提交的路由被安装进路由表,因为它管理距离最小,所以优先级最高。
备份路由
没有安装进路由表提交的路由怎么办呢?有两种处理方式:
第一种。每个路由协议周期性提交,尝试安装进路由表。如果优先级最高,在路由表中的路由失效了,次优先级提交的路由会被安装进路由表中。
第二种。是将未安装的路由挂靠在路由表中,当先安装的路由失效后,再将挂靠的路由正式安装到路由表里。
没有自身信息表的路由协议,采取第一种办法,每收到路由更新都尝试安装到路由表中;有自身路由信息表的路由协议,采取第二种办法,安装失败的路由被登记在路由表中,当原路由条目失效,则通知做登记的路由协议的处理进程来安装它们的路由,如果有多个进程安装,仍依照管理距离小的协议优先。
前缀长度
不同前缀长度的路由被看做是不同的路由,会同时安装到路由表中。例如,有三个路由协议分别是:
- RIP( 192.168.32.0/25 )
- EIGRP ( 192.168.32.0/26 )
- OSPF ( 192.168.32.0/24 )
上述路由的前缀长度(子网掩码)不同,所以是去往不同目的网络的路由,被同时安装进路由表。
转发决策
最长匹配
先看一下路由器刚才安装的三个路由条目:
router#show ip route
…
D 192.168.32.0/26 [90/25789217] via 10.1.1.1
R 192.168.32.0/25 [120/4] via 10.1.1.2
O 192.168.32.0/24 [110/229840] via 10.1.1.3
如果目的地址为192.168.32.1 ,将选择哪条路由呢?这依赖于所匹配的前缀长度,最长匹配的前缀长度优先。
匹配是用路由条目中的掩码与目的地址相与后再与网络地址比较,相同意味着匹配。该地址与这 三条路由都匹配,但第一条匹配的路由前缀(26)最长,所以该包将被转发到10.1.1.1 。
如果目的地址为192.168.32.100,它与第一条路由不匹配,与第二、第三条路由匹配,所以将被转发到 10.1.1.2。
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。
数据包的转发决策依赖于三部分的进程:路由协议、路由表、实际的转发交换,这三者的关系图示如下:
路由选择原理
最长掩码匹配
6种路由
主机路由 | 子网 | 一组子网汇总路由 | 主类网络号 | 超网汇总(CIDR) | 缺省地址(默认路由)
现有6条路由,
-
172.16.10.1/32
-
172.16.10.0/30
-
172.16.10.0/24
-
172.16.0.0/16
-
172.0.0.0/8
-
默认路由
那,
去往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.11.100,被172.16.0.0/16匹配中
去往172.17.10.1,被172.0.0.0/8匹配中
去往173.16.10.1,被默认路由匹配中
路由表中路由解释
show ip route
5.0.0.0/24 is subnetted, 1 subnets
S 5.5.4.0 [1/0] via 12.1.1.2
最左边:路由标识(路由来源),S表示是静态路由
往右:目的网络地址,5.5.4.0/24
再往右:[1/0] AD/metric。静态路由默认管理距离为1,metric值为0
管理距离:确定路由协议的优先级
metric:度量值,到达目的网络的开销。确定到达目的网络的最佳路径。
度量值分类:
- 带宽,负载,延迟,可靠性。EIGRP协议使用
- 开销。OSPF、IS-IS协议使用
- 跳数。RIP协议使用
静态路由配置
iP route 目的网段 掩码 [ 出接口 | 下一跳 ]
通信是双向,需要注意往返流量。只配置出接口会产生ARP消息。通过下一跳和出接口一起配置,使路由多一个路由属性,可用在BFD和路由策略中。
路由递归
有两条路由:
ip route 192.168.20.0 255.255.255.0 192.168.23.3
ip route 192.168.23.0 255.255.255.0 s0/0
当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
黑洞路由
不需要的流量丢弃到null 0接口(路由的一个黑洞接口)
ip route 11.11.11.0 255.255.255.0 null0
loopback接口
也叫回环口,是一个逻辑的、虚拟的接口。可为接口配置IP地址 (可以是32位的IP地址)。Loopback 接口创建后,除非人为shutdown,否则不会down。
作用:模拟路由器的直连网段,用于测试。可用于设备管理(Loopback接口比较稳定)。供其它协议使用。例如OSPF、BGP、MPLS等。
动态路由协议
路由协议运行在路由器上,用于发现网络生成路由条目,添加到路由表中,并通过路由协议与邻接路由器分享。
距离矢量路由协议:
距离矢量路由协议,并不了解网络的拓扑。只知道自身与目的网络之间的距离。应该往那个方向,从哪个接口转发数据。直接传递路由条目。周期性的更新自己整张路由表。
距离=有多远,矢量=方向
链状态路由协议:
传递的不是路由条目,而是自己本地的一些链路状态的信息。这些链路信息需要在全网宣告,使拓扑中的路由器了解整个网络的拓扑情况。
链路状态的信息是 触发更新。
路由更新
有类路由协议:在进行路由更新的时候是不带掩码信息;代表路由协议有RIPv1、 IGRP;
无类路由协议:在更新路由协议的时候,包含网络前缀以及子网掩码,更加精准。代表路由协议有RIPv2、OSPF、EIGRP、IS-IS,BGP。
有类及无类路由查找
有类路由的情况下:
有类路由(no ip classless或ip classful)
-
如果路由表中有主类网络,则往下查找子网
-
如果有该子网的路由,就在该子网中进一步查找
-
最后查找失败,则丢弃数据包 ,不管有无配置默认路由。
无类路由的情况下:
无类路由(ip classless,默认打开)
-
路由器不会注意目的地址的类别
-
在目的地址和本身已知的路由之间进行逐位匹配,找到最长匹配的路由。
-
最长匹配没找到,则查看是否有默认路由。有则转发,无则丢弃