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 知识体系图
下面这张图帮你理清本章的知识结构:
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 的没有,那问题就锁定在物理层或驱动层了。省得在应用层瞎折腾。
这一章的内容就到这里。记住:识别接口是网络配置的第一步,也是最重要的一步。把这一步走稳了,后面的配置才能有的放矢。