http://www.cnblogs.com/qxhcpp/archive/2012/08/04/2622902.html
2012
首先我們知道D類地址作為多播地址,對(duì)于單純的子網(wǎng)內(nèi)部多播,并不要求路由器進(jìn)行轉(zhuǎn)發(fā),但一旦涉及到主機(jī)和路由器同時(shí)進(jìn)行多播通信時(shí),就需要用到IGMP協(xié)議,他可以讓一個(gè)物理網(wǎng)絡(luò)上的所有系統(tǒng)知道主機(jī)目前所在的多播組,很顯然多播路由器(支持多播的路由器)需要這些信息以便知道它的多播數(shù)據(jù)包應(yīng)該發(fā)往那個(gè)接口。
IGMP作為網(wǎng)絡(luò)層的一種協(xié)議,在IP首部的字段被設(shè)置為2。報(bào)文格式如下
4位IGMP版本號(hào) | 4位IGMP類型 | 8位未用 | 16為檢驗(yàn)和 |
32為組播地址 |
版本號(hào)常用的為1時(shí)表示是多播路由器發(fā)出的查詢報(bào)文,為2表示主機(jī)發(fā)出的報(bào)告報(bào)文。
其次,多播的基礎(chǔ)可視為一個(gè)進(jìn)程,該進(jìn)程在一個(gè)主機(jī)的給定接口加入一個(gè)多播組,但這些多播組中的成員都是動(dòng)態(tài)的,可以隨時(shí)離開(kāi)和加入進(jìn)來(lái)。前提是保證組內(nèi)必須只有有一個(gè)成員,否則該多播組就會(huì)被取消。
當(dāng)然,由于多播路由器使用IGMP報(bào)文來(lái)記錄與該路由器相連的網(wǎng)絡(luò)組成員的變化,就存在一個(gè)相應(yīng)的規(guī)則。
1)當(dāng)?shù)谝粋€(gè)進(jìn)程加入組時(shí),主機(jī)要發(fā)送一個(gè)IGMP報(bào)告,如果主機(jī)的多個(gè)進(jìn)程加入同一個(gè)組,那么只需要發(fā)送一個(gè)報(bào)告即可。
2)當(dāng)進(jìn)程離開(kāi)一個(gè)組時(shí),主機(jī)不發(fā)送IGMP報(bào)告,即便是最后一個(gè)進(jìn)程離開(kāi)也不發(fā)送,但這樣只要主機(jī)再收到路由器發(fā)送來(lái)的IGMP查詢報(bào)文,不再作出回應(yīng)就行。
3)多播路由器要定時(shí)發(fā)送IGMP查詢報(bào)文來(lái)確定組中是否還有主機(jī),因此必須向每一個(gè)接口發(fā)送IGMP查詢報(bào)文,因此其組地址未設(shè)置為0.
4)正如所說(shuō)主機(jī)通過(guò)發(fā)送IGMP報(bào)告來(lái)響應(yīng)一個(gè)IGMP查詢,對(duì)每一個(gè)至少還包含一個(gè)進(jìn)程的組均要發(fā)回IGMP報(bào)告。否則路由器就會(huì)認(rèn)為改組已經(jīng)不存在成員而撤銷。
通過(guò)使用這些規(guī)則和報(bào)文,多播路由器對(duì)每個(gè)接口保持一個(gè)表,表中記錄接口上至少還包含一個(gè)主機(jī)的多播組。
另外IGMP報(bào)告和查詢同樣具有TTL生存時(shí)間,比如一個(gè)TTL為0的多播數(shù)據(jù)報(bào)將被限制在同一主機(jī),默認(rèn)情況下TTL設(shè)置為1也就是只允許在同一個(gè)子網(wǎng)內(nèi)。顯然當(dāng)TTL大于2時(shí)多播數(shù)據(jù)包將會(huì)有多播路由器轉(zhuǎn)發(fā)。
值得注意的是,從224.0.0.0到224.0.0.255的特殊地址空間,是用于多播范圍不超過(guò)一跳的應(yīng)用,不管其TTL值為多少,多播路由器均不會(huì)轉(zhuǎn)發(fā)。
總結(jié),多播是一種將報(bào)文發(fā)往多個(gè)接受者的通信方式,在許多應(yīng)用中他比廣播更為好用,因?yàn)樗档土瞬粎⑴c通信主機(jī)的負(fù)擔(dān)。
聯(lián)系客服