op組會網絡交流

0x 01 OSI七層模型與TCP/IP四層模型

網絡協議模型

0x 02 三次握手和四次揮手

1、三次握手

三次握手示意圖

爲什麼需要“三次握手”

在謝希仁著《計算機網絡》第四版中講“三次握手”的目的是“爲了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤”。在另一部經典的《計算機網絡》一書中講“三次握手”的目的是爲了解決“網絡中存在延遲的重複分組”的問題。這兩種不用的表述其實闡明的是同一個問題。

2、連接終止協議(四次揮手)

四次揮手示意圖

爲什麼需要四次揮手

原因是因爲tcp是全雙工模式,接收到FIN時意味將沒有數據再發來,但是還是可以繼續發送數據。

0x 03 VLAN和VxLAN

1、VLAN

VLAN簡介:
VLAN:Virtual LAN,又叫“虛擬局域網”。
VLAN的作用,主要是將一個大的廣播域隔離開來,形成多個小的廣播域,各個廣播域內可以互通,廣播域之間默認不能直接通訊。

vlan報文

這裏需要關注的是VID字段,該字段唯一標識了一個VLAN,12bit長度的VID可以表示4096個不同的值,除去兩個保留值,一個以太網最多可以劃分爲4094個VLAN。

爲什麼需要VLAN?

如果不做任何物理或者邏輯上的隔離,當一臺PC發出了一個廣播包,這個廣播包是會泛洪到整個網絡的所有設備上,每臺電腦都會收到這個廣播包。
這會嚴重的浪費系統資源,也會造成安全隱患,比如有一個用戶在不停的發ARP包,每秒鐘發10萬個,那整個網絡的所有設備每秒鐘都要去處理大量的ARP包,這會消耗大量的CPU、內存以及帶寬,從而無法利用空閒的資源去完成真正需要的通訊。
所以,使用VLAN技術,可以將一個大的廣播域,根據需求去切割開來,分成若干的小型的廣播域,每種數據幀(單播、廣播、組播)都只能在同一個VLAN裏泛洪,如果要傳到其他VLAN去,就必須要經過三層路由來轉發。

同一廣播域的主機

使用vlanx之後

2、VxLAN

VxLAN簡介:
虛擬局域網擴展(Virtual Extensible LAN, VXLAN),是一種網絡虛擬化技術,它試圖改善大雲計算部署相關的可擴展性問題。

爲什麼需要VxLAN?
  1. vlan的數量限制
    4096個vlan遠不能滿足大規模雲計算數據中心的需求
  1. 物理網絡基礎設施的限制
    基於IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署
  1. TOR交換機MAC表耗盡
    虛擬化以及東西向流量導致更多的MAC表項
  1. 多租戶場景
    IP地址重疊

vxlan(virtual Extensible LAN)虛擬可擴展局域網,封裝轉發二層報文,在二層報文添加了一個VxLAN Header,進而通過UDP封裝來進行傳輸,具體的報文格式如下:

vlan報文格式

這裏重點關注的VxLAN封裝部分的VXLAN header,其中有一個24位的VNI,可以對比VLAN ID,但VLAN的數量只有區區4096,而這裏2^24數量來了個平方,使得劃分網絡的數目大大增加,除此之外還有虛擬機遷移,MAC表等方面都有很多利好

對於原始報文的封裝,這裏是通過VTEP來進行封裝和解封,全稱是VxLAN Tunnel End Point,它可以承載在物理交換機上,也可以是虛擬機交換機。
原始的報文,到了VTEP之後,就給封裝VxLAN和UDP然後進行鏈路傳輸,因此在沒有解封之前,原始報文裏的信息是無法獲知的。

VxLAN通信過程
簡單說下VM1和VM2通過VxLAN通信流程,整個過程也是需要兩個階段,首先VM1必須知道VM2的MAC地址,然後再進行通信:

1.VM1發送ARP請求,諮詢 192.168.0.101的MAC地址

2.VTEP1收到了請求之後,開始封裝報文,VNI爲864,SRC IP爲VTEP1的IP,DST IP爲多播(非廣播)的UDP報文

3.多播包會發送到所有的VTEP上,目的IP地址不在管轄範圍之內的,全部丟掉,但是VxLAN表裏學習一條對應關係:VM1_MAC,VNI,VTEP1_IP

4.正確的VTEP2收到了包之後,解封裝,給VNI爲864的虛擬機發送ARP,同時VxLAN表裏學習一條對應關係:VM1_MAC,VNI,VTEP1_IP

5.VM2收到了ARP請求,發現是自己,響應請求,發送自己的MAC地址

6.VTEP2收到ARP響應,封裝成三層單播包,DST IP爲VTEP1的IP,進行路由轉發

7.VTEP1收到了包之後,解封裝,將包發送給VM1,同時VxLAN表裏學習一條對應關係:VM2_MAC,VNI,VTEP2_IP

8.VM1收到了ARP響應,獲得了VM2的MAC地址

9.VM1發送IP報文給VM2,S-MAC,D-MAC,S-IP,D-IP

10.VTEP1收到之後,按照要求封裝

11.首先,VxLAN header,VNI設置864

12.然後,UDP的DST PORT 4789

13.接着,IP的DST爲VTEP2的IP,SRC爲VTEP1的IP

14.最後,MAC的DST爲VTEP1下一跳的MAC地址,SRC爲VTEP1的MAC地址

15.封裝好之後,先走到VTEP1的下一跳,進而轉發給VTEP2

16.VTEP2根據監聽目的端口4789,找到VxLAN的包之後,查看VNI

17.解封完之後,完整的二層包轉發給VM2

爲什麼需要Vxlan網關?

如果需要VXLAN網絡和非VXLAN網絡連接,必須使用VXLAN網關才能把VXLAN網絡和外部網絡進行橋接和完成VXLAN ID和VLAN ID之間的映射和路由,和VLAN一樣,VXLAN網絡之間的通信也需要三層設備的支持,即VXLAN路由的支持。同樣VXLAN網關可由硬件和軟件來實現。從封裝的結構上來看,VXLAN提供了將二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有24個bit,數量遠遠大於4096,並且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴展性。

0x 04 SDN和NFV

一個是網絡設計實現方案,一個是網絡設備(網元)虛擬化的技術。比如OVS或者Linux-bridge就是一種NFV成功的技術。虛擬化後的各種網元被統一納管,將管理面和轉發面分離,組成了可行的通信網絡,這就是一種SDN方案。
至於在虛擬化中涉及到OpenFlow和netconf協議,前者是將路由信息以流表的形式下發給網絡設備的協議,而後者是對網絡設備進行配置管理的協議。這裏不再做深入討論。

0x 05 openstack-neutron和SDN

1、neutron

OpenStack Neutron是一個SDN網絡項目,專注於在虛擬計算環境中提供網絡即服務(NaaS)。Neutron在OpenStack中取代了原來的網絡應用程序接口(API),稱爲Quantum。Neutron旨在解決雲環境中網絡技術的不足,包括通過網絡拓撲和尋址在多租戶環境中缺乏租戶控制,這使得難以部署高級網絡服務等。

2、爲什麼需要SDN

neutron雖然功能強大,但是仍然存在很多無法解決的問題以及性能瓶頸,因此需要藉助外部網絡能力和plugin去解決。

1、基於VM網卡或IP的限速、基於路由的限速以及基於租戶的限速等網絡需求
2、網絡節點存在的單點故障問題至今依然沒有完善的解決方案,DVR(Distributed Virtual Routing,分佈式路由)對虛擬路由器的HA方案也存在很大的缺陷。
3、對Neutron網絡的監控,雖然可以通過Ceilometer組件使用Neutron的neutron-meter-agent進行採集,但除了Ceilometer組件存儲採集數據持久化性能方面的問題,還存在很多監控項無法採集到的問題。
4、在Neutron中經常使用Open vSwitch虛擬交換機,而其在計算節點和網絡節點的虛擬交換機都有穩定性和性能方面的限制,尤其是使用VXLAN等隔離方式時,報文的封裝和解封裝很可能成爲網絡瓶頸。
####3、neutron與SDN的關係
Neutron通過和SDN Controller集成,來實現和擴展原來neutron的功能。由原來neutron控制網元變爲neutron控制SDN Contrloller,再由SDN Controller管理和控制計算節點網元以及VxLAN網關來實現虛擬網絡通信。

0x 06 參考

https://blog.csdn.net/octopusflying/article/details/77609199
http://maoxiaomeng.com/2017/07/31/vxlan和vtep/
https://zh.wikipedia.org/wiki/虛擬局域網擴展
http://blog.sina.com.cn/s/blog_e01321880101i7lw.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章