2、网络接口识别:ifconfig与ip命令详解、查看网络接口状态、识别物理接口与虚拟接口

好,咱们正式开始第二讲。

上一章我们把 rootfs 网络配置的全局脉络理清了。这一章,咱们要动手了。

网络接口,说白了就是系统里那些能收发数据包的“门”。你得先知道门在哪儿、长什么样、是实心的还是带纱窗的,才能谈得上怎么配置它。我个人习惯,拿到一个新板子或者新系统,第一件事就是敲两行命令:ifconfig 和 ip addr。别笑,这俩命令虽然老掉牙,但真能看出不少门道。

2.1 经典命令:ifconfig

ifconfig 是 net-tools 工具包里的老将。很多老工程师(包括我)对它都有感情。它简单、直观,看一眼输出就知道接口的基本情况。

用法很简单:

# 查看所有活跃的网络接口
ifconfig

# 查看所有接口(包括未激活的)
ifconfig -a

# 查看指定接口
ifconfig eth0

输出大概长这样:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::211:22ff:fe33:4455  prefixlen 64  scopeid 0x20<link>
        ether 00:11:22:33:44:55  txqueuelen 1000  (Ethernet)
        RX packets 1024  bytes 1048576 (1.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 512  bytes 524288 (512.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我来拆解一下关键字段:

  • flags:接口状态标志。UP 表示接口已启用,RUNNING 表示物理链路正常。如果只有 UP 没有 RUNNING,那多半是网线没插或者对端没开机。我在项目里遇到过好几次,客户说“我网口灯亮了但 ping 不通”,我远程一看,RUNNING 标志没了——嗯,物理层的问题。
  • inet / inet6:IPv4 和 IPv6 地址。没配地址的话这行就不显示。
  • ether:MAC 地址。每个物理接口都有唯一的 MAC。
  • RX/TX packets:收发数据包统计。这是排查丢包的第一手资料。
小技巧:如果你发现 RX errors 或 dropped 数值一直在涨,那基本可以断定硬件链路有问题——要么是网线质量差,要么是网口接触不良。我曾经在工控机上遇到过,换了根屏蔽网线就好了。

2.2 现代替代:ip 命令

ip 命令来自 iproute2 工具包,是 Linux 网络配置的新一代标准。说实话,我现在写脚本基本都用 ip 而不是 ifconfig,因为它的输出更结构化,功能也更强大。

查看接口信息:

# 查看所有接口的地址信息
ip addr

# 简写形式
ip a

# 查看指定接口
ip addr show eth0

# 查看接口链路状态
ip link show

输出示例:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::211:22ff:fe33:4455/64 scope link 
       valid_lft forever preferred_lft forever

这里有个关键区别:ip link show 显示的是接口的 链路层 状态,而 ip addr show 显示的是 网络层 地址。你想想看,一个接口可能链路是通的(state UP),但没配 IP 地址——这种情况在嵌入式设备里很常见,比如只用来做桥接的端口。

2.3 物理接口 vs 虚拟接口

这是很多新手容易混淆的地方。我刚开始学的时候也犯过迷糊——怎么系统里冒出来那么多接口?

简单来说:

  • 物理接口:对应真实的硬件网卡。比如 eth0、enp2s0(PCIe 枚举名)、wlan0(无线网卡)。它们背后有实实在在的芯片和引脚。
  • 虚拟接口:由软件模拟出来的接口。没有对应的硬件,但行为上跟物理接口一样。常见的有:
    • lo:回环接口,用于本机内部通信。永远存在,永远 UP。
    • eth0:1:子接口(别名),在同一个物理接口上绑定多个 IP。
    • br0:网桥接口,用于把多个接口桥接成一个二层网络。
    • veth0:虚拟以太网对,常用于容器网络。
    • tun0 / tap0:隧道接口,用于 VPN。

怎么区分?看名字和 link/ether 字段:

  • 物理接口通常有真实的 MAC 地址(由硬件厂商分配)。
  • 虚拟接口的 MAC 地址往往是全 0 或者随机生成的。比如 lo 的 MAC 就是 00:00:00:00:00:00。
  • 另外,ip link show 的输出里,物理接口会显示 qdisc pfifo_fast 之类的队列规则,而虚拟接口可能是 qdisc noqueue。
注意:在嵌入式系统里,有些 SoC 内部集成的 MAC 控制器会被识别为 eth0,但它可能通过 MII/RMII 接口外接了 PHY 芯片。这时候 eth0 仍然是物理接口,但 PHY 芯片的型号会影响链路协商结果。我曾经调试过一个板子,千兆 PHY 因为焊接问题只能工作在百兆模式,ip link 里显示的 speed 100 就是铁证。

2.4 接口状态速查表

为了方便你快速判断,我整理了一个对照表:

状态 ifconfig 显示 ip link 显示 含义
接口启用且链路正常 UP RUNNING state UP + LOWER_UP 正常工作状态
接口启用但无链路 UP(无 RUNNING) state UP(无 LOWER_UP) 网线未插或对端关机
接口禁用 不显示(除非 -a) state DOWN 被 ifconfig down 或 ip link set down 关闭
回环接口 UP LOOPBACK RUNNING state UNKNOWN 永远存在,永远可用
核心要点:判断一个接口是否“能用”,要看两个条件:state UP(软件层面启用)和 LOWER_UP(物理链路正常)。缺一不可。

2.5 知识体系图

下面这张图帮你理清本章的知识结构:

网络接口识别知识体系 网络接口识别 查看命令 接口类型 状态判断 ifconfig ip addr / ip link 物理接口 (eth0) 虚拟接口 (lo/br0) UP / DOWN LOWER_UP 核心:先看 state,再看 LOWER_UP,最后看地址 示例:eth0: <UP,LOWER_UP> → 接口可用 eth0: <UP> (无 LOWER_UP) → 链路断开

2.6 实战:一眼识别接口

好了,理论说完了。咱们来点实际的。

假设你拿到一个嵌入式设备,串口登录后敲了 ip link show,输出如下:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN
4: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
5: wlan0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state UP

你能看出什么?

  • lo:回环接口,正常。
  • eth0:物理接口,已启用且链路正常(UP + LOWER_UP)。可以通信。
  • eth1:物理接口,但被禁用了(state DOWN)。需要 ip link set eth1 up 才能用。
  • br0:网桥接口,也是 DOWN。可能还没配置好。
  • wlan0:无线接口,UP 但没有 LOWER_UP。说明无线模块已启用,但没连上 AP。嗯,这种情况我遇到过——WiFi 驱动加载成功了,但 SSID 没配对。
我的习惯:每次排查网络问题,我第一件事就是 ip link show,扫一眼所有接口的状态。如果某个接口该 UP 的没 UP,或者该有 LOWER_UP 的没有,那问题就锁定在物理层或驱动层了。省得在应用层瞎折腾。

这一章的内容就到这里。记住:识别接口是网络配置的第一步,也是最重要的一步。把这一步走稳了,后面的配置才能有的放矢。

可可精品资料库