上一節咱們建立了虛擬路由器「router_100_101」,並經過 ping 驗證了 vlan100 和 vlan101 已經連通。linux
本節將重點分析其中的原理。網絡
首先咱們查看控制節點的 linux bridge 結構發生了什麼變化。spa
vlan101 的 bridge 上多了一個 tape17162c5-00,從命名上能夠推斷該 TAP 設備對應 router_100_101 的 interface (e17162c5-00fa)。router
vlan100 的 bridge 上多了一個 tapd568ba1a-74,從命名上能夠推斷該 TAP 設備對應 router_100_101 的 interface (d568ba1a-740e)。blog
當前網絡結構如圖所示:ip
但發現一個問題:兩個 TAP 設備上並無配置相應的 Gateway IP。路由
若是沒有 Gateway IP,router_100_101 是如何完成路由的呢?it
答案是: l3 agent 會爲每一個 router 建立了一個 namespace,經過 veth pair 與 TAP 相連,而後將 Gateway IP 配置在位於 namespace 裏面的 veth interface 上,這樣就能提供路由了。原理
經過 ip netns 查看 namespace:
配置
router 對應的 namespace 命名爲 qrouter-<router id>。
經過 ip netns exec <namespace name> ip a 命令查看 router_100_101 namespace 中的 veth interface 配置。
namespace 中有兩個 interface:
qr-e17162c5-00 上設置了 Gateway IP 172.16.101.1,與 root namespace 中的 tape17162c5-00 組成 veth pair。
qr-d568ba1a-74 上設置了 Gateway IP 172.16.100.1,與 root namespace 中的 tapd568ba1a-74 組成 veth pair。
網絡結構如圖所示:
namespace 中的路由表也保證了 subnet_172_16_100_0 和 subnet_172_16_101_0 之間是能夠路由的。
分析到這裏,咱們已經搞清楚 router_100_101 是如何打通 vlan100 和 vlan 101 了。
但這裏有一個關鍵問題須要進一步分析:
爲何要把 router_100_101 放到 namespace 中?
下一節咱們將詳細分析這個問題。