考慮一個場景,某公司用遠程視頻會議軟件開一個會議,BOSS在總部發言而其他分部員工接收視頻,這時如果還是使用單播模式的話,總部的視頻將通過網絡傳給每個分部員工,它有一個特點是有多少客戶端就需要傳送多少次,當客戶端的數量越來越大時可能會導致網絡阻塞,而且這種傳送效率極低。于是引入了組播通信概念。
?
如圖,上為單播模式,S1向S2、S3和S4發送消息時必須發送三次,且每次都是從S1出發到各自目的地,傳輸效率低且浪費網絡資源。下圖為組播模式,S1向S2、S3和S4發送消息只需S1發送一次到路由器,連接S2、S3、S4客戶端的路由器將負責往他們發送消息,解決了傳輸效率及浪費網絡資源問題。
所以組播其實是為了優化單播在某些使用場景的局限性,它是一種一對多的傳播方式,假如某個主機結點想接受相關的信息只需要向路由器或交換機申請加入某組即可,路由器或交換機在接受到相關信息后就會負責向組內所有成員發送信息,總結起來組播有以下特點:①節省不必要的網絡資源;②有針對性地向組內成員傳播;③可以在互聯網上進行傳播;④沒有可靠傳輸協議導致數據不可靠。
組播中最重要的內容是如何維護路由器與主機之間的關系,其主要是通過IGMP協議進行維護,它主要維護不同路由器與不同主機之間的成員關系,具體的維護方式比較復雜,因為涉及到多個路由器且路由之間互相連接組成一個樹狀網絡,而組內成員可能處于任何一個路由中,即樹的任何樹葉結點,所以需要復雜的算法去維護這些關系才知道信息要網哪發送。IGMP協議主要負責組成員的加入和退出、組內成員查詢等功能,具體實現不再展開,只要明白使用組播就需要通過IGMP協議申請加入組成員才能接收組播出來的消息,而退出組后將接收不了消息。
組播相當于把主機與主機之間的通信壓力轉嫁到了路由器上面,所以要得到路由及網絡的支持才能進行組播,整個傳輸過程中涉及的路由器或交換機都要支持組播,否則將無法使用組播通信。另外你的主機得支持組播,TCP/IP層面支持組播發送與接收。
在IP層面需要一個組播地址指定組播,它被稱為D類地址,從224.0.0.0-239.255.255.255,這些地址根據范圍大致分為局域網和因特網地址,224.0.0.0-244.0.0.255用于局域網,224.0.1.0-238.255.255.255用于因特網。Tomcat默認的組播地址為228.0.0.4,而Tomcat為何會涉及到組播則要歸到集群的概念,因為集群涉及到內存的共享問題,所以需要使用組播進行內存同步,在集群相關章節將進行更加深入的探討。
喜歡研究java的同學可以交個朋友,下面是本人的微信號:
