2014年10月16日 星期四

IGMP study / MLD

看了一篇文章寫得不錯就copy 過來看

出處
http://blog.xuite.net/azelmk2/eday/83824141

概論:
unicast: 來源和目的只有一個, 一對一傳送

multicast: 來源一個, 目的是特殊的MAC/IP (稱之為multicast group IP/MAC), 一對多.



broadcast: MAC為FF:FF:FF:FF:FF:FF, IP多為255.255.255之類的形式, 一對多.


broadcast和multicast的不同:
broadcast的精神是希望所有人都收到, multicast是希望只有群組成員收的到. 因為multicast IP有很多組, 所以可以根據這些IP定義成員(這也就是multicast IP通常被稱為multicast group的原因).

但以layer2的switch來說, 收到一個multicast和broadcast封包時做的事是一樣的: 把這個封包拷貝成很多份丟到每一個switch port上(這前提是switch沒打開IGMP的一些額外功能).

所以multicast和broadcast的差異主要是展現在layer3, multicast group的管理上. 這管理的協定就是IGMP (Internet Group Management Protocol).

IGMP群組管理用到的訊息

IGMPv1:
general query: 上層用來尋問下層會員是否還存在, 超有成員過一定時間沒回就會把該成員移出群組.
report(join): 下層用來回覆query或是向上層宣告要加入某個群組.

IGMPv2新增:
leave: 下層用來告知上層離開某個群組.
group-specific query: query的衍生, 當上層收到leave訊息時發送, 用來重新確認群組還有哪些成員.

IGMPv3: 暫不研究





針對leave產生的模式:

normal leave: a. 下層的群組成員對IGMP router發出leave; b. router收到以後發出group-specific query. c. 送出leave的群組成員不會回應這個query. d. router經過一段時間收不到回覆, 便將該成員移出群組.

在c到d之間需要經過十幾秒的等待(取決於quert timeout設定多長), 所以出現了更快的leave方法.

igmp snooping fast leave: 前提是有打開snppoing, 當switch收到leave訊息的時候會將leave訊息往上層(router)forward, 但是switch本身會直接停止對收到leave的port繼續發送multicast封包.

但是這樣子會出現的問題就是如果同一個port有兩個成員, 只有其中一個發出leave的時候會造成另一個成員也跟著收不到multicast封包(以MOD來說就是家裡有兩個人在兩台機上盒看同一個頻道的節目, 其中一個關電視會讓另一個人一段時間也看不到). 所以switch必須自己記錄port上有沒有複數的成員, 如果還有成員就不能直接用fast leave的方式中斷multicast封包.

網路上immediate leave和fast leave都有, 但是指的應該是相同的東西(CISCO不同機器的fast/immediate leave說明幾乎相同)


IGMP snooping / IGMP proxy

如上所說, 在switch上multicast封包和broadcast一樣會送到所有的port上, 但是顯然, 並不一定所有port上都有這個multicast group的成員, 所以有些封包丟出去會造成頻寬的浪費. IGMP snooping/IGMP proxy就是為了節省頻寬所使用的技術. IGMP snooping就是switch會記錄哪個port上有人join或leave哪個multicast grop, 如果一個port上不存在multicsat group的成員, switch就不會把multicast封包往那個port丟(很簡單吧).

IGMP proxy這邊就先不討論.



IGMP proxy reporting:
IGMP snooping是用來節省往下的頻寬, proxy reporting是用來節省往上的頻寬. 一台switch上假如有三個人都join了一個multicsat group, 那麼對上層的multicast router來說, 他只要收到一個join就夠了(反正router收到一個join就得往下送multicast封包). 同樣, 只要還有至少一個成員的時候, router也沒有必要收到其它成員的leave訊息. proxy就是在做這種過濾往上行的封包的工作.

因為方向不同, 所以IGMP proxy reporting和IGMP snooping是互相獨立的功能.


IGMP multicast VLAN:

VLAN=virtual LAN, 是用來分割網路的方式.

而VLAN遇上multicast會發生什麼問題呢?




借用一下cisco說明書的圖, 虛線框起來的地方是switch.

假設Host1用VLAN100對Router A發出join 224.1.1.100這個multicast group.

同時Host2用VLAN200也對Router A發出join 224.1.1.100

Router該怎麼做呢? 因為不同VLAN視為不同的網路, 所以router必須對switch送出一個VLAN是100的224.1.1.100 mulitcast封包, 同時也必須送出VLAN是200的224.1.1.100 multicast封包.

於是, 因為VLAN的關係, 同樣的內容因為VLAN不同又得送出兩份, 假設host1~host4都屬於不同VLAN但是加到同一個multicast group的話, 同樣的內容就得按四個VLAN送出四份!

要怎麼解決這種頻寬的浪費呢? 很簡單, 讓host1~host4分屬不同的VLAN沒關係, 但是他們的IGMP封包要丟到router的時候轉換成同一個VLAN就好了. 而這個在switch和router之間跑的VLAN就叫multicast VLAN; 而設定multicast VLAN和host1~host4之間的VLAN轉換的動作, 就叫MVR (multicast VLAN registeration).

MVR的參數至少要有 1. multicast VLAN(一組或多組) 2. multicast VLAN裡包含的port (host1~host4) 3. 每個port上的VLAN. 這樣switch就會知道VLAN該怎麼轉換.

==================================================
                                      IGMP STUDY 2
==================================================

ref. http://ithelp.ithome.com.tw/question/10067356


此篇文章是參考網路上的10多篇中英文文章整理而成,如有誤請不吝指教,謝謝。另如有侵權請告知刪除,謝謝。
起源:
一開始的網路傳輸由單點(Unicast)到廣播(Broadcast)。這樣的封包傳送方式對於多媒體傳輸的應用非常佔據頻寬,所以後來發展出群播(Multicast)的傳輸,減少了頻寬的浪費。請參考如下應用圖。

一、Internet群組管理協議(Internet Group Management Protocol)簡介:
IGMP(Internet Group Management Protocol,互聯網群組管理協議)是TCP/IP的協議族中負責的IP群播成員管理的協議, IP主機和與其直接相鄰的群播路由器之間建立,以便維護群播組成員關係。
參與的IP群播的主機可以在任意位置,任意時間,成員總數不受限制地加入或退出群播組。而群播路由器不需要也不可能保存所有主機的成員關係,它只是通過 IGMP的協議了解每個接口連接的網段上是否存在某個群播組的接收者,僅只是群組成員。而主機方只需要保存自己加入了哪些群播組。所以才會有查詢路由器的出現。
IGMP在主機與路由器之間是不對稱的:主機需要響應群播路由器的IGMP的查詢封包,即以IGMP成員報告封包響應;路由器週期性(每隔60秒)發送成員資格查詢封包(Query packet),然後根據收到的響應封包(report packet)確定某個特定群組在自己所在子網路上是否有主機加入,並且當收到主機的退出組(leave)的報告時,發出特定組的查詢封包(IGMP的版本2),以確定某個特定組是否已無成員存在。
到目前為止,有三個版本的IGMP:目前應用最多的是版本2。
IGMP V1(RFC1112定義)
IGMP V2(RFC2236定義)
IGMP V3(RFC 3376定義)

二、Internet Group Management Protocol目的:
Internet工作群組管理協議。IGMP主要用來解決網絡上廣播時佔用頻寬的問題。當網絡上的信息要傳輸給所有工作站時,就發出廣播(broadcast)信息(即IP地址主機標識位全為1),交換機會將廣播信息不經過濾地發給所有工作站;但當這些信息只需傳輸給某一部分工作站時,通常採用群播(multicast,也稱多點廣播)的方式,此時就要要求交換機支持IGMP。支持IGMP的交換機會識別群播信息並將其轉發至相應的群組,從而使不需要這些信息的工作站的網絡頻寬不被浪費。IGMP對於提高多媒體傳輸時的網絡性能尤為重要。

三、IGMP V1/2/3簡介:
1. IGMP Version 1原理:
IGMP Version 1 封包類型:
Membership Query: 成員關係查詢(0x11) ,224.0.0.1, 每60秒查詢一次
Membership Report:成員關係報告(0x12)
IGMP Version 1使用Query-Response模型來允許群播路由器和多層次交換器來確定在本網段內哪個群播群組是啟動的。在這個模型中,路由器或交換器充當IGMP 查詢路由器,每隔60秒週期性地發送IGMP Version 1 Membership Query給224.0.0.1。啟用群播的所有主機監聽該位址並接收Query Packet。主機以IGMP Version 1 Membership Report回覆,表示它要接收特定Group的Multicast Traffic;該網段中的路由器或交換器就可以了解群播群組中有哪些接收者。
也就是說共享網段表示一個網段上有多個群播路由器的情況。在這種情況下,由於此網段上
運行IGMP的的路由器都能從主機那裡收到成員資格報告消息,因此,只需要一個路由器發送成員資格查詢消息,這就需要一個路由器選舉機制來確定一個路由器作為查詢器。在IGMP的版本1中,查詢器的選擇由群播路由協議決定。
主機可以通過發送一個或多個主動的Membership Report封包表明加入(Join)一個群播群組。
如: 某個主機主動發送一個Report封包表明要接收群播群組(224.1.1.1)的流量。
主機通過停止處理群播群組訊務以及不回應IGMP Query的方式來離開群播群組。
IGMP Version1依靠L3的IP Multicast Routing Protocol(PIM、DVMRP等)來解決同一網段中哪個路由器或多層次交換器成為查詢路由器。查詢路由器發送IGMP Version 1的Query來確定哪個群播群組是啟動的。通常Designated Router會被選擇為查詢路由器。
主機群可以加入群播群組,但是IGMP Version 1沒有Leave訊息,路由器或多層次交換器需透過一個逾時機制的運作,讓那些沒有人接收的訊務不再送到不需要的主機成員。

2. IGMP Version 2增進的功能:主要增加了離開機制,特定群組查詢功能,最大響應時間欄位。
IGMP Version 2 封包類型:
Membership Query: 成員關係查詢(0x11)
V1 Membership Report:V1成員關係報告(0x12)
V2 Membership Report:V2成員關係報告(0x16)
Leave Group:離開群組報告(0x17)
離開群組訊息(Leave Group Message)
在IGMP 版本1 中,主機悄然離開群播組,不會給任何群播路由器發出任何通知。
造成群播路由器只能依靠群播組響應超時來確定群播成員的離開。而在版本2 中,
當一個主機決定離開時,如果它是對最近一條成員資格查詢消息作出響應的主機,
那麼它就會發送一條離開群組的消息,提升了離開的效率,加快對網路變化的響應。
特定群組查詢功能介紹(Group Query Message)
在IGMP V1 中,群播路由器的一次查詢,是針對該網段下的所有群播組。這種查詢稱為普遍群組查詢。在IGMP V2 中,在普遍群組查詢之外增加了特定群組的查詢,這種查詢封包的目的IP 地址為該群播組的IP地址,封包中的群組地址部分也為該群播組的IP 地址。這樣就避免了屬於其它群播組成員的主機發送響應封包。
最大響應時間欄位 (Maximum Reponse Time field) 
以動態地調整主機對群組查詢封包的響應時間(IGMP V1不可手動調整,默認為10秒),也就是說Query Message中可允許Query router 指定最大的查詢回應時間,控制查詢響應的突發性和微調組成員離開組時的離開延時的過程。例如網路存在大量的Multicast Group,可能需要很長的時間來傳送reply。但是此機制可以發一個未經許可的report告知成員參加該群組,這個機制在沒有其他成員存在的情況時減低了終端系統加入的延遲。
IGMP V2對查詢器的選擇由群播路由協議決定做了改進,規定同一網段上有多個群播路由器時,具有最小的IP地址的群播路由器被選舉出來充當查詢器。



IGMP V1/V2的缺點:
a.缺乏有效控制群播源的手段。
b.由於不知道群播源的位置,群播路徑的建立較困難。
c.發現一個唯一的群播位址十分困難,可能出現多個的群播組使用同一個群播位址的情況。

3. IGMP Version 3增進的功能:主要增加了過濾來源的機制,允許系統選擇想要接收的特定群播源或者排除不想接收的特定群播源。
使用IGMP V3之後,主機可指定要由特定的來源端接收群播的流量,可以是一部編碼器或是支援群播的視訊伺服器,也可以由指定特定來源以外的所有來源端接收群播流量。
Client可使用 IGMP Version 3 Report訊息,指定要由指定的Source接收群播的Stream,或是由指定Source以外的所有來源接收群播流量。防止啟用群播的路由將群播傳輸傳遞到沒有Client的子網路。群播路由器用來每隔一段時間輪詢一次網路中的群組成員。路由器可使用 IGMP Version 3 Query,查詢Client是否要由指定的來源清單,接收群播流量。
IGMP Version 3主要改進的功能是可以允許主機指定它們想要在某個Multicast Group中只接收特定的Multicast Source。這個增強功能使得路由資源可以更加有效地被使用。IGMP Version 3新增了可以根據群播來源來過濾群播的功能。
IGMP Version 3不僅可向下相容於之前版本的IGMP通訊協定。為了維持與較舊版本IGMP系統的向下相容性,IGMP Version 3群播路由器必須也同時採用Version 1和Version 2的通訊協定。

名詞解釋:
1.IGMP Router Timeout:
一個IGMPV2的主機可以在子網路中放置在一個尚未升級成IGMP V2的查詢路由器。
要求如下: IGMPv1的路由器將發送的一般查詢封包與最大響應時間設置為0。預設值為100(10秒)。
當IGMP V1 路由器預計響應V1 Report封包,但是卻會忽略V2 Report 封包,所以必須在每個端口保持狀態變量,而由IGMP V1路由器依據設定timeout發出響應查詢,才能決定每個端口跑的類型。最大可設置到400秒。
2.IGMP Snooping:比方說port 3送了一個Join multicast 224.0.0.1的封包到switch,switch就偷偷地學起來等到從port 5收到multicast 224.0.0.1的封包時就知道只要傳給port 3就好了不用傳給別的port,透過IGMP snooping就不需要手動設定了而且也不會送到其他不屬於這個multicast group的port,進而實現群播封包的L2快速轉發。
3.IGMP Host Timeout:
保存主機組成員關係的計時器時間,也就是說設定一個時間來計算多久沒有收到report封包,就將該port從某個multicast group移除。



==================================================
                                      MLD STUDY
==================================================

ref.http://ithelp.ithome.com.tw/question/10004381

Multicast Listener Discovery (MLD)

在 RFC 1112 的 Internet Group Management Protocol (IGMP) 中,將 IP 多點傳送在 TCP/IP 網路中的使用定義為 TCP/IP 標準。這個 RFC 可以定義 IP 主機支援多點傳送方式的位址及主機延伸。原本為現行 IP 版本 (稱做 IP 第 4 版,IPv4) 開發的概念,也套用到 IPv6。

What is multicasting?
將多點傳送傳輸傳送到單一位址,但是由多重主機處理。多點傳送與時事通訊訂閱相似。發行時事通訊時,當只有訂閱者收到時,只有隸屬於多點傳送群組的主機電腦,接收並處理傳送到群組的保留位址的傳輸。將指定的多點傳送位址上正在接聽的主機組,稱為多點傳送群組。

多點傳送的其他重要方面包含下列項目:

• 成員資格是動態的,允許主機隨時加入及離開群組。

• 傳送成員資格訊息,可以結合多點傳送群組。IPv6 使用 Multicast Listener Discovery (MLD) 來判斷網路區段 (又稱做連結或子網路) 上的成員資格。

• 群組大小不受限制,成員可以在整個多重網路中展開 (如果連線路由器支援多點傳送傳輸及成員資格資訊的傳播)。

• 主機可以將傳輸傳送到群組的位址,而不屬於相應的群組。


IPv6 multicast addressing
IPv6 多點傳送位址是由「格式首碼」1111 1111 (0xFF) 來保留及指派。下表是為 IPv6 多點傳送保留的,而且是由 Internet Assigned Numbers Authority (IANA) 登錄的 IPv6 多點傳送位址的部分清單。

IPv6 多點傳送位址 描述 
FF02::1 連接相同連結上的所有節點時所使用的所有節點位址。

FF02::2 連接相同連結上的所有路由器時所使用的所有路由器位址。

FF02::4 連接相同連結上的所有 DVMRP 多點傳送路由器時所使用的所有 Distance Vector Multicast Routing Protocol (DVMRP) 路由器位址。

FF02::5 連接相同連結上的所有 OSPF 路由器時所使用的所有「先開啟最短的路徑 (OSPF)」路由器位址。

FF02::6 連接相同連結上的所有 OSPF 指定的路由器時所使用的所有 OSPF 指定的路由器位址。

FF02::1:FFXX:XXXX 位址解析處理程序使用這個請求節點位址,將連結本機節點的 IPv6 位址,解析成連結層位址。請求節點位址的最後 24 個位元 (XX:XXXX) 是 IPv6 單點傳送位址的最後 24 個位元。 


一個單一 IPv6 多點傳送位址,可以識別每個多點傳送群組。
每個群組的所有主機成員共用該群組保留的 IPv6 位址,他們接聽及接收任何傳送到該群組位址的 IPv6 資訊。

將 IPv6 多點傳送位址對應到一組保留的媒體存取控制多點傳送位址。
如需 IPv6 多點傳送位址對應 Ethernet MAC 位址的詳細資訊,請參閱 RFC 2464〈Transmission of IPv6 Packets over Ethernet Network〉。

MLD messages
MLD 用來交換 IPv6 路由器之間的成員資格狀態資訊,這些路由器支援多點傳送及多點傳送群組的成員。獨立成員主機報告多點傳送群組中的主機成員資格,並且多點傳送路由器每隔一段時間輪詢一次成員資格狀態。MLD 定義於 RFC 2710,Multicast Listener Discovery (MLD) for IPv6。

下列表格描述 MLD 訊息類型。

MLD 的訊息類型 描述 
多點傳送接聽程式查詢
多點傳送路由器傳送每隔一段時間輪詢一次群組成員的網路。查詢有一般查詢 (要求所有群組的成員資格) 和特定查詢 (要求特定群組的成員資格)。

多點傳送接聽程式報告
如果結合多點傳送群組,則由主機傳送,或是回應路由器傳送的「MLD 多點傳送接聽程式查詢」。

多點傳送接聽程式完成
當它離開主機群組,並且可能是網路區段上該群組的最後成員時,由主機傳送。


把 MLD 訊息當做 ICMPv6 訊息來傳送。

附註 

• IPv6 是一個快速發展的標準。參照的 RFC 可能已經被較新的 RFC 取代。




沒有留言:

張貼留言

有敘述錯誤或者是觀念有問題歡迎指正