posted

0 Comments

作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與SD-WAN方案的介紹與推廣。

在很久很久以前,本網誌開始沒多久的時候,我們有和大家分享過邏輯交換器 (Logical Switch),或是叫做網路虛擬化 (Network Virtualization),或是有人叫做層疊網路 (Overlay-Network) 的概念。但過了這麼久,NSX-T出來了,也有很多新朋友加入,我想我們重新再和大家回顧一下邏輯交換器的概念應該沒有關係吧~

請大家邊看這個網誌邊當做一下基礎的網路概念回顧,每個情境稍微想一下,不要馬上往下看。我們要談NSX的邏輯交換器運作機制前,先來討論一下最基礎的網路概念:Ethernet Switch是如何運作的?

在下面這張示意圖內有兩個交換器,透過Trunk Link連在一起。想像這個環境內有配置了vlan 101,然後Switch A上面的Port 5 / Port 8與Switch B上面的Port 3 / Port 13都被設定為vlan 101的access port。而在Trunk Port上(Switch A的Port 24, Switch B上的Port 7)都有允許vlan 101的traffic通過。三台實體伺服器各自接到這兩台交換器上,網卡地址分別是Mac A / Mac B / Mac C
請回憶一下,Ethernet Switch是依據什麼做Ethernet Frame的『交換』?Switch並不像Hub一樣,收到一個Ethernet Frame時並不會往所有的Port丟出去。Ethernet Switch在每個vlan上應該都有一個交換表叫做mac-address-table,當Switch收到一個Ethernet Frame,會將這個Frame的目的地Mac Address與mac-address-table進行比對,然後只往對應的Port送出去。好,問題來了,請想三秒鐘,在上圖,Switch A與Switch B的Mac Address Table應該是長什麼樣子?當這兩台Switch收到了一個Frame,目的地往Mac A / Mac B / Mac C / 廣播地址時,分別會如何轉送?
好答案如下表。我想應該很明確,不用做太多解釋吧。多談一點,如果收到的是Broadcast Frame,交換器應該要把這個Frame送到所有隸屬於這個vlan內有運作的access port/trunk port。因此在Switch A內,Port 5/8/24都應該要發送這個Frame,而在Switch B內,Port 7/13需要進行發送,而Port 3因為沒有接線沒有運作,就不用發送了。
而這個Mac Address Table裡面的各項條目怎麼產出的呢?也請大家回憶一下。運作的機制是這樣:
  • Switch A由Port 5 (Access Port, vlan 101) 接收到一個來自Mac A的Ethernet Frame
  • Switch A更新vlan 101的mac address table,以後有任何目的地送往Mac A的Frame,就往Port 5丟出去就好
  • Switch B由Port 7 (Trunk Port) 接收到一個來自Mac A的Ethernet Frame, Frame裡面有打vlan tag為101
  • Switch B由vlan tag確認這個Frame屬於vlan 101,因此更新vlan 101的mac address table,以後有任何目的地送往Mac A的Frame,就往Port 7丟出去並且打vlan tag 101
好那下一個情境:在上面的環境,用戶把伺服器 B從Switch A拔掉,改接到Switch B的Port 3 (同樣是vlan 101) 上,且伺服器B已經有Ethernet Frame丟出去,兩台交換器都學習到這個改變了。此時,各台交換器上,vlan 101的Mac Address Table會變成怎麼樣呢?
答案如下,應該很直接,大家開始感覺無聊了吧。
在上面做這些網路概念回顧是幹什麼呢?我們要把邏輯交換器的觀念與實體交換器的觀念做一個比對。邏輯交換器的觀念其實很單純,概念置換一下就好。下面我們來看一個標準的NSX虛擬化環境。環境內有三個Transport Node分別是vSphere 1 / vSphere 2 / KVM 3。這環境內有三台虛機,A與B目前在vSphere 2上,C目前在KVM 3上。而這三個虛機,都是接在NSX-T所建立的邏輯交換器71005號上。
此時NSX-T內同樣地會維護一個對應到71005號邏輯交換器的Mac Address Table,像是這樣子:
  • 在邏輯交換器內,當收到一個Ethernet Frame目的地往Mac A,各台Transport Node (vSphere / KVM) 要知道的不是要從哪個實體Port把Frame丟出去,而是這個Mac A的虛機或是容器,是在哪個Transport Node上。在上圖,各台vSphere / KVM會知道要把這個Ethernet Frame用Geneve協定封裝後往vSphere 2丟
  • 在每個Transport Node上面負責接收與送出Geneve封裝的介面叫做TEP (Tunnel EndPoint),也會在實體網路上有一個對應的IP地址。因此在上表,要把往Mac A的Frame送給vSphere 2,代表這個Frame以Geneve封裝後,在底層實體網路上,要送給vSphere 2的TEP介面IP 10.10.10.2
  • VM B也在vSphere 2上,因此Mac Table內,到Mac B也是要往TEP 2送。同理VM C在KVM 3,到Mac C就得往TEP 3送
  • 上面的MAC Table如何建立起來呢?或是說,NSX怎麼知道哪個虛機在哪個Transport Node上呢?當每個虛機的vnic一接到邏輯交換器上,這台虛機所在的vSphere / KVM上的NSX監控程式,就會與NSX Controller回報:目前在vSphere 2上的虛機A網卡(Mac A)已經接到邏輯交換器71005號了。此時,NSX Controller就會在71005號上的MAC Table上加入一筆:要到Mac A,請往vSphere 2送 (TEP 2: 10.10.10.2)
  • 而如果現在這個邏輯交換器收到一個Broadcast Frame (或是unknown frame),要如何處理?類比到實體交換器上,會把這個Frame往所有隸屬於這個vlan的access / trunk port丟出去;在NSX Logical Switch上,Mac Table以及對應的TEP Table內會紀錄,有哪些Transport Node (vSphere / KVM) 上有連接到這個邏輯交換器的虛機。在上圖,vSphere 2 / KVM 3上有虛機接到邏輯交換器71005,但vSphere 1沒有。此時,NSX就會把這個Broadcast Frame分別在底層往TEP 2 / TEP 3丟,但不會送往TEP 1。

上面的描述清楚嗎?如果沒問題的話,想像發生了vMotion動作:VM A現在遷移到vSphere 1上了,如下圖

 

 

此時Mac Table會變得如何呢?

 

 

  • 當vMotion動作發生時,vSphere 1 / vSphere 2上面的NSX監控程式就會回報給NSX Controller,現在要到Mac A是變成要送往TEP 1去了。
  • 同時,因為vSphere 1上面有虛機 (Mac A) 接到71005上,而vSphere 2上面雖然少了虛機A,但是虛機 B仍然同樣接到71005。因此NSX Controller知道目前vSphere 1 / vSphere 2 / KVM 3上面都有虛機接到邏輯交換器71005。因此,當NSX於71005上收到一個Broadcast Frame,就會把這個Frame各複製一份,分別於底層實體網路上往TEP 1 / TEP 2 / TEP 3丟
不知道透過上面的類比與說明,大家對於NSX邏輯交換器的運作是否清楚了?下一篇我們會更進一步說明邏輯交換器的Packet Walk,以及Geneve封包的構造。