這是計算機網路非常基礎的概念,在這裡重點記錄它們的原理和實現方式。我最不能理解的是組播的實現。
ip位址分為四個級別,a類、b類、c類、d類
10101100.00010100.00000000.00000000 (子網172.20.0.0/16)
主機標識全設定為1:
10101100.00010100.11111111.11111111(廣播位址172.20.255.255)
乙太網中如果將mac位址的所有位設定1,則形成ff:ff:ff:ff:ff:ff的廣播位址。因此,廣播的ip包以資料鏈路的幀的形成傳送時,是通過這樣的mac廣播位址進行傳播的。廣播分兩種,本地廣播和直接廣播。
不同網路見的廣播叫做直接廣播。傳送主機通過配置特定的ip位址,例如:192.168.1.255/24.路由其可以**這個資料報到指定的子網中(192.168.1.0/24),然後在這個子網中進行本地廣播。
單播是最常用,也是最直觀的實現。這裡我就不多說的。接著講多播。
為什麼要多播?
當乙個主機需要向n個主機傳送資料時(有的不屬於同一子網),假如使用單播,那麼將對傳送主機產生非常大的效能消耗,同時需要傳送主機有足夠強大的主機。假如使用廣播,那麼意味著就算子網中不是目的主機的主機也要接收資料報,對非目的主機產生不必要的消耗。而且,廣播還不能跨越子網傳送。所以假如可以指定乙個組的主機進行傳送,那就非常好了。所以就有了多播。路由器和主機如何確認這是乙個多播位址?
多播與位址位址
內容224.0.0.0
(預定)
224.0.0.1
子網內所有的系統
224.0.0.2
子網內所有的路由器
224.0.0.5
ospf路由器
多播的具體實現還需要依靠igmp等協議的支援。
路由器怎麼知道**有需要接受多播分組的主機?
這是多播最核心的問題。路由器面對乙個ip位址為多播位址的資料報時,該怎麼樣判斷這個資料報的**方向呢?假如路由器上每乙個主機都接收多播分組,那麼可以採用廣播方式進行擴散。但是簡單的擴散會產生迴路——解決方法:逆向路徑廣播。這個規定有效地防止了多播資料報的迴圈**。整體來看,我們可以理解為乙個多播的傳播過程就像一些資料不停地從乙個樹的根節點往葉子節點進行傳播的過程。那麼,在這棵多播傳播網路樹中,也許有一些子樹是不含有接收多播分組主機的,那麼最後在傳播樹中,最後就不要有那一部分的子樹。於是,逆向路徑廣播協議就有了「剪枝」行為了。
定義:對於基於乙個源位址的多播流,如果路由的所有下游介面均沒有該組成員或已被剪枝,則它通過其雙親鏈路向上傳送剪枝訊息(訊息意思是:上游的路由器啊,我這邊不接收多播分組資料,你不要傳給我了!)。路由器不會把多播分組從剪枝介面**出去。
當然,這個剪枝行為是不能恆定的,因為隨時可以有主機登記為多播目的主機。所以就有與剪枝相對應的行為——嫁接。實現原理很簡單:路由器定時刪除剪枝資訊,下游重新對上剪枝。
通過逆向路徑廣播的技術,我們可以知道路由器是如何**多播資料報的。那麼在這裡我們可以再引出乙個問題:怎麼知道乙個主機是多播接收主機呢?那就是igmp的工作了。igmp譯名為:internet組管理協議。用於路由器查詢與它直連的網路上是否存在組成員。
igmp是多播技術的乙個基本模組。我們可以想象乙個多播路由器的工作情況,當它接收到乙個多播資料報(假設是224.1.2.3),需要**時,那麼它就要選擇合適的介面進行**。從上文可知,假如介面le1不存在224.1.2.3的多播主機,那麼路由器就無需在這個介面中**。對於乙個多播路由器而言,igmp的功能主要就是維護這個資訊:介面是否存在多播主機。
igmp主要是兩個功能:
1、主機加入多播組
2、igmp報告和查詢,維護多播組**表
簡略的介紹一下過程,詳細可以參考 《tcp/ip詳解》
主機加入多播組
主機中,某乙個程序希望可以加入多播組(例如,我開啟乙個直播,意味著主機希望假如這個多播組,以獲得直播的資料)。那麼,它會定時地傳送乙個igmp報告。在這個報文中:
字段資料
報文型別
igmp報告
igmp組位址
組位址目的ip位址
組位址源ip位址
主機ip位址
當多播路由器在某個介面中接收到這個報文時。那麼就證明,這個介面存在這個多播組的接收主機。以後它就懂得**它的資料報了。
igmp的報告與查詢
多播是動態的,意味著隨時會有主機加入多播組或退出多播組。所以igmp必需可以合理維護多播組的資訊,所以多播路由器必需每隔一段時間就傳送查詢訊息,保證介面中存在多播主機,並以此維護自己的多播分組**路由表。查詢報文簡要記述如下:
字段資料
報文型別
igmp查詢
igmp組位址
0目的ip位址
224.0.0.1
源ip位址
路由器ip位址
其中,224.0.0.1意味著它想所有多播組的主機傳送查詢。每乙個允許多播的主機都必要先加入224.0.0.1這個多播組。至此,我們了解完igmp的兩個重要工作後,我們已經可以完全理解:乙個主機加入多播分組或離開多播分組的原理。
分析到這裡,筆者已經由不懂多播,慢慢地開始理解多播了。整體工作原理作一下總結。
多播最大的工作,其實就是維護多播分組的資訊。路由器有了這個資訊,就知道該如何**多播資料報(目的ip位址為多播位址的資料報)。維護多播分組的資訊的協議就為igmp協議。
乙個路由器知道該在哪個介面傳送多播分組還不行,我們還應該優化多播分組的**模式。在稠密模式下,就有了逆向路徑廣播這個擴散約定,使用這個約定的協議有dvmrp(距離向量多播路由協議,利用rip協議)和pim-dm(協議無關多播協議)。逆向路徑廣播的約定保證了擴散路徑是乙個樹,不會產生迴路。
與稠密模式相對的稀疏模式,這樣的網路我們希望多播的時候可以更注意效率,因為網路中的多播主機不多,再使用擴散的方式會產生較大的路由控制壓力。於是又有了pim-sm協議,這是稀疏模式下的協議無關多播協議,是先確定**路由,然後再進行**的演算法。具體方式同時是維護乙個多播樹,具體的優化方案這裡就不多說了。
花了一整天的時間,終於把多播的原理給弄懂了。原來多播背後還有這麼多技術的,並不想廣播和單播那樣簡單。使用廣播和單播的工作方式是無法解釋多播的,多播最大的工作不是單純地**資料報,而是有效地維護多播組和多播樹。不知不覺擴充套件了這麼多,難免會有點錯漏,若有發現,希望大家可以提出。
單播 廣播 組播 多播
組播 多播 1 定義 主機之間一對一的通訊模式。網路中的交換機和路由器對資料只 不複製。網路中的路由器和交換機根據目標位址選擇傳輸路徑。如果10個客戶機需要相同的資料,則伺服器需要逐一傳送,重複10次相同的工作。2 優點 伺服器針對每個客戶不同的請求傳送不同的資料,容易實現個性化服務 伺服器及時響應...
單播 廣播 組播 多播
組播 多播 1 定義 主機之間一對一的通訊模式。網路中的交換機和路由器對資料只 不複製。網路中的路由器和交換機根據目標位址選擇傳輸路徑。如果10個客戶機需要相同的資料,則伺服器需要逐一傳送,重複10次相同的工作。2 優點 伺服器針對每個客戶不同的請求傳送不同的資料,容易實現個性化服務 伺服器及時響應...
UDP單播 廣播 多播
單播 就是我們常見的包含s端和c端的一對一方式,要c端向s端發生前要先明確指明s端的ip及port 程式設計說明 略 廣播 又叫分有限廣播和和直接廣播。有限廣播 使用的位址是255.255.255.255,即向該ip的任何乙個埠發生資料,資料將發生給該區域網內的所有主機的同一埠,因為廣播位址 255...