https://blog.csdn.net/u011555996/article/details/72967619
https://www.cnblogs.com/yyy1234/p/10417383.html
UDP單播、廣播、組播
只有UDP有廣播和多播, TCP只能進行點對點的單播, 多播的重點是高效的把同一個包盡可能多的發送到不同的,甚至可能是未知的設備。但是TCP連接是一對一明確的,只能單播。
單播
是客戶端與服務器之間的點到點連接。
廣播
setsockopt(); // 為socket設置廣播權限, 廣播是socket層的
主機之間一對所有”的通訊模式,廣播者可以向網絡中所有主機發送信息。廣播禁止在Internet寬帶網上傳輸(廣播風暴)。
廣播UDP與單播UDP的區別就是IP地址不同,廣播使用廣播地址255.255.255.255,將消息發送到在同一廣播網絡上的每個主機。值得強調的是:本地廣播信息是不會被路由器轉發。當然這是十分容易理解的,因為如果路由器轉發了廣播信息,那么勢必會引起網絡癱瘓。這也是為什么IP協議的設計者故意沒有定義互聯網范圍的廣播機制。
廣播地址通常用於在網絡游戲中處於同一本地網絡的玩家之間交流狀態信息等。
其實廣播顧名思義,就是想局域網內所有的人說話,但是廣播還是要指明接收者的端口號的,因為不可能接受者的所有端口都來收聽廣播。
多播/組播
多播使用的是D類IP地址, 被划分為局部鏈接多播地址、預留多播地址和管理權限多播地址三類。
IP地址 | |
---|---|
244.0.0.0~244.0.0.255 | 局部鏈接多播地址:是為路由協議和其它用途保留的地址,路由器並不轉發屬於此范圍的IP包 |
244.0.1.0~244.0.1.255 | 預留多播地址:公用組播地址,可用於Internet;使用前需要申請 |
244.0.2.0~238.255.255.255 | 預留多播地址:用戶可用組播地址(臨時組地址),全網范圍內有效 |
239.0.0.0~239.255.255.255 | 本地管理組播地址,可供組織內部使用,類似於私有 IP 地址,不能用於 Internet,可限制多播范圍 |
多播的程序設計使用setsockopt()函數和getsockopt()函數來實現,組播的選項是IP層的,其選項值和含義如圖所示。
getsockopt()/setsockopt()的選項 |
含 義 |
IP_MULTICAST_TTL |
設置多播組數據的TTL值 |
IP_ADD_MEMBERSHIP |
在指定接口上加入組播組 |
IP_DROP_MEMBERSHIP |
退出組播組 |
IP_MULTICAST_IF |
獲取默認接口或設置接口 |
IP_MULTICAST_LOOP |
禁止組播數據回送 |
單播流程:主機A向主機B發送UDP數據報,發送的目的IP為192.168.1.151,端口為 80,目的MAC地址為00:00:00:00:00:02。此數據經過UDP層、IP層,到達數據鏈路層,數據在整個以太網上傳播,在此層中其他主機會 判斷目的MAC地址。主機C的MAC地址為00:00:00:00:00:03,與目的MAC地址00:00:00:00:00:02不匹配,數據鏈路層 不會進行處理,直接丟棄此數據。
主機B的MAC地址為00:00:00:00:00:02,與目的MAC地址00:00:00:00:00:02一致,此數據會經過IP層、UDP層,到達接收數據的應用程序。
廣播的流程:主機A向整個網絡發送廣播數據,發送的目的IP為192.168.1.255,端口為 80,目的MAC地址為FF:FF:FF:FF:FF:FF。此數據經過UDP層、IP層,到達數據鏈路層,數據在整個以太網上傳播,在此層中其他主機會 判斷目的MAC地址。由於目的MAC地址為FF:FF:FF:FF:FF:FF,主機C和主機B會忽略MAC地址的比較(當然,如果協議棧不支持廣播,則 仍然比較MAC地址),處理接收到的數據。