UDP單播、廣播、組播
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地址),處理接收到的資料。