ip addr 不显示“UP”状态因其只管协议层(IP配置),链路层状态需用 ip link 查看;配静态IP需先 ip link set up,再 ip addr add,最后 ip route add 默认网关。

ip addr 和 ifconfig 输出差异大,为什么看不到“UP”状态?
因为 ip addr 默认不显示接口是否启用,它把“链路层 UP”和“协议层 UP”拆开了。ifconfig 里看到的 UP 实际混合了 UP(接口已启用)和 RUNNING(物理链路通),而 ip link 才管前者,ip addr 只管后者。
-
ip link show eth0看state UP→ 表示内核已启用该接口 -
ip addr show eth0看是否有inet地址 → 表示 IP 层配置已生效 - 如果
ip link显示state DOWN,但ip addr有地址,那地址不会生效——这是最常被忽略的启动顺序问题
给网卡配静态 IP,用 ip addr add 还是 ip route?
ip addr add 负责绑定 IP 到接口,ip route 负责告诉系统“去哪找下一跳”。两者缺一不可,但新手常只做前者,结果能 ping 通本机、ping 不通网关。
-
ip addr add 192.168.1.100/24 dev eth0→ 绑定地址(别漏/24,否则默认 /32) -
ip link set eth0 up→ 必须先 up 接口,再配地址才有效 -
ip route add default via 192.168.1.1→ 没这句,出不去局域网 - 临时配置不写入文件,重启就丢;要持久化得改
/etc/network/interfaces(Debian)或/etc/sysconfig/network-scripts/ifcfg-eth0(RHEL)
ifconfig 显示的 RX/TX 数据,ip 命令怎么看?
ip -s link 是唯一对应项,但它输出分两块:上半段是接口统计(类似 ifconfig 的 bytes/packets),下半段是错误计数(dropped、overrun 等)。直接 ip link 不显示流量数据。
-
ip -s link show eth0→ 查看实时收发包量、错误数 - 第一行
RX: bytes packets errors对应 ifconfig 的 RX 字段 - 注意:部分虚拟网卡(如 veth、docker0)可能不更新
bytes,只更新packets,这是驱动限制,不是命令问题 - 想持续监控?用
watch -n1 'ip -s link show eth0 | head -20',别用ifconfig那种滚动式刷新
ip route add 报错 “Network is unreachable”,常见原因
不是路由规则写错了,而是目标网络根本没可达路径——通常因为网关不在直连子网里,或者接口没 up,或者子网掩码配反了。
- 检查网关是否在本地子网:
ip addr show eth0 | grep inet,确认192.168.1.1和你的 IP 在同一/24内 - 检查接口状态:
ip link show eth0 | grep "state ",必须是state UP - 别用
ip route add 10.0.0.0/8 via 192.168.1.1这种跨网段网关——除非你真有三层设备转发 - 错误信息里出现
Network is unreachable,基本可以排除语法问题,专注查链路层
真正麻烦的是那些不报错但不通的情况:比如 ip route 看起来全对,但 arp -n 里没有网关 MAC,这时候得查 ip neigh 和防火墙是否拦截了 ARP。

















