当前位置: 首页 > article >正文

简要分析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消息类型(部分)

NETLINK_ROUTE通过消息类型(nlmsg_type)区分操作,常见类型包括
  • 路由表:
    • 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协议族的一个子类型&#xff0c;专用于用户空间与内核网络子系统之间的通信&#xff0c;它是实现动态网络配置&#xff08;如路由表、网络接口、地址管理&#xff09;的核心机制&#xff0c;为现代网络管理工具&#xff08;如iproute2&#x…...

Java中default关键字

1. 在 switch 语句中作为默认分支 在 switch 语句里&#xff0c;default 用于定义当所有 case 标签的值都无法匹配 switch 表达式的值时要执行的代码块。它并非强制要求&#xff0c;但使用它可以增强代码的健壮性&#xff0c;处理未预见的情况。 public class SwitchDefaultE…...

怎么利用DeepSeek进行PCB设计?

最近在琢磨利用Deepseek改善PCB的细节设计&#xff0c;毕竟立创EDA里面没有集成DS&#xff0c;因此&#xff0c;如何让DS能识别图片成了重中之重。所幸最近腾讯元宝里面集成了R1的满血版&#xff0c;这个版本可以上传图片&#xff0c;于是让DS识别图片就可能了。 在原理图设计…...

详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本

nbconvert 是 Jupyter 提供的一个非常强大的工具&#xff0c;允许用户将 Jupyter Notebook 文件&#xff08;.ipynb&#xff09;转换成多种格式&#xff0c;包括 Python 脚本&#xff08;.py&#xff09;、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert&#xff0c;也…...

windows上传uniapp打包的ipa文件到app store构建版本

uniapp是一个跨平台的框架&#xff0c;使用windows电脑也可以开发ios软件&#xff0c;因为uniapp的打包是在云端实现的&#xff0c;本地电脑无需使用mac电脑即可完成打包。 但是打包后的ipa文件需要上架到app store的构建版本上&#xff0c;没有mac电脑&#xff0c;又如何上架…...

PySide(PyQT),QGraphicsItem的pos()和scenePos()区别

在QGraphicsItem中&#xff0c;pos()和scenePos()是两个重要的方法&#xff0c;用于描述图形项的位置&#xff0c;但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义&#xff1a;pos()返回的是QGraphicsItem在…...

idea 快捷键 Reformat code

Reformat code...

Spring Boot 项目中使用责任链模式实现复杂接口解耦和动态编排(带示例)

目录 责任链模式概述 解耦 动态编排 运用场景 代码示例 1. 定义请求和响应对象 2. 定义处理者接口和抽象处理者类 3. 实现具体的处理者类 4. 配置责任链 5. 控制器类调用责任链 代码解释 责任链模式概述 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链…...

消防设施操作员考试备考:以技巧为翼,翱翔知识天空​

消防设施操作员考试的备考过程中&#xff0c;掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧&#xff0c;助您在知识的天空中自由翱翔。​ 记忆技巧&#xff1a;化繁为简​ 消防知识众多&#xff0c;记忆难度较大。可以采用多种记忆方法&#xff0c;如口诀记忆法…...

qt之No executable specified

在Qt中遇到文件复制操作时出现“No executable specified”错误&#xff0c;通常与程序编译或运行环境配置问题相关&#xff0c;而非文件操作本身的问题。以下是可能的原因及解决方案&#xff1a; 项目配置文件损坏 现象&#xff1a; 在执行文件操作前&#xff0c;程序无法启动…...

物联网商业模式

物联网商业模式是一种战略规划&#xff0c;它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于&#xff0c;它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中&#xff0c;这种商业模式通过利用实时数据来提供创新服务…...

解决ElementPlus对话框el-dialog中关闭事件重复触发问题

问题背景 在使用ElementPlus的el-dialog组件时&#xff0c;发现点击取消按钮会触发两次关闭事件&#xff1a; 1. 第一次参数为PointerEvent&#xff08;事件对象&#xff09; 2. 第二次参数为undefined 需要确保点击取消按钮时仅触发一次有效关闭事件&#xff0c;并传递正确…...

【RabbitMQ】事务

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…...

算法刷题--贪心算法

要点 其实也没啥要点&#xff0c;就是求局部最优解&#xff0c;完事了将局部最优解汇总、筛选、max\min之类的&#xff0c;获得全局最优解&#xff0c;每一次都选择最优的&#xff0c;这个就是贪心算法。 例题 分发饼干-中等 大概就是一堆小孩g,每个人都有一个胃口g[i]&…...

MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)

1.事务特性(ACID) 原子性&#xff1a;事务要么全部成功&#xff0c;否则全部回滚 一致性&#xff1a;保证逻辑完整性&#xff08;关联表删除&#xff09; 隔离性&#xff1a;事务并发隔离&#xff08;行锁&#xff0c;间隙锁&#xff09; 持久性&#xff1a;已提交的事务永…...

CCF-CSP第24次认证第2题 --《序列查询新解》

4281. 序列查询新解 - AcWing题库 上一题“序列查询”中说道&#xff1a; A[A0,A1,A2,⋯,An]A[A0,A1,A2,⋯,An] 是一个由 n1n1 个 [0,N)[0,N) 范围内整数组成的序列&#xff0c;满足 0A0<A1<A2<⋯<An<N0A0<A1<A2<⋯<An<N。 基于序列 AA&#…...

Webpack 打包详细教程

Webpack 是一个现代 JavaScript 应用的静态模块打包工具&#xff0c;它可以处理 JavaScript、CSS、图片等资源&#xff0c;并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。 1. Webpack 基础概念 Webpack 的核心概念包括&#xff1a; Entry&#xff08;入口&a…...

每日一题----------集合

数组&#xff1a; &#xff08;1&#xff09;长度开始必须指定&#xff0c;而且一但指定&#xff0c;不能修改。 &#xff08;2&#xff09;保存的必须为同一类型的元素。 &#xff08;3&#xff09;使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要&#xff…...

滑动窗⼝(同向双指针)---最⼤连续1的个数III

题目链接 给定一个二进制数组 nums 和一个整数 k&#xff0c;假设最多可以翻转 k 个 0 &#xff0c;则返回执行操作后 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a;[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 的数列&#xff0c;A1,A2,⋯ANA1​,A2​,⋯AN​&#xff0c;如果其中一段连续的子序列 Ai,Ai1,⋯AjAi​,Ai​1,⋯Aj​ ( i≤ji≤j ) 之和是 KK 的倍数&#xff0c;我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...

dify-SQL查询

第1节 DIFY 编排流程 1.1 步骤 1.开始&#xff1a;用户输入分析需求 2.LLM-SQL 专家&#xff1a;大模型根据用户输入需求生成 SQL 查询 3.SQL查询&#xff1a;执行查询并获取数据 4.结束&#xff1a;输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…...

【制作PPT的AI工具】

制作PPT的AI工具&#xff1a; 1. Gamma&#xff1a; 特点&#xff1a; 无需下载&#xff0c;支持网页、移动端及iPad使用。提供多种模板和主题&#xff0c;支持一键生成PPT大纲、排版和配图。优点&#xff1a; 操作简单&#xff0c;适合快速制作演示文稿。 2. Beautiful.ai&…...

贪心算法精解:用C++征服最优解问题

贪心算法精解&#xff1a;用C征服最优解问题 一、贪心算法的本质&#xff1a;当下最优即全局最优 贪心算法如同下棋高手&#xff0c;每一步都选择当前最优的走法。它的核心思想是&#xff1a;通过局部最优选择的叠加&#xff0c;最终得到全局最优解。这种算法在时间复杂度上往…...

《程序员的自我修养—链接、装载与库》-- 对书中常见段的讲解总结

1. 核心段的作用与特点 (1) .text 段&#xff08;代码段&#xff09; 内容&#xff1a;存放程序的可执行指令&#xff08;机器码&#xff09;&#xff0c;例如函数的实现代码。特点&#xff1a; 通常是只读的&#xff08;防止程序意外修改指令&#xff09;。在程序运行前已确…...

一文了解汽车图像传感器

2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…...

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距

一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增&#xff0c;IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下&#xff0c;传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示&#xff0c;采用混合架构的企业数据运营效…...

AI科技公司招聘一位后端开发工程师

招聘岗位&#xff1a;后端开发工程师&#xff08;兼运维&#xff09; 公司名称&#xff1a;深圳市格子科技有限公司 公司介绍&#xff1a;深圳市格子科技有限公司作为AI应用创新先锋&#xff0c;构建起以AI工具研发为核心、短剧平台运营为延伸的多业务发展模式。公司自主研发A…...

ubuntu软件

视频软件&#xff0c;大部分的编码都能适应 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集成开发环境&#xff1b;熟悉VC环境的基本命令和功能键&#xff1b;熟悉常用的功能菜单命令&#xff1b;学习使用VC环境的帮助&#xff1b;学习完整的C程序开发过程&#xff1b;理解简单的C程序结构。 二、实验内容 使用Visual C 6.0集成环境来编…...