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

news2025/1/15 17:09:34

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 为 default(0.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 网络部分,可能不再赘述,适用于大数据的部分也到这里,如果涉及到其他,以后再讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1988-2020年31省基尼系数数据

1、时间:1988-2020年 2、范围:31省 3、指标:包括省基尼系数年度数据,省城市和农村基尼系数年度 4、来源及计算方法说明附在文件内 5、指标说明: 基尼系数(英文:Gini index、Gini Coefficie…

LeetCode 94. 二叉树的中序遍历

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 94. 二叉树的中序遍历,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetC…

Mybatis获取参数

Mybatis获取参数 配置模板 mybatis获取参数值的两种方式 1、&{}: 字符串拼接 2、#{}: 占位符赋值 MyBatis获取参数值的各种情况: MyBatis获取参数值的各种情况: 1、mapper接口方法的参数为单个的字面量类型 可以通过&#xf…

双系统下 linux挂载window磁盘

如果想让linux访问window分区磁盘,呈只读状态,解决办法是bios取消window快速开机。永久挂载windows磁盘 https://blog.csdn.net/yuehenmiss/article/details/124737456 # 创建挂载目录 sudo mkdir /window # 挂载分区 sudo mount /dev/sda1 /window # 查…

产品经理必懂知识之计算机基础知识

作为产品经理,非常有必要了解一下计算机的发展历史,今天带大家一起,大概地了解一下计算机的基础知识,希望能够帮助到大家,框架如下: 一、计算机发展史 1.1计算机的诞生 1946年第一台电子计算机问世美国宾…

YOLOv8训练自己的数据集(超详细)

一、准备深度学习环境 本人的笔记本电脑系统是:Windows10 YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可以在github上下载YOLOv8代码,代码文件夹…

一种车辆纵向控制切换算法设计思路

传统及主流的纵向控制切换算法: 例如《某避障控制策略研究》硕士论文: 在CarSim中设定节气门开度及制动踏板力为0,测得不同车速工况下车辆自然滑行的减速度。为了避免在控制过程中车辆驱动与制动切换的过于频繁,在其两侧设置了宽…

VUE_vue-cli 卸载不掉的问题解决

nodejs版本最好在v17以下,推荐使用v16.19.0 问题 由于项目需要旧版的 vue-cli ,所以需要事先卸载新版本; 运行命令全局卸载: yarn global remove vue/cli// 查看当前版本确定是否卸载 vue --version结果还是旧版本,…

使用ResNet34实现CIFAR100数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

5.8.1、TCP的连接建立

TCP 是面向连接的协议,它基于运输连接来传送 TCP 报文段。 TCP 运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。 TCP 运输连接有以下三个阶段 建立 TCP 连接:通过 “三报文握手” 建立 TCP 连接数据传送:也就是基于已建立的…

【PostgreSQL】手把手教学PostgreSQL

目录 1、PostgreSQL介绍 2、在ubuntu上通过命令安装 3、进入postgres用户 4、查看所有数据库 5、创建数据库 6、删除数据库 7、查看版本号(注意:在sudo su - postgres下) 8、远程连接 1、PostgreSQL介绍 官网:PostgreSQL: T…

SiC碳化硅功率器件测试哪些方面?碳化硅功率器件测试系统NSAT-2000

SiC碳化硅功率半导体器件具有耐压高、热稳定好、开关损耗低、功率密度高等特点,被广泛应用在电动汽车、风能发电、光伏发电等新能源领域。 近年来,全球半导体功率器件的制造环节以较快速度向我国转移。目前,我国已经成为全球最重要的半导体功率器件封测基…

wndows平台VS2019+OpenCV+cmake简单应用

wndows平台VS2019OpenCVcmake简单应用1.下载并解压文件2.结合人脸检测demo在vs中进行配置2.1 人脸检测代码2.2 在VS项目—属性中配置2.2.1 配置包含目录2.2.2 配置库目录2.2.3 配置链接器附加依赖项2.3 通过cmake进行配置与编译2.3.1 添加CMakeLists.txt文件2.3.2 cmake命令行执…

普中学习板准备工作

目录 1.1 ch341驱动安装 1. 目标板上的usb-串口模块插上 2. 按下目标板上的上电按钮 3. 打开ch341驱动程序,点击安装,等待结果 1.2 使用自动下载软件 1. 使用普中的自动下载软件 2. 串口号处选择安装好的驱动端口 3. 打开文件选择编译好的程序 …

2023 RealWorldCTF “Ferris proxy”逆向题分析(不算wp)

这题第二天才开始做,结果到比赛后4个小时才做出来,真是老了,不过也算有收获,对rust的程序更熟悉了~ client编译后的代码有41M,WTF 主函数入口 根据main函数找到两个入口 第二个函数很明显是主入口,不过…

数字图像相关系列笔记:DuoDIC

文章目录概述Algorithms and workflowStep 1: Stereo camera calibrationStep 2: Image cross-correlation (2D-DIC)Step 3: 3D reconstructionStep 4: Post processingValidation using a rigid body motion (RBM) testLimitations遗留问题参考资料附录概述 3D-DIC is a non-…

【C++、数据结构】AVL树 模拟实现

文章目录📖 前言1. AVL树的概念1.1 二叉搜索树的缺点:1.2 AVL树的引入:1.2 AVL树的性质:2. AVL树的模拟实现2.1 AVL树结点的定义:2.2 AVL树的插入:(重点)2.2.1 插入结点后平衡因子的…

【前端】Vue项目:旅游App-(14)home+search:搜索按钮及其路由跳转、分组数据的网络请求request、数据存储store和动态显示

文章目录目标过程与代码搜索部分:搜索按钮点击搜索按钮路由跳转并传数据search页面隐藏TabBar分类部分:数据请求:request、store显示数据分类的样式总代码修改或添加的文件common.cssrouter的index.jsservice的home.jsstore的home.jshome-cat…

Windows系统下 pyinstaller将python文件打包成可执行文件exe的方法

使用环境为Windows10系统(64),Python版本为3.11.1。 1.将pip加入环境变量 (1)右击此电脑点击"属性",点击高级系统设置, (2)选择最下面的环境变量&#xff1b…

C++之继承

文章目录一、继承的基本理解1.继承的概念2.继承的定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承1.继承关系2.菱形继承存在数据冗余和二义性的问题3.虚拟继承可以解决菱形继承…