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--

相关推荐
2601_967987374 小时前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
feng_you_ying_li4 小时前
linux之数据链路层
linux·网络·智能路由器
GeW6 小时前
高端化走到深处,是数据库和Linux的事
linux
国科安芯7 小时前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
程序员初一7 小时前
Linux 远程桌面有四种做法
linux·ssh
程序开发阿元7 小时前
1C1G 能跑什么:把留常驻服务和不留摆进一张内存表
linux·ssh
国科安芯8 小时前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
wdeok8 小时前
Socket编程UDP-简单的聊天室
网络·网络协议·udp
xbzb10 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之avio_open调用流程与实战(三十八)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频