Linux 计算机网络 route 路由表、多网段与 bond 的故事

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Linux 计算机网络 route 路由表、多网段与 bond 的故事

在之前的章节中介绍了计算机网络的发展以及各种解析在之中我们提到了每个主机设备都会维护一张自己的路由表通过路由表来确定在不同网络之间怎么将数据规划传输到各自的目的路线中。所以如果主机不含路由表那么所有数据都无法发送出去。

路由表

当设备处于一个网络或多个网络的时候通过网关获取 ip 后开始建立的表格。通过路由表当前设备才知道如何将数据发送出去。路由表包含网络周边的拓扑信息是为了实现路由协议和静态路由的选择。

所以路由工作在 TCP/IP 模型的底层网络层可以通过转发分组来实现两个或多个子网相连。

桥接和路由的区别是

  • 桥接在链路层路由是网络层。

  • 桥接是通过 MAC 进行识别路由是通过 ip 进行识别。

  • 可以查看 Linux 计算机网络 从零到一 中桥接部分。

比如当我们需要将数据发送到 123.123.123.123 这个 ip 的时候我们首先要判断当前是否能与这个 ip 直接访问。如果不能需要使用哪一个网卡将数据转发到哪一个 Gateway。所以路由表决定了我们该数据下一跳 Next Hop 的目的地。

是否能够直接访问就会使用目标地址 Desctination 与子网掩码 Genmask 计算得出。

route

查看路由

Linuex 中可以使用 route 来查看当前服务器的路由表

route -n # 命令等价于 netstat -rn

在这里插入图片描述

Centos7 下每一条信息都包含

options描述
Destination需要发送到的目标网络或目标主机。Destination 为 default0.0.0.0时表示这个是默认值无匹配时走这里
Gateway网关地址0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段通信时不需要经过网关如果为其他值如192.168.111.2则表示为这一行的网关
GenmaskDestination 字段的网络掩码Destination 是主机时需要设置为 255.255.255.255是默认路由时会设置为 0.0.0.0
Flags标记含义参考表格后面的解释
Metric路由距离到达指定网络所需的中转数是大型局域网和广域网设置所必需的。不在Linux内核中使用。
Ref路由项引用次数。 不在Linux内核中使用。
Use此路由项被路由软件查找的次数
Iface此路由使用的网卡名称device

其中 Flags 涉及到对应映射表达

标志释义
U路由是活动的
H目标是一个主机
G路由指向网关
R回复动态路由产生的表项
D由路由的后台程序动态生成
M有路由的后台程序修改
!拒绝路由

路由操作

通过 route 命名进行增加或删除

在这里插入图片描述

比如我们现在新接入了一个网段 192.168.1.0/24 网段当前网段的 Gateway192.168.1.1。那么我们可以这样添加一个路由使 192.168.1.0 相关的数据包通过 ens33 网卡发送到对应网关去。

该方法是临时生效并非永久生效在重启网卡或服务器后会失效。

# 新增一个路由
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens33
# 删除刚刚添加的路由
route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens33

通过配置文件永久增加路由

/etc/rc.local 也就是 /etc/rc.d/rc.local 文件。前者是后者的软连接。

该文件是一个开机自启的文件但默认没有运行权限

ls -ltr /etc/rc.d

在这里插入图片描述

所以我们只需要将权限赋予为可执行并且加入我们希望的路由添加命令即可

chmod 755 /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
# 在底部新增一行并添加如下命令
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens33

多路由配置

上面讲的都是很基础的单网段的配置说明现在我们有一个服务器想在多个网段上都能访问那应该怎么做以下是给出的建议解决方案

  • 查看网卡个数并设置网卡相关参数。
  • 如果有条件线上请配置 bond
  • 如果 bond 吃紧配置虚拟 bond
  • 在配置完 bond 后进行路由设置。
  • 重启网络服务并检查是否路由正确。

bond 模式

如果是大数据环境对于网卡来说我们也会采用 bond 模式。网卡 bond 类似于我们磁盘 raid 一样是为了整合多个硬件打造符合当前业务场景的最佳模式。

bond 一共有 6 种模式

mod释义
mod=0Round-robin 轮循策略。第一个包走第一个网卡第二包走接下来一个走完后继续轮循。但弊端为发包可能走的是不同链路那么在客户端如果接收到无序包的情况下可能要求重发导致网络的下降。
mod=1Active-backup 主备策略。多个网卡组成一个网卡使用同一个MAC地址当当前网卡宕掉时马上可以有下一个网卡接替。但在有N个网络接口情况下只使用了1/N。
mod=2XOR 平衡策略。使用地址HASH来计算由哪个网卡发送。
mod=3broadcast 广播策略。在每个网卡上都传输一般线上不适用。
mod=4Dynamic link aggregation 动态链接聚合。
mod=5Adaptive transmit load balancing 适配器传输负载均衡。通过计算发送的流量速率来分配流量。
mod=6Adaptive load balancing 适配器适应性负载均衡。他对外有多个MAC地址争取负载均衡的接收数据。但实际生产中使用较少问题挺多。

再生产环境下使用最多的为两张网卡搭建的 mod=1 主备策略。特别是在大数据环境下服务器众多如果由于网卡问题导致数据无法发送机器报修那么会失联一整台服务器不可接受。

bond 设置

我们用 mod=1 主备策略进行演示。

首先查看我们所有网卡是否有两张以上可以通过 ipconfig 或者看 /etc/sysconfig/network-scripts/ 下当然最好还是看物理设备

cat /proc/net/dev

在这里插入图片描述

可以看到有 ens33ens36 两块物理网卡。那么我们使用这两张网卡组成 bond

创建一个 bond 名为 bond0

vim /etc/sysconfig/network-scripts/ifcfg-bond0
# 添加信息
# 其中 IPADDR 和  GATEWAY 请根据实际进行配置
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.111.218
GATEWAY=192.168.111.2
ONBOOT=yes
TYPE=Bonding
NM_CONTROLLED=no
USERCTL=no
BONDING_OPTS='mode=1 miimon=100'

然后将 ens33ens36 添加到 bond0

vim /etc/sysconfig/network-scripts/ifcfg-ens36
# 其中 DEVICE 请根据物理网卡名指定以免混乱
DEVICE=ens36
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 其中 DEVICE 请根据物理网卡名指定以免混乱
DEVICE=ens33
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

在配置完毕后重启网络服务并查看是否生效

systemctl restart network
ifconfig -a

在这里插入图片描述

可以看到 bond0 正确生效并且使用的 MAC 地址为 ens36 的通过该 bond0 可以对外传输和接收数据

ping -I bond0 www.baidu.com

在这里插入图片描述

多网段配置

配置到这里其实还并没有配置到多网段信息由于演示是在虚拟机上无法真实还原生产中的配置这里简单进行一下讲解。

同样优先考虑我们当前的物理网卡是否充足如果还能继续配置一个 bond1 当然是再好不过这样重复刚刚步骤配置好 bond0bond1它们 ip、网段、Gateway 各不相同在设置 route 的时候只需要指定到对应 dev=bond 即可。

那么当我们物理网卡不充足的情况下怎么办呢使用 vlan配置一个 bond0:1 也是可以的。最简单的为配置如下

vim /etc/sysconfig/network-scripts/ifcfg-bond0:1
# 注意 DEVICE 可以为 bond0 或 bond0:1为 bond0 简化操作但为了区分应使用 bond0:1
# 此条在演示中使用的为 bond0请再次注意
# 其中 IPADDR 和  GATEWAY 请根据实际进行配置
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.1.222.218
GATEWAY=192.1.222.2
ONBOOT=yes
TYPE=Bonding
NM_CONTROLLED=no
USERCTL=no
BONDING_OPTS='mode=1 miimon=100'

再次重启网络服务 systemctl restart network 后查看网路网络情况:

systemctl restart network
ip addr show # 使用其他命令不一定能查看得到

在这里插入图片描述

可以看到这里 inet 对应有两条分别是两个网段的 ip 地址信息和 Gateway 信息当然如果在配置时使用的是 bond0:1那么会有单独的 bond0:1 出现。如果 device 都叫 bond0那么 route 可以直接都指向 bond0反之亦然。

对于非 bond 模式的网卡来说也可以这样玩来解决物理网卡不足的情况

总结

一个 物理网卡 可以虚拟为多个 虚拟网卡这样可以对应多个 ip 地址但每个 ifcfg-* 文件对应一个 ip一个 ip 地址都只能在一个 子网络 中运行。每个 ip 地址也可以有多个 Gateway只要是同网段可以访问的即可。

至此关于 Linux 网络部分可能不再赘述适用于大数据的部分也到这里如果涉及到其他以后再讨论。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux

“Linux 计算机网络 route 路由表、多网段与 bond 的故事” 的相关文章