去堆叠模式下ubuntu22.04修改内核源码支持ARP双发

S-MLAG-简单跨设备链路聚合 通过S-MLAG(Simple Multichassis Link Aggregation,简单跨设备链路聚合)功能将多台物理设备在聚合层面虚拟成一台设备实现简单的跨设备链路聚合,在服务器对接的场景中提供设备级冗余保护和流量负载分担。 阅读详情
AI摘要

本文介绍了在网络规模扩大导致传统堆叠技术问题频发的背景下,如何通过去堆叠技术中的ARP转主机路由方式,实现在Ubuntu22.04系统上使用bond模式的网络架构,实现ARP双发功能,并解决BGP模式下路由收敛时间过长的问题。

1. 背景

过去传统的网络聚合方案是使用交换机堆叠技术,两台交换机之间需要堆叠线缆连接,这种使用方式一直沿用。随着互联网规模越来越大,交换机数量成倍增加,质量问题也越来越严重,传统的堆叠技术也面临着诸多挑战,其中成员交换机故障风险、交换机系统bug、软件版本升级问题等都会对网络可用性造成影响,因此网络技术发展出了去堆叠的方案,这种方案在物理形态上去掉了传统的堆叠线缆,两台交换机独立工作,同时服务器依然采用双上联bond模式,提高了网络可靠性。

2. 方案

关于去堆叠技术的设计方案,网上有很多介绍,这里我们选择了去堆叠技术中的ARP转主机路由的方式,这种方式服务器侧的网络配置不变,但是需要修改linux内核支持ARP双发。

网络架构

去堆叠方案

3. 实现

目前我们使用的操作系统是ubuntu22.04,内核使用的是5.15.0操作系统标配内核未做任何修改,之前我们基于3.10的内核做过ARP收发的分析:

#内核在发送arp请求时函数调用栈为:
arp_solicit
|
arp_send_dst  ->  arp_create
|
arp_xmit
|
dev_queue_xmit 
|
dev_hard_start_xmit:此时网卡为虚拟网卡bond0,不存在队列queue,因此没有通过队列直接发送数据,而进入到此函数
|
netdev_start_xmit:根据bond的模式,会进入不同的net_device_ops,对于mode4模式,外出流量的slave选举是基于传输hash策略实现的,该策略能够经过xmit_hash_policy选项从缺省的XOR策略改变到其余策略,因此实际需要关注的是XOR模式,实现函数是bond_3ad_xor_xmit
|
bond_3ad_xor_xmit -> bond_xmit_hash:选择bond的一个slave网卡

#了解一下bond的7种模式

通过之前的分析,套用到此次ubuntu22.04的系统上,同样需要关注bond_3ad_xor_xmit函数,来修改和配置ARP报文的发送。在原本的发送过程中:根据流量HASH原理,ARP报文会按照算法选择BOND成员网卡中的一个进行发送。

#通过hash选择其中一个绑定的网卡成员
slave = bond->arr[bond_xmit_hash(bond, skb) % count];  

因此,为了广播ARP包,我们在bond_3ad_xor_xmit中,检查数据包的类型,如果是ARP报文,则进行广播发送,广播发送的实现函数bond_xmit_broadcast,相关修改代码

#切换到源码目录
vim ./drivers/net/bonding/bond_main.c
#改变内容如下
#static netdev_tx_t bond_xmit_broadcast本来存在,不要动,但是需要在bond_3ad_xor_xmit之前再定义一次,避免编译器无法找到bond_xmit_broadcast函数的声明,防止编译过程报错

static netdev_tx_t bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev);
static netdev_tx_t bond_3ad_xor_xmit(struct sk_buff *skb,
                                     struct net_device *dev)
{
        struct bonding *bond = netdev_priv(dev);
        struct bond_up_slave *slaves;
        struct slave *slave;

        **//判断数据包的类型是否为ARP包
        if (skb->protocol == htons(ETH_P_ARP)){
                //ARP包进行广播发送
                return bond_xmit_broadcast(skb, dev);
        }**

        slaves = rcu_dereference(bond->usable_slaves);
        slave = bond_xmit_3ad_xor_slave_get(bond, skb, slaves);
        if (likely(slave))
                return bond_dev_queue_xmit(bond, skb, slave->dev);

        return bond_tx_drop(dev, skb);
}

修改完代码以后,测试效果如下:
在这里插入图片描述
通过tcpdump any arp 我们可以看到bond模式下的eth0、eth1都在发送ARP广播,最终实现ARP双发的能力,支持去堆叠方案。

4. 扩展

记录整体实现过程

#下载源码
apt install linux-source
#安装必要软件
apt install openssl flex bison ncurses* libelf-dev libssl-dev libffi-dev build-essential dwarves
#配置
make menuconfig
vim .config
CONFIG_DEBUG_INFO_BTF=n
CONFIG_SYSTEM_TRUSTED_KEYSEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
#修改内核源码
vim ./drivers/net/bonding/bond_main.c
static netdev_tx_t bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev);
static netdev_tx_t bond_3ad_xor_xmit(struct sk_buff *skb,
                                     struct net_device *dev)
{
        struct bonding *bond = netdev_priv(dev);
        struct bond_up_slave *slaves;
        struct slave *slave;

        //判断数据包的类型是否为ARP包
        if (skb->protocol == htons(ETH_P_ARP)){
                //ARP包进行广播发送
                return bond_xmit_broadcast(skb, dev);
        }

        slaves = rcu_dereference(bond->usable_slaves);
        slave = bond_xmit_3ad_xor_slave_get(bond, skb, slaves);
        if (likely(slave))
                return bond_dev_queue_xmit(bond, skb, slave->dev);

        return bond_tx_drop(dev, skb);
}

#编译,64为CPU核心数
make -j 64 CFLAGS_MODULE=-fno-strict-aliasing
#安装模块
make modules_install
#安装内核,注意安装内核完毕后的系统启动问题
make install
#可选操作,制作deb内核文件,后续可以做内核升级使用,并推到线上
make bindeb-pkg -j 64 #64为CPU核心数
  • 网络BGP模式下bond成员端口up/down后的路由收敛时间过长的问题,目前使用ifplugd进程监控物理连接,bond成员端口发生up/down时执行相应ARP Ping和路由修改操作。
Rocky9.0去堆叠双发arp(支持“ARP 广播双发”) 本文介绍了在去堆叠/MLAG场景下,通过修改Linux bonding驱动实现ARP双发的方法。主要内容包括:1) 在bonding驱动中新增arp_broadcast_mode参数,仅对ARP包启用临时广播模式;2) 提供详细的补丁代码和编译部署流程;3) 覆盖常见问题的解决方案,如Module.symvers不匹配、SecureBoot限制等;4) 给出网络配置模板和功能验证方法。该方案通过最小代码改动实现ARP双发需求,对其他流量无影响,适合在维护窗口期进行生产环境部署。 阅读详情

相关推荐

去堆叠技术-最新的数据中心架构

LEAF1: 下联服务器口配置: interface Eth-Trunk1 port default vlan 10 mode lacp-dynamic#动态LACP模式 见注释2 lacp system-id 0000-0000-0001 #设置SYSTEMID 见注释4 trust dscp # LEAF2: 下联服务器口配置: interface Eth-Trunk1 port default vlan 10 mode lacp-dynamic #动态LACP模...

weixin_41833493的博客 6321

网络层协议介绍(ARP)

网络层的功能 定义了基本IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最佳路径 IP数据包格式 版本(Version):该字段包含的是IP的版本号,4bit。目前IP的版本为4(即IPv4)。 首部长度(Header Length):该字段用于表示IP数据包 长度,4bit。IP数据包最短为20字节,但是其长度是可变的,具体其长度是可变的,具体长度取决于可选项字段的长度。 优先级与服务类型(Priority&Type of Service):该字段用于表示数据包的优先级..

weixin_48872590的博客 1742

华三交换机检测堆叠分裂的三种方法(lacp mad,bfd-mad,arp-mad)

案列: sw1和sw2堆叠,sw1为master。下面四台接入交换机的的1口和2口分别做聚合口 当sw1 和 sw2 的堆叠线故障时(51口),拓扑中会出现两个核心交换机参与转发,这会造成严重的网络震荡。 解决思路: 当堆叠组分裂后,要有检测机制,快速检测并shutdown掉一台机器的所有业务端口 堆叠配置方法:http://t.csdn.cn/7GATI 聚合口配置方法:http://t.csdn.cn/mX3OZ 注意要配置成动态lacp 检测方法: 1、lacp-mad(常用) 配置lacp-m.

qq_42906357的博客 2万+

ARP介绍

1:arp的引入主机在发送IP包之前,首先到转换表中寻找和ip包相对应的硬件mac地址,如果没有找到,主机就发送一个ARP的广播包,得到ARP应答后,刷新ARP缓存并将包发送出去。Arp在这其中就是把ip地址转换成mac地址 2:常用的arp命令arparp –aarp –s IP MACarp –d IP 3:ARP包的结构和定义以太网目的

steel的专栏 967

Linux之ARP协议

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬 件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这 个作用。

xy的博客 3225

锐捷交换机去堆叠技术详解

锐捷交换机去堆叠技术详解

双发 ARP 测试与实践:从原理到生产验证

双发arp,实现数据中心交换机去堆叠。

qq_37535542的博客 2155

幸狐RV1106开发板实战:5分钟搞定Yolo8模型部署(附避坑指南)

本文详细介绍了在幸狐RV1106开发板上快速部署YOLOv8模型的实战流程。通过RKNN-Toolkit2工具链,将ONNX模型转换为RV1106 NPU专用的RKNN格式,并完成交叉编译与上板运行。文章重点分享了环境搭建、模型转换的关键步骤以及常见的避坑指南,帮助开发者高效实现边缘AI目标检测应用。

weixin_28677451的博客 912

HCIP(二)---IPV4,静态,ARP的使用

OSI模型与TCP/IP模型的区别 层数不同 在第3层,OSI支持所有的网络层协议,网络层为(network); TCP/IP 仅支持Internet协议—(IPV4,IPV6协议),网络层为(internet); TCP/IP支持跨层封装; 跨层封装可以减少程序开发量,便于纠错;被设备更快封装和解封装;----常常用在同一广播域内;ICMP可以在整个网络; 在跨层后,将由其他层面来完成被去掉层...

weixin_45404784的博客 578

量化策略分享 | MA超进化:LLT低延迟趋势线

移动平均线(MA)是我们技术分析中常用的一种趋势跟踪指标,但在使用的时候你是否也会有这样的烦恼:交易信号延迟太久,或者交易信号太频繁了!延迟性和平滑性问题似乎是不可兼得的“鱼和熊掌”。 针对这个问题,广发证券基于通信领域的滤波器原理,在《短线择时策略研究之三:低延迟趋势线与交易性择时》中创造性构建了:LLT低延迟趋势线(Low-lag Trendline)。 LLT低延迟趋势线是一种二阶滤波器,阶数相对适宜,相比MA、EMA等均线指标能够降低延迟,同时增强在低频部分的输出信号。 当然,..

量化交易研究 5309

Xiaojie雷达之路---毫米波雷达基础知识---角度估计

本篇文章主要介绍毫米波雷达的基础知识中的角度估计,对于本篇文章主要回答5个问题 1.在雷达的前方,如何估计前方一个物体的角度 2.角度测量的准确性 3.如何测量多个物体的角度 4.雷达可测的角度的视场最大值为多少 5.角度分辨率取决于什么因素 文章目录估计雷达前面一个物体的角度角度测量的准确性雷达的最大角视场测量雷达前方多个距离和速度相同的物体角度分辨率角度估计的流程 估计雷达前面一个物体的角度 估计一个物体的角度,最少需要两根接收天线 发射天线发送一个chirp,经过物体发射后信号,信号分别被第一根天

XiaoJie的博客 1万+

双发 ARP 下,Linux Bonding 模式全解析(mode0–mode6)

本文详细解析了Linux bonding的七种工作模式(mode0-mode6)及其在双发ARP场景下的应用。

qq_37535542的博客 2358

激光可燃气体传感器DIY指南:从TDLAS原理到STM32实战(附代码)

本文详细介绍了如何DIY激光可燃气体传感器,从TDLAS原理到STM32实战,包括硬件选型、光路搭建、电子系统设计和嵌入式软件开发。通过TDLAS技术实现高灵敏度甲烷检测,适合工业安全和环境监测应用。附有完整代码和实用调试技巧,帮助开发者快速掌握光学气体检测技术。

fanta的博客 440

“去堆叠”有多香?

方案 网络运维中,SLA是一个非常重要的指标,甚至直接关系到运维工程师的工资。为例更高的SLA,堆叠技术被广泛的应用,但是在使用过程中出现了很多的坑。所以就有人提出来“去堆叠”,并且在很多大公司的数据中心或者公有云(国能的公有云就这几家,大家都知道的。哈哈)中得到了很大的应用。 方案 优点 缺点 堆叠 1.统一管理,方便维护 2.服务器双网卡绑定,无需改造 1.接口、控制板卡的浪费 2.稳定性依靠厂商协议 3.存在分裂的风险,隐

weixin_44247385的博客 4322

YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择

绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。

FJN110的博客 816

Python高阶爬虫:逆向工程模拟Wind/同花顺等金融终端数据抓取

本文详细阐述了模拟金融数据终端进行数据抓取的全套技术方案。我们从法律合规性讲起,选择了Playwright作为核心自动化工具,通过两个实战案例(同花顺网页版和Wind桌面版)演示了从分析、模拟到数据解析的完整流程,并进一步介绍了构建健壮爬虫系统所需的高级技巧。我们的策略是:启动一个由Playwright控制的浏览器,模拟真人登录,然后监听所有网络请求,从中过滤出我们需要的那个数据API。if key in ['f43', 'f169', 'f170', 'f46', 'f60']: # 价格类字段。

2201_76125261的博客 546

ARP原理及双网卡设备arp、ping查询问题

声明下,因为对底层协议不是很了解,如有错误,麻烦指正,谢谢! 1、先来简单了解下ARP地址解析协议的用途 设备存在网络层地址(即IP地址)和链路层地址(即MAC地址),MAC地址是适配器(即网卡)出场就固定了的,以16进制格式表示:“XX:XX:XX:XX:XX:XX”,48位。IP地址是人为划分的,以点分十进制表示:“192.168.1.1”,32位。 IP地址是可以变动的

1万+

AI应用质量工程实践:从评估到监控的完整体系构建

在软件工程领域,质量保障体系是确保产品稳定可靠的核心机制,涉及度量指标、保障流程和工具链的完整闭环。随着生成式AI应用的快速发展,如何将传统软件工程中的质量门禁思想引入AI领域,成为工程实践的关键挑战。其核心原理在于构建可量化、可监控、可改进的质量评估框架,通过自动化测试、持续监控和反馈优化来管理AI输出的不确定性。这一技术价值在于将AI应用从原型阶段推向产品化,确保输出的一致性、安全性和可靠性。在实际应用场景中,开发者需要从功能性、非功能性、一致性和合规性四个维度构建评估体系,并借助LLM-as-a-Ju

weixin_28728279的博客 294

异构去堆叠 | 一种完美提升网络高可用SLA的方案

行业内接入网络去堆叠已经逐步成为主流方向,在大型互联网公司也已经批量部署。但由于京东集团不同的业务需求及历史原因,没有条件完全复制目前主流的ARP转主机路由方式的去堆叠方案...

973

第七节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 用户管理(上)

本节的内容是用户管理,后端Python代码的实现。

cuiwin的专栏 778

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【linux配置】 修改内核网络参数

linux内核网络参数

nuanmin的博客 844

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ARP协议

地址解析协议(Address Resolution Protocol ,ARP )是在局域网(local-area network,LAN)中,将一个不断变化的IP地址连接到固定不变物理机器地址也称为媒体访问控制地址(media access control (MAC) address)的协议或者过程。

2401_88752464的博客 1073

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

信安.网络安全.UDP协议拥塞

UDP通信丢包问题

助力开发者进阶为高效技术管理者,记录沉淀打造可复用的工程方法论体系 2729

网络知识,ARP,OSPF协议,网卡驱动,Bonding等,网卡绑定----桥接

文章目录1.常用服务默认端口常用协议1..ARP地址解析协议2.OSPF协议常用命令ping命令1.ifconfig命令2.route命令2.1临时配置2.2永久生效route路由3.netstat命令4.ip命令5.ss命令6.nmcli命令7.tracerout命令8. tracepath命令网络配置文件多网卡绑定技术Bonding配置网络故障解决问题 Vpn—虚拟私有网络 MAC描述网络设备的唯一表示 IP人工分配 1.常用服务默认端口 FTP 21,20 SSH 22 Telnet 23

weixin_45697293的博客 1083

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 345
上一篇: NVIDIA GPU A800 驱动安装及基础测试
su_sys
博客等级 码龄8年 37粉丝 6原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值