1. 程式人生 > >16、網絡--實驗四(搭建多播模式VXLAN網絡)

16、網絡--實驗四(搭建多播模式VXLAN網絡)

linux docker network hostman

要組成同一個 vxlan 網絡,vtep 必須能感知到彼此的存在。多播組本來的功能就是把網絡中的某些節點組成一個虛擬的組,所以 vxlan 最初想到用多播來實現是很自然的事情。

這個實驗和前面一個非常相似,只不過主機之間不是點對點的連接,而是通過多播組成一個虛擬的整體。最終的網絡架構也很相似(為了簡單圖中只有兩個namespace,但這個模型可以容納多個主機組成 vxlan 網絡):

技術分享圖片

1) NS01刪除vxlan0配置

技術分享圖片

2) NS02刪除vxlan0配置

技術分享圖片

3) vxlan0配置模板

技術分享圖片

這裏最重要的參數是 group 239.1.1.1 表示把 vtep 加入到這個多播組。關於多播的原理和使用不是這篇文章的重點,這裏選擇的多播 IP 地址也沒有特殊的含義,關於多播的內容可以自行了解。

4) NS01 vxlan0配置

技術分享圖片

技術分享圖片

5) NS02 vxlan0配置

技術分享圖片

技術分享圖片

默認表項的 dst 字段的值變成了多播地址 239.1.1.1,而不是之前對方的 VETP 地址。同理給所有需要通信的節點進行上述配置,可以驗證他們能通過 10.20.1.0/24 網絡互相訪問。

1. 發送 ping 報文到 192.168.1.3,查看路由表,報文會從 vxlan0 發出去

2. 內核發現 vxlan0 的 IP 是 192.168.1.3/24,和目的 IP 在同一個網段,所以在同一個局域網,需要知道對方的 MAC 地址,因此會發送 ARP 報文查詢

3. ARP 報文源 MAC 地址為 vxlan0 的 MAC 地址,目的 MAC 地址為全 1 的廣播地址

4. vxlan 根據配置(VNI 42)添加上頭部

5. 因為不知道對方 vtep 在哪臺主機上,根據配置,vtep 會往多播地址 239.1.1.1 發送多播報文

6. 多播組中所有的主機都會受到這個報文,內核發現是 vxlan 報文,會根據 VNI 發送給對應的 vtep

7. vtep 去掉 vxlan 頭部,取出真正的 ARP 請求報文。同時 vtep 會記錄 <源 MAC 地址 - vtep 所在主機 IP 地址> 信息到 fdb 表中

8. 如果發現 ARP 不是發送給自己的,直接丟棄;如果是發送給自己的,則生成 ARP 應答報文

9. 應答報文目的 MAC 地址是發送方 vtep 的 MAC 地址,而且 vtep 已經通過源報文學習到了 vtep 所在的主機,因此會直接單播發送給目的 vtep。因此 vtep 不需要多播,就能填充所有的頭部信息

10. 應答報文通過 underlay 網絡直接返回給發送方主機,發送方主機根據 VNI 把報文轉發給 vtep,vtep 解包取出 ARP 應答報文,添加 arp 緩存到內核。並根據報文學習到目的 vtep 所在的主機地址,添加到 fdb 表中

11. vtep 已經知道了通信需要的所有信息,後續 ICMP 的 ping 報文都是單播進行的


16、網絡--實驗四(搭建多播模式VXLAN網絡)