這幾天看了下RFC7348,順便翻譯了一下,根據自己理解做了注解
虛擬化及租戶隔離
服務器虛擬化增加了對物理網絡基礎設施的需求,服務器有多個虛機,要求交換機支持更大的MAC地址表。
在數據中心場景下,虛機按照VLAN分組,可能需要成千上萬的VLAN,以便用來給為按照VLAN標簽分組的虛機分隔流量。但是當前VLAN機制限制最多只能有4096個VLAN。
數據中心需要支持多個租戶,每個租戶需要分隔的網絡域,單獨實現分離的網絡域不經濟。管理員一般基於共享網絡進行隔離。各租戶獨立進行VM的MAC和VLAN的分配,可能在共享的同一個物理網絡上,出現MAC和VLAN的沖突。
在虛擬化場景下,還有一個需求是基於第二層在整個數據中心,或者跨數據中心進行擴展,擴展計算,存儲和網絡資源,此時傳統的用來避免路徑循環的STP協議,會使得更大數量的失效鏈路出現。此時,雖然更傾向於使用IP進行物理基礎設施的鏈接,比如,為了實現多路徑的擴展,使用ECMP避免生效鏈路,但是維持虛機間的L2通信依然是需要保留的。
以上場景導致了overlay疊加網絡的需求,這個疊加網絡用來將來自虛機的攜帶MAC的流量,封裝后通過邏輯隧道傳遞。VXLAN就是這樣的一種實現overlay網絡的方式。
和VXLAN相關的常用術語有
ACL Access Control List 訪問控制表
ECMP Equal-Cost Multipath 等價多路徑
IGMP Internet Group Management Protocol IGMP協議
IHL Internet Header Length Internet報文頭長度
MTU Maximum Transmission Unit 最大傳輸單元
PIM Protocol Independent Multicast 協議無關的多播
SPB Shortest Path Bridging 最短路徑轉發
STP Spanning Tree Protocol 生成樹協議
ToR Top of Rack 機架交換機
TRILL Transparent Interconnection of Lots of Links 多鏈路透明互聯
VLAN Virtual Local Area Network 虛擬LAN
VM Virtual Machine 虛機
VNI VXLAN Network Identifier (or VXLAN Segment ID) VXLAN網絡標識符
VTEP VXLAN Tunnel End Point. An entity that originates and/or
terminates VXLAN tunnels VXLAN隧道端點
VXLAN Virtual eXtensible Local Area Network VXLAN
VXLAN Segment VXLAN段
VXLAN Layer 2 overlay network over which VMs communicate
VXLAN Gateway VXLAN網關
an entity that forwards traffic between VXLANs
VXLAN應用場景
VXLAN主要聚焦於數據中心基礎設施。
STP和VLAN導致的限制
當前L2網絡主要使用802.1D STP協議在多路徑基礎上避免環路。但是數據中心管理員將之視為L2網絡上的問題,因為STP,需要負擔額外超過需要的端口和鏈路。STP模型下,失去了多路徑的彈性。一般引入TRILL(RFC6325)或者SPB(802.1AQ)來幫助解決因為STP引起的多路徑問題。STP的約束也可以通過將同一機架的服務器配置在相同的L3網絡規避,機架內和機架間使用L3交換。但這和虛機之間的L2互聯不兼容。
數據中心L2網絡中普遍使用VLAN來隔離廣播,以太網幀中的12bit VLANID用來將大的L2網絡分隔為小的廣播域。對小於4096 VLAN 的數據中心來說這樣很好,隨着虛擬化的流行,壓力逐漸增大。更加的,因為STP,某些數據中心限制可以使用的VLAN數。再加上以上討論的,多租戶場景下,對大數量VLAN的需求。
多租戶
多租戶場景下,雲計算要求資源的彈性呈現。最常見的雲計算案例是共有雲,雲服務提供商基於同樣的物理基礎設施為多個租戶提供彈性服務。
租戶的網絡流量分隔可以基於L2或者L3網絡。對L2網絡而言,常用VLAN分隔流量,這樣租戶以自己的VLAN標識。因為雲服務租戶的龐大數量,VLANID最大4096就不夠用了。不僅如此,還有同一租戶內不同VLAN的需求。
一個案例是跨POD擴展。一個POD是一個或者多個包含服務器的機架,以及相關的存儲和網絡組成。租戶可能從一個POD起步,然后逐步需要其他POD上的VM,特別是這個‘其他’POD的租戶沒有充分使用POD中的資源。這個案例需要L2網絡的伸縮性。
L3網絡不是一個容易理解的多租戶解決方案,兩個租戶可能各自使用同一套L3網絡地址,需要雲提供商支持其他形式的隔離,對於虛機間的通信,要求租戶使用IP,但又不是不是信賴的直接L2網絡,或者非IP的L3協議。
TOR交換機的ARP表容量
虛擬化場景對連接服務器的TOR交換機的MAC地址表容量提出了額外的要求。不是一個MAC對應一個服務器,TOR交換機需要學習一個服務器中可能多達上百的虛機的MAC。因為虛機流量會經過服務器和TOR之間的鏈路,傳統TOR交換機,根據其面板端口數,可能連接24、48個服務器,數據中心可能包含很多個機架,每個TOR需要維護不同服務器之間通信的虛機的地址表,對比非虛擬化場景,這個對地址表空間的要求很高。
如果表空間滿,交換機停止學習,直至表項超期。會導致大量未知單播幀。
VXLAN
VXLAN基於數據中心多租戶場景下,聚焦以上需求,立足現有 網絡基礎設施,提供L2網絡的伸縮。簡單說,VXLAN是基於L3網絡上的L2疊加網絡,每一個疊加網絡可稱為VXLAN Segmeng,只有歸屬於同一個VXLAN Segment的虛機才能相互通信(這里應該是L2通信),每一個VXLAN Segment通過一個24bit的Segment ID標識,成為VXLAN Network Identifier(VNI),在同一個管理域中,最多有16M個VXLAN Segment段存在。
VNI標識了來自虛機的內部MAC幀的范圍,因此跨VXLAN Segment,MAC是可以重疊的,但是(L2)流量不能,因為通過VNI分隔了。在封裝來自VM的內部幀時,VNI封裝在外部頭中。
VXLAN Segment和VXLAN疊加網絡是可以相互使用的術語。
因為封裝,VXLAN是疊加在L3網絡上的L2網絡。隧道是無狀態的,每一個幀按照一系列規則進行封裝。隧道端點(VXLAN Tunnel End Point,VTEP)位於虛機宿主機的hypervisor層。這樣VNI,和VXLAN相關的隧道,以及外部頭封裝僅為VTEP所知,虛機不感知。VTEP可以是物理交換機,或者物理服務器,可以軟件或者硬件實現。
一種典型的VXLAN場景下的業務流控制是數據面學習,這里,通過源MAC地址學習,將虛機的MAC和VTEP的IP地址關聯,多播則用於攜帶未知單播,廣播和多播幀。
除了基於學習的業務流控制,其他還有分發虛機MAC和VTEP IP映射信息,可選項還包含一個基於認證或者基於目錄的單個VTEP的集中查詢機制,向VTEP分發這些映射信息,這個有時也被稱為PUSH/PULL模型。基於學習的機制更加普遍。
虛機-虛機單播
設想,一個VXLAN網絡中的虛機,不知道VXLAN,和其他服務器上的虛機通信,發送ARP查詢,VTEP根據目的MAC查找這個虛機歸屬的VNI,以判斷是否和源虛機處於相同VNI。是否需要目的MAC和對端VTEP的映射,如果答案為需要,則需要組裝一個包含了外部幀頭(MAC),外部IP頭,VXLAN頭的外部報文頭。封裝報文轉發到對端VTEP。
對端VTEP檢查VNI,判斷本地對應VNI中是否有虛機匹配內部幀當中的目的MAC,如果是則報文去掉封裝部分發送給目的虛機,后者不感知外部幀,以及VXLAN封裝。
為了將報文轉發給目的虛機,遠端VTEP需要學習內部幀源MAC(本端虛機)和外部源IP(本端VTEP地址)的映射,也就是VTEP需要學習對端虛機MAC和對端VTEP的映射關系,實際上,這個VTEP可以通過廣播ARP查詢來實現。
VTEP將這個映射存儲在表中,當目的虛機返回響應時,VTEP根據目的MAC查表,將報文封裝后發給特定的(發出請求報文的虛機歸屬的)VTEP。這里無需未知目的泛洪。
實際傳輸之前,源虛機確定目的虛機的MAC地址,過程類似非VXLAN環境,略有一點不同,下文描述。廣播幀封裝在多播報文中發送。
廣播和多播映射
虛機使用IP地址進行通信時,假定處於同一subnet中,源主機首先發送ARP廣播,在非vxlan環境中,這個幀,攜帶VLAN,在所有交換機中廣播。
Vxlan下,包含vni,ip頭和udp頭的數據段插入到報文的前部,這個報文會被廣播到overlay所在的ip 多播組中。
為了實現這個效果,需要在vxlan vni和需要使用的ip多播組之間進行映射,這個在管理層實現,並通過管理通道發送給VTEP,使用這個映射,vtep可以在需要時,向上行流的交換機/路由器發送加入/離開IP多播組的IGMP成員報告。如此這般,可使用特定多播地址,基於主機上組播成員是否存在,維護特定的多播地址(rfc4541)。使用某些路由協議,比如PIM-SM(RFC4601),可在L3網絡上提供足夠的多播樹。
VTEP使用(*.G)聯合joins,在VXLAN隧道源未知或者經常變化的場景下(因為虛機常常在不同主機之間遷移),因為VTEP既可以作為多播數據報的源也可以作為目的,類似BIDIR-PIM(RFC5015)這樣的協議效率更高。
目的虛機的ARP響應通過普通IP單播發送,到達和源虛機相連的VTEP,條件是先前已經學習了ARP響應的目的MAC地址到VTEP IP的映射。
多播幀和未知目的MAC幀,類似廣播幀,使用多播樹發送。
物理基礎設施
在網絡中使用IP多播時,網絡中的L3設備,交換機/路由器會用到多播路由協議,比如PIM-SM,這樣會構建有效的多播轉發樹,多播報文會發送到希望到達的主機處。
另外,並沒有要求源和目的主機基於L3網絡連接,VXLAN也可以基於L2網絡,此時可通過IGMP snooping在L2網絡上實現多播復制。
VTEP不能對VXLAN報文分片。中間路由器可能因為過大幀長的緣故對VXLAN封裝報文分片。目的VTEP可能丟棄這些分片了的VXLAN報文,為了避免端到端流量的可能分片,推薦將所經過的物理設施的MTU設置為能容納可能的最大VXLAN封裝。其他技術,諸如Path MTU Discovery(RFC1191/RFC1981)可用來滿足這個需求。
VXLAN場景
VXLAN一般應用於數據中心虛機,這些虛機分布在不同的機架,單個機架可能屬於多個不同的L3網絡,但可能屬於同一個L2網絡,VXLAN段疊加在這些L2或者L3網絡上。
類似下圖,兩個虛擬服務器掛載於同一個L3網絡,這兩個服務器可能位於同一機架,也可能不同機架,或者是同一管理域的不同數據中心,有4個VXLAN 段,VNI22,34,74,98,Server1中的VM1-1和Server2中的VM2-4位於同一VNI22,虛機不知道疊加網絡的存在,因為vxlan封裝和解封裝在vtep上發生,其他vni如表格
Vni server1 server2
22 vm1-1 vm2-4
34 vm1-2 vm2-1
74 vm1-3 vm2-2
98 vm1-4 vm2-3
一個部署場景是,VTEP在一個感知vxlan網絡的物理服務器中,另一種場景,VXLAN疊加網絡中的節點,需要於傳統網絡,可能是VLAN,中的節點通信。此時需要部署VXLAN網關,在VXLAN和非VXLAN網絡之間轉發流量。
來自VXLAN網絡接口的入向幀,網關去掉VXLAN頭,根據內部幀目的MAC地址進行轉發,包含內部幀VLAN ID的解封裝報文,只能轉發到非VXLAN接口,否則丟棄。相對的,來自非VXLAN 接口的報文,根據VLANID,映射到特定的VXLAN 疊加網絡,除非顯式配置通過封裝的VXLAN傳遞,否則VLANID在封裝為VXLAN報文前應當刪除。
提供VXLAN隧道終結功能的網關,可以是TOR或者接入交換機,也可以是DC網絡拓撲中的上層網絡設備,比如核心或者WAN邊緣設備,后一種場景,可能包含一個Provider Edge路由器用來在混合雲環境中終結vxlan隧道,所有這些案例中,網關可能是軟件或者實現。
網關或者VTEP處理包含VLANID的幀的規則:
解封裝后包含VLANid的VXLAN幀,除非配置,否則丟棄。
VTEP封裝VXLAN隧道報文時,內部不帶VLANid,除非專門設置。就是說若一個帶有vlan tag的報文准備進入vxla隧道時,除非顯式配置,否則應該去掉vlan tag。(就是vni和vlan tag的映射)