多播

多播

1988年Steve Deering 首次在其博士論文中提出IP多播的概念。多播是IPv6數據包的3種基本目的地址類型之一,多播是一點對多點的通信,IPv6沒有採用IPv4中的組播術語,而是將廣播看成是多播的一個特殊例子。

基本介紹

  • 中文名:網際協定多播
  • 外文名:IP Multicast
簡介,網路多播,編程方法,

簡介

隨著計算機網路的發展和個人計算機的普及,人們能夠方便的在網路上暢遊,進行網路通信或者獲取自己所需的信息資源。此外,人們也越來越依賴於網路計算。大多數企業都建立了先進的網路,連線各個雇員和他們的計算機、工作站。有時,我們工作中的重要的信息只能通過網路得到,這些信息可能在企業的專用網路上,也可能在網際網路上。
網際網路是個公用的網路,連線全世界的各個大學、公司、非盈利組織、個人和政府機關。隨著現在寬頻的發展,諸如遠程教學、視頻會議、網路遊戲等新興的網際網路套用越來越受歡迎,而且有時變得很必需。這些套用涉及到點對點或者多點對多點的通信,與傳統的單播或者廣播有很大的不同。
1988年,Deering提出了IP多播的概念,從此IP多播技術得到了廣泛的關注。多播介於單播通信和廣播通信之間,它可以將傳送者傳送的數據包傳送給位於分散在不同子網中的一組接收者。
多播的基礎概念是“組”。一個多播組(multicast group)就是一組希望接收特定數據流的接收者。這個組沒有物理或者地理的邊界:組內的主機可以位於網際網路或者專用網路的任何地方。多播組中的每~個節點被稱為多播組成員(multicastgroupmember)。
在多播的諸多套用中,均可實現單播,但是隨著接收者的增多,需要傳送的數據包里線性增長,對於盯個接收者,需要傳送同一個數據包的n份拷貝,這樣通信量就會成倍的增加,也會占用網路的許多頻寬,有時會引起網路堵塞。但是多播通信IP數據包僅傳送一次。路由器會自動的轉發到位於不同網段上的每一個接收者,可以是在網路中傳輸的報文拷貝的數量最小。所以多播是很有必要的。
多播通信模型的一個關鍵的特性是提供了間接標識的多播組,其中傳送方和接收方都不需要知道對方的具體情況。傳送方只需要向一個多播地址傳送分組而接收方只需要告訴網路自己希望接收傳送這個地址的分組。
用戶的數據要從一個終端傳送到另一個終端,首先要確定傳輸路由,不同的通信方式,其確定路由的方式也不同。如今網路的通信方式主要有以下幾種:
  • 單播(unicast:point to point),點到點的通信方式;
  • 多播(multicast:point tO multipoint),點到多點的通信方式;
  • 匯播(concast:multipoint to point),多點到一點的通信方式;
  • 群播(multipoint tO multipoint),多點到多點的通信方式,多播的一種推廣;
  • 廣播(broadcast:point to all point),點到所有節點的通信方式。
一般要求多播服務的業務對頻寬和實時性要求較高,涉及用戶較多,占用的資源也多,因此有必要最佳化多播路由。多播路由算法就是要尋求最優多播樹,理想有效的路由算法將設計一棵僅覆蓋多播組成員的樹,並體現如下特徵:樹隨著組成員變化動態更新;最小化節點需要保存的狀態信息量;避免鏈路和節點的流量集中;根據費用函式最佳化路由。

網路多播

IP多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)傳送單一數據包到多台主機(一次的,同時的)的TCP/IP網路技術。多播作為一點對多點的通信,是節省網路頻寬的有效方法之一。在網路音頻/視頻廣播的套用中,當需要將一個節點的信號傳送到多個節點時,無論是採用重複點對點通信方式,還是採用廣播方式,都會嚴重浪費網路頻寬,只有多播才是最好的選擇。多播能使一個或多個多播源只把數據包傳送給特定的多播組,而只有加入該多播組的主機才能接收到數據包。目前,IP多播技術被廣泛套用在網路音頻/視頻廣播、AOD/VOD、網路視頻會議、多媒體遠程教育、“push”技術(如股票行情等)和虛擬現實遊戲等方面。
有些套用會有這樣的要求:一些分布在各處的進程需要以組的方式協同工作,組中的進程通常要給其他所有的成員傳送訊息。即有這樣的一種方法能夠給一些明確定義的組傳送訊息,這些組的成員數量雖然很多,但是與整個網路規模相比卻很小。給這樣一個組傳送訊息稱為多點點播送,簡稱多播。
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多播通信的功能。編制底層網路應用程式通常要藉助於網路數據通信編程接口,而在不同的作業系統中所提供的網路編程接口是有所不同的,如在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#中一般的代理實例(指一個代理僅可以調用一個方法)被默認為Delegate類的對象,所以通常使用delegate關鍵字來定義代理,利用new運算符來創建代理實例,然後使用Delegate類的方法和屬性管理代理實例。而MulticastDelegate類是用來支持多重代理的,其調用列表中可以擁有多個方法的代理。
多重代理是指將一組代理組成一個集合,由MuticastDelegate類的一個對象來管理這個代理集合,利用這個代理集合執行多個方法,這個功能叫多播。

相關詞條

熱門詞條

聯絡我們