vlan和vxlan區別
- 用戶標識能力不同
- 能否跨越3層進行傳輸
- 解決問題范圍不同
vlan報文

vlan號(vlan id)的長度是12位,所以說vlan總共只有2的12次方,4096個,4k個
vlan信息封裝在二層,無法跨三層傳輸
不同用戶租借的網絡有很大的可能會出現IP地址、MAC地址的重疊,VLAN僅僅解決了二層網絡廣播域隔離的問題,而並沒有涉及到網絡地址重疊的問題
vxlan報文

通過VXLAN中的24比特VNI字段,提供多達16M租戶的標識能力
vxlan將標簽封裝udp里,這樣就可以跨三層傳輸
而VXLAN技術還具有多租戶支持的特性,通過VXLAN分割,各個租戶可以獨立組網、通信,地址分配方面和多個租戶之間地址沖突的問題也得到了解決
vxlan原理
vlan:Virtual Local Area Network
vxlan:Virtual eXtensible Local Area Network
VxLAN 將虛擬機發出的原始以太報文完整的封裝在UDP報文中,然后在外層使用物理網絡的IP報文頭和以太報文頭封裝,,封裝后的報文就像普通IP報文一樣,可以通過路由網絡轉發,其使得多個通過三層連接的網絡可以表現的和直接通過一台物理交換機連接配置而成的網絡一樣處在一個 LAN 中,使虛擬機擺脫了二、三層網絡的結構限制
VXLAN技術可以基於三層網絡結構來構建二層虛擬網絡,通過VXLAN技術可以將處於不同網段網絡設備整合在同一個邏輯鏈路層網絡中
隧道的起點和終點主要在vSwitch上,而非物理交換機上,隧道的封裝在服務器內部的vSwitch上就已經打好,所以進入物理網絡時, 數據包的外層IP都是物理接口上的IP,這就將原本二層幀變成了三層IP報文,直接進行路由轉發即可,這樣就實現了大二層透傳,甚至可跨DC(數據中心)
原理是,將二層報文用三層協議進行封裝
可以滿足,同樣的兩台1.1.1.1和1.1.1.2,可以在經過3層及以上網絡后,仍然處在同一個2層網絡,即局域網中
vxlan和vlan最終實現的效果是相同的,都可以在2層網絡中划分出3層網絡中局域網的概念
但是vxlan在報文中添加了更長的字段,同時還利用了高層協議,因此可以跨網絡進行傳輸,同時可划分出的局域網個數也更多
而報文的封裝需要通過vtep,而這個vtep可以通過物理交換機或者軟件交換機實現,這里就是通過虛擬交換機ovs實現的
在兩台物理機中,分別安裝ovs,各自虛擬出2台設備,在兩台物理機中創建vxlan隧道,vtep由ovs負責實現
https://blog.csdn.net/nb_zsy/article/details/108131962
https://www.cnblogs.com/bakari/p/11131268.html
OVS術語解釋
Bridge
中文名稱網橋,一個Bridge代表一個以太網交換機(Switch),一台主機中可以創建一個或多個Bridge,Bridge可以根據一定的規則,把某一個端口接收到的數據報文轉發到另一個或多個端口上,也可以修改或者丟棄數據報文
Port
中文名稱端口,需要注意的是它和TCP里面的端口不是同樣的概念,它更像是物理交換機上面的插口,可以接水晶頭的那種。Port隸屬於Bridge,必須先添加了Bridge才能在Bridge上添加Port。Port有以下幾種類型:
- Normal
用戶可以把操作系統中已有的網卡添加到Open vSwitch上,Open vSwitch會自動生成一個同名的Port開處理這張網卡進和出的數據報文。
不過需要注意的是這種方式添加的Port不支持分配IP地址,如果之前網卡上配置的有IP,掛載到OVS上面之后將不可訪問。此類型的Port常用於VLAN模式的多台物理主機相連的那個口,交換機一端屬於Trunk模式。 - Internal
當Port的類型是Internal時,OVS會自動創建一個虛擬網卡(Interface),此端口收到的數據報文都會轉發給這塊網卡,從這塊網卡發出的數據報文也會通過Port交給OVS處理。當OVS創建一個新的網橋時,會自動創建一個與網橋同名的Internal Port,同時也會創建一個與網橋同名的Interface,因此可以通過ip命令在操作系統中查看到這張虛擬網卡,但是狀態是down的。 - Patch
Patch Port和veth pair功能相同,總是成雙成對的出現,在其中一端收到的數據報文會被轉發到另一個Patch Port上,就像是一根網線一樣。Patch Port常用於連接兩個Bridge,這樣兩個網橋就和一個網橋一樣了。 - Tunnel
OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道協議,這些隧道協議就是overlay網絡的基礎協議,通過對物理網絡做的一層封裝和擴展,解決了二層網絡數量不足的問題,最大限度的減少對底層物理網絡拓撲的依賴性,同時也最大限度的增加了對網絡的控制。
Interface
(iface/接口)接口是OVS與操作系統交換數據報文的組件,一個接口即是操作系統上的一塊網卡,這個網卡可能是OVS生成的虛擬網卡,也有可能是掛載在OVS上的物理網卡,操作系統上的虛擬網卡(TUN/TAP)也可以被掛載在OVS上
Controller
OpenFlow控制器,OVS可以接收一個或者多個OpenFlow控制器的管理,功能主要是下發流表,控制轉發規則
Flow
流表是OVS進行數據轉發的核心功能,定義了端口之間轉發數據報文的規則,一條流表規則主要分為匹配和動作兩部分,匹配部分決定哪些數據報文需要被處理,動作決定了匹配到的數據報文該如何處理
open vswitch常用命令
點擊查看代碼
# 添加網橋:
ovs-vsctl add-br br0
# 列出所有網橋:
ovs-vsctl list-br
# 判斷網橋是否存在:
ovs-vsctl br-exists br0
# 將物理網卡掛載到網橋上:
ovs-vsctl add-port br0 eth0
# 列出網橋中的所有端口:
ovs-vsctl list-ports br0
# 列出所有掛載到網卡的網橋:
ovs-vsctl port-to-br eth0
# 查看ovs的網絡狀態:
ovs-vsctl show
# 刪除網橋上已經掛載的網口:
ovs-vsctl del-port br0 eth0
# 刪除網橋:
ovs-vsctl del-br br0
# 設置控制器:
ovs-vsctl set-controller br0 tcp:ip:6633
# 刪除控制器:
ovs-vsctl del-controller br0
# 設置支持OpenFlow Version 1.3:
ovs-vsctl set bridge br0 protocols=OpenFlow13
# 刪除OpenFlow支持設置:
ovs-vsctl clear bridge br0 protocols
# 設置vlan標簽:
ovs-vsctl add-port br0 vlan3 tag=3 -- set interface vlan3 type=internal
# 刪除vlan標簽:
ovs-vsctl del-port br0 vlan3
# 查詢 VLAN:
ovs-vsctl show
ifconfig vlan3
# 查看網橋上所有交換機端口的狀態:
ovs-ofctl dump-ports br0
# 查看網橋上所有的流規則:
ovs-ofctl dump-flows br0
# 查看ovs的版本:
ovs-ofctl -V# 給端口配置tagovs-vsctl set port br-ex tag=101
網絡虛擬化部署流程
1台物理機下設2台vm,通過ovswitch負責管理

host1操作
點擊查看代碼
// 安裝ovs
apt-get install openvswitch-switch
// 物理機操作
// 1. 物理機創建2個命名空間,等價2台vm
ip netns add nsvm1
ip netns add nsvm2
// 2. 創建接口
tap1,tap3,vxlan0用於網橋
tap2,tap4用於交換機
ip link add tap1 type veth peer name tap2 (veth - Virtual ethernet interface) (vm1接口:tap1;與vm1通信的ovswitch接口:tap2)
ip link add tap3 type veth peer name tap4 (vm2接口:tap3;與vm2通信的ovswitch接口:tap3)
ip link add vxlan0 type vxlan id 42 dstport 4789 remote 172.16.56.4 local 172.16.56.3 dev ens33 (vxlan0這個interface的數據要從ens33這個interface傳輸)
// 3. 設置接口屬性
ip link set tap1 netns nsvm1 (設置tap1作為vm1的接口)
ip link set tap3 netns nsvm2 (設置tap3作為vm2的接口)
ip addr add 20.0.0.1/24 dev vxlan0(我沒有效果問題出在這里,執行sudo ip addr發現vxlan0沒有20.0.0.1的地址)
ip link set tap2 up
ip link set tap4 up
ip link set vxlan0 up
// 4. 命名空間設置接口屬性
ip netns exec nsvm1 ip addr add 192.168.0.11/24 dev tap1 (設置vm1,ip 192.168.0.11,端口tap1)
ip netns exec nsvm2 ip addr add 192.168.0.12/24 dev tap3 (設置vm2,ip192.168.0.12,端口tap3)
ip netns exec nsvm1 ip link set tap1 up
ip netns exec nsvm2 ip link set tap3 up
// 虛擬交換機操作
// 1. 交換機創建網橋
ovs-vsctl add-br br0
// 2. 向交換機網橋添加端口tap2,tap4和vxlan0
ovs-vsctl add-port br0 tap2
ovs-vsctl add-port br0 tap4
ovs-vsctl add-port br0 vxlan0
host2操作
點擊查看代碼
// 安裝ovs
apt-get install openvswitch-switch
// 物理機操作
// 1. 物理機創建2個命名空間,等價2台vm
ip netns add nsvm1
ip netns add nsvm2
// 2. 創建接口
tap1,tap3,vxlan0用於網橋
tap2,tap4用於交換機
ip link add tap1 type veth peer name tap2 (veth - Virtual ethernet interface) (vm1接口:tap1;與vm1通信的ovswitch接口:tap2)
ip link add tap3 type veth peer name tap4 (vm2接口:tap3;與vm2通信的ovswitch接口:tap3)
ip link add vxlan0 type vxlan id 42 dstport 4789 remote 172.16.56.3 local 172.16.56.4 dev ens32 (vxlan0這個interface的數據要從ens33這個interface傳輸)
// 3. 設置接口屬性
ip link set tap1 netns nsvm1 (設置tap1作為vm1的接口)
ip link set tap3 netns nsvm2 (設置tap3作為vm2的接口)
ip addr add 20.0.0.2/24 dev vxlan0(我沒有效果問題出在這里,執行sudo ip addr發現vxlan0沒有20.0.0.2的地址)
ip link set tap2 up
ip link set tap4 up
ip link set vxlan0 up
// 4. 命名空間設置接口屬性
ip netns exec nsvm1 ip addr add 192.168.0.13/24 dev tap1 (設置vm1,ip 192.168.0.11,端口tap1)
ip netns exec nsvm2 ip addr add 192.168.0.14/24 dev tap3 (設置vm2,ip192.168.0.12,端口tap3)
ip netns exec nsvm1 ip link set tap1 up
ip netns exec nsvm2 ip link set tap3 up
// 虛擬交換機操作
// 1. 交換機創建網橋
ovs-vsctl add-br br0
// 2. 向交換機網橋添加端口tap2,tap4和vxlan0
ovs-vsctl add-port br0 tap2
ovs-vsctl add-port br0 tap4
ovs-vsctl add-port br0 vxlan0
疑問
-
vxlan數據包到底是誰封裝的
看網上的說法是ovs交換機負責的,但是ovs交換機如果去掉vxlan的接口,就是一個普通的交換機啊,這些工作應當是vxlan接口負責的吧
但是vxlan感覺上應該算一個vxlan隧道,既然是隧道不應該僅起到傳輸的作用嗎 -
vxlan接口的ip作用
看vxlan數據包到底是誰封裝的里面的圖,突然意識到網絡中是會存在多條vxlan隧道的, 而且兩個host之間是間隔着互聯網的,所以這個隧道應當是有ip的,不然怎么可以經過互聯網進行傳輸,只不過在這個例子中沒有模擬兩個host之間間隔互聯網的情況,反而是處在同一個局域網里面了,和真實應用場景差距較大
反思
- 本以為過程沒什么問題了,但是忘記了之前把網絡模式改成了橋接,結果抓包過程中出現了很多其他包,本來出現了vxlan,但是卻着急沒有找到,也忘記了grep去篩選一下
要么應當在檢查之前把所有流程測試好,要么就是自己掌握足夠多的知識以應對突發情況。考研准備階段一定是去盡可能准備充足,到后期或許不需要再去糾結哪些東西還沒掌握,是不是要考慮已經看過的東西有哪些沒有掌握牢靠(這里的策略要斟酌一下)
參考文檔
VXLAN原理
ip link 命令文檔
ip netns 命令文檔
ovs vsctl命令文檔
本次實驗通俗解釋
在 Linux 上配置 VXLAN 網絡-掘金
ovs系列文章
華為文章
vxlan數據包到底是誰封裝的
