简要分析NETLINK_ROUTE参数
NETLINK_ROUTE时Linux内核中Netlink协议族的一个子类型,专用于用户空间与内核网络子系统之间的通信,它是实现动态网络配置(如路由表、网络接口、地址管理)的核心机制,为现代网络管理工具(如iproute2)提供了底层支持。
一、NETLINK_ROUTE的核心作用
1. 路由表管理
- 添加、删除路由条目(如静态路由、策略路由)
- 查询当前路由表状态(IPv4/IPv6)
2. 网络接口控制
- 创建、删除虚拟接口(如veth、bridge)
- 配置接口属性(如MTU、MAC地址、状态启用/禁用)
3. 地址配置
- 管理IP地址(添加/删除 IPV4/IPv6 地址到接口)
- 处理地址解析协议(ARP、NDP缓存)
4. 邻居表操作
- 管理邻居表(如ARP表项、IPv6邻居发现条目)
5. 网络状态监控
- 实时监听网络事件(如接口状态变化、路由更新)
二、NETLINK_ROUTE的典型应用场景
1. 网络管理工具的实现
- iproute2工具集(如 ip addr、ip route 命令)通过NETLINK_ROUTE与内核交互,替代传统的ifconfig 和 route
- 示例:执行 ip route add 192.168.2.0/24 via 10.0.0.1 时,实际通过NETLINK_ROUTE发送RTM_NEWROUTE 消息到内核。
2. 动态路由协议
- BGP/OSPF等路由守护进程(如 Bird 、 FRRouting)通过NETLINK_ROUTE动态更新内核路由表。
3. 容器网络配置
- Docker、Kubernetes等容器平台利用NETLINK_ROUTE配置容器的网络命名空间(如veth对、网桥、路由规则)
4. 网络监控工具
- 工具如ss(socket statistics)或自定义监控程序通过NETLINK_ROUTE实时获取网络状态(如接口流量统计)
三、NETLINK_ROUTE的优势(对比传统机制)
| 机制 | 功能范围 | 灵活性 | 实时性 | 扩展性 |
| NETLINK_ROUTE | 路由、接口、地址、邻居表等 | 高 | 支持异步 | 结构化消息,易扩展 |
| ioctl | 有限接口配置(如 SIOCSIFADDR ) | 低 | 同步阻塞 | 固定接口,难扩展 |
| **/proc/sys/net** | 仅查看部分参数(如 route/* ) | 只读 | 无实时通知 | 无交互能力 |
- 双向通信:支持用户态主动查询和内核主动通知(如接口状态变化事件)
- 结构化数据:基于消息传递,支持复杂数据结构(如嵌套属性)
- 异步处理:可通过非阻塞方式监听网络事件,适合高性能场景。
四、NETLINK_ROUTE消息类型(部分)
- 路由表:
- RTM_NEWROUTE(新增路由)、RTM_DELROUTE(删除路由)、RTM_GETROUTE(查询路由)
- 网络接口
- RTM_NEWLINK(创建接口)、RTM_DELLINK(删除接口)、RTM_GETLINK(查询接口)
- IP地址
- RTM_NEWADDR(添加地址)、RTM_DELADDR(删除地址)、RTM_GETADDR(查询地址)
- 邻居表:
- RTM_NETNEIGH(添加邻居条目)、RTM_DELNEIGH(删除条目)
五、代码示例:使用NETLINK_ROUTE查询路由表
#include <stdio.h>
#include <stdlib.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>int main() {// 创建 Netlink 套接字int sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);if (sock < 0) {perror("socket");exit(1);}// 绑定套接字struct sockaddr_nl addr;memset(&addr, 0, sizeof(addr));addr.nl_family = AF_NETLINK;addr.nl_pid = getpid(); // 用户空间进程 IDif (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {perror("bind");close(sock);exit(1);}// 构造请求消息:获取所有路由表struct {struct nlmsghdr nlh;struct rtmsg rt;} req;memset(&req, 0, sizeof(req));req.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));req.nlh.nlmsg_type = RTM_GETROUTE; // 路由查询类型req.nlh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; // 请求所有条目req.rt.rtm_family = AF_INET; // 查询 IPv4 路由// 发送请求if (send(sock, &req, req.nlh.nlmsg_len, 0) < 0) {perror("send");close(sock);exit(1);}// 接收并解析响应(此处简化,实际需处理多部分消息)char buf[4096];ssize_t len = recv(sock, buf, sizeof(buf), 0);if (len < 0) {perror("recv");close(sock);exit(1);}// 解析 Netlink 消息(此处仅打印长度,实际需提取路由信息)printf("Received %zd bytes of routing data\n", len);close(sock);return 0;
} 六、总结
- NETLINK_ROUTE时Linux网络管理的核心IPC机制,支撑动态路由、容器网络、监控工具等场景。
- 优势:灵活、高效、支持异步事件,优于传统的ioctl或文件系统操作
相关文章:
简要分析NETLINK_ROUTE参数
NETLINK_ROUTE时Linux内核中Netlink协议族的一个子类型,专用于用户空间与内核网络子系统之间的通信,它是实现动态网络配置(如路由表、网络接口、地址管理)的核心机制,为现代网络管理工具(如iproute2&#x…...
Java中default关键字
1. 在 switch 语句中作为默认分支 在 switch 语句里,default 用于定义当所有 case 标签的值都无法匹配 switch 表达式的值时要执行的代码块。它并非强制要求,但使用它可以增强代码的健壮性,处理未预见的情况。 public class SwitchDefaultE…...
怎么利用DeepSeek进行PCB设计?
最近在琢磨利用Deepseek改善PCB的细节设计,毕竟立创EDA里面没有集成DS,因此,如何让DS能识别图片成了重中之重。所幸最近腾讯元宝里面集成了R1的满血版,这个版本可以上传图片,于是让DS识别图片就可能了。 在原理图设计…...
详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
nbconvert 是 Jupyter 提供的一个非常强大的工具,允许用户将 Jupyter Notebook 文件(.ipynb)转换成多种格式,包括 Python 脚本(.py)、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert,也…...
windows上传uniapp打包的ipa文件到app store构建版本
uniapp是一个跨平台的框架,使用windows电脑也可以开发ios软件,因为uniapp的打包是在云端实现的,本地电脑无需使用mac电脑即可完成打包。 但是打包后的ipa文件需要上架到app store的构建版本上,没有mac电脑,又如何上架…...
PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
在QGraphicsItem中,pos()和scenePos()是两个重要的方法,用于描述图形项的位置,但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义:pos()返回的是QGraphicsItem在…...
idea 快捷键 Reformat code
Reformat code...
Spring Boot 项目中使用责任链模式实现复杂接口解耦和动态编排(带示例)
目录 责任链模式概述 解耦 动态编排 运用场景 代码示例 1. 定义请求和响应对象 2. 定义处理者接口和抽象处理者类 3. 实现具体的处理者类 4. 配置责任链 5. 控制器类调用责任链 代码解释 责任链模式概述 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链…...
消防设施操作员考试备考:以技巧为翼,翱翔知识天空
消防设施操作员考试的备考过程中,掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧,助您在知识的天空中自由翱翔。 记忆技巧:化繁为简 消防知识众多,记忆难度较大。可以采用多种记忆方法,如口诀记忆法…...
qt之No executable specified
在Qt中遇到文件复制操作时出现“No executable specified”错误,通常与程序编译或运行环境配置问题相关,而非文件操作本身的问题。以下是可能的原因及解决方案: 项目配置文件损坏 现象: 在执行文件操作前,程序无法启动…...
物联网商业模式
物联网商业模式是一种战略规划,它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于,它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中,这种商业模式通过利用实时数据来提供创新服务…...
解决ElementPlus对话框el-dialog中关闭事件重复触发问题
问题背景 在使用ElementPlus的el-dialog组件时,发现点击取消按钮会触发两次关闭事件: 1. 第一次参数为PointerEvent(事件对象) 2. 第二次参数为undefined 需要确保点击取消按钮时仅触发一次有效关闭事件,并传递正确…...
【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
算法刷题--贪心算法
要点 其实也没啥要点,就是求局部最优解,完事了将局部最优解汇总、筛选、max\min之类的,获得全局最优解,每一次都选择最优的,这个就是贪心算法。 例题 分发饼干-中等 大概就是一堆小孩g,每个人都有一个胃口g[i]&…...
MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)
1.事务特性(ACID) 原子性:事务要么全部成功,否则全部回滚 一致性:保证逻辑完整性(关联表删除) 隔离性:事务并发隔离(行锁,间隙锁) 持久性:已提交的事务永…...
CCF-CSP第24次认证第2题 --《序列查询新解》
4281. 序列查询新解 - AcWing题库 上一题“序列查询”中说道: A[A0,A1,A2,⋯,An]A[A0,A1,A2,⋯,An] 是一个由 n1n1 个 [0,N)[0,N) 范围内整数组成的序列,满足 0A0<A1<A2<⋯<An<N0A0<A1<A2<⋯<An<N。 基于序列 AA&#…...
Webpack 打包详细教程
Webpack 是一个现代 JavaScript 应用的静态模块打包工具,它可以处理 JavaScript、CSS、图片等资源,并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。 1. Webpack 基础概念 Webpack 的核心概念包括: Entry(入口&a…...
每日一题----------集合
数组: (1)长度开始必须指定,而且一但指定,不能修改。 (2)保存的必须为同一类型的元素。 (3)使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要ÿ…...
滑动窗⼝(同向双指针)---最⼤连续1的个数III
题目链接 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,…...
《几何原本》命题I.30
《几何原本》命题I.30 平行于同一直线的两条直线互相平行。 设 l 1 ∥ l 2 , l 1 ∥ l 3 l_1\parallel l_2,l_1\parallel l_3 l1∥l2,l1∥l3 则 ∠ 1 ∠ 2 , ∠ 1 ∠ 3 \angle 1\angle 2,\angle 1\angle 3 ∠1∠2,∠1∠3 则 ∠ 2 ∠ 3 \angle 2\angle 3 ∠2∠3…...
蓝桥杯 k倍区间
题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi,Ai1,⋯Aj ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...
dify-SQL查询
第1节 DIFY 编排流程 1.1 步骤 1.开始:用户输入分析需求 2.LLM-SQL 专家:大模型根据用户输入需求生成 SQL 查询 3.SQL查询:执行查询并获取数据 4.结束:输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…...
【制作PPT的AI工具】
制作PPT的AI工具: 1. Gamma: 特点: 无需下载,支持网页、移动端及iPad使用。提供多种模板和主题,支持一键生成PPT大纲、排版和配图。优点: 操作简单,适合快速制作演示文稿。 2. Beautiful.ai&…...
贪心算法精解:用C++征服最优解问题
贪心算法精解:用C征服最优解问题 一、贪心算法的本质:当下最优即全局最优 贪心算法如同下棋高手,每一步都选择当前最优的走法。它的核心思想是:通过局部最优选择的叠加,最终得到全局最优解。这种算法在时间复杂度上往…...
《程序员的自我修养—链接、装载与库》-- 对书中常见段的讲解总结
1. 核心段的作用与特点 (1) .text 段(代码段) 内容:存放程序的可执行指令(机器码),例如函数的实现代码。特点: 通常是只读的(防止程序意外修改指令)。在程序运行前已确…...
一文了解汽车图像传感器
2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…...
2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...
AI科技公司招聘一位后端开发工程师
招聘岗位:后端开发工程师(兼运维) 公司名称:深圳市格子科技有限公司 公司介绍:深圳市格子科技有限公司作为AI应用创新先锋,构建起以AI工具研发为核心、短剧平台运营为延伸的多业务发展模式。公司自主研发A…...
ubuntu软件
视频软件,大部分的编码都能适应 sudo apt install vlc图片软件 sudo apt install gwenview截图软件 sudo apt install flameshot设置快捷键 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一个自定义的路径 菜单更换 sudo apt r…...
《面向对象程序设计-C++》实验一 熟悉Visual C++开发环境及上机过程
一、实验目的 了解和使用VC集成开发环境;熟悉VC环境的基本命令和功能键;熟悉常用的功能菜单命令;学习使用VC环境的帮助;学习完整的C程序开发过程;理解简单的C程序结构。 二、实验内容 使用Visual C 6.0集成环境来编…...
