名词解释:

弱端系统模型 (weak end system model): IP实现接受目的地址为本主机任一IP地址的数据报,而不管数据报到达的接口。当从二层接收到分组时,匹配系统的所有的接口的所有的ip地址。
强端系统模型 (strong end system model): 只接受达到接口与目的地址一致的数据报。当从二层接收到分组时,匹配接收到该分组的接口的所有的ip地址。

现象描述:

主机配置:

其中ens33是连通的网卡,ens37未连通。

从主机ping局域网其他机器:

走ens33可以ping通其他机器,走ens37无法ping通其他机器。

从其他机器ping主机:

主机ens33的ip192.168.36.3和ens37的ip192.168.36.37都可以从其他机器ping通,但其他机器上的arp缓存里的主机mac地址只有ens33的,192.168.36.37的mac地址也是ens33的mac。

现象解释(借鉴AI):

ens37 根本没有物理链路(NO-CARRIER),但它的 IP 能被 ping 通,是因为 Linux 内核开启了「弱主机模型」(weak host model)。

简单说:

  • 别的机器 ping 36.37 → 数据包到你主机 → 内核发现 “这个 IP 是我的”,就直接从 ens33 回包了
  • 所以你看到:外面能 ping 通 ens37 的 IP,但本机从 ens37 发不出去任何包

1. 先看你自己的输出:ens37 是 NO-CARRIER

3: ens37: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 ... state DOWN
  • NO-CARRIER = 网卡没插线 / 没连上交换机 / 虚拟机网卡没桥接 / 仅主机
  • state DOWN = 链路层不通

所以:ens37 只能收包(被内核代答),不能发包。


2. 为什么外面能 ping 通 192.168.36.37?

Linux 默认是 weak host model(弱主机模型)

只要 IP 属于本机,不管从哪个网卡进来,内核都认,并从 ** 默认路由网卡(ens33)** 回复。

所以流程是:

  1. alma88 ping 192.168.36.37
  2. 包走交换机 → 到达你的 ens33
  3. 内核看到:“36.37 是我本机 IP”
  4. 直接从 ens33 回复 ICMP 应答
  5. 对方收到 → 显示 ping 通

这就是典型的 “单向通”、“IP 能 ping 通但网卡不通”。


3. 为什么你本机 ping -I ens37 36.5 不通?

因为:

  • 你强制从 ens37 出包
  • 但 ens37 NO-CARRIER,物理层不通
  • 包根本发不出去,直接丢在本机协议栈

所以 100% 丢包。


4. 从 arp 表也能看出来猫腻

192.168.36.37   ether   00:0c:29:b2:35:ec   C   ens33
  • 36.37 对应的 MAC 是 ens33 的 MAC
  • 不是 ens37 的 MAC(00:0c:29:b2:35:f6)

说明:应答来自 ens33,不是 ens37


5. 怎么验证我说的对不对?

方法 1:看 ens37 根本收不到 arp
tcpdump -i ens37 arp

再从外面 ping 36.37,你会发现:ens37 上没有任何流量,全走 ens33。

方法 2:关闭弱主机模型,立刻不通
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.all.rp_filter=1

再从外面 ping 36.37,直接不通


6. 你真正要解决的是:ens37 NO-CARRIER

VMware 虚拟机 ens37 没连上网络:

  • 网络模式没选对(host-only / 桥接 / NAT 没开)
  • 或虚拟机网卡没连上
  • 或同网段交换机没开

解决:

  1. 关机
  2. 编辑虚拟机设置
  3. 找到网络适配器 2(ens37)
  4. 选择和适配器 1 一样的模式(比如 NAT 或 桥接)
  5. 开机

之后 ens37 会变成:

state UP

ping -I ens37 36.5 就通了。


一句话总结

  • ens37 物理链路 DOWN,所以发不出包
  • Linux 弱主机模型让别的机器能 ping 通它的 IP
  • 本质:IP 通 ≠ 网卡通

--end--

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐