單播是說,對特定的主機進行數據傳送。例如給某一個主機發送IP數據包。這時候,數據鏈路層給出的數據頭裡面是非常具體的目的地址,對於乙太網來 說,就是網卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。現在的具有路由功能的主機應該可以將單播數據定向轉發,而目的主機的網 絡接口則可以過濾掉和自己MAC地址不一致的數據。
廣播(broadcast)廣播是主機針對某一個網絡上的所有主機發送數據包。這個網絡可能是網絡,可能是子網,還可能是所有的子網。如果是網絡,例如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應該是以廣播的形式播發的。
多播(multicast)可以說廣播是多播的特例,多播就是給一組特定的主機(多播組)發送數據,這樣,數據的播發範圍會小一些(實際上播發的範圍一點也沒有變小),多播的MAC地址是最高字節的低位為一,例 如01-00-00-00-00-00。多播組的地址是D類IP,規定是224.0.0.0-239.255.255.255。
然多播比較特殊,但是究其原理,多播的數據還是要通過數據鏈路層進行MAC地址綁定然後進行發送。所以一個乙太網卡在綁定了一個多播IP位址之後,必 定還要綁定一個多播的MAC地址,才能使得其可以像單播那樣工作。這個多播的IP和多播MAC地址有一個對應的算法,這個對應不是一一對應的,主機還是要對多播數據進行過濾。
個人的看法:廣播和多播的性質是一樣的,路由器會把數據放到區域網裡面,然後網卡對這些數據進行過濾,只拿到自己打算要的數據,比如自己感興趣的多 播數據,自己感興趣的組播數據。當一個主機運行了一個處理某一個多播IP的進程的時候,這個進程會給網卡綁定一個虛擬的多播mac地址,並做出來一個多播 ip。這樣,網卡就會讓帶有這個多播mac地址的數據進來,從而實現通信,而那些沒有監聽這些數據的主機就會把這些數據過濾掉,換句話說,多播,是讓主機 的內核輕鬆了,而網卡,對不起,您就累點吧。
一些驗證性實驗這些實驗並不是很複雜,我們只是要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發信。
再來一個多播的例子,但是要實現這個多播並不容易,因為我不知道網絡內有多少個多播組,就只好利用幾個特殊的多播地址來驗證了。
對於多播地址,有幾個特殊的多播地址被佔用,他們是
224.0.0.1--該子網內所有的系統組。
224.0.0.2--該子網內所有的路由器。
224.0.1.1--網絡實現協議NTP專用IP。
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是所有路由器的多播(組播)地址。
IGMP協議IGMP的作用在於,讓其他所有需要知道自己處於哪個多播組的主機和路由器知道自己的狀態。一般多播路由器根本不需要知道某一個多播組裡面有多少個主機,而只要知道自己的子網內還有沒有處於某個多播組的主機就可以了。只要某一個多播組還有一臺主機,多播路由器就會把數據傳輸出去,這樣,接受方就會通過網卡過濾功能來得到自己想要的數據。為了知道多播組的信息,多播路由器需要定時的發送IGMP查詢,IGMP的格式可以看書,各個多播組裡面的主機要根據查詢來回復自己的狀態。路由器來決定有幾個多播組,自己要對某一個多播組發送什麼樣的數據。
這種查詢回應數據報的TTL一般是1,而且就算是出錯也不產生ICMP差錯(沒必要)。
讓您學習到的每一節課都有所收穫《Linux就該這麼學》是一本由資深運維專家劉遄老師及國內多名紅帽架構師(RHCA)基於最新RHEL7系統共同編寫的高質量Linux技術自學教程,極其適合用於Linux技術入門教程或講課輔助教材。榮獲雙11、雙12購物狂歡節IT品類書籍銷量冠軍,2017年、2018年國內讀者增速最快的技術書籍,您可以在京東、噹噹、亞馬遜及天貓搜索書名後購買,亦可加劉遄老師微信交流學習(手指按住下圖3秒鐘即可自動掃描)~
劉遄老師QQ:5604215
☀ Linux技術交流群:560843(新群,火熱加群中……)
☀ 官方站點:www.linuxprobe.com
☀ 書籍在線學習(電腦在線閱讀效果更佳):
http://www.linuxprobe.com/chapter-00.html
《Linux就該這麼學》是一本基於最新Linux系統編寫,面向零基礎讀者的技術書籍。從Linux基礎知識講起,然後漸進式地提高內容難度,詳細講解Linux系統中各種服務的工作原理和配置方式,以匹配真實生產環境對運維人員的要求,突顯內容的實用性。想要學習Linux系統的讀者可以點擊"閱讀原文"按鈕了解這本書,同時這本書也適合專業的運維人員閱讀,作為一本非常有參考價值的工具書!