首页 > 其他分享 >NetworkManager内核网络栈通信机制

NetworkManager内核网络栈通信机制

时间:2024-09-11 13:47:03浏览次数:11  
标签:Netlink IP 通信 接口 地址 内核 NetworkManager

NetworkManager 在启动和配置网络设备时,会通过 Linux 内核的网络栈 API 与设备驱动程序进行交互,特别是通过 netlink 子系统来实现。

Netlink 是 Linux 内核与用户空间进程之间的一种通信机制,它允许用户空间进程与内核模块(如网络栈)交换信息。Netlink 为 NetworkManager 提供了一个接口,用于执行各种网络配置操作,比如:

  • 获取网络接口状态
  • 设置或删除 IP 地址
  • 配置路由
  • 查询或修改内核中网络设备的属性

Netlink 允许通过不同类型的消息(如 RTM_NEWADDR 添加地址,RTM_DELADDR 删除地址等)与网络栈通信。用户空间进程(如 NetworkManager)通过 netlink 向内核发送这些请求,内核处理这些请求后再通过 netlink 返回结果。

nmcli connection up 命令被执行时,NetworkManager 会使用 libnl 或者 libmnl(Linux 的 Netlink 库)来与内核进行通信。关键的交互流程包括:

2.1 接口管理

NetworkManager 首先需要对接口进行管理,包括启用或禁用网络接口。这通常是通过 Netlink 的 RTM_NEWLINKRTM_DELLINK 消息来完成的。例如,启用网络接口时,NetworkManager 会向内核发送 RTM_NEWLINK 消息,并设置接口的 IFF_UP 标志以激活网络接口。内核接收到这条消息后,会通知相应的网络设备驱动程序来启用接口。

2.2 IP 地址管理

如果需要给接口分配 IP 地址(无论是通过静态 IP 还是通过 DHCP),NetworkManager 都会使用 Netlink 来添加 IP 地址。具体来说,它会发送 RTM_NEWADDR 消息,该消息包含了需要分配给接口的 IP 地址及其相关配置(如子网掩码、广播地址等)。内核处理这条消息后,更新网络接口的 IP 地址配置。

2.3 路由配置

NetworkManager 还需要设置路由表以确保正确的网络连接。这是通过 Netlink 的 RTM_NEWROUTE 消息来实现的。NetworkManager 通过该消息告诉内核,哪些网络流量应该走哪些网关或接口。内核则会相应地更新路由表。

Netlink 消息的核心由以下几个部分组成:

  • 消息头(nlmsghdr:包含消息类型(如 RTM_NEWADDR)、消息标志、消息长度等信息。
  • 属性(rtattr:存储了具体的配置数据,比如 IP 地址、接口索引等。
  • 数据负载:这是具体的配置信息,比如给接口分配的 IP 地址。

例如,给接口分配 IP 地址的 netlink 消息通常包含以下内容:

  • 接口索引(IFA_INDEX:指定要配置的网络接口。
  • IP 地址(IFA_LOCAL:要分配的 IP 地址。
  • 子网掩码、广播地址:其他与地址相关的配置。

4. 网络设备驱动与内核网络栈的交互

当内核接收到 NetworkManager 通过 netlink 发来的配置请求时,它会相应地与网络设备驱动程序进行交互。具体流程如下:

  1. 内核处理 Netlink 消息:内核的 netlink 子系统负责解析 NetworkManager 发来的消息,并识别需要对哪些网络设备或配置项进行修改。
  2. 调用网络设备驱动程序:如果消息涉及具体的硬件操作(如启用网卡、修改硬件 MAC 地址等),内核会调用相应网络设备的驱动程序来执行这些操作。这是通过 Linux 网络栈的抽象层实现的,不同设备驱动程序遵循统一的接口。
  3. 内核更新内部状态:在网络设备配置成功后,内核会更新其内部的网络配置状态,包括网络接口表、路由表、地址分配等。

5. NetworkManager 的异步监控

除了通过 netlink 配置设备外,NetworkManager 还会异步监听来自内核的网络状态变化消息。例如,接口状态变化(如链路断开、链路恢复)的事件通过 netlink 消息报告给 NetworkManager,NetworkManager 会据此做出相应调整,如重新尝试连接或切换备用网络接口。

6. DHCP 与 IP 分配

如果使用 DHCP 获取 IP 地址,NetworkManager 会启动一个 DHCP 客户端(如 dhclient),该客户端通过向 DHCP 服务器发送请求来获取 IP 地址。成功获取后,NetworkManager 会将获得的 IP 地址通过 Netlink 添加到接口上,这与静态 IP 配置的 Netlink 交互流程相似。

NetworkManager 还会使用 netlink 创建一个监听器,持续接收来自内核的事件通知,比如接口的状态变化、地址更改等。通过这些通知,NetworkManager 可以实时调整网络配置,确保网络连接的稳定性。

总结

NetworkManager 与 Linux 内核网络设备的交互主要通过 netlink 子系统进行。Netlink 是用户空间与内核空间之间的桥梁,负责在网络配置过程中传递各种网络配置信息。NetworkManager 通过发送 Netlink 消息来管理网络接口、IP 地址、路由等网络配置,同时也通过 Netlink 来监控内核中的网络状态变化。这种设计使得 NetworkManager 能够在用户空间高效地管理各种复杂的网络操作,同时利用 Linux 内核提供的强大网络栈和驱动程序来实际执行这些操作。

标签:Netlink,IP,通信,接口,地址,内核,NetworkManager
From: https://www.cnblogs.com/wanghongwei-dev/p/18407933

相关文章

  • NetworkManager接收和处理客户端请求通信机制
    NetworkManager守护进程通过监听D-Bus通信来接收和处理来自客户端(如nmcli或其他应用程序)的请求。这是Linux中进程间通信(IPC)的一种常见方式。D-Bus是一个消息总线系统,允许应用程序在不直接通信的情况下,通过消息总线交换数据。NetworkManager使用D-Bus作为其主要的通信机......
  • ①MODBUS TCP 通信单元(MODBUS TCP 转 RS485)Modbus TCP转Modbus RTU/ASCII网关同步采集
    ModbusTCP转ModbusRTU/ASCII网关同步采集无需编程高速轻松组网MS-A1-50X1系列作为MODBUSTCP通信的服务器进行动作。可通过MODBUSTCP通信,将MS-A1-50X1系列产品通过RS485采集的仪器仪表之类的值作为通信数据输出到PLC,上位机等。系统配置概述使用MS-A1-50X1系......
  • stm32 I2C通信与MPU6050(软件I2C读写MPU6050)
    理论1.同步时序与异步时序同步时序和异步时序是信号传输和时序控制中的两种基本类型:同步时序:定义:所有信号变化都与一个共同的时钟信号同步。所有的数据传输和处理操作都在时钟信号的边沿触发。优点:时序控制较为简单,易于设计和调试。系统的整体时序一致性高,适用于高精度要......
  • 进程间通信之消息队列详解
    目录一、什么是消息队列?二、消息队列的优缺点优点:缺点:三、消息队列的实现原理四、消息队列的使用场景五、消息队列的编程实现(C语言示例)1.创建消息队列2.发送消息3.接收消息4.删除消息队列六、总结        在现代操作系统中,进程间通信(IPC)是一个至关......
  • openwrt编译带源码信息的linux内核版本遇到的错误
    1、在openwrt的根目录中可以执行如下命令:makemenuconfig打开CONFIG_DEBUG选项就会生成待调试信息的内核版本2、在openwrt的根目录中可以执行如下命令:makekernel_menuconfig打开CONFIG_DEBUG_INFO也会生成待调试信息的内核版本问题描述:在gcc7.5.0和gdb8.1.1的环境中编译出来......
  • 还不知道MES和PLC咋通信?5分钟看懂
    最近网上看到一些写MES和PLC通信的文章。或许因为行业不同的缘故吧,对于里面的一些观点,我个人是持保留意见的。首先在我所在行业里,MES是不会和PLC直接通信的。MES和PLC之间通常还有一个其他系统。该系统在不同行业的叫法不一样。比如有的行业称之为二级系统(L2)或者数采系统,有的行业......
  • PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
    PY32F002A开发板上搭载的是PY32F002AF15P6单片机,TSSOP20封装,开发板使用TypeC接口供电,可以用来对PY32F002A芯片进行开发调试。PY32F002A开发板推荐使用我们的PY32link来下载仿真,绝大部分的STlink,Jlink,DAPlink也可以下载仿真,需自行测试。开发资料齐全,提供了LL库和HAL库,支持IAR......
  • 超轻量级、支持插件的 .NET 网络通信框架
    ##超轻量级、支持插件的.NET网络通信框架在当今高度互联的世界中,高效、可靠的网络通信是构建各种应用程序的关键。无论是开发Web服务、实时通信应用,还是物联网设备,都需要一个强大且灵活的网络通信框架来支撑。然而,传统的网络通信框架往往过于臃肿,难以满足现代应用程序对性能和......
  • 【JPCS独立出版】第四届电子通信与计算机科学技术国际学术会议(ECCST 2024,9月20-22)
    2024年第四届电子通信与计算机科学技术国际学术会议将于2024年9月20-22日在中国上海举行。会议旨在为从电子与通信、网络、人工智能与计算机技术研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发展趋势,拓宽研究思路,加强学术研究和探......
  • 探索未来通信|光耦技术在5G网络通信的创新应用
    5G网络是第五代移动通信技术的简称,它相较于前一代通信技术,具有更高的数据传输速率、更低的时延、更大的连接密度和更好的用户体验。5G网络的主要技术特点包括大规模天线技术、网络切片技术、超密集网络等,这些技术使得5G网络能够满足未来物联网、智能制造、自动驾驶等领域对高速......