Linux的弱主机模型(TCP/IP协议的弱端系统)

名词解释:

弱端系统模型 (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--

相关推荐
xiaoye-duck11 分钟前
《Linux 网络编程》深入理解 IO 多路复用:select 函数详解与 Echo 服务实战
linux·网络
Tairitsu_H24 分钟前
[Linux系统] 命令行参数 | 环境变量 | 程序地址空间
linux·环境变量·命令行参数·程序地址空间
雯宝37 分钟前
devices_init / buses_init / classes_init / firmware_init / hypervisor_init 函数
linux
SDWAN_Cheap37 分钟前
TCP滑动窗口与拥塞控制是什么?从流量控制到网络稳定性的完整解析
网络·tcp/ip·php
广东融科数据服务有限公司1 小时前
无网络仓储库房安防监控改造落地案例|离线闭环存储 + 4G 低功耗远程适配实战优化
网络·仓储改造
YumiProxy1 小时前
动态IP冲突排查实战:从ARP检测到DHCP地址池的完整链路
服务器·网络·网络协议·tcp/ip·ip
Dynadot_tech1 小时前
域名投资中的域名管理策略
网络·域名·域名注册·dynadot·域名管理
M78佐菲2 小时前
ARM学习笔记(12)
linux·arm开发·笔记·嵌入式硬件·学习
CHENKONG_CK2 小时前
RFID 赋能汽车零部件涂装产线,构建全流程数字化追溯体系
网络·人工智能·单片机·网络协议·tcp/ip·汽车
可涵不会debug2 小时前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++