多播

多播

1988年Steve Deering 首次在其博士論文中提出IP多播的概念。多播是IPv6數據包的3種基本目的地址類型之一,多播是一點對多點的通信,IPv6沒有採用IPv4中的組播術語,而是將廣播看成是多播的一個特殊例子。多播通信要求多播源節點和目的節點之間的所有路由器必須提供對Internet組管理協定(IGMP)、多播路由協定(如PIM、DVMRP等)的支持。多播路由器還會周期性地發出“主機成員查詢”的IGMP訊息,向子網查詢多播主機,若發現某個多播組已沒有任何成員,則停止轉發該多播組的數據。

歷史

1988年Steve Deering 首次在其博士論文中提出IP多播的概念。1992年3月IETF在網際網路範圍首次試驗IETF會議聲音的多播,當時有20多個網點可以同時聽到會議的聲音。

網路通信中的多播

多播是IPv6數據包的3種基本目的地址類型之一,多播是一點對多點的通信,IPv6沒有採用IPv4中的組播術語,而是將廣播看成是多播的一個特殊例子.

IP多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)傳送單一數據包到多台主機(一次的,同時的)的TCP/IP網路技術。多播作為一點對多點的通信,是節省網路頻寬的有效方法之一。在網路音頻/視頻廣播的套用中,當需要將一個節點的信號傳送到多個節點時,無論是採用重複點對點通信方式,還是採用廣播方式,都會嚴重浪費網路頻寬,只有多播才是最好的選擇。多播能使一個或多個多播源只把數據包傳送給特定的多播組,而只有加入該多播組的主機才能接收到數據包。目前,IP多播技術被廣泛套用在網路音頻/視頻廣播、AOD/VOD、網路視頻會議、多媒體遠程教育、“push”技術(如股票行情等)和虛擬現實遊戲等方面。

有些套用會有這樣的要求:一些分布在各處的進程需要以組的方式協同工作,組中的進程通常要給其他所有的成員傳送訊息。即有這樣的一種方法能夠給一些明確定義的組傳送訊息,這些組的成員數量雖然很多,但是與整個網路規模相比卻很小。給這樣一個組傳送訊息稱為多點點播送,簡稱多播。

一、IP多播技術簡介

1.IP多播地址和多播組

IP多播通信必須依賴於IP多播地址,在IPv4中它是一個D類IP位址,範圍從224.0.0.0到239.255.255.255,並被劃分為局部連結多播地址、預留多播地址和管理許可權多播地址三類。其中,局部連結多播地址範圍在224.0.0.0~224.0.0.255,這是為路由協定和其它用途保留的地址,路由器並不轉發屬於此範圍的IP包;預留多播地址為224.0.1.0~238.255.255.255,可用於全球範圍(如Internet)或網路協定;管理許可權多播地址為239.0.0.0~239.255.255.255,可供組織內部使用,類似於私有IP位址,不能用於Internet,可限制多播範圍。

使用同一個IP多播地址接收多播數據包的所有主機構成了一個主機組,也稱為多播組。一個多播組的成員是隨時變動的,一台主機可以隨時加入或離開多播組,多播組成員的數目和所在的地理位置也不受限制,一台主機也可以屬於幾個多播組。此外,不屬於某一個多播組的主機也可以向該多播組傳送數據包。

2.IP多播技術的硬體支持

要實現IP多播通信,要求介於多播源和接收者之間的路由器、集線器、交換機以及主機均需支持IP多播。目前,IP多播技術已得到硬體、軟體廠商的廣泛支持。

(1)主機

支持IP多播通信的平台包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4和Windows 2000等,運行這些作業系統的主機都可以進行IP多播通信。此外,新生產的網卡也幾乎都提供了對IP多播的支持。

(2)集線器和交換機

目前大多數集線器、交換機只是簡單地把多播數據當成廣播來傳送接收,但一些中、高檔交換機提供了對IP多播的支持。例如,在3COM SuperStack 3 Swith 3300交換機上可啟用802.1p或IGMP多播過濾功能,只為已偵測到IGMP數據包的連線埠轉發多播數據包。

(3)路由器

多播通信要求多播源節點和目的節點之間的所有路由器必須提供對Internet組管理協定(IGMP)、多播路由協定(如PIM、DVMRP等)的支持。

當一台主機欲加入某個多播組時,會發出“主機成員報告”的IGMP訊息通知多播路由器。當多播路由器接收到發給那個多播組的數據時,便會將其轉發給所有的多播主機。多播路由器還會周期性地發出“主機成員查詢”的IGMP訊息,向子網查詢多播主機,若發現某個多播組已沒有任何成員,則停止轉發該多播組的數據。此外,當支持IGMP v2的主機(如Windows 98/2000計算機)退出某個多播組時,還會向路由器傳送一條“離開組”的IGMP訊息,以通知路由器停止轉發該多播組的數據。但只有當子網上所有主機都退出某個多播組時,路由器才會停止向該子網轉發該多播組的數據。

使用多播路由協定,路由器可建立起從多播源節點到所有目的節點的多播路由表,從而實現在子網間轉發多播數據包。例如,PIM(協定獨立多播)就是一種多播路由協定,它有兩種類型:稀疏模式(sparse-mode)和密集模式(dense-mode)。以Cisco 2621路由器為例,啟用IP多播轉發功能的基本設定如下:

c2621(config)# ip multicast-routing 啟動IP多播,使路由器成為一個多播路由器

c2621(config)# int f0/0 配置快速乙太網連線埠0

c2621(config-if)# ip pim dense-mode(或sparse-mode)啟動PIM,同時激活IGMP協定

c2621(config-if)# int f0/1 配置快速乙太網連線埠1

c2621(config-if)# ip pim dense-mode(或sparse-mode)

二、IP多播套用的編程方法

在實際套用中,編程人員通常需要自己編制底層網路應用程式來實現網上的底層通信,如具體實現IP多播通信的功能。編制底層網路應用程式通常要藉助於網路數據通信編程接口,而在不同的作業系統中所提供的網路編程接口是有所不同的,如在Microsoft Windows環境下的網路編程接口就是Windows套接字(Windows Socket,簡稱Winsock)。

Winsock提供了包括TCP/IP、IPX等多種通信協定下的編程接口。不同的Windows版本支持不同的Winsock版本,其中Windows 95等早期版本本身只支持Winsock1.1(16位)下的編程(可以通過安裝相關的軟體包使其支持Winsock2.0),而Windows98、Windows NT4.0、Windows 2000則直接支持Winsock2.0(32位)。Winsock2.0是Winsock1.1的擴展,除兼容Winsock1.1 API外,還定義了一套可支持IP多播的與協定無關的API。

使用Winsock 2.0實現IP多播的一般步驟如下:

1.初始化Winsock資源

在使用Winsock之前,必須調用WSAStartup()函式初始化Windows Sockets DLL。它允許應用程式或DLL指定Windows Sockets API要求的版本。

2.創建套接字

調用WSASocket()函式可以創建一個使用UDP協定的套接字,它是加入多播組的初始化套接字,並且以後數據的傳送和接收都在該套接字上進行。針對IP多播通信,可將參數dwFlags設定為WSA_FLAG_MULTIPOINT_C_LEAF、WSA_FLAG_MULTIPOINT_D_LEAF和WSA_FLAG_OVERLAPPED的位和,指明IP多播通信在控制層面和數據層面都是“無根的”,只存在葉節點,它們可以任意加入一個多播組,而且從一個葉節點傳送的數據會傳送到每一個葉節點(包括它自己);創建的套接字具有重疊屬性。

3.設定套接字的選項

調用setsockopt()函式為套接字設定SO_REUSEADDR選項,以允許套接字綁紮到一個已在使用的地址上。

4.綁定套接字

調用bind()函式綁定套接字,從而將創建好的套接字與本地地址和本地連線埠聯繫起來。對於多播通信來說,傳送和接收數據通常採用同一個連線埠。

5.設定多播套接字的模式

WSAIoctl()函式的命令碼SIO_MULTICAST_LOOP用來允許或禁止多播通信時傳送出去的通信流量是否也能夠在同一個套接字上被接收(即多播返回)。值得注意的是,在Windows 95/98/NT 4中,默認是允許多播返回,但不能設定禁止,否則會出錯;只有在Windows 2000以上版本中,才能設定允許/禁止多播返回。

WSAIoctl()函式的命令碼SIO_MULTICAST_SCOPE用來設定多播傳播的範圍,即生存時間TTL。每當多播路由器轉發多播數據包時,數據包中的TTL值都會被減1,若數據包的TTL減少到0,則路由器將拋棄該數據包。TTL的值是多少,多播數據便最多能經過多少個多播路由器。例如,TTL值為0,則多播只能在本地主機的多個套接字間傳播,而不能傳播到“網線”上;TTL值為1(默認值),則多播數據遇到第一個路由器,便會被它“無情”地丟棄,不允許傳出本地網路之外,即只有同一個網路內的多播組成員才能收到多播數據。

c#中的多播

在c#中一般的代理實例(指一個代理僅可以調用一個方法)被默認為Delegate類的對象,所以通常使用delegate關鍵字來定義代理,利用new運算符來創建代理實例,然後使用Delegate類的方法和屬性管理代理實例。

而MulticastDelegate類是用來支持多重代理的,其調用列表中可以擁有多個方法的代理。

多重代理是指將一組代理組成一個集合,由MuticastDelegate類的一個對象來管理這個代理集合,利用這個代理集合執行多個方法,這個功能叫多播。

相關搜尋

熱門詞條

聯絡我們