1. 程式人生 > >vxlan、組播、IGMP協議RFC總結(廣域網協議作用)

vxlan、組播、IGMP協議RFC總結(廣域網協議作用)

常用的廣域網協議

編輯常見廣域網協議及特點PPP(Point to Point Protocol)、HDLC(High level Data Link Control)、frame-relay,X·25,slip。PPP:點對點的協議,華為路由器預設封裝,是面向字元的控制協議。HDLC:高階資料鏈路控制協議,Cisco路由器預設的封裝,是面向位的控制協議。frame-relay:表示幀中繼交換網,它是x.25分組交換網的改進,以虛電路的方式工作。SDLC:同步資料鏈路控制(SDLC)協議是一種 IBM 資料鏈路層協議,適用於系統網路體系結構(SNA)

組播可以分成MAC層組播/IP層組播和應用層組播. 局域網裡三種都可以用, 用第一種最多, 第二種其次. 廣域網裡只能用後兩者, 第三種最普遍, 第二種需要網中的路由器支援, 這是最近幾年才成熟的, 老的路由器可能不支援.(https://bbs.csdn.net/topics/390715120?page=1#new_post)


一、前言

其實主要總結vxlan的,但說明vxlan,又離不開組播、IGMP協議,所以放在一起總結了。主要是一些要點的總結,並沒有太詳細的分析,這樣便於以後的查閱和複習,也可作為快速瞭解vxlan的途徑。

本文主要根據RFC、tcp/ip詳解卷一來總結。

先來兩個網路圖,為了便於檢視協議。

\
\

二、vxlan

解決2、3層之上的多租戶資料中心網路環境。

可以部署在2、3層之上。

vtep(VXLAN Tunnel End Point)不能對vxlan包分段。所以一般設定最大的MTU、或者使用MTU發現協議設定MTU。

對廣域網的地址學習是無能為力。

OTV(覆蓋網路傳輸虛擬化)相較於vxlan的最大特點是可以在廣域網上進行地址學習。因為OTV在大二層建立了控制平面,IS-IS可以在三層建立控制平面。

整體報文封裝頭:

\
\
\
\

IPv6傳輸的整體報文格式:

\
\
\
\

1.vxlan頭(8位元組)

flag(8位,1個位元組):R|R|R|R|I|R|R|R,I為1,其他為0。

VNI:24位(3個位元組)。定義不同的vxlan通道,不同VNI之間的虛擬機器不能通訊。

保留位:24位+8位(4個位元組)。傳輸端設定為0,接收端不關心。

\

2.外部UDP頭

目的埠號:周知的埠號4789.

源埠號:建議根據內部報文(例如,乙太網頭)雜湊一個埠號。可利用該值做負載均衡。

建議的範圍是49152-65535。

UDP校驗和:應該設定為0。接收端必須接受為0的包。如果不為0,(根據UDP偽首部、UDP、VXLAN、攜帶的MAC幀),接收端如果驗證了該值,且不正確,那麼必須丟棄該包,如果未驗證,或者驗證是正確的包,那麼必須解析該包。

\

3.外部IP頭

源地址:是VM(用內部的源MAC代表)所在的VTEP的IP地址。

目的地址是目的VM(用內部的目的MAC代表)所在的VTEP的IP地址。目的地址可以是單播或者組播。

\

4.外部乙太網頭

外部的vlan標籤是可選的,如果存在,同正常的vlan,那麼是用來在lan中劃分vxlan流量的。

\

5、控制平面

兩種,自動學習、中央分配。

遠端的VTEP,根據來的vxlan包,學習內部源MAC和外部的源IP之間的對應關係。

多播路由協議(例如PIM-SM)可以提供3層網路的多播樹。

vm的arp是通過組播向其他VTEP傳送,VTEP再在所屬的VNI區域網內arp。VTEP之間是通過組播交流arp的。VNI和組播號的對應是通過管理通道配置的。VTEP傳送IGMP報告到組播路由器,來監聽指定的組播。

6、應用場景

\
\

接收方向:除非明確將其傳遞給非VXLAN介面,否則具有內部VLAN ID的解封裝幀應該被丟棄。

發出方向:根據非vxlan的包的vlan對映到vxlan。除非明確配置傳輸帶有vlan ID的幀給某個vxlan,否則去除vlan id。

6.1內部vlan tag

不應該包含內部vlan tag,除非明確配置了。

原來的vlan網路,使用vxlan之後,應該把vlan對映進vxlan中。並且vlan 12位的id,完全可以對映進vxlan的24位的id中。

三、廣播和組播

廣播和組播(也成為多播)僅應用於UDP。因為UDP才是一對多的。

組播服務,例如:無盤工作站BOOTP系統(可能廣播實現)、互動式會議系統(可能向每個目的地址傳送一個TCP資料複製來實現)。應用程式可以向一個伺服器傳送一個請求,而不用知道任何特定伺服器的IP地址

乙太網只是組播和廣播的一種實現。

1.乙太網廣播、組播的實現

廣播地址:ff : ff : ff : ff : ff : ff

多播地址:0 1 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0,地址中最高位元組的最低位設定為 1時表示該地址是一個多播地址。

如果當前沒有程序使用該目的埠號,就丟棄該資料報併產生一個 I C M P不可達報文( T C P根據它的埠號作相似的過濾)。

2.IP 廣播實現

四種:受限的廣播、指向網路的廣播、指向子網的廣播、指向所有子網的廣播。

2.1 受限的廣播

路由器不轉發受限的廣播。僅在本地網路。本地廣播。

如果主機是多個介面時,廣播發到哪個介面是個問題,隨不同系統的實現而不同。

2.2 指向網路的廣播

A類網路廣播地址為 n e t i d . 2 5 5 . 2 5 5 . 2 5 5,其中n e t i d為A類網路的網路號。

一個路由器必須轉發指向網路的廣播,但它也必須有一個不進行轉發的選擇。

2.3 指向子網的廣播

主機號為全1且有子網號的地址。

可能因為漏配置子網號,導致不是一個指向子網的廣播地址。

2.4 指向所有子網的廣播

子網號和主機號為全1.所以需要了解目的網路的子網掩碼。

例如128.1.255.255/255.255.255.0,是一個指向所有子網的廣播地址。但如果沒有指明子網掩碼,那麼這就是個指向網路的地址。相反,如果不該配置子網掩碼的指向網路的廣播地址,誤配置了子網掩碼,那麼就會是一個指向所有子網的廣播地址。

當前的路由器沒有將一個指向所有子網的廣播地址傳送給所有的子網。這樣避免了因錯誤的配置,導致一個指向網路的廣播地址誤為一個指向所有子網的廣播地址。

這樣的需求儘量使用多播滿足。

\

3.IP組播實現

IP多播提供的兩類服務:

1)向多個目的地址傳送資料。

2)客戶對伺服器的請求。也可能廣播實現(BOOTP)。

使用D類IP地址實現。

\

最高4位是1110.

範圍是2 2 4 . 0 . 0 . 0到2 39 . 2 5 5 . 2 5 5 . 2 5 5。

知名多播地址:

例如, 2 2 4 . 0 . 0 . 1代表“該子網內的所有系統組”, 2 2 4 . 0 . 0 . 2代表“該子網內的所有路由器組”。多播地址 2 2 4 . 0 . 1 . 1用作網路時間協議 N T P, 2 2 4 . 0 . 0 . 9用作R I P - 2, 2 2 4 . 0 . 1 . 2用作S G I公司的d o g f i g h t應用。多播地址2 2 4 . 0 . 0 . 4是一個知名的地址,它被當前用於多播選路的距離向量多播選路協議 D V M R P。

3.1 IP組播組地址和乙太網地址的轉換

IP多播對應的乙太網地址範圍:0 1 : 0 0 : 5 e : 0 0 : 0 0 : 0 0到0 1 : 0 0 : 5 e : 7 f : ff : ff

\

地址對映不是唯一的,32個對1個乙太網地址。裝置驅動程式或者IP層需要對資料報進行過濾。

區域網網絡卡趨向兩種處理型別:一種是網絡卡根據對多播地址的雜湊值實行多播過濾,這意味仍會接收到不想接收的多播資料;另一種是網絡卡只接收一些固定數目的多播地址,這意味著當主機想接收超過網絡卡預先支援多播地址以外的多播地址時,必須將網絡卡設定為“多播混雜(multicast promiscuous)”模式。

通過路由器轉發多播時,需要IGMP協議。

3.2 FDDI和令牌環網中的組播

FDDI使用相同的IP多播到48位FDDI地址的對映過程。令牌環網有所不同。

4. 任播(anycast,ipv6特有地址型別)

多個主機提供一個服務,該服務用一個地址表示,該地址就是anycast。

向哪個主機請求服務,取決於路由處理,路由會選擇最近的服務點服務,所以也達到了負載均衡的效果。

Anycast 指IPV6協議中一個傳送方同最近的一組接收方之間的通訊。one-to-one-of-many.任播同單播地址格式,但從地址上是分不出任播的。所以,節點必須使用明確的配置指明它是一個任播地址。目前,任播僅被作為目的IP地址,且僅分配給路由器。

它的最初語義是,在IP網路上通過一個Anycast地址標識一組提供特定服務的主機,同時服務訪問方並不關心提供服務的具體是哪一臺主機(比如DNS或者映象服務),訪問該地址的報文可以被IP網路路由到這一組目標中的任何一臺主機上,它提供的是一種無狀態的、盡力而為的服務。

Anycast 的定義是: 當一個單播地址被分配到多於一個的介面上時,發到該介面的報文被網路路由到由路由協議度量的“最近”的目標介面上。

感覺像是路由協議定義出來的最近的路徑。

四、IGMPv1

知名多播地址:2 2 4 . 0 . 0 . 1代表“該子網內的所有系統組”。

\
\

I G M P v1有固定的報文長度,

沒有可選資料。

I GM P報文通過I P首部中協議欄位值為 2來指明。

1. 報文欄位解析

版本號為1:IGMPv1,另外有IGMPv2、IGMPv3

IGMPv1型別欄位:為0表示多播路由器發出的查詢報文,為1表示主機發出的報告報文。

檢驗和:計算和I C M P協議相同。

組地址:為D類IP地址。查詢報文中為0,報告報文中為要參加的組地址。

2. IGMP查詢和報告

主機:

1)第一個程序加入一個多播組時,主機發送一個IGMP報告。如果主機的多個程序加入同一個組,只發送一個IGMP報告。報告發送到組所在的介面上(網絡卡)。

2)主機的程序離開一個多播組時,不傳送IGMP報告,即便是最後一個程序離開。在隨後收到的IGMP查詢中就不再發送該組的報告報文了。

3)主機通過傳送IGMP報告來響應一個IGMP查詢。對每個至少包含一個程序的組均要發回IGMP報告。

多播路由器:

1)多播路由器定時向每個介面傳送IGMP查詢報文。報文中的組地址設定為0。

2) 多播路由器根據收到的IGMP報告更新IGMP表資訊。

\

TTL欄位固定為1,所以資料分組僅限於本地子網。對發往一個多播地址的資料報從不會產生 I C M P差錯。當T T L值為0時,多播路由器也不產生I C M P“超時”差錯。

3. 實現

多播路由器中,保留了一個表,該表有介面和多播組的對應資訊。當要路由一個多播時,先根據多播組查詢該表,找到所有出介面,然後傳送。也可能在每個介面上都有一個類似的表,來儲存該介面上的多播組資訊。

主機也保留了一張表,包含所有至少含有一個程序的多播組以及多播組中的程序數量。

首個IGMP報告發出後,會在間隔一段時間後(0~10秒隨機),再次發出。

主機收到查詢後,並不立即響應,而是等待一定的時間。因為參加同一多播組的主機都會發出響應,且目的地址是多播組地址,所以,當收到其他主機發出的同一組的報告時,就不必重複響應了。(但IGMPv3中去除了該功能)

出處:https://www.2cto.com/net/201709/679992.html