Linux 系统的网络接口命名规则经历了从传统方式到现代“可预测命名规则”(Predictable Network Interface Names)的演变,旨在解决硬件识别不稳定、命名随机性等问题。以下结合技术原理和实际应用,详细解析其规则及优先级体系:


​一、命名规则的历史演变​

  1. ​传统命名(ethX)​

    早期 Linux 使用 eth0eth1 等基于内核检测顺序的命名方式。​​缺点​​是:

    • 多网卡或虚拟化环境下,重启后接口名称可能变化(如第一块网卡从 eth0 变为 eth1)。
    • 无法反映硬件位置,增加定位物理设备的难度。
  2. ​现代命名(可预测命名规则)​

    自 ​​systemd v197​​ 起引入,命名基于硬件拓扑或固件信息,确保名称稳定且可读。核心逻辑是:

    • ​前缀​​表示接口类型:

      前缀 类型 示例
      en 以太网(Ethernet) eno1
      wl 无线局域网(WLAN) wlp3s0
      ww 无线广域网(WWAN) wwp0s20u1
      ib InfiniBand ib0
    • ​后缀​​标识硬件位置,通过以下维度生成:
      标识符 含义 示例
      o<index> 主板内置网卡(BIOS 索引) eno1
      s<slot> PCI-E 热插拔槽位索引 ens33
      p<bus>s<slot> PCI 总线位置(总线+插槽) enp0s3
      x<MAC> MAC 地址(避免冲突时使用) enx78e7d1ea46da
      u<port> USB 端口链式编号 enp0s20u1

​二、命名优先级规则​

系统按​​从高到低​​的优先级选择名称,规则如下(以 udev 实现为准):

  1. ​用户自定义名称​

    通过 /etc/udev/rules.d/ 下的规则文件强制指定(如 70-persistent-net.rules),优先级最高。

    ​示例​​:

    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="24:6e:96:03:5c:8d", NAME="eth0"
  2. ​固件/BIOS 信息​

    • ID_NET_NAME_ONBOARD → 板载设备(如 eno1
    • ID_NET_NAME_SLOT → 热插拔槽位设备(如 ens1)。
  3. ​硬件位置信息​

    • ID_NET_NAME_PATH → PCI/USB 位置(如 enp2s0)。
  4. ​MAC 地址​

    ID_NET_NAME_MAC → 如 enx123456789abc

  5. ​传统内核命名(兜底方案)​

    当以上均未命中时,回退到 eth0eth1 等随机命名。


​三、为何需要新命名规则?​

  1. ​稳定性问题​

    传统命名在添加/移除硬件时易导致接口名变化,影响脚本和配置。

  2. ​虚拟化与多网卡需求​

    服务器可能含数十个物理或虚拟接口(如 SR-IOV 虚拟设备 eno1v0),需明确区分。

  3. ​定位硬件故障​

    名称直接关联物理位置(如 enp3s0f1 对应 PCI 总线3、插槽0、功能1),快速定位故障网卡。


​四、自定义命名:恢复传统方式​

若不适应新规则,可通过修改内核参数恢复 ethX 命名:

  1. ​编辑 GRUB 配置​​:

    sudo vi /etc/default/grub
    # 在 GRUB_CMDLINE_LINUX 追加:
    net.ifnames=0 biosdevname=0
  2. ​更新配置并重启​​:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    sudo reboot
  3. ​重命名配置文件​​:

    /etc/sysconfig/network-scripts/ifcfg-ens33 改为 ifcfg-eth0,并更新其中的 DEVICE=eth0


​五、排查工具与命令​

  • ​列出所有接口​​:

    ip link show  # 或 ls /sys/class/net
  • ​查看接口硬件信息​​:

    sudo lshw -class network -short
  • ​解析命名依据​​:

    udevadm info -e | grep -A 20 "net/<接口名>"

​总结​

现代 Linux 的命名规则通过 ​​硬件拓扑绑定​​ 解决了传统命名的随机性问题,优先级体系(自定义 > 板载 > 槽位 > PCI > MAC)兼顾灵活性与稳定性。尽管名称较长(如 enp0s20f0u1u3),但其可预测性在运维中显著提升效率。若需兼容旧脚本,可通过 GRUB 参数退回 ethX 模式,但牺牲了命名的硬件关联性。

Linux 系统的网络接口命名规则演变的更多相关文章

  1. oracle口令文件在windows和linux系统下的命名和位置

      分类: Oracle 1.windows系统下 oracle口令文件在:$ORACLE_HOME/database目录下: 命名规则为:PWD$SID.ora   2.linux系统下 oracl ...

  2. [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试

    本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan ----------------- ...

  3. Linux系统-----包管理器的演变

    每个电脑设备都使用某种形式的软件来执行其预定任务.在软件开发的早期,对产品进行了严格的bug和其他缺陷测试.在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误.在某些情况下 ...

  4. Linux系统编程之命名管道与共享内存

    在上一篇博客中,我们已经熟悉并使用了匿名管道,这篇博客我们将讲述进程间通信另外两种常见方式--命名管道与共享内存. 1.命名管道 管道是使用文件的方式,进行进程之间的通信.因此对于管道的操作,实际上还 ...

  5. Linux网络端口命名规则,一致性网络设备命名

    参考文档: https://www.cnblogs.com/pipci/p/9229571.html 一致性网络设备命名,即Consistent Network Device Naming. 一.服务 ...

  6. Linux系统之路——如何在服务器用U盘安装CentOS7.2(二)

    Linux系统之路——如何在服务器用U盘安装CentOS7.2(一) 说明: 截止目前CentOS 7.x最新版本为CentOS 7.2.1511,下面介绍CentOS 7.2.1511的具体安装配置 ...

  7. C语言中变量名及函数名的命名规则与驼峰命名法

    一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error  ...

  8. 第1章 部署虚拟环境安装linux系统

    章节简述: 本章节带领读者从0基础了解虚拟机软件与红帽系统,完整的演示了在VM与KVM中安装红帽RHEL7系统的方法. 特别增加了超级实用的Linux系统找回root密码.虚拟机功能增强包.VNC远程 ...

  9. Linux系统下fd分配的方法

    最近几天在公司里写网络通讯的代码比较多,自然就会涉及到IO事件监测方法的问题.我惊奇的发现select轮训的方法在那里居然还大行其道.我告诉他们现在无论在Linux系统下,还是windows系统下,s ...

  10. 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解

    本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...

随机推荐

  1. Django踩坑之django.core.exceptions.ImproperlyConfigured mysqlclient 1.3.13 or newer is required; you have 0.9.3.

    安装Django3后不想折腾mysqlclient那堆库文件,直接装了pymysql替代mysqlclient,报错:django.core.exceptions.ImproperlyConfigur ...

  2. 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(4)

    1.问题描述: LoginWithHuaweiIDButton不支持深色模式下定制文字和loading样式? 解决方案: LoginWithHuaweiIDButtonParams 中的有个suppo ...

  3. Go与C/C++ 互相调用

    A. Go调用C 1.Go调用C:在go文件里调C(以下代码中除了开头的注释之外,其他注释不可删除) /* * go 和 C 互调用程序 */ package main /* int Add( int ...

  4. pyqt Qscintilla英文学习笔记

    由于博客园不能上传pdf,所以图片没了,源文件 链接:https://www.123pan.com/s/qdY9-P4fk3 提取码:aRny 通过百度网盘分享的文件:qscintil- 链接:htt ...

  5. 「Log」2023.8.14 小记

    序幕 起晚了,七点半到校. 跟化竞选手寒暄几句之后就去开电脑. 补周末没写的博客,补落下的题单. 学杜教筛??????不会卷积????? 暂时放弃,学一下扩欧. 写了篇扩欧博客. \(\text{Li ...

  6. AtCoder Beginner Contest 408 E-F 题解

    E. Minimum OR Path 题意 给你一个 \(N\) 个点 \(M\) 条边的无自环的无向图,第 \(i\) 条边连接 \(u_i\) 和 \(v_i\),权值为 \(w_i\). 在所有 ...

  7. 雷池 7.x 主从节点分钟级自动同步 + 手动切换实战教程

    雷池7.x版本新增配置同步功能,可以设置主节点和从节点,可以自动每分钟将主节点的配置同步到从节点,在主节点异常情况下,使用者手动切换流量后,实现从节点马上承接业务流量. 准备环境 ● 检查主从节点机器 ...

  8. 如何从Docker image提取 Dockerfile

    参考链接:https://github.com/cucker0/dockerimage2df 参考链接:https://github.com/cucker0/docker/blob/main/md/由 ...

  9. 鸿蒙运动项目开发:封装超级好用的 RCP 网络库(上)—— 请求参数封装,类型转化器与日志记录篇

    鸿蒙核心技术##运动开发## Remote Communication Kit(远场通信服务) 在鸿蒙运动项目开发中,网络通信是不可或缺的一部分.无论是获取运动数据.同步用户信息,还是加载运动视频资源 ...

  10. hot100之子串

    和为K的子数组(560) 先看代码 class Solution { public int subarraySum(int[] nums, int k) { int res = 0; int preS ...