原文在我的csdn糠睡,http://blog.csdn.net/lixin88/article/details/56013014震叙;
局域網(wǎng)發(fā)現(xiàn)的意義
局域網(wǎng)發(fā)現(xiàn)設備是通信的第一步,通信需要先知道對方的ip地址墨辛,因為一般使用 DHCP 動態(tài)分配 ip 地址的局域網(wǎng)內,各個主機的 IP 地址是由 DHCP 服務器來幫你分配 IP 地址的。所以在很多情況下晌区,你要知道對方的 IP 地址是比較麻煩的。
因此,局域網(wǎng)發(fā)現(xiàn)朗若,我們要解決的事情就是:如何找到局域網(wǎng)內其他設備恼五,并獲取到設備的ip;
查詢資料之后哭懈,發(fā)現(xiàn)使用udp單播灾馒、組播、廣播來實現(xiàn)的方式都有遣总,并且親測確實都可行睬罗,那么哪種更合適呢,這也是我寫這篇的目的旭斥,讓大家對這些有個基本概念和對比容达;
udp 不用保證數(shù)據(jù)可靠性,傳輸速度快垂券;并且一般tcp是不用于多播場景的花盐;那使用udp如何實現(xiàn)呢?
單播
只有一個源點網(wǎng)絡和一個終點網(wǎng)絡。源點網(wǎng)絡和終點網(wǎng)絡的關系是一對一的娄帖。數(shù)據(jù)報途徑的每一個路由器都要將這個分組僅從一個接口轉發(fā)出去也祠。
圖例:
多播
在多播系統(tǒng)中,有一個源點一組終點近速。這是一對多的關系诈嘿。在這種類型的通信中,源地址是一個單播地址削葱,而目的地址則是一個組地址奖亚。
圖例:
多播的優(yōu)點
q 具有同種業(yè)務的主機加入同一數(shù)據(jù)流析砸,共享同一通道昔字,節(jié)省了帶寬和服務器的優(yōu)點,具有廣播的優(yōu)點而又沒有廣播所需要的帶寬首繁。
q 服務器的總帶寬不受客戶端帶寬的限制作郭。由于組播協(xié)議由接收者的需求來確定是否進行數(shù)據(jù)流的轉發(fā),所以服務器端的帶寬是常量弦疮,與客戶端的數(shù)量無關夹攒。
q與單播一樣,多播是允許在廣域網(wǎng)即Internet上進行傳輸?shù)男踩鴱V播僅僅在同一局域網(wǎng)上才能進行咏尝。
廣播的缺點
q 多播與單播相比沒有糾錯機制压语,當發(fā)生錯誤的時候難以彌補,但是可以在應用層來實現(xiàn)此種功能编检。
q 多播的網(wǎng)絡支持存在缺陷胎食,需要路由器及網(wǎng)絡協(xié)議棧的支持。
多播的應用主要有網(wǎng)上視頻蒙谓、網(wǎng)上會議等斥季。
組播與廣播
廣播數(shù)據(jù)報的接收是被動的。
連接到子網(wǎng)上的所有主機都要接收廣播數(shù)據(jù)報累驮,這會增加網(wǎng)絡流量酣倾,并且子網(wǎng)上的主機增加額外的負擔。
UDP廣播只能在內網(wǎng)(同一網(wǎng)段)有效谤专,而組播可以較好實現(xiàn)跨網(wǎng)段群發(fā)數(shù)據(jù)躁锡。
UDP廣播:消耗更多網(wǎng)絡帶寬,路由器向子網(wǎng)內的每個終端都投遞一份數(shù)據(jù)包置侍,不論這些終端是否樂于接收該數(shù)據(jù)包映之;
UDP組播:有了很大優(yōu)化,只有終端加入到了一個廣播組蜡坊,UDP組播的數(shù)據(jù)才能被他接收到杠输;
多播數(shù)據(jù)報的接收是主動的。主機主動加入指定的多播組秕衙,才會接收該組的多播數(shù)據(jù)報蠢甲。
不同子網(wǎng)內的A,B進行組播通信据忘,依靠IGMP協(xié)議鹦牛;局域網(wǎng)組播,不考慮跨網(wǎng)段的組播實現(xiàn)勇吊,因此組播路由協(xié)議IGMP與本文要介紹的內容無關曼追;
多播的地址是特定的,D類地址用于多播汉规。D類IP地址就是多播IP地址礼殊,即224.0.0.0至239.255.255.255之間的IP地址,并被劃分為局部連接多播地址针史、預留多播地址和管理權限多播地址3類:
q局部多播地址:在224.0.0.0~224.0.0.255之間膏燕,這是為路由協(xié)議和其他用途保留的地址,路由器并不轉發(fā)屬于此范圍的IP包悟民。
q 預留多播地址:在224.0.1.0~238.255.255.255之間,可用于全球范圍(如Internet)或網(wǎng)絡協(xié)議篷就。
q 管理權限多播地址:在239.0.0.0~239.255.255.255之間射亏,可供組織內部使用近忙,類似于私有IP地址,不能用于Internet智润,可限制多播范圍及舍。
局域網(wǎng)發(fā)現(xiàn)可以使用:
1.udp單播,獲取源主機的ip和子網(wǎng)掩碼窟绷,得到該局域網(wǎng)的ip地址范圍锯玛,然后使用udp單播輪詢 找到對應的目標主機;
2.udp組播兼蜈,讓源主機和目標主機都加到同一個局部多播地址攘残;源主機給該多播地址發(fā)送組播消息即可;
3.udp廣播为狸,使用廣播地址255.255.255.255 來廣播定制好的消息歼郭;
綜合考慮:udp單播輪詢比較耗時,而且如果局域網(wǎng)內設備較多辐棒,UDP發(fā)送過快的話,會導致本地發(fā)送緩沖區(qū)丟包;接收過慢的話,也會導致接收緩沖丟包病曾;單播和廣播一樣,對于不需要關心該消息的主機是一種打擾漾根;
因此泰涂,使用udp組播來實現(xiàn)局域網(wǎng)發(fā)現(xiàn)比使用udp廣播更合適;并且我之后會學習mdns和dns-sd辐怕,而這兩種都是基于udp組播逼蒙,所以用組播來實現(xiàn)對于后面的深入研究更有意義;
現(xiàn)在秘蛇,我們來實現(xiàn)一個最簡單的局域網(wǎng)發(fā)現(xiàn)的demo其做;具體實現(xiàn)請看下一篇