IGMP版本迭代
IGMPv2
igmp版本2對(duì)版本1所做的改進(jìn)主要有:(1)共享網(wǎng)段上組播路由器的選舉機(jī)制共享網(wǎng)段表示一個(gè)網(wǎng)段上有多個(gè)組播路由器的情況。在這種情況下,由于此網(wǎng)段上運(yùn)行igmp的路由器都能從主機(jī)那里收到成員資格報(bào)告消息,因此,只需要一個(gè)路由器發(fā)送成員資格查詢消息,這就需要一個(gè)路由器選舉機(jī)制來確定一個(gè)路由器作為查詢器。其選舉過程如下:(1) 所有IGMPv2路由器在初始時(shí)都認(rèn)為自己是查詢器,并向本地網(wǎng)段內(nèi)的所有主機(jī)和路由器發(fā)送IGMP 普遍組查詢(General Query)報(bào)文(目的地址為:224.0.0.1)
(2) 本地網(wǎng)段中的其它IGMPv2路由器在收到該報(bào)文后,將報(bào)文的源IP 地址與自己的接口地址作比較。通過比較,IP 地址最小的路由器將成為查詢器,其它路由器成為非查詢器(Non-Querier);(3) 所有非查詢器上都會(huì)啟動(dòng)一個(gè)定時(shí)器(即其它查詢器存在時(shí)間定時(shí)器OtherQuerier Present Timer)。在該定時(shí)器超時(shí)前,如果收到了來自查詢器的IGMP查詢報(bào)文,則重置該定時(shí)器;否則,就認(rèn)為原查詢器失效,并發(fā)起新的查詢器選舉過程。在igmp版本1中,查詢器的選擇由組播路由協(xié)議決定;igmp版本2對(duì)此做了改進(jìn),規(guī)定同一網(wǎng)段上有多個(gè)組播路由器時(shí),具有最小ip地址的組播路由器被選舉出來充當(dāng)查詢器。(2)igmp版本2增加了離開組機(jī)制在igmp版本1中,主機(jī)悄然離開組播組,不會(huì)給任何組播路由器發(fā)出任何通知。造成組播路由器只能依靠組播組響應(yīng)超時(shí)來確定組播成員的離開。而在版本2中,當(dāng)一個(gè)主機(jī)決定離開時(shí),如果它是對(duì)一條成員資格查詢消息作出響應(yīng)的主機(jī),那么它就會(huì)發(fā)送一條離開組的消息。在IGMPv2 中,當(dāng)一個(gè)主機(jī)離開某組播組時(shí):(1) 該主機(jī)向本地網(wǎng)段內(nèi)的所有組播路由器(目的地址為224.0.0.2)發(fā)送離開組(Leave Group)報(bào)文;(2) 當(dāng)查詢器收到該報(bào)文后,向該主機(jī)所聲明要離開的那個(gè)組播組發(fā)送特定組查詢(Group-Specific Query)報(bào)文(目的地址字段和組地址字段均填充為所要查詢的組播組地址);(3) 如果該網(wǎng)段內(nèi)還有該組播組的其它成員,則這些成員在收到特定組查詢報(bào)文后,會(huì)在該報(bào)文中所設(shè)定的最大響應(yīng)時(shí)間(Max Response Time)內(nèi)發(fā)送成員關(guān)系報(bào)告報(bào)文;(4) 如果在最大響應(yīng)時(shí)間內(nèi)收到了該組播組其它成員發(fā)送的成員關(guān)系報(bào)告報(bào)文,查詢器就會(huì)繼續(xù)維護(hù)該組播組的成員關(guān)系;否則,查詢器將認(rèn)為該網(wǎng)段內(nèi)已無該組播組的成員,于是不再維護(hù)這個(gè)組播組的成員關(guān)系。(3)igmp版本2增加了對(duì)特定組的查詢?cè)趇gmp版本1中,組播路由器的一次查詢,是針對(duì)該網(wǎng)段下的所有組播組。這種查詢稱為普遍組查詢。在igmp版本2中,在普遍組查詢之外增加了特定組的查詢,這種查詢報(bào)文的目的ip地址為該組播組的ip地址,報(bào)文中的組地址域部分也為該組播組的ip地址。這樣就避免了屬于其它組播組成員的主機(jī)發(fā)送響應(yīng)報(bào)文。(4)igmp版本2增加了最大響應(yīng)時(shí)間字段igmp版本2增加最大響應(yīng)時(shí)間字段,以動(dòng)態(tài)地調(diào)整主機(jī)對(duì)組查詢報(bào)文的響應(yīng)時(shí)間。
IGMPv3
1)主機(jī)控制能力的增強(qiáng)IGMPv3 增加了針對(duì)組播源的過濾模式(INCLUDE/EXCLUDE),使主機(jī)在加入某組播組G 的同時(shí),能夠明確要求接收或拒絕來自某特定組播源S 的組播信息。當(dāng)主機(jī)加入組播組時(shí):若要求只接收來自指定組播源如S1、S2、……的組播信息,則其報(bào)告報(bào)文中可以標(biāo)記為INCLUDE Sources(S1,S2,……);若拒絕接收來自指定組播源如S1、S2、……的組播信息,則其報(bào)告報(bào)文中可以標(biāo)記為EXCLUDE Sources(S1,S2,……)。2)查詢和報(bào)告報(bào)文功能的增強(qiáng)(1) 攜帶源地址的查詢報(bào)文IGMPv3 不僅支持IGMPv1 的普遍組查詢和IGMPv2 的特定組查詢,而且還增加了對(duì)特定源組查詢的支持:z 普遍組查詢報(bào)文中,既不攜帶組地址,也不攜帶源地址;z 特定組查詢報(bào)文中,攜帶組地址,但不攜帶源地址;z 特定源組查詢報(bào)文中,既攜帶組地址,還攜帶一個(gè)或多個(gè)源地址。(2) 包含多組記錄的報(bào)告報(bào)文IGMPv3 報(bào)告報(bào)文的目的地址為224.0.0.22,可以攜帶一個(gè)或多個(gè)組記錄。在每個(gè)組記錄中,包含有組播組地址和組播源地址列表。組記錄可以分為多種類型,如下:IS_IN:表示組播組與組播源列表之間的過濾模式為INCLUDE,即只接收從指定組播源列表發(fā)往該組播組的組播數(shù)據(jù)。IS_EX:表示組播組與組播源列表之間的過濾模式為EXCLUDE,即只接收從指定組播源列表之外的組播源發(fā)往該組播組的組播數(shù)據(jù)。z TO_IN:表示組播組與組播源列表之間的過濾模式由EXCLUDE 轉(zhuǎn)變?yōu)镮NCLUDE。TO_EX:表示組播組與組播源列表之間的過濾模式由INCLUDE 轉(zhuǎn)變?yōu)镋XCLUDE。ALLOW:表示在現(xiàn)有狀態(tài)的基礎(chǔ)上,還希望從某些組播源接收組播數(shù)據(jù)。如果當(dāng)前的對(duì)應(yīng)關(guān)系為INCLUDE,則向現(xiàn)有組播源列表中添加這些組播源;如果當(dāng)前的對(duì)應(yīng)關(guān)系為EXCLUDE,則從現(xiàn)有組播源列表中刪除這些組播源。BLOCK:表示在現(xiàn)有狀態(tài)的基礎(chǔ)上,不再希望從某些組播源接收組播數(shù)據(jù)。如果當(dāng)前的對(duì)應(yīng)關(guān)系為INCLUDE,則從現(xiàn)有組播源列表中刪除這些組播源;如果當(dāng)前的對(duì)應(yīng)關(guān)系為EXCLUDE,則向現(xiàn)有組播源列表中添加這些組播源。實(shí)現(xiàn)步驟如下:1、當(dāng)主機(jī)某個(gè)進(jìn)程加入一個(gè)組播組時(shí),主機(jī)發(fā)送一個(gè)IGMP 報(bào)告。若一個(gè)主機(jī)多個(gè)進(jìn)程同時(shí)加入同一組,則發(fā)送一個(gè)IGMP 報(bào)告。2、進(jìn)程離開一個(gè)多播組時(shí),主機(jī)不發(fā)送IGMP 報(bào)告,即便是組中最后一個(gè)進(jìn)程離開多播組。當(dāng)主機(jī)確定已不再有組成員后,在隨后收到的IGMP 查詢中就不應(yīng)答報(bào)文。3、多播路由器定時(shí)發(fā)送IGMP 查詢是否還有其他主機(jī)包含有屬于多播組的進(jìn)程。多播路由器必須向每個(gè)接口發(fā)送IGMP 查詢。4、主機(jī)通過發(fā)送IGMP 報(bào)告來響應(yīng)一個(gè)IGMP 查詢,對(duì)每個(gè)至少還包含一個(gè)進(jìn)程的組均要發(fā)回IGMP 報(bào)告。使用上述查詢和報(bào)告報(bào)文,多播路由器對(duì)每個(gè)接口保持一張映射表,表中記錄了接口上包含的一個(gè)或多個(gè)主機(jī)多播組。當(dāng)路由器收到要轉(zhuǎn)發(fā)的多播數(shù)據(jù)報(bào)時(shí),只需將該數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到該接口上。