首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

UDP、廣播、多播與 IGMP 協定全面解析:非連線傳輸與群組通訊

     編輯:關於VC++

UDP 用戶資料報協定

簡潔標頭結構 (8 bytes)

 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|     來源埠號      |     目的埠號      |
+--------+--------+--------+--------+
|      UDP 長度      |     UDP 檢驗和     |
+--------+--------+--------+--------+

關鍵特性

  • 無連線、不可靠:不保證送達、不排序、無流量控制
  • 長度欄位:含標頭 + 資料,最小 8 bytes (無資料)
  • 偽標頭檢驗和:12 bytes (來源/目的 IP + 保留 + 協定 17 + UDP 長度) + UDP 標頭 + 資料
  • 檢驗和為 0:表示發送端未計算 (選用)
  • 計算結果為 0:存入 0xFFFF (全 1)

IP 分片與 UDP

  • IP 層負責分片/重組,UDP 不感知
  • DF (Don't Fragment) bit 若置 1 且需分片 → ICMP "Fragmentation Needed"
  • 路徑 MTU 發現:設 DF bit 發送,根據 ICMP 回應調整封包大小

UDP 伺服器設計考量

IP 廣播機制

四種廣播類型

考量點說明
輸入佇列每埠一有限佇列,同時到達請求自動排隊
通配符 IPINADDR_ANY 綁定所有介面
多重綁定同一埠可綁定多個 IP (如乙太網 + 廣播)
遠端 IP 限制可限制只接收特定 IP/埠的封包
類型位址格式範圍路由器轉發
受限廣播255.255.255.255本地網段不轉發
網路廣播netid.255.255.255 (A 類)整個網路視設定而定
子網廣播subnet.255 (需子網遮罩)特定子網通常不轉發
全子網廣播netid.255.255 (需子網遮罩)所有子網已棄用

IP 多播與 IGMP

D 類位址結構

 1110 | 28-bit 多播群組 ID
範圍:224.0.0.0 ~ 239.255.255.255

知名多播位址

位址用途
224.0.0.1所有系統 (子網內)
224.0.0.2所有路由器 (子網內)
224.0.0.9RIPv2
224.0.0.5/6OSPF
224.0.1.1NTP

多播位址 → 乙太網 MAC 映射

  • IANA OUI: 00-00-5E
  • 多播 MAC 範圍:01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF
  • 映射規則:IP 多播位址低 23 bits → MAC 低 23 bits
  • 非唯一性:32 個 IP 多播位址映射到同一 MAC (高 5 bits 捨棄)
  • 驅動程式/ IP 層需過濾不需要的多播幀

IGMP 網際網路群組管理協定

IGMP 訊息格式 (IP 協定號 2)

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  版本(4)  |   類型(4)   |     未用      |      檢驗和       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    群組位址 (D 類 IP)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

訊息類型

  • 類型 1 (0x11):會員查詢 (Membership Query) - 路由器發送
  • 類型 2 (0x12):會員報告 (Membership Report) - 主機回應
  • 類型 3 (0x16):離開群組 (Leave Group) - IGMPv2 新增

運作機制

  1. 加入群組:首個進程加入 → 發送 Report,後續進程不重複發送
  2. 離開群組:不主動發送,下次查詢時不再回應 (IGMPv1/v2)
  3. 定期查詢:路由器定期 (預設 125 秒) 發送 Query (群組位址=0)
  4. 回應抑制:收到他人同群組 Report → 抑制自己的 Report (隨機延遲)
  5. TTL=1:查詢/報告限制在本地子網,路由器不轉發

IGMP 版本演進

版本關鍵特性
IGMPv1 (RFC 1112)基本查詢/報告,無離開機制
IGMPv2 (RFC 2236)新增 Leave Group、查詢者選舉、群組特定查詢
IGMPv3 (RFC 3376)來源特定多播 (SSM)、INCLUDE/EXCLUDE 模式

特殊群組:224.0.0.1 (所有主機群組)

  • 所有多播能力介面自動加入
  • 無需發送 IGMP Report
  • 路由器不轉發 (無論 TTL)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved