《TCP/IP詳解 卷一》第9章 廣播和組播

目錄

9.1 引言

9.2 廣播

9.2.1 使用廣播地址

9.2.2 發送廣播數據報

9.3 組播

9.3.1 將組播IP地址轉換為組播MAC地址

9.3.2 例子

9.3.3 發送組播數據報

9.3.4 接收組播數據報

9.3.5 主機地址過濾

9.4 IGMP協議和MLD協議

9.4.1 組成員的IGMP和MLD處理

9.4.2 組播路由器的IGMP和MLD處理

9.4.3 例子

9.4.4 輕量級 IGMPv3 和 MLDv2

9.4.5 IGMP和MLD健壯性

9.4.6 IGMP和MLD計數器和變量

9.4.7 IGMP和MLD Snooping

9.5 與IGMP和MLD相關的攻擊

9.6 總結


多播組成員管理協議

????????IPv4:IGMP:Internet Group Management Protocol,互聯網組管理協議。

????????IPv6:MLD:Multicast Listener Discovery,組播偵聽發現協議。

9.1 引言

IP地址分類:

????????unicast:單播。

????????multicast:多播=組播。

????????broadcast:廣播,IPv6沒有廣播。

????????anycast:任播。

任播:

????????路由器將目的IP是任播地址的數據包發送到多個接收者中最近一個。

????????使用場景:

????????????????服務發現: 如IPv6主機通過發送HTTP的任播報文。來發現局域網可用Web服務器。

????????????????負載均衡:一組相同功能的服務器共享同一個任播地址。客戶端請求路由到最近服務器。

????????????????路由器冗余:多個路由器共享同一個任播地址,實現冗余和容錯性。

IPv6鏈路本地地址:

????????前綴:fe80::,用于局域網內通信。

廣播和組播為應用程序提供兩種服務:

????????交付數據至多個目的地

????????請求/發現服務器。

一般只有UDP才利用廣播和組播。

IPv4組播是可選的。

IPv6組播是強制性,因為鄰居發現ND需使用。

9.2 廣播

9.2.1 使用廣播地址

組播MAC地址:

????????第一個字節的最低位二進制為0代表單播地址,為1代表組播地址。

????????如01:00:00:00:00:00,03:00:00:00:00:00

本地網絡(有限廣播)廣播:255.255.255.255,用于向局域網所有設備發送數據。

子網定向廣播地址:如192.168.1.255:用于向特定子網中所有設備發送通知、服務發現和配置信息等。

ping 廣播IP地址+廣播MAC地址作用:

????????觸發所有接收設備回包,獲得所有設備的MAC地址。無需源主機單獨向每個設備發送ARP。

????????但是某些操作系統可能禁止ping廣播IP地址。

組播地址只能作為目的IP,不能作為源IP。

9.2.2 發送廣播數據報

socket選項:

????????SO_BROADCAST:設置套接字允許發送廣播數據包。

ping -b會設置SO_BROADCAST

9.3 組播

即多播,multicast。

1. 當主機希望加入一個多播組時,它向路由器發送IGMP Membership Report報文,其中包含感興趣的組播地址,并可能包含可選的源列表。用于指定從哪些源接收組播數據。

2. 路由器收到IGMP報文后,更新其多播組成員表,并根據多播組成員表轉發組播數據到感興趣的主機。

多播組成員表和可選源列表都會定期更新或超時刪除。

IGMP報文中的源列表分為:

????????特定源組播(SSM):明確接收或不接收特定發送方的組播流量。

????????任源組播(ASM):不考慮發送方身份。

9.3.1 將組播IP地址轉換為組播MAC地址

組播數據應使用組播MAC地址作為目的MAC。

組播MAC地址結構:

????????前24位: 前24位固定為01-00-5E。

????????后23位: 等于IPv4組播IP地址的低23位。

IPv4組播的以太網地址范圍:01:00:5E:00:00:00到01:00:5E:7F-FF-FF

組播IP地址轉換為組播MAC地址:

IPv4組播地址范圍:224.0.0.0到239.255.255.255,D類地址。

根據上圖所示轉換方法:

????????組播地址 224.128.64.32(十六進制為 E0.80.40.20 )和 224.0.64.32(十六進制為 E0.00.40.20 )都被映射到01:00:5E:00:40:20

所以發往組播224.128.64.32的報文應使用源MAC 01:00:5E:80:40:20來封裝。

IPv6組播IP地址轉換為組播MAC:

????????MAC前16位: 前綴固定是33-33

????????MAC后32位: IPv6組播地址的最后32位。

????????如組播地址ff02::1:2。轉換為組播MAC地址:33-33-00-01-00-02。

9.3.2 例子

mDNS:組播DNS。

????????一般工作在局域網內部。

????????作用:

????????????????共享DNS響應:多個主機共享DNS響應,減輕DNS服務器負擔,避免太多主機DNS查詢。

????????????????設備互相發現:新設備發送mDNS查詢來通告自己的存在。

????????????????服務發現:通過mDNS查詢來尋找局域網特定服務(打印機)。

224.0.0.251:mDNS組播組IP。

使用ICMP報文回復了ping 224.0.0.251的主機,表明加入了mDNS組。

9.3.3 發送組播數據報

多網口的主機須決定使用哪個IP地址和接口。

9.3.4 接收組播數據報

組播組的成員資格是動態的,它隨進程加入或離開組而改變。

查看組播組成員方法:

????????ip maddr show

????????netstat -gn

# ip maddr show

1: ????????lo ????????????????接口索引號和接口名稱。

????????inet 224.0.0.1 ????????該接口加入的IPv4組播地址。

????????inet6 ff02::1 ????????????????該接口加入的IPv6組播地址

????????inet6 ff01::1

加入組播組方法:

????????ip maddr add 224.0.0.1 dev eth0 eth0接口加入224.0.0.1組

????????ip maddr add ff02::1 dev eth0

9.3.5 主機地址過濾

mreq.imr_multiaddr.s_addr = inet_addr("組播組地址");

mreq.imr_interface.s_addr = htonl(INADDR_ANY);

加入組播組:

????????setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) ;

離開組播組:

????????setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));

9.4 IGMP協議和MLD協議

組播成員管理協議:

????????IGMP:Internet Group Management Protocol,互聯網組管理協議,IPv4使用。

????????MLD:Multicast Listener Discovery,組播偵聽發現協議,IPv6使用。

MLD和IGMP功能幾乎相同,都用于管理組播組成員。

IGMP/MLD管理方法:

????????主機向路由器發送組成員報告報文,路由器知道主機感興趣組播組后,以便知道組播數據報轉發到對應接口。

SSM,即源特定多播模式:

????????接收方只能接收來自特定源的多播流量。

????????目前廣泛使用IGMPv3和MLDv2的支持SSM。

????????當主機想要接收特定源的多播流時,會發送IGMPv3/MLDv2報文,其中包含指定源地址和多播組地址。

ASM:即任意源多播模式。

????????接收方可以接收來自任意源的多播流量。

如上圖,組成員管理的兩種方式:

????????路由器定期IGMP/MLD查詢。

????????主機主動IGMP/MLD報告。

IGMPv3報告發送到224.0.0.22,即IGMPv3組播路由器地址。

MLDv2報告發送到ff02::16,即MLDv2組播路由器地址。

和ICMP類似,IGMP報文也封裝在IPv4。

IGMP報文的TTL固定為1,所以報文僅限于本地子網。

報文格式:

組播路由器也和廣域組播協議(PIM-SM,BIDIR-PIM)交互,將流量轉發給感興趣主機,或禁止流量流向不感興趣主機。

廣域組播協議:

????????在廣域網(WAN)中實現組播。

????????如:PIM,BIDIR-PIM。

PIM(Protocol Independent Multicast):即協議無關組播協議。

兩種模式:

????????PIM-DM(Dense Mode):適用于組播組成員密集的網絡

????????PIM-SM(Sparse Mode):適用于組播組成員分布稀疏的網絡。

PIM使用場景:

????????大型企業內部跨子網或分支機構的組播通信。如視頻會議、流媒體。

????????電信運營商廣域網中組播通信,如電視直播、廣播和IPTV等。

9.4.1 組成員的IGMP和MLD處理

作用:允許主機指明自己有興趣的組,還可以指定允許/拒絕特定源發送的流量。

方法:向同子網的組播路由器發送報告。

IGMP報告報文如下:

類型字段:

????????指示報文類型,可能的值有:

????????????????0x11: Membership Query(成員查詢)

????????????????????????路由器發送成員查詢消息

????????????????0x12: Membership Report(成員報告)

????????????????????????主機發送成員報告消息,表示主機加入多播組。

????????????????0x13: Leave Group(離開組)

????????????????????????主機發送,表示主機離開組播組,路由器不在轉發該組播組流量給該主機。

????????????????0x22: IGMPv3 Membership Report(IGMPv3 成員報告)

????????????????????????IGMPv3的成員報告,用于支持源特定多播(SSM)和其他高級功能。

組記錄:

????????其中每個組記錄格式如下:

上圖字段解釋:

????????記錄類型:

????????????????INCLUDE:主機對指定的源地址感興趣。

????????????????EXCLUDE:主機對指定的源地址不感興趣。

????????IPv4組播地址:

????????????????加入或離開的組播組。

????????源地址:主機感興趣、不感興趣的源地址。

9.4.2 組播路由器的IGMP和MLD處理

組播路由器的工作內容:

????????發送組成員查詢。

????????接收組成員報告,維護組播組成員。

????????成員刷新與老化。

組播路由器有三種查詢報文:

????????通用查詢:查詢所有組播組。

????????特定組查詢:查詢特定組播組的成員。

????????特定組和源查詢:用于組播路由器之間查詢與響應。

通用查詢報文目的IP:

????????IPv4 IGMP中為224.0.0.1,代表所有組播節點。

????????IPv6 MLD中為ff02::1,代表鏈路范圍內所有組播節點。

特定組查詢報文的目的IP:

????????為查詢的該特定組的組播IP。

9.4.3 例子

上圖顯示ICMPv6協議報文細節,其實就是MLD協議,MLD屬于ICMPv6。

從上文可知,該報文是IPv6 MLD查詢報文

????????組播目的IP地址:組播地址ff02::1 (表示所有組播節點)

????????組播目的MAC地址:33:33:00:00:00:01 (根據組播IP轉換而來,固定前綴為33:33)

主機發送的IGMP報文TTL為1,不會通過路由器轉發。

很多應用協議都通過發送報文到組播地址,或來查詢服務或散播服務,實現局域網設備和服務發現。如:

????????mDNS

????????UPnP:用于智能家居設備發現。

????????發現局域網是否有打印機。

9.4.4 輕量級 IGMPv3 和 MLDv2

9.4.5 IGMP和MLD健壯性

同一鏈路可運行多個組播路由器,故障備份,最小IP地址路由器被選為查詢器。

查詢器選舉(querier election)

????????比較源IP地址,IP小的路由器為查詢器,非查詢器進入備用模式。

查詢組播路由器需要定期查詢組播成員。

9.4.6 IGMP和MLD計數器和變量

IGMP和MLD需處理組播路由器的失效、協議報文丟失,早期協議版本的兼容性。

????????大多基于狀態改變和計時器來啟用這些功能。

9.4.7 IGMP和MLD Snooping

IGMP ( MLD) snooping:

????????2層交換機查看在第3層的信息,了解它對特定的組播流量流動是否有興趣。

如果沒有IGMP snooping,交換機會廣播鏈路層流量。

而支持IGMP(MLD)snooping的交換機通過查看主機與路由器通信的IGMP信息,記錄哪些端口需要哪些特定的組播流動,從而減少流量轉發。

9.5 與IGMP和MLD相關的攻擊

IGMP Flooding 攻擊:發送大量IGMP或MLD報文,引起帶寬耗盡。

IGMP欺騙:攻擊者偽造IGMP報文,導致路由器維護錯誤組播組成員信息,最終路由器錯誤轉發。

偽裝成組播路由器,在IGMP查詢報文中使用非常小的"最大響應時間",誘導主機頻繁發送組播成員報告,消耗CPU。

9.6 總結

兩種IPv4廣播地址:

????????受限(255.255.255.255)

????????定向(如192.168.1.255)

IPv4組播MAC:前綴01:00:5e+組播IP地址的低23位。

IPv6組播MAC:16位前綴33:33+組播IP地址的低序32。

IGMP和MLD中魯棒性變量:

????????一個時間值。

????????表示如果路由器在該時間內沒有再收到成員報文,路由器將成員從組播組成員列表中移除。

如果沒有魯棒性變量,當網絡抖動或不穩定性時。不好影響:

????????路由器過早認定主機已離開組播組,過早將主機從成員列表中刪除,導致主機無法接收到組播流量。

????????過多組播成員狀態變化和更新導致網絡擁塞或不必要的流量。特別是大型網絡中。

魯棒性變量使用場景:不穩定網絡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712008.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可用于智能客服的完全開源免費商用的知識庫項目

介紹 FastWiki項目是一個高性能、基于最新技術棧的知識庫系統,專為大規模信息檢索和智能搜索設計。利用微軟Semantic Kernel進行深度學習和自然語言處理,結合.NET 8和MasaBlazor前端框架,后臺采用.NET 8MasaFrameworkSemanticKernel&#xff…

嵌入式Linux學習DAY26

管道的作用:進程間的通信 無名管道: 只能在父子進程中進行通信 pipe int pipe(int pipefd[2]); 功能: 創建一個無名管道 參數: pipefd[0]:讀管道文件描述符 pipefd[1]:寫管道文件描述符 …

【InternLM 實戰營筆記】基于 InternLM 和 LangChain 搭建MindSpore知識庫

InternLM 模型部署 準備環境 拷貝環境 /root/share/install_conda_env_internlm_base.sh InternLM激活環境 conda activate InternLM安裝依賴 # 升級pip python -m pip install --upgrade pippip install modelscope1.9.5 pip install transformers4.35.2 pip install str…

【大廠AI課學習筆記NO.53】2.3深度學習開發任務實例(6)數據采集

這個系列寫了53期了,很多朋友收藏,看來還是覺得有用。 后續我會把相關的內容,再次整理,做成一個人工智能專輯。 今天學習到了數據采集的環節。 這里有個問題,數據準備包括什么,還記得嗎? 數…

ZStack Cube超融合入選IDC《中國超融合基礎架構市場評估》報告

近日,IDC發布了《中國超融合基礎架構市場評估,2023》。IDC針對中國超融合基礎架構市場的發展現狀展開了調研,明確了最終用戶構建融合型云平臺的痛點和難點,闡述了市場中各技術服務提供商的服務方案和優勢,并對未來中國…

vue3+ts+vite數據大屏自適應總結(兩種方法)

總結一下我常用的數據大屏自適應方法 目錄 1、通過css縮放方案: 利用transform:scale 進行適配2、采用rem布局, 根據屏幕分辨率大小不同,調整根元素html的font-size, 從而達到每個元素寬高自動變化,適配不…

接口測試實戰--mock測試、日志模塊

一、mock測試 在前后端分離項目中,當后端工程師還沒有完成接口開發的時候,前端開發工程師利用Mock技術,自己用mock技術先調用一個虛擬的接口,模擬接口返回的數據,來完成前端頁面的開發。 接口測試和前端開發有一個共同點,就是都需要用到后端工程師提供的接口。所以,當…

Redis速學

一、介紹Redis 基本概念和特點 Redis是一個開源的內存數據庫,它主要用于數據緩存和持久化。其數據存儲在內存中,這使得它具有非常快的讀寫速度。Redis支持多種數據結構,包括字符串、哈希、列表、集合和有序集合,這使得它非常靈活…

書生·浦語大模型圖文對話Demo搭建

前言 本節我們先來搭建幾個Demo來感受一下書生浦語大模型 InternLM-Chat-7B 智能對話 Demo 我們將使用 InternStudio 中的 A100(1/4) 機器和 InternLM-Chat-7B 模型部署一個智能對話 Demo 環境準備 在 InternStudio 平臺中選擇 A100(1/4) 的配置,如下圖所示鏡像…

微店商品詳情 API 支持哪些商品信息的獲取?

微店(Weidian)并沒有一個公開的、官方維護的API文檔來供開發者使用。這意味著,如果你想要獲取微店商品詳情或其他相關信息,你通常需要通過微店官方提供的方式來實現,例如使用其開放平臺、官方SDK或聯系微店的技術支持獲…

Spring常見面試題知識點總結(三)

7. Spring MVC: MVC架構的概念。 MVC(Model-View-Controller)是一種軟件設計模式,旨在將應用程序分為三個主要組成部分,以實現更好的代碼組織、可維護性和可擴展性。每個組件有著不同的職責,相互之間解耦…

11.Prometheus常見PromeQL表達式

平凡也就兩個字: 懶和惰; 成功也就兩個字: 苦和勤; 優秀也就兩個字: 你和我。 跟著我從0學習JAVA、spring全家桶和linux運維等知識,帶你從懵懂少年走向人生巔峰,迎娶白富美! 關注微信公眾號【 IT特靠譜 】,每天都會分享技術心得~ …

YOLO算法

YOLO介紹 YOLO,全稱為You Only Look Once: Unified, Real-Time Object Detection,是一種實時目標檢測算法。目標檢測是計算機視覺領域的一個重要任務,它不僅需要識別圖像中的物體類別,還需要確定它們的位置。與分類任務只關注對…

【矩陣】【方向】【素數】3044 出現頻率最高的素數

作者推薦 動態規劃的時間復雜度優化 本文涉及知識點 素數 矩陣 方向 LeetCode 3044 出現頻率最高的素數 給你一個大小為 m x n 、下標從 0 開始的二維矩陣 mat 。在每個單元格,你可以按以下方式生成數字: 最多有 8 條路徑可以選擇:東&am…

安裝 Ubuntu 22.04.3 和 docker

文章目錄 一、安裝 Ubuntu 22.04.31. 簡介2. 下載地址3. 系統安裝4. 系統配置 二、安裝 Docker1. 安裝 docker2. 安裝 docker compose3. 配置 docker 一、安裝 Ubuntu 22.04.3 1. 簡介 Ubuntu 22.04.3 是Linux操作系統的一個版本。LTS 版本支持周期到2032年。 系統要求雙核 C…

C++的模板template

一、什么是模板 C中的模板分為類模板和函數模板,并不是一個實際的類或函數,這指的是編譯器不會自動為其生成具體的可執行代碼。只有在具體執行時,編譯器才幫助其實例化。 二、為什么引入模板 拿我們最常見的交換函數來舉例子,如果…

代碼隨想錄 二叉樹第二周

目錄 101.對稱二叉樹 100.相同的樹 572.另一棵樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度 222.完全二叉樹的節點個數 110.平衡二叉樹 257.二叉樹的所有路徑 101.對稱二叉樹 101. 對稱二叉樹 已解答 簡單 相關標簽 相關企業 給你一…

《求生之路2》服務器如何選擇合適的內存和CPU核心數,以避免丟包和延遲高?

根據求生之路2服務器的實際案例分析選擇合適的內存和CPU核心數以避免丟包和延遲高的問題,首先需要考慮游戲的類型和對服務器配置的具體要求。《求生之路2》作為一款多人在線射擊游戲,其服務器和網絡優化對于玩家體驗至關重要。 首先,考慮到游…

Java應用程序注冊成Linux系統服務后,關閉Java應用程序打印系統日志

Java應用程序有自己的日志框架,有指定位置的日志文件,不需要在系統日志里記錄,占用磁盤空間。 1.Linux系統文件目錄 /etc/systemd/system/ 找到要修改的Java應用程序服務配置 比如bis-wz-80.service 2.設置不打印日志 StandardOutputnull S…

centos7 搭建 harbor 私有倉庫

一、下載安裝 1.1、harbor 可以直接從 github 上下載:Releases goharbor/harbor GitHub 這里選擇 v2.10.0 的版本 wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz 1.2、解壓 tar zxvf harbor-offlin…