VLAN和VXLAN協(xié)議介紹
時間:2023-06-27 10:15:01 | 來源:網(wǎng)站運營
時間:2023-06-27 10:15:01 來源:網(wǎng)站運營
VLAN和VXLAN協(xié)議介紹:本文將介紹名字很接近的兩個網(wǎng)絡協(xié)議vlan和vxlan,后續(xù)會補充另外兩個叫做MacVlan和IPVlan的協(xié)議。
Vlan
Vlan:virtual local area network 虛擬局域網(wǎng)
這個協(xié)議可以將一個局域網(wǎng)分成多個虛擬局域網(wǎng),也可以將不同的局域網(wǎng)組成一個虛擬局域網(wǎng)。我們使用vlan可以做以下的事情:
- 變更網(wǎng)絡中的設備時,通過vlan直接配置,可以省去物理線路的重新調整
- 將一個lan下的設備分到不同的虛擬的lan中,虛擬lan之間在鏈路層相互隔離,每個虛擬lan擁有自己的廣播域,解決因為ARP引起的廣播風暴問題
- 接上條,vlan可以將使用同一條線路、物理端口的設備隔離開來,使其互不影響,保證安全性
- 跨地域構建vlan
配置vlan有幾種方式,有些配置的方式涉及了網(wǎng)絡層甚至更高層,這時需要配置vlan的設備同時有相應的支持。配置vlan的方法有以下幾種:
- 通過交換機的端口劃分vlan:指定交換機的哪個端口屬于哪個vlan,這樣連接到同一個指定的vlan的端口的設備就位于一個vlan中
- 通過設備的mac地址決定屬于哪一個vlan
- 通過IP地址和子網(wǎng)來決定屬于哪一個vlan
- 根據(jù)數(shù)據(jù)包信息中的用戶決定屬于哪個一vlan
vlan中還有一個概念:trunk,即指承載了多個vlan的網(wǎng)絡線路。這時為了能確定網(wǎng)絡幀屬于哪個vlan,會在幀的信息中添加相應的tag,網(wǎng)絡中相連的交換機、路由器的端口也必須支持識別、處理這樣的幀,在幀中添加或取出相應的tag。添加tag最常用的協(xié)議為IEEE 802.1Q。802.1Q在Mac地址段后、以太網(wǎng)類型字段(EtherType)前添加了32bit的802.1Q Header信息,如下:
31~16 | 15~13 | 12 | 11~0 |
---|
TPID | TCI | TCI | TCI |
TPID | PCP | DEI | VID |
- TPID(Tag protocol identifier):值為0x8100,表明此幀為802.1Q-tagged幀。如果不是添加tag的幀,這部分的16bit為以EtherType段,所以通過讀取這個位置的16bit是不是0x8100就可以判斷是不是添加了標記的幀。
- TCI(Tag control information)
- PCP(Priority code point):設置幀優(yōu)先級,為IEEE 802.1p協(xié)議中指定的Class of Service(CoS)
- DEI(Drop eligible indicator):可以與PCP一起使用或者分開使用表明如果網(wǎng)絡阻塞,此幀可以丟棄
- VID(VLAN identifier):12bit,通過ID表明是哪一個vlan的幀。0x000和0xFFF為保留值,不能配置(0x000表示幀中不包含VLAN ID,0xFFF表示某種用途)。0x001為默認值。
Vxlan
Vxlan:Virtual Extensible LAN 虛擬可擴展局域網(wǎng)
目前vxlan一般使用在虛擬機/容器網(wǎng)絡中。使用Vxlan,我們可以將多個原本在二層網(wǎng)絡上并不相通的局域網(wǎng)構建成一個虛擬的大的二層網(wǎng)絡,我們無需關注底層網(wǎng)絡的細節(jié),只要設備之間在三層是連通的。相信了解云計算網(wǎng)絡的人一定對這個詞一定很熟悉,很多云基礎設施的虛擬機之間的網(wǎng)絡就是使用vxlan來構建,openshift中容器網(wǎng)絡也使用了vxlan使容器和節(jié)點之間能夠相互訪問。
使用vlan也可以將多個局域網(wǎng)構建成一個大的二層網(wǎng)絡,那么為什么不用vlan而使用vxlan呢?從名字也可以看出vxlan是”擴展“了vlan,自然也解決了vlan無法解決的問題,即:
- vlan的VID段只能表示4094(2^12-2)個虛擬局域網(wǎng),這個數(shù)量限制了云平臺上能夠使用的租戶的數(shù)量,我們需要更大的字段來對虛擬網(wǎng)絡進行標識。可以通過在vlan的tag外層再套一層tag,即IEEE 802.1ad協(xié)議緩解這個問題。與IEEE 802.1ad這種有一定的層級的概念的協(xié)議相比,vxlan的靈活性更好。
- 虛擬機在物理機上運行,受限于物理機的網(wǎng)絡,如果在同一個局域網(wǎng)下部署虛擬機,就需要在同一個vlan的物理機內部署,會造成資源使用的不均衡。
- 一旦局域網(wǎng)內虛擬機數(shù)目達到一定程度,使用vlan協(xié)議,每個虛擬機的mac地址都要被記錄,交換機記錄所有的節(jié)點的mac地址就會收到硬件資源的限制。而使用vxlan,只需記錄物理機的mac地址即可實現(xiàn)。
- vxlan使用四層協(xié)議UDP進行封包,可以利用四層協(xié)議來優(yōu)化數(shù)據(jù)包在線路中的傳遞,而vlan不能做到這一點。
vxlan是怎么做到以上這些的呢?下面我們來看一看vxlan協(xié)議的原理:
vxlan在原始的二層報文的基礎上封裝了一個頭部信息,然后再通過udp進一步封裝,udp的目標地址使用4789端口,如下:
14Byte或更多 | 20Byte | 8Byte | 8Byte | |
---|
外層mac頭 | 外層ip頭 | 外層udp頭 | vxlan頭 | 原始二層幀 |
vxlan網(wǎng)絡中的對vxlan報文進行封包和解包的設備(例如交換機和物理機)叫做VTEP(vxlan tunnel endpoints),外層的ip、mac頭中的源和目標地址為VTEP的地址。VTEP之間會記錄VTEP的IP與虛擬機的mac、VNI的映射關系。
其中vxlan頭部信息是這樣的:
63~56 | 55~32 | 31~8 | 7~0 |
---|
vxlan flags | reserved | VNI | reserved |
- vxlan flags:固定值,0x08
- VNI(vxlan network identifier):24bit,與vlan中的VID用法一致,表示局域網(wǎng)信息
- reserved:固定值,兩個reserved段都為0
注意的是,vxlan將原始的包額外的增加了信息,此時要相應的減小MTU。
vxlan協(xié)議中,發(fā)送端的包封裝上述頭部信息后,通過udp發(fā)送出去,接收端的接收到包后,將包解開,拿到數(shù)據(jù)進行處理。這也是overlay網(wǎng)絡的典型的處理方式。
一個運行流程的例子如下:考慮兩臺物理機VTEP1和VTEP2上面的同一VNI的VM1和VM2進行通信。VTEP1和VTEP2在同一多播組內
- VM1廣播發(fā)送ARP請求,給出內層的源mac、源ip、目標ip。
- VTEP1封裝這個包,添加VNI,進行多播,VTEP2接收報文并解析,記錄VNI、內層mac地址、VTEP1的ip地址,發(fā)送給VM2。
- VM2響應arp請求,VTEP2進行封裝,向VTEP1發(fā)送單播。VTEP1接收解析后記錄VNI、內層目標mac地址、外層VTEP2的ip地址,然后發(fā)給VM1,VM1拿到了VM2的mac。VTEP1和VTEP2也都保存了對方的信息。
- VM1獲得VM2 mac地址后向其發(fā)送數(shù)據(jù)。VTEP1封裝數(shù)據(jù)包,查表,獲得外層的目標地址(即VTEP2的地址),然后查arp表,填入外層的ip頭信息、mac頭信息,與VTEP2進行通信,VTEP2收到包后解包,發(fā)送給VM2。類似這樣整個通信的流程就完成了。
參考文獻:
- 圖文并茂講VLAN,讓你看一遍就理解VLAN
- VXLAN vs VLAN