当前位置: 首页 > news >正文

netns--netns - 小镇

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

└───────── 否 ──────► 直接访问真实数据源