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