如何判斷網路介面是物理(設備)還是虛擬(別名)?
我有一個執行 OpenWrt(一種用於路由器的嵌入式 Linux)的小型家用路由器。它有五個乙太網埠,一個標記為 WAN 和四個標記為 LAN 1 到 4。它具有以下定義的網路介面
ifconfig
:root@TIBERIUS: ~ > ifconfig | grep Link br-lan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 eth0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 lan1 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 lan2 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 lan3 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 lan4 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 lo Link encap:Local Loopback pppoe-wan Link encap:Point-to-Point Protocol wan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 wlan0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
如您所見,相當多的設備,但只有一個 MAC 地址。
我知道其中一些設備是虛擬的。讓我們拋開
lo
和pppoe-wan
,那是環回設備和我的PPPoE連接。但是對於其餘的,我應該如何判斷它們是物理的還是虛擬的?我知道有一個用於標記虛擬介面的命名約定,例如eth0.1
,但這裡顯然不遵守。讓我們看看其中ifconfig
兩個介面的輸出:root@TIBERIUS: ~ > ifconfig wan wan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15007 errors:0 dropped:0 overruns:0 frame:0 TX packets:12055 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13341276 (12.7 MiB) TX bytes:1831757 (1.7 MiB) root@TIBERIUS: ~ > ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25799 errors:0 dropped:0 overruns:23 frame:0 TX packets:25294 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:15481996 (14.7 MiB) TX bytes:15160380 (14.4 MiB) Interrupt:4
除了
txqueuelen
具有非零的晦澀細節之外eth0
,唯一顯著的區別是它eth0
有一個Interrupt
條目,據我所知,這是一個硬體功能。那麼,您是如何通過在 中查找Interrupt
條目來判斷網路介面是否為物理的ifconfig
?或者,還有更好的方法?找出網路設備是物理設備還是虛擬設備的簡單直接的方法?請注意,有一個相關的問題,但雖然它確實有一個公認的答案,但它不是決定性的。
更新
作為對 derobert 的回答,以下資訊來自
ls -l /sys/class/net
:br-lan -> ../../devices/virtual/net/br-lan eth0 -> ../../devices/platform/ag71xx.0/net/eth0 lan1 -> ../../devices/platform/dsa.0/net/lan1 lan2 -> ../../devices/platform/dsa.0/net/lan2 lan3 -> ../../devices/platform/dsa.0/net/lan3 lan4 -> ../../devices/platform/dsa.0/net/lan4 lo -> ../../devices/virtual/net/lo pppoe-wan -> ../../devices/virtual/net/pppoe-wan wan -> ../../devices/platform/dsa.0/net/wan
[此列表的附錄:
wlan0
本來也會出現wlan0 -> ../../devices/platform/ath9k/net/wlan0
,但是當我複制上面的列表時,我禁用了 WLAN,這就是它沒有出現的原因。]我會說
eth0
是唯一的設備。不清楚是什麼dsa.0
。並回复 Bryan Agee 的回答:
root@TIBERIUS: ~ > cat /etc/config/network config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'eth' option ifname 'eth0' option proto 'none' config interface 'lan' option ifname 'lan1 lan2 lan3 lan4' option type 'bridge' option proto 'static' option ipaddr '192.168.33.1' option netmask '255.255.255.0' config interface 'wan' option ifname 'wan' option proto 'pppoe' option username '…' option password '…'
您可以檢查
/sys
:anthony@Zia:/sys/class/net$ ls -l /sys/class/net/ total 0 lrwxrwxrwx 1 root root 0 Dec 11 15:38 br0 -> ../../devices/virtual/net/br0 lrwxrwxrwx 1 root root 0 Dec 11 15:38 lan -> ../../devices/pci0000:00/0000:00:1e.0/0000:07:01.0/net/lan lrwxrwxrwx 1 root root 0 Dec 11 15:38 lo -> ../../devices/virtual/net/lo lrwxrwxrwx 1 root root 0 Dec 11 15:38 tun0 -> ../../devices/virtual/net/tun0
因此,實際設備顯示在 /sys/class/net 中。請注意,別名(如 lan:0)不會(因此您可以分辨出哪些是別名)。您可以清楚地看到哪些是實際硬體 (lan),哪些不是 (br0, lo, tun0)。
澄清
您可以在上面分辨哪些是真實的,因為虛擬的都是虛擬的。並且 lan 在 PCI 匯流排上。
在您的情況下,您有六個:eth0、wan 和 lan1-4。這很奇怪,因為您說您總共只有五個埠。我猜 eth0 實際上是硬連線到一個交換機晶片,而其他 5 個埠是該交換機上的埠。wlan0 也可能是真實的(可能是無線適配器),儘管它沒有顯示在 /sys… 中。
所以,我想說的是,出於所有實際目的,您的真實埠是 wan、lan1-4 和 wlan0。br-lan 是一個橋接器,用於使所有 4 個 lan 埠用作交換機(因此您可以拆分該交換機)。