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 網卡命名規則詳解