在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于IP層通信的多播技術研究與介紹

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-05-03 10:00 ? 次閱讀

在局域網中,管理員常常需要將某條信息發送給一組用戶。如果使用一對一的發送方法,雖然是可行的,但是過于麻煩,也常會出現漏發、錯發。為了更有效的解決這種組通信問題,出現了一種多播技術(也常稱為組播通信),它是基于IP層的通信技術

眾所周知,普通IP通信是在一個發送者和一個接收者之間進行的,我們常把它稱為點對點的通信,但對于有些應用,這種點對點的通信模式不能有效地滿足實際應用的需求。例如:一個數字電話會議系統由多個會場組成,當在其中一個會場的參會人發言時,要求其它會場都能即時的得到此發言的內容,這是一個典型的一對多的通信應用,通常把這種一對多的通信稱為多播通信。采用多播通信技術,不僅可以實現一個發送者和多個接收者之間進行通信的功能,而且可以有效減輕網絡通信的負擔,避免資源的無謂浪費。

廣播也是一種實現一對多數據通信的模式,但廣播與多播在實現方式上有所不同。廣播是將數據從一個工作站發出,局域網內的其他所有工作站都能收到它。這一特征適用于無連接協議,因為LAN上的所有機器都可獲得并處理廣播消息。使用廣播消息的不利之處是每臺機器都必須對該消息進行處理。多播通信則不同,數據從一個工作站發出后,如果在其它LAN上的機器上面運行的進程表示對這些數據“有興趣”,多播數據才會制給它們。

本實例由Sender和Receiver兩個程序組成,Sender用戶從控制臺上輸入多播發送數據,Receiver端都要求加入同一個多播組,完成接收Sender發送的多播數據。

一、實現方法

1、 協議支持

并不是所有的協議都支持多播通信,對Win32平臺而言,僅兩種可從WiNSock內訪問的協議(IP/ATM)才提供了對多播通信的支持。因通常通信應用都建立在TCP/IP協議之上的,所以本文只針對IP協議來探討多播通信技術。

支持多播通信的平臺包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4、Windows 2000和WindowsXP。自2.1版開始,Windows CE才開始實現對IP多播的支持。本文實例建立在WindowsXP專業版平臺上。

2、多播地址

IP采用D類地址來支持多播。每個D類地址代表一組主機。共有28位可用來標識小組。所以可以同時有多達25億個小組。當一個進程向一個D類地址發送分組時,會盡最大的努力將它送給小組的所有成員,但不能保證全部送到。有些成員可能收不到這個分組。舉個例子來說,假定五個節點都想通過I P多播,實現彼此間的通信,它們便可加入同一個組地址。全部加入之后,由一個節點發出的任何數據均會一模一樣地復制一份,發給組內的每個成員,甚至包括始發數據的那個節點。D類I P地址范圍在244.0.0.0到239.255.255.255之間。它分為兩類:永久地址和臨時地址。永久地址是為特殊用途而保留的。比如,244.0.0.0根本沒有使用(也不能使用),244.0.0.1代表子網內的所有系統(主機),而244.0.0.2代表子網內的所有路由器。在RFC 1700文件中,提供了所有保留地址的一個詳細清單。該文件是為特殊用途保留的所有資源的一個列表,大家可以找來作為參考?!癐nternet分配數字專家組”(I A N A)負責著這個列表的維護。在表1中,我們總結了目前標定為“保留”的一些地址。臨時組地址在使用前必須先創建,一個進程可以要求其主機加入特定的組,它也能要求其主機脫離該組。當主機上的最后一個進程脫離某個組后,該組地址就不再在這臺主機中出現。每個主機都要記錄它的進程當前屬于哪個組。

表1 部分永久地址說明

地 址 說 明

基于IP層通信的多播技術研究與介紹

3、 多播路由器

多播由特殊的多播路由器來實現,多播路由器同時也可以是普通路由器。各個多播路由器每分鐘發送一個硬件多播信息給子網上的主機(目的地址為244.0.0.1),要求它們報告其進程當前所屬的是哪一組,各主機將它感興趣的D類地址返回。這些詢問和響應分組使用IGMP(Internet group management protocol),它大致類似于ICMP。它只有兩種分組:詢問和響應,都有一個簡單的固定格式,其中有效載荷字段的第一個字段是一些控制信息,第二字段是一個D類地址,在RFC1112中有詳細說明。

多播路由器的選擇是通過生成樹實現的,每個多播路由器采用修改過的距離矢量協議和其鄰居交換信息,以便向每個路由器為每一組構造一個覆蓋所有組員的生成樹。在修剪生成樹及刪除無關路由器和網絡時,用到了很多優化方法。

4.庫支持

WinSock提供了實現多播通信的API函數調用。針對IP多播,WinSock提供了兩種不同的實現方法,具體取決于使用的是哪個版本的WinSock。第一種方法是WinSock1提供的,要求通過套接字選項來加入一個組;另一種方法是WinSock2提供的,它是引入一個新函數,專門負責多播組的加入,這個函數便是WSAJoinLeaf,它是基層協議是無關的。本文將通過一個多播通信的實例的實現過程,來講敘多播實現的主要步驟。因為Window98以后版本都安裝了Winsock2.0以上版本,所以本文實例在WinSock2.0平臺上開發的,但在其中對WinSock1實現不同的地方加以說明。

二、編程步驟

1、啟動Visual C++6.0,創建一個控制臺項目工程MultiCase。在此項目工程中添加Sender和Receiver兩個項目。

Receiver項目實現步驟:

(1)、創建一個SOCK_DGRAM類型的Socket。

(2)、將此Socket綁定到本地的一個端口上,為了接收服務器端發送的多播數據。

(3)、加入多播組。

①、 WinSock2中引入一個WSAJoinLeaf,此函數原型如下:

SOCKET WSAJoinLeaf( SOCKET s, cONst struct sockaddr FAR *name, int namelen,

LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, DWORD dwFlags );

其中,第一個參數s代表一個套接字句柄,是自WSASocket返回的。傳遞進來的這個套接

字必須使用恰當的多播標志進行創建;否則的話WSAJoinLeaf就會失敗,并返回錯誤WSAEINVAL。第二個參數是SOCKADDR(套接字地址)結構,具體內容由當前采用的協議決定,對于IP協議來說,這個地址指定的是主機打算加入的那個多播組。第三個參數namelen(名字長度)是用于指定name參數的長度,以字節為單位。第四個參數lpCallerData(呼叫者數據)的作用是在會話建立之后,將一個數據緩沖區傳輸給自己通信的對方。第五個參數lpCalleeData(被叫者數據)用于初始化一個緩沖區,在會話建好之后,接收來自對方的數據。注意在當前的Windows平臺上,lpCallerData和lpCalleeData這兩個參數并未真正實現,所以均應設為NULL。LpSQOS和lpGQOS這兩個參數是有關Qos(服務質量)的設置,通常也設為NULL,有關Qos內容請參閱MSDN或有關書籍。最后一個參數dwFlags指出該主機是發送數據、接收數據或收發兼并。該參數可選值分別是:JL_SENDER_ONLY、JL_RECEIVER_ONLY或者JL_BOTH。

②、在WinSock1平臺上加入多播組需要調用setsockopt函數,同時設置IP_ADD_MEMBERSHIP選項,指定想加入的那個組的地址結構。具體實現代碼將在下面代碼注釋列出。

(4)、接收多播數據。

Sender實現步驟:

(1)、創建一個SOCK_DGRAM類型的Socket。

(2)、加入多播組。

(3)、發送多播數據。

3、編譯兩個項目,在局域網中按如下步驟測試:

(1)、將Sender.exe拷貝到發送多播數據的PC上。

(2)、將Receiver.exe拷貝到多個要求接收多播數據的PC上。

(3)、各自運行相應的程序。

(4)、在Sender PC上輸入多播數據后,你就可以在Receiver PC上看到輸入的多播數據。

//////////////////////////////Receiver.c程序代碼

#include

#include

#include

#include

#define MCASTADDR “233.0.0.1” //本例使用的多播組地址。

#define MCASTPORT 5150 //綁定的本地端口號。

#define BUFSIZE 1024 //接收數據緩沖大小。

int main( int argc,char ** argv)

{

WSADATA wsd;

struct sockaddr_in local,remote,from;

SOCKET sock,sockM;

TCHAR recvbuf[BUFSIZE];

/*struct ip_mreq mcast; // Winsock1.0 */

int len = sizeof( struct sockaddr_in);

int ret;

//初始化WinSock2.2

if( WSAStartup( MAKEWORD(2,2),&wsd) != 0 )

{

printf(“WSAStartup() failed\n”);

return -1;

}

/*

創建一個SOCK_DGRAM類型的SOCKET

其中,WSA_FLAG_MULTIPOINT_C_LEAF表示IP多播在控制面層上屬于“無根”類型;

WSA_FLAG_MULTIPOINT_D_LEAF表示IP多播在數據面層上屬于“無根”,有關控制面層和

數據面層有關概念請參閱MSDN說明。

*/

if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,

WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|

WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)

{

printf(“socket failed with:%d\n”,WSAGetLastError());

WSACleanup();

return -1;

}

//將sock綁定到本機某端口上。

local.sin_family = AF_INET;

local.sin_port = htons(MCASTPORT);

local.sin_addr.s_addr = INADDR_ANY;

if( bind(sock,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR )

{

printf( “bind failed with:%d \n”,WSAGetLastError());

closesocket(sock);

WSACleanup();

return -1;

}

//加入多播組

remote.sin_family = AF_INET;

remote.sin_port = htons(MCASTPORT);

remote.sin_addr.s_addr = inet_addr( MCASTADDR );

/* Winsock1.0 */

/*

mcast.imr_multiaddr.s_addr = inet_addr(MCASTADDR);

mcast.imr_interface.s_addr = INADDR_ANY;

if( setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mcast,sizeof(mcast)) == SOCKET_ERROR)

{

printf(“setsockopt(IP_ADD_MEMBERSHIP) failed:%d\n”,WSAGetLastError());

closesocket(sockM);

WSACleanup();

return -1;

}

*/

/* Winsock2.0*/

if(( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote,sizeof(remote),NULL,NULL,NULL,NULL, JL_BOTH)) == INVALID_SOCKET)

{

printf(“WSAJoinLeaf() failed:%d\n”,WSAGetLastError());

closesocket(sock);

WSACleanup();

return -1;

}

//接收多播數據,當接收到的數據為“QUIT”時退出。

while(1)

{

if(( ret = recvfrom(sock,recvbuf,BUFSIZE,0,(struct sockaddr*)&from,&len)) == SOCKET_ERROR)

{

printf(“recvfrom failed with:%d\n”,WSAGetLastError());

closesocket(sockM);

closesocket(sock);

WSACleanup();

return -1;

}

if( strcmp(recvbuf,“QUIT”) == 0 ) break;

else {

recvbuf[ret] = ‘\0’;

printf(“RECV:‘ %s ’ FROM

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信
    +關注

    關注

    18

    文章

    6046

    瀏覽量

    136216
  • IP
    IP
    +關注

    關注

    5

    文章

    1715

    瀏覽量

    149713
  • 局域網
    +關注

    關注

    5

    文章

    760

    瀏覽量

    46326
收藏 人收藏

    評論

    相關推薦

    單片機系統串行口設計技術研究

    單片機系統串行口設計技術研究
    發表于 08-07 00:10

    基于ZigBee的短距離通信技術研究

    基于ZigBee的短距離通信技術研究歡迎研究ZigBee的朋友和我交流。。。
    發表于 08-11 18:55

    怎么實現嵌入式WiFi技術研究通信設計?

    怎么實現嵌入式WiFi技術研究通信設計?
    發表于 05-28 07:01

    EPA功能塊及用戶技術研究

    EPA功能塊及用戶技術研究 Research on EPA Functional Block and User Layer Technology
    發表于 03-17 09:14 ?16次下載

    混合型P2P應用模型

    針對傳統應用模型中存在的不足,提出一種基于P2P 技術的混合型應用
    發表于 03-20 14:56 ?24次下載

    基于IP技術的視頻傳輸系統的設計與實現

    隨著壓縮視頻通信技術和網絡技術迅速發展,基于組技術的視頻傳輸和服務應用日益廣泛。在IP 網上構
    發表于 07-06 16:59 ?21次下載

    一個基于應用的單源組協議設計

    由于IP在實現過程中遭遇了很多困難,所以應用就成了Internet應用研究的熱點。本文在簡單地論述了應用
    發表于 07-22 17:33 ?23次下載

    ,是什么意思

    ,是什么意思 是一種在因特網或內部網上向選定的人群傳輸文本、音頻和視頻的有效
    發表于 04-06 17:20 ?5990次閱讀

    IP技術在雷達信息交互中的應用

    對網絡通信中的TCP單播、廣播和IP技術進行對比分析,針對雷達終端內部數據交換實時性要求高等特點,指出
    發表于 09-09 10:24 ?32次下載
    <b class='flag-5'>IP</b><b class='flag-5'>多</b><b class='flag-5'>播</b><b class='flag-5'>技術</b>在雷達信息交互中的應用

    基于IP視頻系統的設計與實現

    本文著重介紹了流媒技術及其底層傳輸技術——IP?;谛@網設計并實現了一個可供網絡現場直播、
    發表于 09-14 11:42 ?1761次閱讀
    基于<b class='flag-5'>IP</b><b class='flag-5'>多</b><b class='flag-5'>播</b>視頻系統的設計與實現

    IP介紹

    TCP-IP詳解卷2 IP,學習TCP很好的資料。歡迎下載。
    發表于 05-09 14:33 ?0次下載

    異構網絡協作通信技術研究

    異構網絡協作通信技術研究_滕世海
    發表于 01-07 21:39 ?0次下載

    網絡路由與通信技術研究與設計

    通信這種兼顧了廣播通信與單播通信兩者優點的通信模式,已經被越來越多地應用于平面網絡業務之中。
    發表于 11-16 15:28 ?3次下載

    人體通信技術研究

    人體通信技術研究說明。
    發表于 03-24 14:13 ?22次下載
    人體<b class='flag-5'>通信</b><b class='flag-5'>技術研究</b>

    通信的核心技術IP地址管理

    在現代網絡通信中,IP地址是每個設備在網絡中的唯.一標識,而通信(Multicast)則是一種高效的數據傳輸方式。本文將詳細解析
    的頭像 發表于 07-15 16:45 ?473次閱讀
    主站蜘蛛池模板: 黄黄网| 中文字幕一区二区三区在线观看| 一级片+国产| 午夜在线播放视频| 色天天天天| 国产欧美日韩视频免费61794| 国产精品福利一区二区亚瑟| 成人激情在线| 亚洲一区有码| 一级片视频播放| 日韩一卡 二卡 三卡 四卡 免费视频 | 人人人人凹人人爽人人澡| 免费视频一区二区性色| 黄频网站免费大全在线观看| ww欧洲ww在线视频免费观看| 三级黄色网| 免费免费啪视频视频观看| 女攻各种play男受h| 天堂中文在线观看| 久久久伊香蕉网站| 一本大道高清在线视频 视频| 免费又黄又爽1000禁片| h视频在线看| 亚洲美女激情视频| 欧洲成品大片在线播放| 国产精品国产三级国产在线观看| 天天干2018| 女18poren69| 曰曰摸天天摸人人看久久久| 日本免费观看网站| av成人在线播放| 加勒比在线一区| 欧美成人亚洲欧美成人| 四虎影院国产精品| 国内露脸夫妇交换精品| 天天摸天天插| 一区二区手机视频| 天堂中文字幕在线观看| 国产亚洲一区二区精品| 在线资源天堂| 日韩免费观看视频|