天天看點

TCP/IP詳解學習筆記(7)-廣播和多點傳播,IGMP協定

1.單點傳播,多點傳播,廣播的介紹

1.1.單點傳播(unicast)

單點傳播是說,對特定的主機進行資料傳送。例如給某一個主機發送IP資料包。這時候,資料鍊路層給出的資料頭裡面是非常具體的目的位址,對于以太網來 說,就是網卡的MAC位址(不是FF-FF-FF-FF-FF-FF這樣的位址)。現在的具有路由功能的主機應該可以将單點傳播資料定向轉發,而目的主機的網 絡接口則可以過濾掉和自己MAC位址不一緻的資料。

1.2.廣播(unicast)

廣播是主機針對某一個網絡上的所有主機發送資料包。這個網絡可能是網絡,可能是子網,還可能是所有的子網。如果是網絡,例如A類網址的廣播就是 netid.255.255.255,如果是子網,則是netid.netid.subnetid.255;如果是所有的子網(B類IP)則是則是 netid.netid.255.255。廣播所用的MAC位址FF-FF-FF-FF-FF-FF。網絡内所有的主機都會收到這個廣播資料,網卡隻要把 MAC位址為FF-FF-FF-FF-FF-FF的資料交給核心就可以了。一般說來ARP,或者路由協定RIP應該是以廣播的形式播發的。

1.3.多點傳播(multicast)

可以說廣播是多點傳播的特例,多點傳播就是給一組特定的主機(多點傳播組)發送資料,這樣,資料的播發範圍會小一些(實際上播發的範圍一點也沒有變小),多點傳播的MAC位址是最高位元組的低位為一,例 如01-00-00-00-00-00。多點傳播組的位址是D類IP,規定是224.0.0.0-239.255.255.255。

雖然多點傳播比較特殊,但是究其原理,多點傳播的資料還是要通過資料鍊路層進行MAC位址綁定然後進行發送。是以一個以太網卡在綁定了一個多點傳播IP位址之後,必 定還要綁定一個多點傳播的MAC位址,才能使得其可以像單點傳播那樣工作。這個多點傳播的IP和多點傳播MAC位址有一個對應的算法,在書的p133到p134之間。可以看到 這個對應不是一一對應的,主機還是要對多點傳播資料進行過濾。

個人的看法:廣播和多點傳播的性質是一樣的,路由器會把資料放到區域網路裡面,然後網卡對這些資料進行過濾,隻拿到自己打算要的資料,比如自己感興趣的多 播資料,自己感興趣的多點傳播資料。當一個主機運作了一個處理某一個多點傳播IP的程序的時候,這個程序會給網卡綁定一個虛拟的多點傳播mac位址,并做出來一個多點傳播 ip。這樣,網卡就會讓帶有這個多點傳播mac位址的資料進來,進而實作通信,而那些沒有監聽這些資料的主機就會把這些資料過濾掉,換句話說,多點傳播,是讓主機 的核心輕松了,而網卡,對不起,您就累點吧。

一些文章也印證了這種想法,最明顯的就是區域網路監聽的原理、實作與防範

2.一些驗證性實驗

這些實驗并不是很複雜,我們隻是要ping一下一般的ip和一個廣播位址。首先我ping一下自己所在的子網的某一台主機:

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time=1ms TTL=255

可以看到,機器傳回的是一台主機的回應結果,進而推測,如果我ping一個廣播位址呢?結果如下

Reply from 192.168.11.9: bytes=32 time=1ms TTL=255

Reply from 192.168.11.174: bytes=32 time<1ms TTL=64

Reply from 192.168.11.174: bytes=32 time<1ms TTL=64

Reply from 192.168.11.174: bytes=32 time<1ms TTL=64

Reply from 192.168.11.218: bytes=32 time<1ms TTL=64

Reply from 192.168.11.174: bytes=32 time<1ms TTL=64

可以看到,ping傳回了一些随機的ip的結果,這些ip都是與主機在同一子網内的ip。我們可以看到,廣播實際上是給處于子網内的所有ip發信。

再來一個多點傳播的例子,但是要實作這個多點傳播并不容易,因為我不知道網絡内有多少個多點傳播組,就隻好利用幾個特殊的多點傳播位址來驗證了。

對于多點傳播位址,有幾個特殊的多點傳播位址被占用,他們是

  1. 224.0.0.1--該子網内所有的系統組。
  2. 224.0.0.2--該子網内所有的路由器。
  3. 224.0.1.1--網絡實作協定NTP專用IP。
  4. 224.0.0.9--RIPv2專用IP

是以隻要ping這幾個IP,就應該能得到一些結果,比如說我ping 224.0.0.2。

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

Reply from 192.168.11.1: bytes=32 time<1ms TTL=255

我們可以看到,這回ping隻傳回了一個ip的回應。而這個就是我的網關的位址,這也驗證了224.0.0.2是所有路由器的多點傳播(多點傳播)位址

3.IGMP協定

IGMP的作用在于,讓其他所有需要知道自己處于哪個多點傳播組的主機和路由器知道自己的狀态。一般多點傳播路由器根本不需要知道某一個多點傳播組裡面有多少個主機,而隻要知道自己的子網内還有沒有處于某個多點傳播組的主機就可以了。隻要某一個多點傳播組還有一台主機,多點傳播路由器就會把資料傳輸出去,這樣,接受方就會通過網卡過濾功能來得到自己想要的資料。為了知道多點傳播組的資訊,多點傳播路由器需要定時的發送IGMP查詢,IGMP的格式可以看書,各個多點傳播組裡面的主機要根據查詢來回複自己的狀态。路由器來決定有幾個多點傳播組,自己要對某一個多點傳播組發送什麼樣的資料。

這種查詢回應資料報的TTL一般是1,而且就算是出錯也不産生ICMP差錯(沒必要)。

繼續閱讀