第一:neutron openvswitch + vlan虛擬網絡
一:基礎知識
vlan基礎知識
1.vlan介紹
1.1:首先說下lan,LAN 表示 Local Area Network,本地局域網,通常使用 Hub 和 Switch 來連接LAN 中的計算機。(一個 LAN 表示一個廣播域)
vlan:(Virutal LAN) 將同一個LAN上的用戶在邏輯上分成多個虛擬局域網,換句話說,一個帶有 VLAN 功能的switch 能夠同時處於多個 LAN 中,每個vlan中的主機連接交換機的端口是access口,從而保證了交換機只在同一個vlan中轉發包
1.2:IEEE 802.1Q 標准定義了 VLAN Header 的格式。它在普通以太網幀結構的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 數據,其中包括 12-bits 的 VLAN ID。VLAN ID 最大值為4096,但是有效值范圍是 1 - 4094。
vlan數據幀格式介紹:
TPID(Tag Protocol Identifier,標簽協議標識)值規定為0x8100。設備缺省采用協議規定的TPID值,交換機通過TPID來確定數據幀是否附加基於IEEE802.1Q的VLAN信息。
TCI(Tag Control Information,標簽控制信息)字段分為Pri、CFI和VLAN三部分。Pri表示報文優先級(也稱1p優先級、COS或1q優先級),CFI(Canonical Format Indicator)標識MAC地址在不同傳輸介質中是否以標准格式進行封裝,通常為0(標准格式)。Vlan ID標識該報文所屬的VLAN編號,取值范圍為 0~4095,一般0和4095保留(中興設備Vid=0表示priority-tagged幀)。
1.3 帶vlan的交換機端口划分:
Access port:這些端口被打上了 VLAN Tag。離開交換機的 Access port 進入計算機的以太幀中沒有 VLAN Tag,這意味着連接到 access ports 的機器不會覺察到 VLAN 的存在。離開計算機進入這些端口的數據幀被打上了 VLAN Tag。
Trunk port: 兩台或者多台交換機通過一個根線連接,線的兩頭都是trunk口,可以轉發多個vlan信息。
2.vlan類型
基於port的vlan(數據幀中不包含vlan tag,vlan信息從交換機的端口pvid上得知,交換機轉發包也基於此)
基於tagged vlan(數據幀中包含vlan tag,vlan信息從數據幀內包含的vlan信息,交換機需要有對該數據幀拆包/封包的能力,即連接到這種端口的網絡設備必須是8021.Q)
3.vlan的不足
VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一個不足之處就是它最多只支持 4096 個 VLAN 網絡(當然這還要除去幾個預留的),對於大型數據中心的來說,這個數量是遠遠不夠的。
VLAN 是基於 L2 的,所以很難跨越 L2 的邊界,在很大程度上限制了網絡的靈活性。
VLAN 操作需手工介入較多,這對於管理成千上萬台機器的管理員來說是難以接受的。
以上上中在小公司,用在小規模的雲平台服務完全是可以的,但是每一個小公司都有一顆做大的心嘛,所以還是不提倡的
交換機基礎知識
1.交換機工作原理:
交換機在接收到數據幀以后,首先、會記錄數據幀中的源MAC地址和對應的接口到MAC表中,接着、會檢查自己的MAC表中是否有數據幀中目標MAC地址的信息,如果有則會根據MAC表中記錄的對應接口將數據幀發送出去(也就是單播),如果沒有,則會將該數據幀從非接收接口發送出去(也就是廣播)。
1.mac地址:
mac地址表:在交換機中有一張記錄着局域網主機MAC地址與交換機接口的對應關系的表,交換機就是根據這張表負責將數據幀傳輸到指定的主機上的。
mac地址學習:
1)主機A將一個源MAC地址為自己,目標MAC地址主機C的數據幀發送給交換機
2)交換機1收到此數據幀后,會學習源MAC地址,並檢查MAC地址表,發現沒有目標MAC地址的記錄,則會將數據幀廣播出去,主機B和交換機2都會收到此數據幀。
3)交換機2收到此數據幀后也會將數據幀中的源MAC地址和對應的接口記錄到MAC地址表中,並檢查自己的MAC地址表,發現沒有目標MAC地址的記錄,則會廣播此數據幀。
4)主機C收到數據幀后,會響應這個數據幀,並回復一個源MAC地址為自己的數據幀,這時交換機1和交換機2都會將主機C的MAC地址記錄到自己的MAC地址表中,並且以單播的形式將此數據幀發送給主機A。
5)這時,主機A和主機C通信就是一單播的形式傳輸數據幀了,主機B和主機C通信如上述過程一樣,因此交換機2的MAC地址表中記錄着主機A和主機B的MAC地址都對應接口f 0/1。
總結:交換機具有動態學習源MAC地址的功能,並且交換機的一個接口可以對應多個MAC地址,但是一個MAC地址只能對應一個接口
2.arp原理:
主機A與主機B在同一網段
1)如果主機A想發送數據給主機B,主機A首先會檢查自己的ARP緩存表,查看是否有主機B的IP地址和MAC地址的對應關系,如果有,則會將主機B的MAC地址作為源MAC地址封裝到數據幀中。如果沒有,主機A則會發送一個ARP請求信息,請求的目標IP地址是主機B的IP地址,目標MAC地址是MAC地址的廣播幀(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主機A的IP地址和MAC地址。
2)當交換機接受到此數據幀之后,發現此數據幀是廣播幀,因此,會將此數據幀從非接收的所有接口發送出去。
3)當主機B接受到此數據幀后,會校對IP地址是否是自己的,並將主機A的IP地址和MAC地址的對應關系記錄到自己的ARP緩存表中,同時會發送一個ARP應答,其中包括自己的MAC地址。
4)主機A在收到這個回應的數據幀之后,在自己的ARP緩存表中記錄主機B的IP地址和MAC地址的對應關系。而此時交換機已經學習到了主機A和主機B的MAC地址了。
主機A與主機B不在同一網段
不在同一網段的話,就需要借助路由器了
1)HostA在網絡層將來自上層的報文封裝成IP數據包,其中源IP地址為自己,目標IP地址是HostB,HostA會用本機配置的24位子網掩碼與目標地址進行“與”運算,得出目標地址與本機不是同一網段,因此發送HostB的數據包需要經過網關路由A的轉發。
2)HostA通過ARP請求獲取網關路由A的E0口的MAC地址,並在鏈路層將路由器E0接口的MAC地址封裝成目標MAC地址,源MAC地址是自己。
3)路由器A從E0可接收到數據幀,把數據鏈路層的封裝去掉,並檢查路由表中是否有目標IP地址網段(即192.168.2.2的網段)相匹配的的項,根據路由表中記錄到192.168.2.0網段的數據請發送給下一跳地址10.1.1.2,因此數據在路由器A的E1口重新封裝,此時,源MAC地址是路由器A的E1接口的MAC地址,封裝的目標MAC地址則是路由器2的E1接口的MAC地址。
4)路由B從E1口接收到數據幀,同樣會把數據鏈路層的封裝去掉,對目標IP地址進行檢測,並與路由表進行匹配,此時發現目標地址的網段正好是自己E0口的直連網段,路由器B通過ARP廣播,獲知HostB的MAC地址,此時數據包在路由器B的E0接口再次封裝,源MAC地址是路由器B的E0接口的MAC地址,目標MAC地址是HostB的MAC地址。封裝完成后直接從路由器的E0接口發送給HostB。
5)此時HostB才會收到來自HostA發送的數據。
總結:路由表負責記錄一個網絡到另一個網絡的路徑,因此路由器是根據路由表工作的。
二:openvswitch+vlan組網
1.物理網絡vlan配置
管理網絡,用於 OpenStack 節點之間的通信,假設 VLAN ID 范圍為 50 - 99.
數據網絡,用於虛擬機之間的通訊。由於Vlan模式下,租戶建立的網絡都具有獨立的 Vlan ID,故需要將連接虛機的服務器的交換機端口設置為 Trunk 模式,並且設置所允許的 VLAN ID 范圍,比如 100~300。
外部網絡,用於連接外部網絡。加上 VLAN ID 范圍為 1000-1010。
- 如果該物理交換機接到一個物理路由器並做相應的配置,則數據網絡可以使用這個物理路由器,而不需要使用 Neutron 的虛擬路由器。
- 如果不使用物理的路由器,可以在網絡節點上配置虛擬路由器。
2.Neutron 配置生效的過程:
配置就不詳細說了,后續將會整理成一個完成的部署博客,下面簡述下Neutron配置生效的過程。
當 Neutron L2 Agent (OVS Agent 或者 Linux Bridge agent)在計算和網絡節點上啟動時,它會根據各種配置在節點上創建各種 bridge。以 OVS Agent 為例,
(1)創建 intergration brige(默認是 br-int);如果 enable_tunneling = true 的話,創建 tunnel bridge (默認是 br-tun)。
(2)根據 bridge_mappings,配置每一個 VLAN 和 Flat 網絡使用的 physical network interface 對應的預先創建的 OVS bridge。
(3)所有虛機的 VIF 都是連接到 integration bridge。同一個虛擬網絡上的 VM VIF 共享一個本地 VLAN (local VLAN)。Local VLAN ID 被映射到虛擬網絡對應的物理網絡的 segmentation_id。
(4)對於 GRE 類型的虛擬網絡,使用 LSI (Logical Switch identifier)來區分隧道(tunnel)內的租戶網絡流量(tenant traffic)。這個隧道的兩端都是每個物理服務器上的 tunneling bridge。使用 Patch port 來將 br-int 和 br-tun 連接起來。
(5)對於每一個 VLAN 或者 Flat 類型的網絡,使用一個 veth 或者一個 patch port 對來連接 br-int 和物理網橋,以及增加 flow rules等。
(6)最后,Neutron L2 Agent 啟動后會運行一個RPC循環任務來處理 端口添加、刪除和修改。管理員可以通過配置項 polling_interval 指定該 RPC 循環任務的執行間隔,默認為2秒。
3.Neutron代碼的實現流程
boot虛擬機的過程。nova依次會
1調用neutron rest api申請一個或多個port,neutron會根據數據庫中的配置進行分配
2計算機節點上,nova調用ovs-vsctl命令將虛擬機的VIF被plug到br-int上
3啟動虛擬機
neutron l2 agent的循環任務每隔2秒會
1)調用ovs-vsctl list-ports命令獲取br-int上的port,在根據上次保存的歷史記錄,生成所有變更端口的列表(包括添加的,刪除的,更新的)
2)為每一個待處理端口,根據其ID從DB中取出詳細信息
3)針對每一個增加或變更的port設置local vlan tag,調用命令ovs-ofctl mod-flows命令來設置br-tun或者物理的bridge的flow rules;並設置db中其狀態為up
4)針對每一個被刪除的port,設置db中其狀態為down
4.Neutron的vlan模式的虛擬網絡
4.1一個計算節點上的網絡示例:
1) Neutron 使用 Open vSiwtch。
2) 一台物理服務器,網卡 eth1 接入物理交換機,預先配置了網橋 br-eth1。
3) 創建了兩個 neutron VLAN network,分別使用 VLAN ID 101 和 102。
4) 該服務器上運行三個虛機,vm1 和 vm2 分別有一個網卡接入 network 1;vm2 和 vm3 分別有一個網卡接入 network 2.
neutron在該計算節點上做的事情:
創建了OVS Integration bridge br-int。它的四個Access口中,兩個打上了內部vlan Tag1,連接接入network1的兩個網卡;另外兩個端口打上的是vlan tag 2
創建一對patch port連接br-int和br-eth1
設置br-int中的flow rules。對從access ports進入的數據幀,加上相應的vlan tag,轉發到patch port;從patch port進入的數據幀,將vlan id 101修改為1,102修改為2,再轉發到相應的access ports
設置br-eth1中的flow rules。從patch port進入的數據幀,將內部vlan id 1修改為101,內部vlan id 2修改為102,再從eth1端口發出。對從eht1進入的數據幀做相反的處理
4.2連接到同一個物理交換機上的兩個計算節點的內部通信
兩個物理節點,compute01上面有兩個雲主機,都是vlan1,compute02上面有兩個雲主機,vm3為vlan1,vm4位vlan2。
4.2.1:同一個物理節點上,同一個vlan之間的通信
例如:vm1:10.0.0.2----》vm2:10.0.0.3
相同物理服務器上的虛機, VM1 訪問VM2,當數據包到達br-int的時候,先查詢br-int的mac地址表,如果有記錄,則直接找到VM2,如果沒有記錄的話,需要經過 br-int 進行廣播,尋找,這個時候vm2收到mac地址,一看是我的,他就回給br-int,br-int就會把mac地址緩存起來,並回給vm1即可
4.2.2:不同物理節點上,同一個vlan之間的通信
例如:vm1:10.0.0.2---》vm3:10.0.0.4
4.2.3:同一個物理節點上,不同vlan之間的通信
例如:vm3:10.0.0.4---》vm4:10.0.1.2 或者
4.2.4:不同物理節點上,不同vlan之間的通信
例如:vm1:10.0.0.2---》vm 4:10.0.1.2
第二:neutron openvswitch + gre/vxlan虛擬網絡
一.gre介紹
二.vxlan介紹
三.gre與vxlan的對比
四: Neutron 通過 OVS 對 GRE 和 VXLAN 的支持
五:介紹幾個典型的流程案例
案例一:同一個主機上同一個子網內虛機之間的通信過程
案例二:不同主機上同一個子網內的虛機之間的通信過程
案例三:同一個主機上不同子網內虛機之間的通信流程
案例三:不同主機上不同子網內的虛機之間的通信流程
案例四: 虛機訪問外網
案例五: 虛機發送DHCP請求
參考資料:http://20161215.blog.51cto.com/2276215/1766742