Làm cách nào để biết giao diện mạng là vật lý (thiết bị) hay ảo (bí danh)?


17

Tôi có một bộ định tuyến nhỏ ở nhà chạy OpenWrt (Loại Linux nhúng cho bộ định tuyến). Nó có năm cổng Ethernet, một cổng có nhãn LAN và bốn labeld LAN 1 đến 4. Nó có các Giao diện mạng sau được định nghĩa theo 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

Như bạn có thể thấy, khá nhiều thiết bị, nhưng chỉ có một địa chỉ MAC.

Tôi hiểu một số thiết bị đó là ảo. Hãy đặt sang một bên lopppoe-wan, đó là thiết bị loopback và Kết nối PPPoE của tôi. Nhưng đối với những người còn lại, làm thế nào tôi có thể biết được họ là vật lý hay ảo? Tôi hiểu có một quy ước đặt tên để gắn nhãn Giao diện ảo như thế nào eth0.1, nhưng rõ ràng điều đó không được tuân thủ ở đây. Hãy xem Đầu ra của ifconfighai trong số các giao diện sau:

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

Ngoài Chi tiết tối nghĩa về txqueuelenviệc có một giá trị khác không eth0, điểm khác biệt nổi bật duy nhất là eth0có một Interruptmục, theo như tôi biết là Tính năng Phần cứng. Vì vậy, đó là cách bạn nói Giao diện mạng là vật lý hay không, bằng cách tìm kiếm một Interruptmục trong ifconfig? đây có phải là cách tốt hơn không? Một cách đơn giản và dễ hiểu để tìm hiểu xem một thiết bị mạng là vật lý hay ảo?

Lưu ý có một câu hỏi liên quan nhưng trong khi nó có câu trả lời được chấp nhận, thì đó không phải là kết luận.

Cập nhật

Trả lời câu trả lời của derobert, đây là thông tin bắt nguồn từ 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

[Phụ lục vào danh sách này: wlan0cũng sẽ xuất hiện wlan0 -> ../../devices/platform/ath9k/net/wlan0, nhưng khi tôi sao chép danh sách trên, tôi đã tắt mạng WLAN, đó là lý do tại sao nó không hiển thị.]

Tôi muốn nói eth0là thiết bị duy nhất. Không rõ dsa.0là gì .

Và trả lời câu trả lời của 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 '…'

Bạn đã trả lời câu hỏi của riêng bạn (tìm các mục dành riêng cho phần cứng như IRQ, txqueue, ...). Câu hỏi đặt ra cho tôi là - tại sao bạn cần phân biệt điều đó trong trường hợp sử dụng của bạn?
Nils

@Nils, tôi không nắm rõ cấu hình mạng trên thiết bị bộ định tuyến của mình sau khi tôi flash OpenWrt lên nó. Tôi thấy nó hoàn toàn khó hiểu. Tài liệu dự án và diễn đàn đã cung cấp một số trợ giúp, nhưng không đủ, và để lại những câu hỏi cơ bản chưa được trả lời. Một trong những câu hỏi đó là một câu hỏi được nêu ra ở đây. Bây giờ đối với tôi, bộ định tuyến của tôi chỉ có một NIC khi tôi chắc chắn rằng nó có hai. Làm rõ chi tiết làm giảm sự nhầm lẫn. Đó là lý do tại sao.
Lumi

Bạn có thể đặt một bức ảnh nhỏ hoặc một liên kết đến một bức ảnh / tài liệu cho bộ định tuyến đó ở đây không? Có thể có những thứ như liên kết / bắc cầu / NATting ẩn MAC thực sự ...
Nils

Bạn sẽ có thể xem chi tiết tốt hơn và những chi tiết bạn cần, sử dụnglshw -class network
Nathan V

@Nils, ở đây bạn đi: wiki.openwrt.org/toh/tp-link/tl-wr941nd - @Nathan , chỉ với 4 MB flash, hộp khá hạn chế và lshwkhông có trong danh sách gói. Một anh chàng am hiểu và quyết đoán có thể thành công trong việc cài đặt các công cụ dev tmpfs, nhưng nó có đáng không? Tôi sẽ hiểu thêm về mạng Linux bằng PC tiêu chuẩn. Điều này sẽ dễ dàng hơn. Mặc dù tôi không hiểu đúng cấu hình bộ định tuyến này, nhưng nó hoạt động tốt. Cảm ơn bạn đã giúp đỡ.
Lumi

Câu trả lời:


19

Bạn có thể kiểm tra /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

Vì vậy, các thiết bị thực tế hiển thị trong / sys / class / net. Lưu ý rằng các bí danh (như lan: 0) không (vì vậy bạn có thể biết đó là bí danh). Và bạn có thể thấy rõ phần cứng thực sự nào (lan) và phần nào không (br0, lo, tun0).

làm rõ

Bạn có thể biết cái nào là thật ở trên vì những cái ảo đều là ảo. Và lan là trên xe buýt PCI.

Trong trường hợp của bạn, bạn có sáu: eth0, wan và lan1 Lỗi4. Điều này khá kỳ lạ, vì bạn nói rằng bạn chỉ có tổng cộng năm cổng. Tôi đoán eth0 thực sự được gắn với chip a-switch-ish và 5 cổng còn lại là cổng trên công tắc đó. wlan0 có lẽ cũng có thật (sẽ là bộ điều hợp không dây), mặc dù nó không hiển thị trong / sys.

Vì vậy, tôi muốn nói rằng với tất cả các mục đích thực tế, các cổng thực sự của bạn là wan, lan1 Lỗi4 và wlan0. br-lan là một cây cầu được thiết lập để làm cho tất cả các cổng 4 lan hoạt động như một công tắc (vì vậy bạn có thể phân chia công tắc đó).


Cảm ơn. Tôi đã thêm đầu ra tương tự cho câu hỏi của tôi. Nó không rõ ràng như đầu ra bạn đang hiển thị ở đây, với bus PCI hoặc không có gì hiển thị ở đó; Mặc dù tôi không thực sự hiểu đầu ra, tôi đồng ý rằng nó trông giống như định danh phần cứng. Trong trường hợp đầu ra của tôi được đăng ở trên, đó là sự hiện diện của ag71xxnó khiến tôi nghĩ đó là phần cứng, vì nó trông giống như một trình điều khiển.
Lumi

@Lumi chỉnh sửa để cố gắng trả lời.
derobert

Điều này có lẽ thực tế hơn phản ứng của tôi.
Bryan Agee

Cảm ơn. Lưu ý wlan0sẽ có mặt trong danh sách thiết bị dưới /sys/class/netmũ, nó được kích hoạt khi tôi sao chép danh sách. :) Bây giờ tôi đã thêm nó ở trên. Tôi không đồng ý với bạn về số lượng thiết bị, tôi nghĩ chỉ có hai, LAN và WLAN. Nhưng đó là một câu trả lời nhỏ, câu trả lời hay, được chấp nhận, cảm ơn bạn!
Lumi

@Lumi sử dụng brctrl delif br-lan lan1(hoặc tương tự) để thả một cổng ra khỏi cây cầu. Tôi nghi ngờ nó sẽ hoạt động như một cổng riêng (không phải là một phần của bộ chuyển mạch LAN).
derobert

5

Giả sử địa chỉ MAC giao diện của bạn không bị giả mạo , bạn có thể thử sử dụng ethtool :

ethtool -P {Network interface name}

" Địa chỉ thường trú: 00: 00: 00: 00: 00 " sẽ cho biết đó là giao diện mạng ảo.

Vòng lặp bash sau đây sẽ hiển thị địa chỉ MAC cho tất cả các giao diện mạng:

for i in $(ip -o link show | awk -F': ' '{print $2}'); \
do mac=$(ethtool -P $i) \
&& printf '%-10s %-10s\n' "$i" "$mac"; \
done

lo         Permanent address: 00:00:00:00:00:00
enp5s0f0   Permanent address: 44:1e:a1:73:39:c8
enp4s0f0   Permanent address: 00:9c:02:b0:ef:20
enp5s0f1   Permanent address: 44:1e:a1:73:39:c9
enp4s0f1   Permanent address: 00:9c:02:b0:ef:24
virbr1     Permanent address: 00:00:00:00:00:00
virbr1-nic Permanent address: 00:00:00:00:00:00
virbr0     Permanent address: 00:00:00:00:00:00
virbr0-nic Permanent address: 00:00:00:00:00:00
vnet0      Permanent address: 00:00:00:00:00:00
vnet1      Permanent address: 00:00:00:00:00:00

2

Tôi sẽ bắt đầu bằng cách nhìn vào /etc/network/config; hầu hết các bản phân phối có một tệp tương tự để xác định và định cấu hình các thiết bị mạng. Trong debian / Ubuntu, đó là / etc / mạng / giao diện. Nếu bạn muốn đăng nội dung đó, chúng tôi có thể xác định các mục bí danh, trái phiếu và cầu nối; phần còn lại sẽ là thiết bị vật lý của bạn.

Bằng cách nhìn vào ifconfigđầu ra, bạn có thể biết (như bạn đã đề cập) bởi các thiết bị có ngắt (IRQ); nhiều người cũng có bộ nhớ được gán, giao diện ảo nào không có.

Bạn không thể tự đánh giá bằng các địa chỉ mac, vì các liên kết ( tập hợp liên kết ) sẽ ghi đè lên mac của các thiết bị riêng lẻ và các cây cầu sẽ sử dụng tương tự. Vì vậy, nếu bạn có hai thiết bị được liên kết và bắc cầu - một cấu hình chung cho máy chủ và bộ định tuyến ảo HA - sẽ có bốn thiết bị có cùng mac:

eth0  - physical device 1
eth1  - physical device 2
bond0 - the virtual device that uses either or both of the above
br0   - the bridge that uses bond0 and allows sharing/forwarding across bond0

Rõ ràng các bí danh được sử dụng trong openwrt không phải là những cái ở trên, nhưng khái niệm này nắm giữ; Tôi đã sử dụng chúng bởi vì chúng là tiêu chuẩn thực hành.


Điều này không giải thích cho các giao diện được tạo theo những cách khác, hoạt động theo cách 'tiêu chuẩn' /etc. Ví dụ: các giao diện được tạo bởi NetworkManager không được đề cập ở đó.
gertvdijk

@gertvdijk Điều đó đúng, mặc dù openwrt không đóng gói NetworkManager vào 4MB đó, vì vậy tất cả các giao diện nên có trong cấu hình.
Bryan Agee

-2

Tôi nghĩ rằng chỉ cần kiểm tra xem giá trị /sys/class/net/<interface>/typelà 1 (ARPHRD_ETHER) có đủ để hiểu nếu thiết bị là vật lý hay không.

http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30

ví dụ. tên cơ sở $ (dirname grep -l ^1$ /sys/class/net/*/type)


Tôi đang nhìn thấy 1 cho nhiều giao diện (eth, không dây, cầu và vlan treo trên cầu - vì vậy không)
nhed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.