路由,即路由选择(Routing),是指在计算机网络中选择数据传输路径的过程。路由器(Router)是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中,选择最佳路径将数据包从源节点传递到目标节点。
路由的类型
静态路由(Static Routing):
- 由网络管理员手动配置。
- 路由信息是固定的,不会自动更新。
- 优点:简单、开销小。
- 缺点:不适用于大型或动态变化的网络。
动态路由(Dynamic Routing):
- 使用路由协议自动学习和更新路由信息。
- 路由器之间互相交换路由信息,自动选择最佳路径。
- 优点:适应网络变化,适合大规模网络。
- 缺点:开销较大,需要更多的计算资源。
比较
特点 静态路由 动态路由 配置 手动配置 自动更新 适应性 固定,不适应变化 动态调整,适应变化 维护工作量 较高,需人工维护 较低,自动维护 复杂性 低,简单明了 高,需要配置和管理协议 资源消耗 低,节省资源 高,消耗计算和带宽资源 常见的动态路由协议
RIP(Routing Information Protocol):
- 使用距离向量算法。
- 适用于小型网络。
- 路由更新周期为30秒,最多跳数为15。
OSPF(Open Shortest Path First):
- 使用链路状态算法。
- 适用于大型网络。
- 路由更新是基于网络变化进行的。
BGP(Border Gateway Protocol):
- 主要用于互联网中的自治系统之间的路由选择。
- 使用路径向量算法。
- 适用于跨域路由。
路由表
路由器通过路由表来决定数据包的转发路径。路由表包含以下信息:
- 目标网络地址
- 子网掩码
- 下一跳(Next Hop)地址
- 接口(Interface)
路由选择的基本步骤
路径发现:
- 路由器通过路由协议或者静态配置获得可达网络的路径信息。
路径选择:
- 根据路由表选择最佳路径。
路径维护:
- 动态路由协议会定期更新路由表,确保路由信息的准确性。
路由协议的分类
内部网关协议(IGP, Interior Gateway Protocol):
- 用于同一自治系统(AS)内。
- 常见协议有RIP、OSPF、EIGRP(Enhanced Interior Gateway Routing Protocol)。
外部网关协议(EGP, Exterior Gateway Protocol):
- 用于不同自治系统之间。
- 主要协议是BGP。
路由器在转发数据时,确实需要先在路由表中查找相应的路由,主要有三种途径:
- 直连路由:当路由器的一个接口配置了IP地址,并且此接口处于激活状态时,路由器会自动将此接口直连的网络添加到路由表中,这种路由被称为直连路由。直连路由无需手动配置,也无需管理员干预,只要接口配置了IP地址并且激活,路由器就会自动生成直连路由。
- 静态路由:静态路由是由管理员手动添加的路由。管理员通过命令或配置界面,指定目标网络、子网掩码、下一跳地址或出接口等信息,将静态路由添加到路由表中。静态路由不会自动更新,需要管理员根据网络变化手动修改或删除。静态路由的优点是不会占用路由器太多的CPU和RAM资源,也不会占用太多带宽,但需要管理员对网络拓扑有深入的了解。
- 动态路由:动态路由是由路由协议动态建立的路由。路由器通过运行路由协议(如RIP、OSPF、BGP等),与相邻路由器交换链路状态和路由信息,根据这些信息计算出最佳路径,并自动更新路由表。动态路由能够自动适应网络变化,无需管理员手动干预,但会占用一定的CPU和RAM资源,并可能产生额外的网络流量。
在路由查找过程中,路由器会根据数据包的目的IP地址和路由表中的路由条目进行匹配,选择最佳的路径进行转发。如果路由表中没有匹配的路由条目,路由器可能会选择默认路由或进行其他处理。
bash
查看路由表:
[root@localhost ~]# ip r #或使用命令 ip route 查看路由和网关
default via 192.168.2.1 dev ens33 proto dhcp metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.10 metric 100
#via:通过的意思,相当于下一跳
案例需求:在虚拟机B(桥接)上ping虚拟机A(net网络)的ens33网卡IP。
虚拟机A :net模式 192.168.226.100
虚拟机B:桥接模式 192.168.2.10
解决思路:
1、在主机B上添加默认路由,使其能找到主机A的ens36网卡
2、在主机A上添加一块桥接的网卡
解决步骤:
在主机A,192.168.226.100操作
查看192.168.226.100的IP如下
接下来对192.168.2.10操作
bash
[root@localhost ~]# ip route add default via 192.168.2.11
[root@localhost ~]# ip r show #查看 IP 路由表
default via 192.168.2.11 dev ens33
default via 192.168.2.1 dev ens33 proto dhcp metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.10 metric 100
命令解读:
ip route add default via 192.168.2.11 用于配置网络路由表。下面是这个命令的详细解释:
ip route:
这是 ip 命令的 route 子命令,用于查看或修改 IP 路由表。
add:
这是一个操作,表示要添加一个新的路由到路由表中。
default:
这指定了要添加的路由的目的地。default 是一个特殊的路由,表示没有明确匹配的其他路由的所有流量都将使用这个路由。换句话说,它是所有"其他"流量的默认出口。
via 192.168.2.11:
这指定了下一跳(或网关)的地址。当数据包要发送到 default(即所有没有明确路由的数据包)时,它们将首先被发送到 192.168.2.11 这个地址。这通常是一个路由器或网关的地址,负责将数据包转发到其最终目的地。
bash
#启用 IP 转发功能
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
/proc/sys/net/ipv4/ip_forward: 这是一个虚拟文件系统(procfs)中的文件,用于控制内核参数。在这个特定的例子中,这个文件控制 IPv4 的 IP 转发功能。
- 如果这个文件的值为
0
,则 Linux 系统不会转发 IP 数据包(除了回环接口上的数据包)。 - 如果这个文件的值为
1
,则 Linux 系统将转发来自一个网络接口的数据包到另一个网络接口,如果路由表中有相应的条目。
现在就实现连通啦 。
添加静态路由
有两种主要的方式来添加静态路由:
-
使用
route
命令:bashroute add -net 目标网络地址 netmask 子网掩码 gw 下一跳地址
例如,要将数据包发送到目标网络
192.168.1.0/24
,网关为192.168.0.1
,可以使用以下命令:bashroute add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
-
使用
ip route
命令:baship route add 目的网络/子网掩码 via 网关
同样,以
192.168.1.0/24
和网关192.168.0.1
为例:baship route add 192.168.1.0/24 via 192.168.0.1
删除静态路由
同样地,也有两种主要的方式来删除静态路由:
-
使用
route
命令:bashroute del -net 目标网络 netmask 子网掩码 gw 网关地址
以删除目标网络为
192.168.1.0/24
的静态路由为例:bashroute del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1
-
使用
ip route
命令:baship route del 目标网络/子网掩码 via 下一跳地址
同样以
192.168.1.0/24
和下一跳地址为192.168.0.1
为例:baship route del 192.168.1.0/24 via 192.168.0.1
开启路由转发
bash
临时设置
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
#默认是零,没有开路由。1表示开启
永久设置
[root@localhost ~]# vim /etc/sysctl.conf #添加如下内容
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p #立即生效