Linux的网口名字的命名规则

本文解释了Linux系统中网口名称的变化,由systemd提供的可预测、稳定的命名规则,以及如何根据接口类型、板载设备、热插拔槽位、PCI路径和MAC地址确定网口名字的优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中,偶尔看到有些机器的网口名字是以ethX命令,有些则以enpXsX这种名字命名。网上的资料说的都不太明白,资料也无据可查,很难让人信服。于是决定自己查了下官方的资料和源码,把这些搞清楚。

官方文档:PredictableNetworkInterfaceNames

官方文档:systemd.net-naming-scheme

零 写在前面

网卡的名字是由systemd给出来的,在 v197 systemd/udev中,废弃了eth0,eth1这种命名,转而改为以下这几个命名。(原文描述:Starting with v197 systemd/udev will automatically assign predictable, stable network interface names for all local Ethernet, WLAN and WWAN interfaces. This is a departure from the traditional interface naming scheme ("eth0", "eth1", "wlan0", ...), but should fix real problems.)

一 linux系统中都包含了哪几种网卡名字?

前缀

描述

示例

en

Ethernet以太网接口

eno1 - 以太网onboard设备1

ib

InfiniBand接口

ib0 - InfiniBand接口0

sl

Serial line IP (slip)串行线路IP(SLIP)接口

wl

Wireless local area network (WLAN)无线局域网接口

wlp0s20f0 - PCI总线0插槽20功能0的无线网卡

ww

Wireless wide area network (WWAN)无线广域网接口,如蜂窝网络

* Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan
 *
 * Type of names:
 *   b<number>                             -- BCMA bus core number
 *   ccw<name>                             -- CCW bus group name
 *   o<index>[d<dev_port>]                 -- on-board device index number
 *   s<slot>[f<function>][d<dev_port>]     -- hotplug slot index number
 *   x<MAC>                                -- MAC address
 *   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
 *                                         -- PCI geographical location
 *   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
 *                                         -- USB port number chain

二 网口名字的含义

  • 板载设备示例:
    • eno1 - PCI firmware index 1的板载设备
    • eno1d0 - devicetree别名index 0的板载设备
    • eno2o3 - PCI设备onboard index 3的板载设备
    • eno1laWLAN - PCI固件WLAN文本标签的板载设备
  • PCI/USB设备示例:
    • enp2s0f0 - 总线2插槽0功能0的以太网接口
    • wlp3s1 - PCI总线3的无线网卡
    • ib0s1f0 - InfiniBand总线0插槽1功能0
    • enx12345 - MAC地址为12:34:45的以太网接口
  • 多功能设备示例:
    • enp6s0f0 - 总线6插槽0功能0
    • enp6s0f1 - 总线6插槽0功能1
  • 虚拟设备示例:
    • eno1v5 - eno1的SR-IOV虚拟设备5
    • eno2r3 - eno2的SR-IOV代表设备3
  • 路径属性示例:
    • ID_NET_NAME_PATH=enp0s31f6
    • ID_NET_NAME_SLOT=enp5s0
  • 特殊接口示例:
    • USB端口号链:enp0s15u2u3
    • BCMA核心号: enp0s31b1

我们可以通过以下命令来查看我们的一个网口都有哪些名字

$ udevadm info -e | grep -A 11 ^P.*ens33
P: /devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
E: DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
E: ID_MODEL_ID=0x100f
E: ID_NET_DRIVER=e1000
E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
E: ID_NET_NAME_MAC=enx000c2984660a
E: ID_NET_NAME_PATH=enp2s1
E: ID_NET_NAME_SLOT=ens33
E: ID_OUI_FROM_DATABASE=VMware, Inc.

从结果上,我们可以看出这个网口在内核里面最少给他起了三个名字,分别是:enx000c2984660a enp2s1 ens33

ID_NET_NAME_MAC=enx000c2984660a

ID_NET_NAME_PATH=enp2s1

ID_NET_NAME_SLOT=ens33

三 linux系统是如何给这些规则排优先顺序的?

刚才说到,同一个网口,根据不同的规则会又不用的名字,那么究竟哪个规则是最先被生效的呢?

src/udev/net/link-config.c中,对于这些命名规则的优先顺序:

name_policy) {
        NamePolicy *policy;

        for (policy = config->name_policy;
             !new_name && *policy != _NAMEPOLICY_INVALID; policy++) {
                switch (*policy) {
                        case NAMEPOLICY_KERNEL:
                                respect_predictable = true;
                                break;
                        case NAMEPOLICY_DATABASE:
                                new_name = udev_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE");
                                break;
                        case NAMEPOLICY_ONBOARD:
                                new_name = udev_device_get_property_value(device, "ID_NET_NAME_ONBOARD");
                                break;
                        case NAMEPOLICY_SLOT:
                                new_name = udev_device_get_property_value(device, "ID_NET_NAME_SLOT");
                                break;
                        case NAMEPOLICY_PATH:
                                new_name = udev_device_get_property_value(device, "ID_NET_NAME_PATH");
                                break;
                        case NAMEPOLICY_MAC:
                                new_name = udev_device_get_property_value(device, "ID_NET_NAME_MAC");
                                break;
                        default:
                                break;
                }
        }
}

 

 

如果我们查看整体案例陈述,您可以看到第一个匹配项是优先匹配项。从上到下工作,udev 采取以下的优先级顺序:

ID_NET_NAME_FROM_DATABASE
ID_NET_NAME_ONBOARD
ID_NET_NAME_SLOT
ID_NET_NAME_PATH
ID_NET_NAME_MAC

也就是说:

第一优先:ID_NET_NAME_FROM_DATABASE。你自己在udev里面自定义的网口名字,例如net0这种。

第二优先:ID_NET_NAME_ONBOARD。如果你的主板上又一张网卡是板载的,那么这张网卡的网口名字,会被命名为enoX这种名字。至于Linux为什么能识别到哪个网口是不是板载的网口,其实是根据smbios的type41来的。enoX里面的这个X也是根据smbios的type41里面的Type Instance。可以使用dmideoce -t 41查看是什么网卡类型。

第三优先:ID_NET_NAME_SLOT。 如果你插入的是一张可热插拔网卡,使用dmidecode -t 41命令,能看到你那张网卡的类型是SLOT类型,此时你的网口名字,会被命名为ensX,例如ens33

第四优先:ID_NET_NAME_PATH。也就是根据bus号,device号,function号来命名。例如:enp2s1

第五优先:ID_NET_NAME_MAC。根据mac地址命名,例如enx000c2984660a。

总结

总的来说,网口名字的规则优先极如下:你自定义udev的名字 > 板载网口eno1 > 可热插拔网口名字ens33 > PCI插槽名字enp2s1 > 网口mac地址名字enx000c2984660a

 

<think>好的,我现在要帮用户解决Linux下插入网线后ifconfig没有显示网口信息的问题。首先,用户之前已经询问过如何检查网口是否正常,现在这个问题更具体了,针对Linux系统的ifconfig无信息的情况。我需要回忆之前的回答内容,确保不重复并给出更详细的解决方案。 首先,用户的问题可能是物理连接问题,比如网线没插好或者网口硬件故障,但用户已经插入网线,所以需要排除其他可能。接下来,可能是网卡驱动未加载,或者网口被禁用。此外,ifconfig可能已经被ip命令替代,用户可能没有安装net-tools,导致无法使用ifconfig。 我需要分步骤来检查,从物理层到系统配置,再到驱动和网络管理服务。首先检查网线和指示灯状态,然后使用ip link命令查看网口是否存在,确认是否处于UP状态。如果网口存在但未启用,需要用ip命令启用。接着检查驱动是否加载,使用lspci和dmesg来确认。如果驱动有问题,可能需要安装或更新驱动。 然后考虑网络管理服务的影响,比如NetworkManager或systemd-networkd,是否配置错误导致网口未激活。另外,检查接口配置文件,如/etc/network/interfaces或Netplan的YAML文件,确保配置正确。如果用户使用的是较新的发行版,可能默认使用ip而不是ifconfig,需要提醒用户安装net-tools。 还可能涉及DHCP配置问题,如果使用动态IP但没有获取到地址,可能需要手动启动dhclient。最后,如果所有步骤都无效,可能需要排除硬件故障,比如更换网线或测试其他端口。 需要确保回答结构清晰,步骤明确,用户能逐步排查。同时注意使用适当的命令和代码示例,避免技术术语过多,让用户容易理解。可能还需要提醒用户不同发行版的差异,比如Debian和RedHat在服务管理上的不同命令。 总结下来,回答应该覆盖物理连接、驱动状态、接口启用、网络服务配置、DHCP获取以及工具安装等方面,确保用户能系统性地解决问题。</think>在Linux系统中,若插入网线后`ifconfig`未显示网口信息,可能是由物理连接、驱动加载或系统配置问题导致。以下是分阶段排查方法: --- ### 一、物理层检查 1. **确认网线/网口状态** - 检查网线两端是否插紧,尝试更换网线或连接其他设备(如路由器)。 - 观察网口指示灯是否亮起(部分服务器需通过命令查看): ```bash sudo ethtool [网卡名] # 如ethtool enp0s3 ``` - 输出中`Link detected: yes`表示物理连接正常。 --- ### 二、检查网卡识别状态 #### 1. **确认网卡是否被系统识别** ```bash ip link show # 查看所有网络接口 lspci | grep -i net # 检查硬件是否被识别 ``` - **若未列出网卡**: - 硬件未识别(可能驱动未加载)。 - 执行`dmesg | grep eth`查看内核日志,确认驱动加载情况。 #### 2. **启用网卡(若接口为DOWN状态)** ```bash sudo ip link set [网卡名] up # 如enp0s3 ``` --- ### 三、驱动问题排查 1. **检查驱动是否加载** ```bash lsmod | grep [驱动关键字] # 如e1000(Intel网卡)、r8169(Realtek) ``` - **若驱动未加载**: ```bash sudo modprobe [驱动名] # 手动加载驱动 ``` 2. **更新或重装驱动** - 通过系统包管理器安装(以Ubuntu为例): ```bash sudo apt update && sudo apt install --reinstall [驱动包名] ``` - 或从硬件厂商官网下载专用驱动。 --- ### 四、网络管理服务冲突 1. **检查NetworkManager状态** ```bash systemctl status NetworkManager # 若服务异常可能影响网口激活 sudo systemctl restart NetworkManager ``` 2. **排查systemd-networkd配置(如使用该服务)** ```bash sudo nano /etc/systemd/network/*.network # 检查配置文件 sudo systemctl restart systemd-networkd ``` --- ### 五、手动配置网络接口 #### 1. **检查接口配置文件** - Debian/Ubuntu(传统方式): ```bash sudo nano /etc/network/interfaces # 确保配置类似: auto enp0s3 iface enp0s3 inet dhcp ``` - RHEL/CentOS: ```bash sudo nmcli connection modify [连接名] ipv4.method auto ``` #### 2. **尝试手动获取IP(DHCP)** ```bash sudo dhclient [网卡名] # 强制请求IP地址 ``` --- ### 六、其他可能性 1. **ifconfig工具未安装** - 部分新发行版默认不安装`net-tools`: ```bash sudo apt install net-tools # Debian/Ubuntu sudo yum install net-tools # RHEL/CentOS ``` 2. **接口命名规则变化** - 使用`ip addr`替代`ifconfig`(更推荐): ```bash ip addr show # 显示所有接口及IP信息 ``` --- ### 故障总结表 | **现象** | **可能原因** | **解决方案** | |-----------------------|---------------------------|-----------------------------| | `ip link`无网卡信息 | 驱动未加载/硬件故障 | 检查`dmesg`日志,更新驱动 | | 接口状态为`DOWN` | 系统未自动启用接口 | `sudo ip link set [网卡名] up` | | `dhclient`无法获取IP | DHCP服务异常/防火墙拦截 | 手动配置静态IP或排查DHCP服务器 | | 网卡名称异常(如`rename3`) | udev规则冲突 | 修改`/etc/default/grub`禁用Predictable Network Interface Names | 通过以上步骤,可逐步定位问题根源。建议优先使用`ip`命令替代`ifconfig`,因后者已逐渐被弃用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值