UDP组播
2019獨角獸企業重金招聘Python工程師標準>>>
組播的優點
當服務器需要向n個客戶端發送同樣的數據包時
- 單播:服務器向n個不同的客戶端發送n次相同的數據包。
- 組播:服務器向一個組播地址發送一次數據包。
組播地址:
IP頭中源地址為A/B/C類地址,IP頭中的目標地址改為D類地址,一個地址代表一個組。
IP組播地址是不能成為源地址的,只能是目標地址。它們不能作為數據報的源字段或者出現在源路由和路由記錄選項中。
D類地址是從224.0.0.0到239.255.255.255之間的IP地址,其中224.0.0.0到224.0.0.255是被保留的地址。組播協議的地址范圍類似于一般的單播地址,被劃分為兩個大的地址范圍,239.0.0.0—239.255.255.255是私有地址,供各個內部網在內部使用,這個地址的組播不能上公網,類似于單播協議使用的192.168.X.X和10.X.X.X。224.0.1.0— 238.255.255.255是公用的組播地址,可以用于Internet上。
組播中數據的傳送:
IP組播是指一個IP報文向一個“主機組”的傳送,這個包含零個或多個主機的主機組由一個單獨的IP地址標識。主機組地址也稱為“組播地址”,或者D類地址。除了目的地址部分,組播報文與普通報文沒有區別,網絡盡力傳送組播報文但是并不保證一定送達。主機組的成員可以動態變化,主機有權選擇加入或者退出某個主機組。主機可以加入多個主機組,也可以向自己沒有加入的主機組發送數據。主機組有兩種:永久組和臨時組。永久組的IP地址是保留地址。臨時組的地址則使用除永久組地址外的非保留D類地址。
IGMP(internet網關管理協議)是IP組播的基礎.在IP協議出現以后,為了加入對組播的支持,IGMP產生了。IGMP所做的實際上就是告訴路由器,在這個路由器所在的子網內有人對發送到某一個組播組的數據感興趣,這樣當這個組播組的數據到達后面,路由器就不會拋棄它,而是把他轉送給所有感興趣的客戶。假如不同子網內的A,B要進行組播通信,那么,位與A,B之間的所有路由器必須都要支持IGMP協議,否則A,B之間不能進行通信。當一個應用加入一個組播組后,就會向這個子網的所有路由器發送一個IGMP加入命令,告訴子網內有人對發送到某一個組播組的數據感興趣。路由器也會定時向子網內的所有終端發送一條查詢消息,用于詢問是否還有人對某個組播組的數據感興趣。如果有的話,終端就會回應一條IGMP消息,路由器則繼續轉發這個組播組的數據。如果沒有人回應這條消息,那么路由器就認為已經沒有終端對這個組播組的數據感興趣,就不會在轉發關于這個組播組的數據了。在IGMP第二版中,一個終端退出組播組以后,會向路由器發送一個退出消息,路由器也會通過這個消息來判斷是否還要繼續轉發關于這個組播組的數據了(IGMP第一版中沒有這個功能)[這些事情都是底層的系統做的,你只要坐享其成就好了]。
主機之間“一對一組”的通訊模式,也就是加入了同一個組的主機可以接受到此組內的所有數據,網絡中的交換機和路由器只向有需求者復制并轉發其所需數據。主機可以向路由器請求加入或退出某個組,網絡中的路由器和交換機有選擇的復制并傳輸數據,即只將組內數據傳輸給那些加入組的主機。這樣既能一次將數據傳輸給多個有需要(加入組)的主機,又能保證不影響其他不需要(未加入組)的主機的其他通訊。
組播使用:
1. 建立支持數據報的socket。
2. 把socket和本地的一個端口綁定(以后會通過這個端口進行數據的收發)。
3. 通過socket加入一個組播組。
4. 然后就能通過socket進行數據的收發。
5. 通過sockept離開一個組播組。
6. 關閉socket 。
如果你僅僅是想向一個組播組發送數據,而不要接受數據,那么可不用加入組播組,而直接通過sendto向組播組發送數據。
在加入組播組以后,就可以在指定的組播組收發信息了。
因為任何主機都可以加入任意的組播組,那么服務器與客戶端可以通過自定義的協議交流,用來排除服務器不感興趣的主機。
轉載于:https://my.oschina.net/jacobin/blog/186484
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: GC.Collect如何影响垃圾回收
- 下一篇: 一个值得敬佩的朋友