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

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

1.1.單播(unicast)

單播是說,對特定的主機進行數據傳送。例如給某一個主機發送IP數據包。這時候,數據鏈路層給出的數據頭裏面是很是具體的目的地址,對於以太網來 說,就是網卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。如今的具備路由功能的主機應該能夠將單播數據定向轉發,而目的主機的網 絡接口則能夠過濾掉和本身MAC地址不一致的數據。 html

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之間。能夠看到 這個對應不是一一對應的,主機仍是要對多播數據進行過濾。 spa

我的的見解:廣播和多播的性質是同樣的,路由器會把數據放到局域網裏面,而後網卡對這些數據進行過濾,只拿到本身打算要的數據,好比本身感興趣的多 播數據,本身感興趣的組播數據。當一個主機運行了一個處理某一個多播IP的進程的時候,這個進程會給網卡綁定一個虛擬的多播mac地址,並作出來一個多播 ip。這樣,網卡就會讓帶有這個多播mac地址的數據進來,從而實現通訊,而那些沒有監聽這些數據的主機就會把這些數據過濾掉,換句話說,多播,是讓主機 的內核輕鬆了,而網卡,對不起,您就累點吧。 .net

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

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發信。 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差錯(不必)。

相關文章
相關標籤/搜索