netns--netns
Pod A (netns) 目标: Pod B (10.244.1.4)
│
│ ① 生成数据包
│ - 目标 IP: 10.244.1.4
│ - 目标 MAC: ? (未知)
▼
Pod A 网络栈
│
│ ② 查找 ARP 缓存 (ip neigh)
│ - 检查是否存在 10.244.1.4 的映射
│ - 结果:未找到 (INCOMPLETE)
▼
Pod A 生成 ARP 广播请求
│ - "Who has 10.244.1.4? Tell 10.244.1.2"
│ - 目标 MAC: ff:ff:ff:ff:ff:ff
│ - 从 eth0 (veth 对) 发出
▼
宿主机网络栈 (veth 对端)
│
▼
cni0 (Linux Bridge) - L2 广播域
│ │
│ │ ③ cni0 广播处理
│ │ - 收到广播帧
│ │ - 向所有端口(veth, 自身)转发该 ARP 请求
│ │
│ ├─→ Pod B 的 veth 接口
│ ├─→ Pod C 的 veth 接口...
│ └─→ 自身(用于后续 L3 路由,本例中不涉及)
▼
Pod B (netns)
│
│ ④ Pod B 响应
│ - 识别目标 IP 为自己的地址
│ - 单播 ARP 回复:
│ "10.244.1.4 is at mac: aa:bb:cc:dd:ee:ff"
▼
宿主机网络栈 (veth 对端)
│
▼
cni0 (Linux Bridge)
│
│ ⑤ 学习并转发回复
│ - 学习:建立 MAC 地址表 (bridge fdb)
│ - 转发:根据目标 MAC,将回复转发给 Pod A
▼
Pod A (netns)
│
│ ⑥ 更新 ARP 缓存并发送数据
│ - 将 IP→MAC 映射写入缓存 (ip neigh)
│ - 现在有了目标 MAC,用正确地址封装原始数据包,完成通信
▼
最终:Pod A 成功向 Pod B 发送数据包
Pod A (netns) 目标: Pod B (10.244.1.4)
│
│ ① 生成数据包
│ - 目标 IP: 10.244.1.4
│ - 目标 MAC: ? (未知)
▼
Pod A 网络栈
│
│ ② 查找 ARP 缓存 (ip neigh)
│ - 检查是否存在 10.244.1.4 的映射
│ - 结果:未找到 (INCOMPLETE)
▼
Pod A 生成 ARP 广播请求
│ - "Who has 10.244.1.4? Tell 10.244.1.2"
│ - 目标 MAC: ff:ff:ff:ff:ff:ff
│ - 从 eth0 (veth 对) 发出
▼
宿主机网络栈 (veth 对端)
│
▼
cni0 (Linux Bridge) - L2 广播域
│ │
│ │ ③ cni0 广播处理
│ │ - 收到广播帧
│ │ - 向所有端口(veth, 自身)转发该 ARP 请求
│ │
│ ├─→ Pod B 的 veth 接口
│ ├─→ Pod C 的 veth 接口...
│ └─→ 自身(用于后续 L3 路由,本例中不涉及)
▼
Pod B (netns)
│
│ ④ Pod B 响应
│ - 识别目标 IP 为自己的地址
│ - 单播 ARP 回复:
│ "10.244.1.4 is at mac: aa:bb:cc:dd:ee:ff"
▼
宿主机网络栈 (veth 对端)
│
▼
cni0 (Linux Bridge)
│
│ ⑤ 学习并转发回复
│ - 学习:建立 MAC 地址表 (bridge fdb)
│ - 转发:根据目标 MAC,将回复转发给 Pod A
▼
Pod A (netns)
│
│ ⑥ 更新 ARP 缓存并发送数据
│ - 将 IP→MAC 映射写入缓存 (ip neigh)
│ - 现在有了目标 MAC,用正确地址封装原始数据包,完成通信
▼
最终:Pod A 成功向 Pod B 发送数据包
应用程序 (getaddrinfo)
│
▼
┌─────────┐
│ glibc │
│ NSS框架 │
└────┬────┘
│ 是否启用NSCD?
├───────── 是 ──────► ┌──────────┐
│ │ NSCD │
│ │ (缓存守护)│
│ └────┬─────┘
│ │ 缓存未命中
│ ▼
│ 真实数据源访问
│ (files, dns, ldap 等)
│
└───────── 否 ──────► 直接访问真实数据源
