UDP 組播 廣播

來源:互聯網
上載者:User

最近在寫一段分布式即時聊天的程式,為了實現內網使用者正常通訊,考慮使用組播的方式實現資料“廣播”

 

根據查詢的資料來看,UDP廣播只能在內網(同一網段)有效,而組播可以較好實現跨網段群發資料。

 

 

  • 簡介

      
IP網路傳輸方式共分為單播,組播(多播),廣播三種。平時我們最常用的一對一的網路傳輸方式就是屬於單播;而組播是一對多的傳輸方式,其中有個組播組的
概念,發送端將資料向一個組內發送,網路中的路由器通過底層的IGMP協議自動將資料發送到所有監聽這個組的終端。至於廣播則和組播有一些相似,
區別是路由器向子網內的每一個終端都投遞一份資料包,不論這些終端是否樂於接收該資料包。

      
相對於極度消耗網路頻寬的廣播來說(廣播只能在內網廣播),UDP組播有了很大的最佳化,只有終端加入到了一個廣播組,UDP組播的資料才能被他接收到。
UDP組播是採用的無串連,資料報的串連方式,所以是不可靠的。也就是資料能不能到達接受端和資料到達的順序都是不能保證的。但是由於UDP不用保證資料
的可靠性,所有資料的傳送速度是很快的。

  • IP組播地址

        IP組播通訊需要一個特殊的組播地址,IP組播地址是一組D類IP地址,範圍從224.0.0.0 到
239.255.255.255。其中還有很多地址是為特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因為他們大多是
為了特殊的目的保持的(比如IGMP協議)

  • IGMP協議

       
IGMP是IP組播的基礎。在IP協議出現以後為了加入對組播的支援,IGMP產生了。IGMP所做的實際上就是告訴路由器,在這個路由器所在的子網內有
人對發送到某一個組播組的資料感興趣,這樣當這個組播組的資料到達後面,路由器就不會拋棄它,而是把他轉送給所有感興趣的客戶。假如不同子網內的A和B要
進行組播通訊,那麼位於AB之間的所有路由器必須都要支援IGMP協議,否則AB之間不能進行通訊。

  • UDP組播的基本步驟
  1. 建立socket
  2. socket和連接埠綁定
  3. 加入一個組播組
  4. 通過sendto / recvfrom進行資料的收發
  5. 關閉socket
  • Send樣本

            IPAddress ip = IPAddress.Parse("224.1.2.3");
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 1);
            IPEndPoint ipep = new IPEndPoint(ip, 5000);
            ......
            s.SendTo(buff, buff.Length, SocketFlags.None, ipep);
            ......
            s.Close();

  • Recv樣本

            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000);
            s.Bind(ipep);
            s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
                new MulticastOption(IPAddress.Parse("224.1.2.3"), IPAddress.Any));
            ......
            s.Receive(b, 4, SocketFlags.None);
            ......
            s.Close();

  • Example: UDPMulticast.7z

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.