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

2021-12-28 Linux就該這麼學

單播,多播,廣播的介紹單播(unicast)

單播是說,對特定的主機進行數據傳送。例如給某一個主機發送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系統的讀者可以點擊"閱讀原文"按鈕了解這本書,同時這本書也適合專業的運維人員閱讀,作為一本非常有參考價值的工具書!

相關焦點

  • 一文洞悉 OSI和TCP/IP模型,理通所有協議,再也不用似懂非懂了
    TCP/IP 模型 有這五層模型進行分工合作,就可以用tcp/ip協議將計算機連起來通信啦。物理層聲音傳信靠聲波,鴿子傳信靠電磁波,電流傳信靠電波。物理層需要解決利用傳輸介質傳輸比特流的問題。一個網吧人辣麼多,必須要暢快啊,因此交換機是具有 MAC 地址學習功能的,有利於更快找到目標機器。不過交換機是工作在數據鏈路層的。一個城市的人都想加進來,就需要移動聯通電信這樣的運營商到處鋪電纜光纖,建立基站了,才能像我們如今這樣無論身處何處,都能」每晚八點,王者峽谷見「了。
  • TCP/IP學習筆記(9)-DNS域名系統
    DNS協議DNS報文定義了一個既可以查詢也可以響應的報文格式。對各個欄位簡單解釋如下:最前面的16個bit唯一的標示了問題號碼,用於查詢端區別自己的查詢。例如用host命令,host ip就可以得到伺服器的域名,host domainName 就得到IP。稍微知道一點數據結構的人都能意識到,在正向查詢的域裡面做反向查詢,其做法只有遍歷整個數據集合----對於DNS來說,那就是遍歷整個資料庫, 這將帶來巨大的負擔,所以DNS採取了另一種方法,使用另一棵子樹來維護IP-〉域名的對應表。
  • Linux 基礎命令:IP 路由操作
    1、語法ip [選項]  OBJECT  COMMAND [help]OBJECT對象可以是:link,網絡設備;addr,設備的協議地址;route,路由表;rule,策略;neigh,arp緩存;tunnel,ip通道;maddr,多播地址;mroute,多播路由COMMAND是操作命令,不同的對象有不同的命令配置
  • 乙太網接口TCP/IP協議介紹,說的很容易懂了
    每層的所有協議幾乎都有一半數量的支持TCP/IP,例如: 乙太網(Ethernet),令牌環(Token Ring),光纖數據分布接口(FDDI),端對端協議( PPP),X.25,幀中繼(Frame Relay),ATM,Sonet, SDH等。分享一個在騰訊課堂上tcp/ip的訓練營的視頻。主要內容:1. 如何實現單機百萬連接;2.
  • TCP/IP協議
    5.網絡層    負責把一個封包從一個IP位址傳輸到另一個IP位址6.鏈路層    確保兩個臨近設備間數據的傳輸,並隱藏底層實現    幀同步:兩個設備之間傳輸時的協商速率問題7.物理層    封裝和隱藏具體的傳輸手段,並且提供穩定的傳輸接口    比如:電纜、光纖、藍牙等
  • TCP/IP 協議棧及 OSI 參考模型詳解
    在設計OSI 參考模型時,遵循了以下原則:各個層之間有清晰的邊界,實現特定的功能;層次的劃分有利於國際標準協議的制定;層的數目應該足夠多,以避免各個層功能重複。雙絞線線序:568A線序:1-綠白,2-綠,3-橙白,4-藍,5-藍白,6-橙,7-棕白,8-棕568B線序:1-橙白,2-橙,3-綠白,4-藍,5-藍白,6綠,7-棕白,8-棕根據網線兩端連接網絡設備的不同,網線又分為直通線(平行線)和交叉線兩種。
  • Golang net 包學習和實戰
    其中網絡層包含了 ip,arp,icmp 等協議,傳輸層包含了 TCP, UDP 等協議,應用層,比如 SMTP,DNS,HTTP 等協議。在 net 包中,主要涉及網絡層和傳輸層的協議。在了解了包的構成後,我們基於不同的網絡協議分兩類來學習如何調用網絡包提供的方法。
  • Linux ip命令
    一些Linux發行版比如Arch Linux和CentOS/RHEL 7則已經完全拋棄了net-tools,只支持iproute2。iproute2工具用於替代一些常用的net-tools命令,iproute2套件裡提供了許多增強功能的命令,ip命令即是其中之一.
  • TCP/IP基礎知識
    內容TCP/IP協議簇是由OSI七層模型發展而來的,之所以存在OSI互聯參考模型主要有以下幾點好處:1、用於解決不同廠商的設備互聯問題:即兼容性考慮;2、層次化結構獨立性強;可擴展性強;3、統一標準可以方便學習;TCP/IP模型TCP/IP模型與OSI模型的相互關係如下圖所示
  • 圖解TCP/IP協議
    之前有人問我關於計算機的基礎東西,那今天就發三篇文章關於現在用的最多的TCP/IP協議的介紹吧。
  • 圖解TCP-IP協議
    本文通過兩個圖來梳理TCP-IP協議相關知識。TCP通信過程包括三個步驟:建立TCP連接通道,傳輸數據,斷開TCP連接通道。
  • 圖解 TCP/IP 協議
    考慮一下這樣的場景:某一時刻網絡上的延時突然增加,那麼,TCP對這個事做出的應對只有重傳數據,但是,重傳會導致網絡的負擔更重,於是會導致更大的延遲以及更多的丟包,於是,這個情況就會進入惡性循環被不斷地放大。試想一下,如果一個網絡內有成千上萬的TCP連接都這麼行事,那麼馬上就會形成「網絡風暴」,TCP這個協議就會拖垮整個網絡。為此,TCP引入了擁塞控制策略。
  • HSRP協議介紹
    通過在設置了HSRP協議的路由器之間廣播HSRP優先級, HSRP協議選出當前的主動 路由器。 當在預先設定的一段時間內主動路由器不能發送hello消息時, 優先級最高的備用路由器變為主動路由器。路由器之間的包傳輸對網絡上的所有主機來說都是透明的。
  • 【學習筆記】常見的Web安全攻防實用總結
    Whois信息/註冊信息Whois是一個標準的網際網路協議,用來收集網絡註冊信息、註冊域名、IP位址……Whois有很多的線上平臺:愛站、站長之家等同時國內上線的網站和服務都會進行ICP備案,可以通過「beianbeian.com」查詢備案的網站;國家規定備案編號要顯示在頁面上(普遍在頁腳處)c.
  • 12 個 ip 命令範例 | Linux 中國
    ifconfig 命令已經被 ip 命令所替代了。ip 命令跟 ifconfig 命令有些類似,但要強力的多,它有許多新功能。ip 命令完成很多 ifconfig 命令無法完成的任務。本教程將會討論 ip 命令的 12 中最常用法,讓我們開始吧。
  • Linux 中如何使用 IP 命令
    , MULTICAST 表示支持多播UP 網絡接口處於開啟狀態LOWER_UP 表示網絡電纜已插入並且已連上網絡mtu 1500: 最大傳輸的單位1500位元組qdisc pfifo_fast: 數據包排隊state UP: 接口狀態已開啟qlen 1000: 傳輸隊列長度link/ether
  • 淺析MySQL網絡協議(1)--initial handshake
    The largest possible packet that can be transmitted to or from a MySQL 5.7 server or client is 1GB.這些chunk被發送給作業系統,依次被打散組裝成tcp和ip包,通過網絡發送到對端,遵循tcp/ip協議被反解析成chunk,然後由MySQL從1個或若干個chunk中還原成1個完整的通信包。tcp/ip協議已經被封裝成庫函數,高級語言只需要調用API便可實現tcp/ip包的發送和接收,無需關注其底層實現。流程圖如下: