什么是組播通信?組播通信是一種一對多的通信方式,組播報文(目的IP地址為組播IP地址的報文)發向一組接收者,這些接收者需要加入到相應的組播組中才會收到發往該組播組的報文。
針對某個特定的組播組,即使網絡中存在多個接收者,對于組播源而言,每次也只需發送一份報文,網絡中的組播轉發設備負責拷貝組播報文并向有需要的接口轉發。一般而言,網絡設備在收到組播報文后,缺省并不會對其進行轉發,這些設備需要激活組播路由功能,并且維護組播路由表項,然后依據這些表項對組播報文進行合理轉發。因此,組播流量的傳輸,需要一個組播網絡來承載。
在圖1中,Server是一臺多媒體服務器,而PC1、PC2、PC3及PC4是網絡中的主機?,F在Server開始播放視頻,用戶期望在PC1、PC2及PC3上實時收看Server所播放的視頻。
?
圖1 PC1、PC2及PC3期望看到Server直播的視頻節目
這是一種典型的一對多的通信模型。簡單地說,在每一個時刻,Server需要將相同的數據同時發送給多個接收者。如果采用單播的方式來實現上述需求,那么由于網絡中存在多個接收者,對于Server而言,就需要為每個接收者各創建一份數據,每一份數據都被發往一臺單獨的PC(如圖2所示)。
設想一下如果網絡中存在大規模的接收者,那么Server就不得不每次都創建大量的數據拷貝,而且每份拷貝的內容是完全相同的,只是目的IP地址各不相同,這顯然是極其低效的,同時也造成了鏈路帶寬及設備性能的浪費。不僅如此,Server在發送數據前,還需要明確所有接收者的IP地址,否則它將無法構造數據包,而如果用戶要求PC可以自由地接入或離開,或者PC的IP地址并不固定,那么顯然單播通信在該場景中就不適用了。
?
圖2 Server為三個接收者分別創建一份報文,而報文的內容是相同的
如果Server采用廣播的方式發送這些數據,那么所有的接收者就不得不與Server處在相同的廣播域內,因為廣播報文在網絡中的泛洪范圍非常有限。再者從網絡優化角度考慮,廣播流量又是應該盡可能被減少的,畢竟,這些流量會造成其他設備不必要的性能損耗,因此在這種場景中使用廣播通信顯然并非最佳方案。
接下來看看組播是如何解決這個問題的。當Server開始播放視頻時,組播報文從Server源源不斷地被發送出來,無論網絡中存在多少接收者,Server每次都僅需發送一份數據。
Server發出的組播報文的源IP地址是192.168.100.1,而目的IP地址則是組播IP地址(此處以224.1.1.1為例)。如圖3所示,Server發送的組播報文到達路由器R1后,R1將組播報文進行拷貝,然后將組播報文從有需要的接口轉發出去(給R2及R3),至于不需要該報文的接口,路由器是不會向其轉發組播報文的。
R2及R3收到組播報文后,繼續進行拷貝及轉發,直到報文到達接收者。只有加入組播組224.1.1.1的接收者才會收到這些組播報文。PC1、PC2及PC3需要通過某種機制宣告自己加入組播組224.1.1.1。
組播源并不關心一個組播組中存在多少個接收者,或者這些接收者處于網絡中的什么位置、它們的IP地址是什么,它只管將組播報文發送出去,組播網絡設備負責將組播報文根據需要進行拷貝及轉發。
在圖3中,沒有加入組播組224.1.1.1的PC4是不會收到組播流量的,事實上R5并沒有連接任何接收者,因此它自己也不會收到發往該組播組的流量,R3及R4不會將組播流量轉發給它。
圖3 Server不需要為每一個接收者單建報文,它每次只需發送一份報文即可,網絡中的組播設備會對組播報文進行拷貝并轉發到需要該報文的接口組播技術適用于一對多的通信場景,在多媒體直播、在線會議、股票金融等領域有著廣泛的應用。