TCP/IP協議---廣播和多播及IGMP協議


  老板找某個高層談話,這是一對一形式。當老板叫來所有高層談話,那么就變為了一對多。計算機網絡中也是如此,當一個主機需要和更多機器對話時,就有了廣播和多播這種形式。

廣播和多播僅應用於UDP,它們對需將報文同時傳往多個接收者的應用來說十分重要。TCP是一個面向連接的協議,它意味着分別運行於兩主機(由 I P地址確定)內的兩進程(由端口號確定)間存在一條連接。

網卡經過配置都能接收目的地址為多播地址或某些子網多播地址的幀。對於以太網,當地址中最高字節的最低位設置為1時表示該地址是一個多播地址,用十六進制可表示為01:00:00:00:00:00(以太網廣播地址ff:ff:ff:ff:ff:ff可看作是以太網多播地址的特例)。

廣播的類型:
1. 受限的廣播
  受限的廣播地址是255.255.255.255。路由器都不轉發目的地址為受限的廣播地址的數據報,這樣的數據報僅出現在本地網絡中。
2. 指向網絡的廣播
  指向網絡的廣播地址是主機號為全1的地址。根據子網掩碼判斷主機號。
3. 指向子網的廣播
  指向子網的廣播地址為主機號為全1且有特定子網號的地址。同樣依賴子網掩碼。
4. 指向所有子網的廣播
  指向所有子網的廣播地址的子網號及主機號為全1。

 

比如局域網內有50台機器,我只想發送到其中的30台監聽着5000端口的UDP協議程序,利用了廣播:
當各個機器的網卡收到滿足自己網卡地址或者是廣播多播地址時,網卡要傳給設備驅動程序,驅動程序再根據協議傳給IP層或者ARP等,比如到了IP層,IP層還要根據協議再傳給UDP層等,到了UDP層,此時UDP根據端口號發現我這台機器沒監聽這個端口,那么我就給它返回端口不可達的ICMP報文。
這樣,那20台機器就分擔了額外的壓力,直到我的UDP層,我才知道哦這不是給我的。這就引出了多播的概念哈哈~我可以指定一些機器。

多播組地址: 互聯網D類地址就是多播組地址:
如圖:

 

 

多播組地址包括為1110的最高4bit和多播組號。它們通常可表示為點分十進制數,范圍從224.0.0.0到239.255.255.255。
一些多播組地址被IANA(互聯網數字分配機構)確定為知名地址。例如:224.0.0.1代表“該子網內的所有系統組”,224.0.0.2代表“該子網內的所有路由器組”。
多播地址224.0.1.1用作網絡時間協議NTP,224.0.0.9用作RIP-2,224.0.1.2用作SGI公司的dogfight應用。

 

-- 多播組地址到以太網地址的轉換:
如圖:

IANA擁有一個以太網地址塊,即高位24bit為00:00:5e(十六進制表示),這意味着該地址塊所擁有的地址范圍從00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA將其中的一半(高位的第四個字節的高四位分成0~7和8~f兩半,這樣是分成了整體的一半)分配為多播地址。為了指明一個多播地址,任何一個以太網地址的首字節必須是01,這意味着與IP多播相對應的以太網地址范圍從01:00:5e:00:00:00到01:00:5e:7f:ff:ff(7f這個就是一半)。

由於7的二進制是0111,所以高位0是確定的了,因此以太網地址的前三個字節01:00:5e和下一位0確定了25bit。剩下的23bit和IP地址的低23bit相同。這樣D類地址中高9bit中的低5bit就被忽略了。 --這樣帶來一個問題,5bit被忽略,那么表示會有32(2的5次方)個不同的多播號映射成了相同的以太網地址...比如:224.128.64.32和224.0.64.32都映射為同一以太網地址01:00:5e:00:40:20。
既然地址映射是不唯一的,那么設備驅動程序或IP層就必須對數據報進行過濾。因為網卡可能接收到主機不想接收的多播數據幀。另外,如果網卡不提供足夠的多播數據幀過濾功能,設備驅動程序就必須接收所有多播數據幀,然后對它們進行過濾。

 

- IGMP:Internet組管理協議

IGMP協議讓一個物理網絡上的所有系統知道主機當前所在的多播組。多播路由器需要這些信息以便知道多播數據報應該向哪些接口轉發。
正如ICMP一樣,IGMP也被當作IP層的一部分。IGMP報文通過IP數據報進行傳輸。不像我們已經見到的其他協議,IGMP有固定的報文長度,沒有可選數據。
如圖:

這是版本為1的IGMP。IGMP類型為1說明是由多播路由器發出的查詢報文,為2說明是主機發出的報告報文(多播路由器發出的是查詢類型的報文,網絡上的主機發送的是報告類型的報文)。檢驗和的計算和IGMP協議相同,同樣覆蓋首部和數據部分。組地址為D類IP地址。在查詢報文中組地址設置為0,在報告報文中組地址為要參加的組地址。

多播路由器使用IGMP報文來記錄與該路由器相連網絡中組成員的變化情況。使用規則如
下:
1) 當第一個進程加入一個組時,主機就發送一個IGMP報告。如果一個主機的多個進程加入同一組,只發送一個IGMP報告。這個報告被發送到進程加入組所在的同一接口上。
2) 進程離開一個組時,主機不發送IGMP報告,即便是組中的最后一個進程離開。主機知道在確定的組中已不再有組成員后,在隨后收到的IGMP查詢中就不再發送報告報文。
3) 多播路由器定時發送IGMP查詢來了解是否還有任何主機包含有屬於多播組的進程。多播路由器必須向每個接口發送一個IGMP查詢。因為路由器希望主機對它加入的每個多播組均發回一個報告,因此IGMP查詢報文中的組地址被設置為0。
4) 主機通過發送IGMP報告來響應一個IGMP查詢,對每個至少還包含一個進程的組均要發回IGMP報告。

使用這些查詢和報告報文,多播路由器對每個接口保持一個表,表中記錄接口上至少還包含一個主機的多播組(多播路由只關心是不是至少有一個,有一個就得轉發)。當路由器收到要轉發的多播數據報時,它只將該數據報轉發到(使用相應的多播鏈路層地址)還擁有屬於那個組主機的接口上。

如圖:查詢和報告的報文。顯示了兩個IGMP報文,一個是主機發送的報告,另一個是路由器發送的查詢。該路由器正在要求那個接口上的每個主機說明它加入的每個多播組

 

 

值得注意的是:1. 在主機發送報告報文的時候,目的IP地址是組地址(表示報告發送的時候,網絡上其它同一個組地址的主機也可以接收到,這意味着如果一個主機在等待發送報告的過程中,卻收到了發自其他主機的相同報告,則該主機的響應就可以不必發送了,因為多播路由只要知道至少有一個多播組存在就OK了。);2. 多播路由發送的目的IP地址是224.0.0.1(這表示該子網內的所有系統組)。3. 一個初始TTL為0的多播數據報將被限制在同一主機。默認情況下,待傳多播數據報的TTL被設置為1,這將使多播數據報僅局限在同一子網內傳送。

實現IGMP的幾個細節:
1). 當一個主機首次發送IGMP報告(當第一個進程加入一個多播組)時,並不保證該報告被可靠接收(因為使用的是IP交付服務)。下一個報告將在間隔一段時間后發送。這個時間間隔由主機在 0 ~ 1 0秒的范圍內隨機選擇。
2). 當一個主機收到一個從路由器發出的查詢后,並不立即響應,而是經過一定的時間間隔后才發出一些響應s(一個主機可能不止一個多播組,有幾個就要發送幾個響應)。

 

 

 

-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM