vSwitch報文轉發分析

一、 vSwitch虛擬交換機簡介

虛擬交換機(vSwitch)是負責主機上的虛擬機之間以及虛擬機與外部之間流量交換的重要部件。vSwitch主要用於實現本臺主機上虛擬機的網絡接入,轉發效果與傳統二層交換機類似。

在虛擬化和雲計算環境中,虛擬機在虛擬化平臺內部流量的轉發無法直觀進行監控。維護人員對於流量在虛擬機和物理主機的端口之間的走向也經常存在很多疑問與困惑。除了使用VEPA解決方案外,也可以針對性地在vSwitch上抓包分析。

二、 vSwitch轉發原理

1. vSwitch上的端口角色

                                                           圖1

如圖1中所示,vSwitch中主要包含三種接口:

1)VNET口:用於連接虛擬機的下行接口,其數量與虛擬機的虛擬網卡數有關。一個虛擬機中的一個虛擬網卡對應vSwitch上的一個VNET口。值得注意的是VNET的端口號在同一臺主機上是連續的,並不會因爲vSwitch的不同而重複標號。

2)eth X 口:是編號爲“X”的服務器主機上的物理端口,新建虛擬交換機時需要選擇的上行接口,負責將vSwitch的上行流量從接口轉發出去。

3)vswitchX 口:位於 vswitchX上的內核接口,與相應vSwitch同名,MAC地址與所綁定的物理接口相同。當新建vSwitch時,會自動生成同名的接口,直接連接到Linux內核中。

如圖2,通過命令ifconfig查看所有的接口信息,比如物理端口ethX、虛擬交換機的內核端口vswitchX、虛擬交換機連接虛擬機的VNET口的MAC地址,IP地址等詳細信息。

                                                 圖2

2. vSwitch的轉發原理

由於vSwitch虛擬交換機是基於MAC地址進行二層轉發的,我們也可以通過命令:ovs-appctl fdb/show vSwitchname對相應名稱爲vSwitchname的vSwitch的MAC地址表進行查看,同時也能通過輸出的port字段瞭解相應端口的角色:

                             圖3

其輸出結果如圖3所示:port 1指的是連接VM的上聯口,從物理端口學習MAC。port 2及標號2以上的端口指vSwitch連接到VM的下聯端口,從VNET端口學習MAC。比如port2對應的MAC地址爲從VNET0口上學習到的MAC地址。LOCAL指vSwitch自身所相連的物理端口的MAC。而MAC地址與傳統網絡設備一致,通過vSwitch自行學習得到,MAC表老化時間爲60s,到了時間MAC地址項就從表中刪除了。

對於流量的轉發,vSwitch還是按照二層交換機的轉發原理進行轉發,不過有以下幾點注意事項:

1)從服務器外部進入的數據包,物理網口收到報文後,交給相連的vSwitch。vSwitch查看自身的mac表,通過對應的接口發送報文。如果MAC表中因爲老化導致沒有目的MAC地址記錄,則進行廣播。其流量走向如圖4所示:藍色流量爲單播轉發,紅色爲廣播轉發情況。

                                                 圖4

2)對於VM發出的報文,先發送到vSwitch上,再根據轉發機制查錶轉發或廣播轉發發送到相應的接口。流量走向如圖5:藍色代表查表直接轉發,紅色代表廣播。

                                               圖5

3)對於內核發出的報文,先查看主機路由表,決定發送到哪個vSwitch,再根據轉發機制由vSwitch將流量發送到相應的接口。對於內核接收到的報文,先查看路由表,如果收包和回包來回路徑對稱,則根據路由回包;如果收包和回包來回路徑不對稱,則直接忽略不回包。如圖6中的例子,VMB連接在vswitch0上,配置爲vSwitch0同一網段的地址。VMB上ping vswitch1的地址,流量經過vSwitch0的轉發通過eth0到外部轉發至eth1上,進入vSwitch1後轉發給vSwitch1內核口,內核口回包時發現應該從vSwitch0口發送,來回路徑不一致,於是不予回包。

                                          圖6

 

參考:http://www.h3c.com/cn/d_201411/845909_97665_0.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章