Linux 网络接口 /sys/class/net/eth0 文件详解
以下是对 /sys/class/net/eth0
目录下每个文件或目录的详细讲解。这些文件是 Linux 系统中 sysfs
文件系统的一部分,提供了与网络接口(这里是 eth0
)相关的配置和状态信息。每个文件或目录的内容反映了网络接口的特定属性或状态,通常用于监控、调试或配置网络接口。
1. addr_assign_type
- 含义:表示网络接口 MAC 地址的分配类型。
- 内容:一个整数,表示 MAC 地址的来源或分配方式。
- 可能值:
0
:永久地址(由硬件或固件提供,例如网卡的出厂 MAC 地址)。1
:随机生成的地址(通常用于隐私保护或虚拟接口)。2
:手动设置的地址(通过用户配置,例如ip link set eth0 address
)。3
:从另一个接口克隆的地址。- 其他值可能由特定驱动程序定义。
- 用途:用于确定 MAC 地址的来源,特别是在虚拟化或动态网络环境中,检查地址是否为硬件默认或用户自定义。
2. address
- 含义:网络接口的当前 MAC 地址。
- 内容:以冒号分隔的六组十六进制数,例如
00:16:3e:12:34:56
。 - 用途:查看或验证网络接口的硬件地址。可以通过工具(如
ip link
或ifconfig
)修改此地址。 - 注意:某些虚拟接口可能有随机生成的 MAC 地址。
3. addr_len
- 含义:MAC 地址的长度(以字节为单位)。
- 内容:通常为
6
,表示标准以太网 MAC 地址的长度(48 位)。 - 用途:确认接口使用的地址长度,通常仅在非标准网络协议或特殊硬件中会有所不同。
4. broadcast
- 含义:网络接口的广播地址。
- 内容:通常是一个全
ff
的 MAC 地址,例如ff:ff:ff:ff:ff:ff
,表示以太网广播地址。 - 用途:用于发送广播帧到网络中的所有设备。通常由驱动程序自动设置,无需手动修改。
5. carrier
- 含义:表示网络接口的物理连接状态(是否有链路)。
- 内容:
1
:有物理连接(网线已连接或无线信号已关联)。0
:无物理连接(网线断开或无线未连接)。
- 用途:监控网络接口的物理层状态,常用于故障排查(如检查网线是否插好)。
- 注意:某些虚拟接口可能始终报告
1
。
6. carrier_changes
- 含义:记录物理连接状态(carrier)发生变化的次数。
- 内容:一个整数,表示自接口启动以来连接/断开事件的累计次数。
- 用途:用于诊断网络连接的稳定性。如果此值频繁增加,可能表示物理连接不稳定(如网线松动)。
7. device
- 含义:指向与该网络接口关联的设备驱动程序的
sysfs
路径。 - 内容:一个符号链接,指向
/sys/devices/...
下的设备目录。 - 用途:用于查找网络接口对应的硬件设备(如 PCI 设备)及其驱动信息。
8. dev_id
- 含义:设备的标识符,通常由驱动程序设置。
- 内容:一个整数,可能用于区分同一驱动程序管理的多个接口。
- 用途:在复杂网络环境中(如多网卡系统)帮助区分设备。普通用户较少直接使用。
9. dev_port
- 含义:设备的端口号。
- 内容:一个整数,通常为
0
,除非设备支持多个端口(如交换机或多端口网卡)。 - 用途:在多端口设备中标识特定端口。
10. dormant
- 含义:表示接口是否处于休眠(dormant)状态。
- 内容:
1
:接口处于休眠状态(已配置但未完全激活)。0
:接口未处于休眠状态。
- 用途:某些协议或设备(如无线网络)在连接建立过程中可能短暂处于休眠状态。普通以太网接口通常为
0
。
11. duplex
- 含义:表示网络接口的当前双工模式。
- 内容:
full
:全双工(同时发送和接收数据)。half
:半双工(一次只能发送或接收)。unknown
:未检测到双工模式(可能未连接)。
- 用途:检查网络接口的工作模式。全双工通常提供更高性能,半双工可能导致性能下降或冲突。
12. flags
- 含义:网络接口的标志位,表示当前状态和配置。
- 内容:一个十六进制数,表示多个标志的位掩码。
- 常见标志(参考
ifconfig
或ip link
输出):UP
:接口已启用。RUNNING
:接口正在运行。BROADCAST
:支持广播。MULTICAST
:支持多播。LOOPBACK
:环回接口。
- 用途:用于调试接口状态。例如,检查接口是否启用(
UP
)或是否正在运行(RUNNING
)。
13. gro_flush_timeout
- 含义:通用接收卸载(GRO, Generic Receive Offload)的超时时间。
- 内容:一个整数,表示 GRO 缓冲区刷新前的最长等待时间(以纳秒为单位)。
- 用途:GRO 是一种性能优化技术,将多个小数据包合并为一个大包以减少 CPU 开销。此文件允许调整 GRO 的行为,但通常由驱动程序自动管理。
14. ifalias
- 含义:网络接口的别名。
- 内容:一个字符串,通常为空,除非用户手动设置了别名。
- 用途:为接口提供一个人类可读的名称,便于管理和识别。例如,可以设置为“LAN”或“WAN”。
15. ifindex
- 含义:网络接口的唯一索引号。
- 内容:一个整数,由内核分配,标识系统中每个网络接口。
- 用途:用于在内核和用户空间中唯一标识接口。例如,
ip link
命令会显示此索引号。
16. iflink
- 含义:指向关联接口的索引号。
- 内容:一个整数,通常与
ifindex
相同,除非接口是虚拟接口(如 VLAN 或桥接接口)。 - 用途:用于确定虚拟接口与其父接口的关系。例如,VLAN 接口的
iflink
指向物理接口的ifindex
。
17. link_mode
- 含义:表示接口的链路管理模式。
- 内容:一个整数,通常由驱动程序定义。
- 用途:某些高级网络设备可能支持不同的链路管理模式,但普通用户较少直接使用。
18. mtu
- 含义:最大传输单元(MTU),表示接口支持的最大数据包大小(以字节为单位)。
- 内容:一个整数,例如
1500
(标准以太网 MTU)。 - 用途:调整 MTU 可以优化网络性能。例如,增大 MTU(需要网络支持)可减少分片,提高吞吐量。
- 注意:修改 MTU 需要确保整个网络路径支持相同的 MTU 值。
19. netdev_group
- 含义:网络设备组 ID。
- 内容:一个整数,表示接口所属的网络设备组。
- 用途:用于网络命名空间或策略路由,普通用户较少直接使用。
20. operstate
- 含义:表示网络接口的操作状态。
- 内容:一个字符串,可能的值包括:
up
:接口已启用并运行。down
:接口已禁用。unknown
:状态未知(可能未连接)。dormant
:接口处于休眠状态。testing
:接口正在测试中。lowerlayerdown
:依赖的下层接口未启用。
- 用途:比
carrier
提供更详细的状态信息,适合脚本或监控工具使用。
21. phys_port_id
- 含义:物理端口的唯一标识符。
- 内容:一个十六进制字符串,表示硬件端口的 ID。
- 用途:在多端口设备(如交换机或多端口网卡)中标识特定物理端口。
22. phys_port_name
- 含义:物理端口的名称。
- 内容:一个字符串,例如
p1
或eth0
,表示端口的名称。 - 用途:与
phys_port_id
类似,用于标识物理端口,便于管理和监控。
23. phys_switch_id
- 含义:物理交换机的标识符。
- 内容:一个十六进制字符串,表示接口所属的交换机 ID。
- 用途:在支持硬件交换的设备中,标识接口所属的交换机。通常在数据中心或企业级网络设备中常见。
24. power
- 含义:与网络接口的电源管理相关。
- 内容:一个目录,包含电源管理相关的文件(如
wakeup
、runtime_enabled
)。 - 用途:用于配置设备的节能模式。例如,启用/禁用设备在空闲时的低功耗状态。
25. proto_down
- 含义:表示接口是否被协议层禁用。
- 内容:
1
:接口被协议层禁用。0
:接口未被协议层禁用。
- 用途:某些高级网络配置(如故障转移)可能通过协议禁用接口,而非物理禁用。
26. queues
- 含义:与网络接口的发送和接收队列相关。
- 内容:一个目录,包含子目录(如
tx-0
、rx-0
),表示发送和接收队列的配置。 - 用途:用于配置多队列网卡的性能参数,例如分配 IRQ 或调整队列优先级,以优化网络吞吐量。
27. speed
- 含义:表示网络接口的当前链路速度。
- 内容:一个整数,表示速度(以 Mbps 为单位),例如
1000
表示 1Gbps。-1
:速度未知(通常是未连接状态)。
- 用途:检查网络接口的协商速度。速度不匹配可能导致性能问题。
28. statistics
- 含义:网络接口的统计信息。
- 内容:一个目录,包含多个文件,如:
rx_bytes
:接收的字节数。tx_bytes
:发送的字节数。rx_packets
:接收的数据包数。tx_packets
:发送的数据包数。rx_errors
:接收错误数。tx_errors
:发送错误数。collisions
:冲突次数。
- 用途:用于监控网络流量和错误,诊断性能问题或网络故障。
29. subsystem
- 含义:指向网络子系统的
sysfs
路径。 - 内容:一个符号链接,通常指向
/sys/class/net
。 - 用途:提供对网络子系统的访问,普通用户较少直接使用。
30. tx_queue_len
- 含义:发送队列的长度。
- 内容:一个整数,表示发送队列的最大数据包数(例如
1000
)。 - 用途:调整此值可以影响网络接口的缓冲行为。较大的队列可能减少丢包,但会增加延迟。
31. type
- 含义:表示网络接口的类型。
- 内容:一个整数,对应于内核定义的接口类型。
- 常见值:
1
:以太网(ARPHRD_ETHER)。772
:环回接口(ARPHRD_LOOPBACK)。- 其他值可能表示 VLAN、隧道等。
- 用途:用于确定接口的协议类型。例如,确认接口是以太网还是其他类型(如 PPP)。
32. uevent
- 含义:与用户空间事件(uevent)相关的信息。
- 内容:一个文件,包含键值对,描述接口的属性(如
DEV_NAME=eth0
)。 - 用途:由
udev
或其他用户空间工具读取,用于设备管理和热插拔事件处理。
总结
/sys/class/net/eth0
下的这些文件和目录提供了对网络接口的全面监控和配置能力。作为网络专家,你可以通过读取这些文件来:
- 监控状态:检查
carrier
、operstate
、speed
、duplex
等,了解接口的运行状态。 - 诊断问题:通过
statistics
查看错误计数,或通过carrier_changes
检测物理连接问题。 - 优化性能:调整
mtu
、tx_queue_len
或queues
中的参数,提升吞吐量或减少延迟。 - 调试配置:验证
address
、ifindex
或type
,确保接口配置正确。