全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1170
推到 Plurk!
推到 Facebook!

多點通訊與多址廣播語義

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-30 01:08:24 IP:61.64.xxx.xxx 未訂閱
附錄B 多點通訊與多址廣播語義 http://www.cic.tsinghua.edu.cn/sys/book2/ B.1 多點通訊與多址廣播引言 考慮到如何在WinSock 2中支援多點通訊(multipoint)與多址廣播(multicast),我們研究了一些現存的和提議的多點通訊/多址廣播方案(包括IP-multicast、ATM點對多點連接、ST-II、T.120和H.320 (MCU))。在一些公共方面,每一種方案都與其他方案有很大的不同。為了對不同的方案有一個一致的討論,首先建立一個分類法來刻畫每一種方案的本質屬性是很有價值的。為簡單起見,在後面我們將使用術語多點通訊來表示多點通訊與多址廣播。 B.2 多點通訊分類法 本附錄中描述的分類法首先區別只關心用來建立多點通訊會話的方法本身的控制平面(control plane)和處理在會話參與者之間傳送資料的資料平面(data plane)。 在控制平面,有兩種截然不同的會話建立類型:rooted(有根)和non-rooted(無根)。在rooted控制中,有一個特殊的參與者c_root(根節點),它和多點通訊會話中的其他成員(葉子節點,叫c_leaf)都不同。c_root必須在整個多點通訊會話期都存在,如果c_root缺席則會話將被中斷。通常情況下,c_root通過與一個或一組c_leaf節點建立連接來初始化多點通訊會話。c_root可以增加多個c_leaf,或者在某些情形下可以由c_leaf稍後加入c_root。Rooted控制平面可以在ATM和ST-II的多點通訊方案中找到。 在non-rooted控制平面中,從屬於一個多點通訊會話的所有成員都是葉子節點,也就是說,沒有象c_root這樣的特殊參與者存在。每一個c_leaf需要將自己加入到一個預先存在的會話,該會話總是可用的(象IP multicast地址)或者是通過一種不在WinSock規範範圍內描述的帶外機制來建立。也可以用另一種方法來看這個問題,即c_root總是存在的,它作為一個參與者隱藏在網路雲團(network cloud)中。由於控制根節點的存在,一個non-rooted控制平面也可以被認為是隱含的有根的。這種隱含有根多點通訊方案的例子是:一個電話會議橋、IP multicast系統、H.320電視會議中的一個多點通訊控制單元(MCU)等。 在資料平面,有兩種類型的資料傳送風格:rooted和non-rooted。在rooted資料平面,存在一個特殊的參與者d_root(根節點)。資料傳送只能在d_root和該多點通訊會話中的其他成員(葉子節點,叫d_leaf)之間發生。通信可以是單向的也可以是雙向的。d_root節點發送的資料將被複製(如果需要)並遞送到每一個d_leaf節點,但從d_leaf節點發送的資料只遞送到d_root節點。在這種有根資料平面中,d_leaf節點之間不允許有通信。這樣的協議例子是ST-II。 在non-rooted資料平面中,所有參與者是平等的,它們發送的資料將被遞送到同一多點通訊會話中的所有參與者。同樣地,每一個d_leaf節點都能夠接收到所有其他d_leaf節點發送的資料,並且在一些情形下,還能夠接收那些不參與此多點通訊會話的其他節點發送的資料。在non-rooted資料平面沒有特殊的d_root節點存在。IP-multicast是無根的數據平面。 注意,象資料單元複製在哪兒發生、是使用共用的單個樹還是使用多個最短路徑樹來做多點通訊發佈這些問題都是協定問題,它們與應用程式用來執行多點通訊通信的介面不相關。因此,這些問題在本附錄和WinSock介面中都不涉及。 表B.1描述了上面講的分類法,並指出了每一種類別相適應的現存的方案。注意不是所有採用non-rooted控制平面的現存方案都使用rooted資料平面。 表B.1 多點通訊分類 rooted 控制平面 non-rooted 控制平面(隱含rooted) rooted 數據平面 ATM,ST-II 沒有已知的例子 non-rooted 數據平面 T.120 IP-multicast,H.320 (MCU) B.3 WinSock 2的多點通訊與多址廣播介面元素 為了使用多點通訊能力而組合到WinSock 2中的機制可以歸納如下: • • WSAPROTOCOL_INFO結構中的三個屬性位元; • • 為WSASocket()函數的參數dwFlags定義的四個標誌; • • 為在一個多點通訊會話中增加葉子節點而設置的一個函數WSAJoinLeaf(); • • 為控制多點通訊內部回送(loopback)與多址廣播傳播範圍而設置的WSAIoctl()函數的兩個命令碼。 下面的段落將詳細描述這些介面元素。 B.3.1 WSAPROTOCOL_INFO結構中的屬性 為了支援上面的分類法,在結構WSAPROTOCOL_INFO中使用了三個屬性域來分別區分使用控制平面和資料平面的不同方案: 1) 1) XP1_SUPPORT_MULTIPOINT值為1時指示此協定入口支援多點通訊通信,並指示下面的兩個域有意義。 2) 2) XP1_MULTIPOINT_CONTROL_PLANE指示控制平面是有根的(rooted,值為1)還是無根的(non-rooted,值為0)。 3) 3) XP1_MULTIPOINT_DATA_PLANE指示資料平面是有根的(rooted,值為1)還是無根的(non-rooted,值為0)。 注意,如果一個多點通訊協定同時支援rooted和non-rooted資料平面,則要使用兩個WSAPROTOCOL_INFO入口,每一個資料平面一個入口。 應用程式可以使用WSAEnumProtocols()函數來檢測一個給定的協定是否支援多點通訊通信,如果支援,它是如何分別支援控制平面與資料平面的。 B.3.2 WSASocket()函數使用的標誌 在一些實例中,加入到多點通訊會話中的套接字具有和點對點通信的套接字不同的一些行為。例如,在rooted資料平面中的d_leaf套接字只能發送資訊給d_root參與者。這對應用程式產生了一個需求,即它要能夠指示對套接字的這種使用與創建一致。這通過在WSASocket()函數的參數dwFlags中使用四個標誌位元來實現: • • WSA_FLAG_MULTIPOINT_C_ROOT,用來創建一個作為c_root節點的套接字,並且只有在相應的WSAPROTOCOL_INFO入口中指示了使用rooted控制平面時才允許。 • • WSA_FLAG_MULTIPOINT_C_LEAF,用來創建一個作為c_leaf節點的套接字,並且只有在相應的WSAPROTOCOL_INFO入口中指示了XP1_SUPPORT_MULTIPOINT時才允許。 • • WSA_FLAG_MULTIPOINT_D_ROOT,用來創建一個作為d_root節點的套接字,並且只有在相應的WSAPROTOCOL_INFO入口中指示了使用rooted資料平面時才允許。 • • WSA_FLAG_MULTIPOINT_D_LEAF,用來創建一個作為d_leaf節點的套接字,並且只有在相應的WSAPROTOCOL_INFO入口中指示了XP1_SUPPORT_MULTIPOINT時才允許。 注意,當創建一個多點通訊套接字時,必須精確地使用兩個控制平面標誌位元中的一個和兩個資料平面標誌位元中的一個的“或”來作為WSASocket()函數的dwFlags參數。因此,創建多點通訊套接字有四種可能性:“c_root/d_root”、“c_root/d_leaf”、“c_leaf/d_root”或“c_leaf /d_leaf”。 B.3.3 WSAIoctl()函數的SIO_MULTIPOINT_LOOP命令碼 當d_leaf套接字用於non-rooted資料平面時,它通常是希望能夠控制發送出去的通信流量是否能夠在同一個套接字上也被接收。WSAIoctl()函數的SIO_MULTIPOINT_LOOP命令碼用來允許或禁止多點通訊的通信流量的內部回送。 B.3.4 WSAIoctl()函數的SIO_MULTICAST_SCOPE命令碼 當使用多址廣播時,常常需要指定多址廣播傳播的範圍。範圍由包括的路由網段來定義。範圍為0指示多址廣播不傳播資訊到“網線”上,但是可以在本地主機的多個套接字間傳播。範圍為1(預設值)指示將傳播資訊到“網線”上,但是不跨越路由器。更高的範圍值決定了可以跨越的路由器數量。注意這相當於IP multicast中的生存時間(time-to-live,TTL)。 B.3.5 WSAJoinLeaf() 此函數用來加入一個葉子節點到多點通訊會話,其函數原型為: SOCKET WSAAPI WSAJoinLeaf ( SOCKET s, const struct sockaddr FAR * name, int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, DWORD dwFlags ); 詳細情況參見後面關於如何使用此函數的討論。 B.4 加入多點通訊葉子節點的語義 在後面的敍述中,多點通訊套接字常常被定義在兩個平面(控制或資料)之一上。但是,應該理解此套接字也在另一個平面上扮演相同角色,而為了述說的簡短,這在後面將不再提及。例如,當說到建立一個“c_root套接字”時,它可能是一個c_root/d_root套接字,也可能是一個c_root/d_leaf套接字。 在rooted控制平面方案中,新的葉子節點加入到多點通訊會話中可以採用兩種不同方法中的一種或全部。第一種方法,根節點使用WSAJoinLeaf()函數來初始化與一個葉子節點的連接,同時邀請其成為參與者。在葉子節點方面,對等的應用程式必須已經創建了一個c_leaf套接字並使用listen()函數設置其處於監聽模式。當被邀請加入會話時,葉子節點將接收到一個FD_ACCEPT指示,並通過調用WSAAccept()函數自動加入會話。在加入操作完成後,根節點應用程式將接收到FD_CONNECT指示。 在第二種方法中,角色本質上反了過來。根節點應用程式創建一個c_root套接字並設置其處於監聽模式。希望加入會話的葉子節點創建一個c_leaf套接字並使用WSAJoinLeaf()函數來初始化連接並請求准入。根應用程式在外來的准入請求到達時接收到一個FD_ACCEPT指示,並通過調用WSAAccept()函數接納葉子節點。當被接納時,葉子節點接收到FD_CONNECT指示。 在一個non-rooted控制平面中,所有的節點都是c_leaf,WSAJoinLeaf()函數被用來將一個節點加入到現存的多點通訊會話中。當加入完成後將提供FD_CONNECT指示,並返回用於多點通訊會話中的套接字描述符。在IP multicast中,這與IP_ADD_MEMBERSHIP套接字選項一致。 因此,有三種場合應用程式將使用WSAJoinLeaf()函數: 1) 1) 作為多點通訊根節點並邀請一個新的葉子節點加入會話; 2) 2) 作為一個葉子節點向一個有根多點通訊會話提出准入請求; 3) 3) 作為一個葉子節點向無根多點通訊會話尋求准入(如IP multicast )。 B.4.1 使用WSAJoinLeaf() 正如前面提到的,函數WSAJoinLeaf()被用來加入一個葉子節點到多點通訊會話中。WSAJoinLeaf()具有與WSAConnect()相同的參數和語法,除了它還返回一個套接字描述符(這和函數WSAAccept()一樣)及多了一個dwFlags參數外。參數dwFlags用來指示套接字是用來作為發送者還是接收者還是兩者兼具。在此函數中,只有多點通訊套接字可以用來作為輸入參數s。如果此多點通訊套接字處於非阻塞模式,返回的套接字描述符只有在接收到相應的FD_CONNECT指示後才能使用。多點通訊會話中的根應用程式可以調用WSAJoinLeaf()函數一次或多次以加入一組葉子節點,然而,絕大多數情形下一個多點通訊連接請求每次都可能是未完成的(outstanding)。 函數WSAJoinLeaf()返回的套接字描述符因輸入套接字描述符s是c_root還是c_leaf有所不同。當使用c_root套接字時,參數name指示要加入的一個特定葉子節點,返回的套接字描述符是一個對應新增加的葉子節點的c_leaf套接字。此套接字不推薦用來交換多點通訊資料,但是可以用來接收特定c_leaf連接的FD_XXX網路事件指示(如FD_CLOSE)。一些多點通訊實現也允許此套接字用來在root和單個葉子節點之間交流。如果相應的葉子節點調用closesocket()函數退出多點通訊會話,則此函數將受到一個FD_CLOSE指示。對稱地,在WSAJoinLeaf()函數返回的c_leaf套接字上執行closesocket()函數將引起相應葉子節點上的套接字得到FD_CLOSE通知。 當函數WSAJoinLeaf()在c_leaf套接字上執行,參數name包含了root應用程式的位址(對於有根控制方案)或一個存在的多點通訊會話(對於非根控制方案),返回的套接字描述符和輸入的套接字描述符相同。在一個有根控制方案中,root應用程式通過使用listen()函數使c_root套接字處於監聽模式,當葉子節點請求將自己加入多點通訊會話時c_root套接字將接收到標準的FD_ACCEPT通知。root應用程式通常使用accept()/WSAAccept()函數來接納新葉子節點。無論是accept()還是WSAAccept()函數的返回值都是一個c_leaf套接字描述符,如同函數WSAJoinLeaf()返回的一樣。為了適應同時允許根初始化加入和葉子初始化加入的多點通訊方案,對於已經處於監聽模式的c_root套接字來說,使用它作為函數WSAJoinLeaf()的輸入也是可以接受的。 一個多點通訊的root應用程式通常應該負責有序地撤除多點通訊會話。這樣的應用程式可以在c_root套接字上使用shutdown()或closesocket()函數來促使所有的相關c_leaf套接字,包括那些由WSAJoinLeaf()函數返回的套接字及它們對應的遠端葉子節點上的c_leaf套接字,都得到FD_CLOSE通知。 B.5 多點通訊套接字與常規套接字之間的語義差別 在控制平面中,c_root套接字和常規點對點套接字之間在一些重要語義上有區別: 1) 1) c_root套接字可以用於WSAJoinLeaf()函數以加入一個新的葉子節點; 2) 2) 使用listen()函數設置一個c_root套接字處於監聽模式並不排除該c_root套接字用於WSAJoinLeaf()函數以加入一個新的葉子節點,也不排除該c_root套接字用於發送和接收多點通訊資料。 3) 3) 關閉c_root套接字將導致所有相關聯的c_leaf套接字都得到FD_CLOSE通知。 在控制平面中,c_leaf套接字和常規套接字沒有語義上的區別,只不過c_leaf套接字可以用於WSAJoinLeaf()函數,並且c_leaf套接字用於listen()函數指示只有多點通訊連接請求應該被接收。 在資料平面中,d_root套接字和常規點對點套接字的語義區別為: 1) 1) 在d_root套接字上發送的資料將被遞送到同一多點通訊會話中的所有葉子節點; 2) 2) d_root套接字上接收的資料可以來自任何葉子節點。 在有根資料平面中,d_leaf套接字和常規套接字沒有語義上的區別,然而,在非根資料平面中,在d_leaf套接字發送的資料將傳播到所有其他葉子節點,並且接收的資料可能來自任何其他葉子節點。正如前面已經提到,關於d_leaf套接字是在有根還是在非根資料平面的資訊包含在套接字相應的WSAPROTOCOL_INFO結構中。 B.6 現存的多點通訊協定如何支援這些擴展 在本節,我們將簡要說明IP multicast和ATM點對多點通訊能力是如何通過WinSock 2的多點通訊函數來訪問的。我們選擇這兩種協議來做例子是因為它們使用得非常普遍並且較好理解。 B.6.1 IP multicast IP multicast屬於non-rooted資料平面與non-rooted控制平面這一類。所有的應用程式都起葉子節點的作用。現在絕大多數IP multicast實現都使用Steve Deering在IETF提議的套接字選項集合。這種方案有五種操作可用: • • IP_MULTICAST_TTL:設置生存時間,控制多址廣播會話範圍; • • IP_MULTICAST_IF:確定介面用於多址廣播; • • IP_ADD_MEMBERSHIP:加入一個指定的多址廣播會話; • • IP_DROP_MEMBERSHIP:離開多址廣播會話; • • IP_MULTICAST_LOOP:控制多址廣播資訊流量的內部回送。 為IP multicast套接字設置生存時間可以直接使用WSAIoctl()函數的命令碼SIO_MULTICAST_SCOPE,確定IP介面用於多址廣播的方法是通過特定的TCP/IP實現的套接字選項,這在WinSock 2的特定協定附件(WinSock 2 Protocol Specific Annex)中描述。 剩下的三個操作在下面描述的WinSock 2語義中有很好的介紹。應用程式調用WSASocket()函數打開套接字時使用c_leaf/d_leaf標誌,並調用WSAJoinLeaf()函數將自己加入到默認的多址廣播操作介面上的一個多址廣播組中。如果在WSAJoinLeaf()函數中的標誌指示此套接字只是一個發送者,那麼加入操作本質上將沒有做任何操作並且不必發送任何IGMP消息。否則,將發送一個IGMP包給路由器,指示該節點有興趣接收發送到指定的多址廣播位址上的包。既然應用程式創建了專門的c_leaf/d_leaf套接字用於執行多址廣播,因此標準的closesocket()函數可以用來離開多址廣播會話。WSAIoctl()函數的命令碼SIO_MULTIPOINT_LOOP提供了一種通用的控制機制來決定在non-rooted多點通訊方案中的d_leaf套接字上發送的資料是否也被同一套接字接收。 B.6.2 ATM點對多點通信 ATM屬於rooted資料平面與rooted控制平面這一類。一個作為root的應用程式創建c_root套接字,與之相對應的應用程式是在葉子節點上運行,使用的是c_leaf套接字。root應用程式使用WSAJoinLeaf()來加入葉子節點,葉子節點上相應的應用程式設置它們的c_leaf套接字處於監聽模式。指定c_root套接字的WSAJoinLeaf()函數被映射到Q.2931 ADDPARTY消息。由葉子節點發動的加入操作不被ATM UNI 3.1支持,但在ATM UNI 4.0中得到支持。因此,指定c_leaf套接字的WSAJoinLeaf()函數被映射到適當的ATM UNI 4.0消息
系統時間:2024-05-17 7:14:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!