IP多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)發送單一數據包到多台主機(一次的,同時的)的TCP/IP網絡技術。
多播作為一點對多點的通信,是節省網絡帶寬的有效方法之一。
在網絡音頻/視頻廣播的應用中,當需要將一個節點的信號傳送到多個節點時,無論是采用重復點對點通信方式,還是采用廣播方式,都會嚴重浪費網絡帶寬,只有多播才是最好的選擇。 多播能使一個或多個多播源只把數據包發送給特定的多播組,而只有加入該多播組的主機才能接收到數據包。
目前,IP多播技術被廣泛應用在網絡音頻/視頻廣播、AOD/VOD、網絡視頻會議、多媒體遠程教育、“push”技術(如股票行情等)和虛擬現實游戲等方面。
IP多播地址采用D類IP地址, 地址范圍是 224.0.0.0 到 239.255.255.255.
保留IP多播地址的一些例子:
224.0.0.1 - 該子網上的所有主機。
224.0.0.2 - 該子網上的所有路由器。
224.0.0.5 - 開放最短路徑優先(Open Shortest Path First,OSPF)算法第2版,設計用於到達某個網絡上的所有OSPF路由器。
224.0.0.6 - 開放最短路徑優先算法第2版,設計用於到達某個網絡上的所有OSPF指定的路由器。
224.0.0.9 - 路由信息協議(Routing Information Protocol,RIP)第2版。
224.0.1.1 - 網絡時間協議(Network Time Protocol)。
組管理協議(IGMP)
1. 先看 接收端
主機在接收IP多播數據之前, 必須成為IP多播組的成員
代碼using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace _5._3_IP多播
{
class Program
{
static void Main(string[] args)
{
//1 創建套節字
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//2 綁定到 4567 端口
IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 4567);
EndPoint ep = (EndPoint)ipe;
s.Bind(ep);
//3 加入多播組 234.5.6.7
MulticastOption optionValue = new MulticastOption(IPAddress.Parse("234.5.6.7"));
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, optionValue);
//4 接收多播組數據
Console.WriteLine("開始接收多播組 234.5.6.7 上的數據...");
byte[] buffer = new byte[1024];
while (true)
{
int nRet = s.ReceiveFrom(buffer, ref ep);
if (nRet > 0)
{
string data = Encoding.Unicode.GetString(buffer, 0, nRet);
Console.WriteLine(data);
}
}
}
}
}
2. 發送端
要向組發送數據, 沒必要非加入那個組。
代碼