一、分类
- 智能路由器上最重要的功能是 IP 路由。IP 报文根据路由表进行路由决策,路由表中的路由项又有各种不同的分类。
按目的地址类型不同可划分
- 单播路由。
- 组播路由。
- 单播路由表中保存了各种路由协议发现的路由并形成一张路由表,根据路由表项的来源来划分,通常分为以下3类:
- 接口路由。也称为直连路由,当设置接口 IP 地址和掩码时会自动增加的路由, 是报文通往该接口 IP 地址所在网络的路由。
- 静态路由。网络管理员手工配置的路由。当网络结构比较简单时,只需配置静态 路由就可以工作,适用于拓扑结构简单并且稳定的小型网络。静态路由不能自动适应网络 拓扑结构的变化,当网络发生故障或者拓扑发生变化后,必须再次由网络管理员手工修 改配置。
- 动态路由。动态路由协议发现并设置路由,常见的动态路由协议有 RIP、OSPF 和 IS-IS 等。路由表会根据链路状态或网络拓扑结构变化进行动态生成和删除。常见的动 态路由软件有 Zebra 和 Quagga 等。在智能路由器领域一般只有唯一的互联网出口,因此 不会用到动态路由。
根据路由目的地址的不同
- 策略路由。也称为源地址路由,根据 IP 报文源地址、端口、报文长度、优先级 等内容灵活地进行路由选择。
- 普通的目的地址路由。仅根据报文目的地址来选择出接口或者下一跳地址。
按路由决策的方式不同
- 策略路由。也称为源地址路由,根据 IP 报文源地址、端口、报文长度、优先级 等内容灵活地进行路由选择。
- 普通的目的地址路由。仅根据报文目的地址来选择出接口或者下一跳地址。
根据目的地与该路由器是否直接相连
- 直接路由。目的地所在网络与路由器直接相连。
- 间接路由。目的地所在网络与路由器非直接相连。
缺省路由
-
还有一个概念是缺省路由,也称默认路由,是指在路由器中没有找到精确匹配路由表 项后所使用的路由。
如果报文的目的地址在路由表中没有找到匹配的路由,而且还没有默认路由,那么该报文将被丢弃并向报文的源地址发送一个网络地址不可达的ICMP差错报文。
智能路由器的默认路由通常是通过DHCP或PPPoE自动获取下一跳地址后,动态生成并写入到路由表中的。
二、单播路由
- 报文的目标地址为 A、B、C 类地址的路由表项为单播路由。
- 目标 IP 地址是告诉报文 目的主机地址在哪里,而路由是告诉报文如何到达目的地址。
- 网络上的每个路由器独立进行 决策,将报文转发到离目的地址更近的路由器上,就这样一步一步地路由到目标主机上。
三、单播路由分类
单播路由表中保存了各种路由协议发现的路由并形成一张路由表,根据路由表项的来源来划分,通常分为以下3类:
-
接口路由。也称为直连路由,当设置接口 IP 地址和掩码时会自动增加的路由, 是报文通往该接口 IP 地址所在网络的路由。
-
静态路由。网络管理员手工配置的路由。当网络结构比较简单时,只需配置静态 路由就可以工作,适用于拓扑结构简单并且稳定的小型网络。静态路由不能自动适应网络 拓扑结构的变化,当网络发生故障或者拓扑发生变化后,必须再次由网络管理员手工修 改配置。
-
动态路由。动态路由协议发现并设置路由,常见的动态路由协议有 RIP、OSPF 和 IS-IS 等。路由表会根据链路状态或网络拓扑结构变化进行动态生成和删除。常见的动 态路由软件有 Zebra 和 Quagga 等。在智能路由器领域一般只有唯一的互联网出口,因此 不会用到动态路由。
四、route命令
- route 命令是用于管理 和维护操作系统内核的路由表,主要用于设置到特定主机或网络的静态路由。可以增加、 删除及查看路由表等。
五、查看路由表
- 每当增加一个接口 IP 时将自动创建一个直连的接口路由。对于通过 DHCP获得的 IP 地址,除了设置直连路由外还可能会设置网关的默认路由。
路由表格式
- 当前openwrt的IP为192.168.43.123。
- “route –n”命令来列出路由表项:-n 选项表示列出数字地址形式,而不是主机名或者域名。
- 第一行:是一个默认路由,这表明如果没有精确匹配路由,就会将IP报文发送到IP地 址192.168.43.1上。UG 表示一个启用的网关地址。br-lan表示出接口地址。
- 第二行:是一个接口路由,为局域网接口的路由项,表示局域网为192.168.43.0网段。 br-lan表示通过该网卡和局域网网络相连接。
- 第三行:是一个接口路由,表示目的地址是主机地址。这在接口配置IP和掩码时会默认自动设置上。如果不设置掩码则默认A类地址为8位掩码,B类地址为16位掩码,C类地址为24位掩码。
路由表的字段含义
-
对于给定的路由表项的路由标识(Flahs)通常有以下几种:
-
U:路由表项可以使用。
-
H:路由表项的目标地址是主机地址,即掩码为 32 位。
-
G:路由表项下一跳为网关。
-
R:动态路由算法生成的。
-
D:该路由通过重定向或者守护进程动态安装的。
-
M:该路由被路由守护进程或重定向报文修改。
-
A:该路由被 addrconf 安装。
-
C:缓存(cache entry)。
-
!:拒绝路由(reject route)。匹配这一条报文将丢弃。
-
六、路由的设置
- 使用ip命令和route命令均可对路由表进行管理,默认路由通过以下两个命令均进行设置:
- 这两个命令行为完全相同,只是ip命令使用 Netlink 接口设置到内核中,route 命令通 过传统的 ioctl 接口设置到内核中。Linux 内核已经不建议使用 ioctl 接口。
ip route add default via <gw ip> dev eth0 route add default gw <gw ip> dev eth0
- 查看路由信息。
-
ip route get命令
- 针对目的IP,如何来选择路由表项?路由表中的信息包含了IP层的决策。采用最长匹配算法来匹配,如果有多个匹配则会随机选择一个作为路由,可以使用下面命令来查看匹配的路由。
七、路由功能的划分
- 为了系统的稳定性,操作系统将路由功能划分为两部分:
- 管理平面:也称为控制平面。是指用于路由学习,生成路由表的部分。Linux 用 户空间的程序就属于管理平面。
- 转发平面:也称数据平面(Data Plane)。转发平面是指系统中进行数据报文的接 收、查找路由表、根据路由表进行决策等的部分。转发平面在 Linux 内核中。
- 转发平面:也称数据平面(Data Plane)。转发平面是指系统中进行数据报文的接 收、查找路由表、根据路由表进行决策等的部分。转发平面在 Linux 内核中。
- 路由器可以实现转发面和管理平面的相互独立。为了做到控制平面和转发平面的分离,Linux 内核构建了一张转发表,专门用于指导数据报文的转发。用户空间的应用层软件形成控制平面的路由表,可能会有多种可选的路由规则,但路由软件系统会计算出一条最佳的路径然后写入内核中。两者之间通过接口(Netlink)来实现相互操作。在小型智能路由器上网络比较单一,路由表项不用动态生成,只有固定的路由表。因此一般不会使用quagga路由软件生成的控制平面的路由表,只有静态路由。在小型智能路由器上可以认为 两者完全相同。数据平面保存的路由表,也称为路由转发表(Forwarding Information Base, FIB),用来指导IP报文的转发,转发算法如下:
- 组织和存储选出的路由表项。
- 按照 LPM(最长掩码匹配)算法提供路由检索接口。
- 报文的转发过程为:首先网卡接口上接收报文,并查看报文的目的地址:然后根据目 的地址来查询转发表;最后按查询到的路径把分组报文转发出去。
八、增加静态路由的一个注意事项
- 在增加静态路由时需注意:在 Windows 下增加静态路由,必须设置有下一跳地址;在 Linux 下增加静态路由时,可以仅设置出接口而不设置下一跳地址。
- 如果增加静态路由时仅设置出接口而不设置下一跳地址,在一些没有开启ARP代理的设备上将会遇到不能连通网络的问题。因为使用出接口地址时,Linux 会认为目标地址 网络是直连可达的网络,将直接发出 ARP 请求来查询目标 IP 地址的 MAC 地址,如果路 由器没有启动 ARP 代理,就不会发出 ARP 响应消息,这时 Linux 就会因为找不到目标MAC地址而转发失败。
-
如果直接指定网关地址,那ARP请求就直接请求网关地址的MAC地址,然后进行报文转发。
九、静态路由配置
- 使用命令行对路由表进行设置时,在重启之后配置均需重新设置。OpenWrt 的静态路由配置在配置文件/etc/config/network的route配置节中,在启动过程中 netifd 模块会读取 该配置文件并进行设置。
- 可选的配置选项见下表:
演示案例
- 例如局域网还有一个192.168.9.0/24网络,那么我们将增加下面所示的配置,就 可以通过网关地址 92.168.6.10到达 192.168.9.0/24网络。
- 进行重启后,使用route -n 命令来查看,路由表增加了以下内容:
十、策略路由
- 待续
十一、IGMP组播路由
- 待续