Linux网卡命名
Linux 网卡命名
网卡编号
最近注意起了linux中网卡的命名有点意思,所以搜集了一下资料,记录一下也供同样困惑的朋友参考。说到网卡那么网络设备肯定是首屈一指的,如下面的两台交换机千兆和万兆的,其命名也是非常的清楚明了,GE代表GigabitEthernet,XGE代表Ten-GigabitEthernet,编号命名也是按照-设备编号/板卡号/端口号命名的。
到了Linux这边网卡编号是这样的:
还有这样的:
其实这两台电脑是一样的型号配置也几乎一样,但网卡的名非常不一样,这明显是系统的命名策略不一样。其实后面这张图片的命名方式已经被废除或者说不推荐使用了,上面的图中的命名方式叫Consistent Network Device Naming
中文译作一致网络设备络设备命名命名
这个译法出自Redhat官方文档的这个链接。
Consistent Network Device Naming/一致网络设备络设备命名命名
起初linux的命名方式就是eth0这样的,益处显而易见,统一的命名看起来舒服也直观,但有个缺点就是eth后面的编号是按照系统加载或者发现设备的顺序来分配的,这会导致有些时候网卡的命名不可预测,也缺乏对网卡具体信息的描述,比如eth4这个网卡其实是一个PCIE的万兆光口网卡,但是却和板载的千兆电口网卡eth0使用相同的命名规则,从网卡名字上无法直观的看出。
后来DELL开发了一个叫biosdevname的方案,也就是前面提到的eno1
等这样的命名方式,规则为:
- en代表Ethernet
- wl代表无线网卡(WIFI)
- ww代表无线广域网卡(4G上网卡等)
- eno中的o代表Onboard,即板载的意思,eno0这样的为板载网卡
- ens代表可热插拔的网卡
- enp中的p代表pci,也就是pcie网卡
- enx/wlx是使用MAC地址命名的网卡
实例
我找了一台服务器加一台虚拟机查看常见的网卡命名。(设备型号为DELL R720 系统为Debian10,使用udev设备管理器,默认启用了biosdevname的命名方案)
上图网卡:
接口名字 | 解释 |
---|---|
lo | 环回口 |
eno1 - eno4 | 板载千兆电口以太网 |
enp4s0f0 enp4s0f1 | pci编号为4:0.0和4:0.1的以太网卡(此例中PCI编号f解释为功能号感觉不妥,这是一块双口卡,两个插口功能应该相同,虽然下图lspci的输出确实如此)注:PCI编号为16进制的 |
enp4s0f1.4 | 在enp4s0f1口上建立的虚拟口(vlan接口vlanID为4) |
docker0 | 网桥(虚拟口,这台机器安装了Docker,这是docker bridge网络建立的bridge口) |
vetheee66be@if13 | veth-pair口(虚拟口) |
enx00e04d462017 | 使用MAC地址命名的USB网卡(不过此处并看不出是USB的) |
wlx60ee5c03ef4b | 使用MAC地址命名的USB无线网卡(不过此处并看不出是USB的) |
还有一种常见的命名为ens,按照文档说明这种是可热插拔PCI网卡,我的机器上面没有这种,不过vmware虚拟机中的网卡是这样的,如下图:
命名优先级
从这张图可以看出前四个为板载网卡,这四个网卡也是有PCI编号的,为什么没有按照PCI网卡命名呢?其实每种网卡都有多种命名方案,最起码都可以按照mac地址命名。这里直接引用Redhat的文档 ,以此为顺序在系统初始化时候进行命名。
中文版:
英文版:
使用udevadmin info /sys/class/net/xx 来查看,ID_NET_NAME开头的就是备选的命名方案,可以看到网卡的多种命名方案:
参考:
Red Hat Enterprise Linux Networking Guide
讲干货----centos7 网卡命名规则详解