本篇結(jié)構(gòu):
- ICMP
- IGMP
- 附
- 反思
接著上一篇TCP/IP--劃分子網(wǎng)和構(gòu)造超網(wǎng)霜瘪,本章接著分享IP協(xié)議的兩個(gè)配套協(xié)議--ICMP和IGMP。
一转质、ICMP
1.1酪碘、什么是ICMP
ICMP的全稱是Internet Control Message Protocol(網(wǎng)際控制信息協(xié)議)。
ICMP工作在TCP/IP體系中的網(wǎng)絡(luò)層么夫,是IP協(xié)議的一個(gè)補(bǔ)充者冤,主要用于在主機(jī)與路由器之間傳遞控制信息,包括報(bào)告錯(cuò)誤档痪、交換受限控制和狀態(tài)信息等涉枫。ICMP報(bào)文通常被IP層或更高層協(xié)議(TCP或UDP)使用。ICMP報(bào)文是在IP數(shù)據(jù)報(bào)內(nèi)部傳輸?shù)?/strong>腐螟。IP協(xié)議是不可靠協(xié)議愿汰,不能保證 IP數(shù)據(jù)報(bào)能夠成功的到達(dá)目的主機(jī),無法進(jìn)行差錯(cuò)控制乐纸,當(dāng)遇到IP數(shù)據(jù)無法訪問目標(biāo)衬廷、IP路由器無法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時(shí),會(huì)自動(dòng)發(fā)送ICMP消息汽绢。
1.2泵督、ICMP報(bào)文格式
- 類型:一個(gè)8位類型字段,表示 ICMP 數(shù)據(jù)包類型庶喜;
- 代碼:一個(gè)8位代碼域小腊,表示指定類型中的一個(gè)功能,如果一個(gè)類型中只有一種功能久窟,代碼域置為 0秩冈;
- 檢驗(yàn)和:數(shù)據(jù)包中 ICMP 部分上的一個(gè)16位檢驗(yàn)和;
- ICMP數(shù)據(jù)部分:包含了所有接受到的數(shù)據(jù)報(bào)的IP報(bào)頭斥扛,還包含IP數(shù)據(jù)報(bào)中前8個(gè)字節(jié)的數(shù)據(jù)入问。
格式解釋:
ICMP報(bào)文的前4個(gè)字節(jié)是統(tǒng)一的格式,共有三個(gè)字段:即類型稀颁,代碼和檢驗(yàn)和芬失。
8位類型和8位代碼字段一起決定了ICMP報(bào)文的類型。
- 類型8匾灶,代碼0:表示回顯請(qǐng)求(ping請(qǐng)求)棱烂;
- 類型0,代碼0:表示回顯應(yīng)答(ping應(yīng)答)阶女;
- 類型11颊糜,代碼0:超時(shí)......
16位的檢驗(yàn)和字段:包括數(shù)據(jù)在內(nèi)的整個(gè)ICMP數(shù)據(jù)包的檢驗(yàn)和,其計(jì)算方法和IP頭部檢驗(yàn)和的計(jì)算方法一樣的秃踩。
ICMP報(bào)文具體分ICMP差錯(cuò)報(bào)告報(bào)文和ICMP詢問報(bào)文(對(duì)ICMP差錯(cuò)報(bào)文有時(shí)需要做特殊處理衬鱼,因此要對(duì)其進(jìn)行區(qū)分。如:對(duì)ICMP差錯(cuò)報(bào)文進(jìn)行響應(yīng)時(shí)憔杨,永遠(yuǎn)不會(huì)生成另一份ICMP差錯(cuò)報(bào)文鸟赫,否則會(huì)出現(xiàn)死循環(huán))。
1.3消别、ICMP種類
ICMP報(bào)文具體分ICMP差錯(cuò)報(bào)告報(bào)文和ICMP詢問報(bào)文(對(duì)ICMP差錯(cuò)報(bào)文有時(shí)需要做特殊處理抛蚤,因此要對(duì)其進(jìn)行區(qū)分。如:對(duì)ICMP差錯(cuò)報(bào)文進(jìn)行響應(yīng)時(shí)妖啥,永遠(yuǎn)不會(huì)生成另一份ICMP差錯(cuò)報(bào)文霉颠,否則會(huì)出現(xiàn)死循環(huán))。
下面主要學(xué)習(xí)幾種常用的ICMP報(bào)文類型荆虱。
1.ICMP差錯(cuò)報(bào)文
- 終點(diǎn)不可達(dá)(Type=3)
IP路由器無法將IP數(shù)據(jù)報(bào)發(fā)送給目的地址時(shí)蒿偎,會(huì)給發(fā)送端主機(jī)返回一個(gè)終點(diǎn)不可達(dá)ICMP消息。例如我們要連接對(duì)方一個(gè)不存在的系統(tǒng)端口(端口號(hào)小于1024)時(shí)怀读,將返回Type=3诉位、Code=3的ICMP報(bào)文,它要告訴我們:“嘿菜枷,別連接了苍糠,我不在家的!”啤誊,常見的不可到達(dá)類型還有網(wǎng)絡(luò)不可到達(dá)(Code=0)岳瞭、主機(jī)不可到達(dá)(Code=1)拥娄、協(xié)議不可到達(dá)(Code=2)等。
- 時(shí)間超過
超時(shí)報(bào)文的代碼域有兩種取值:Code=0表示傳輸超時(shí)瞳筏,Code=1表示重組分段超時(shí)稚瘾。
IP 數(shù)據(jù)包中有一個(gè)字段TTL(Time to live,生存周期)姚炕,它的值隨著每經(jīng)過一個(gè)路由器就會(huì)減1摊欠,當(dāng)路由器收到生存時(shí)間TTL為零的數(shù)據(jù)報(bào)時(shí),除丟棄該數(shù)據(jù)報(bào)外柱宦,還要向源站發(fā)送時(shí)間超過報(bào)文些椒。當(dāng)目的站在預(yù)先規(guī)定的時(shí)間內(nèi)不能收到一個(gè)數(shù)據(jù)報(bào)的全部數(shù)據(jù)報(bào)片時(shí),就將已收到的數(shù)據(jù)報(bào)片都丟棄掸刊,并向源站發(fā)送時(shí)間超過報(bào)文免糕。
- 參數(shù)問題
當(dāng)路由器或目的主機(jī)收到的數(shù)據(jù)報(bào)的首部中的字段的值不正確時(shí),就丟棄該數(shù)據(jù)報(bào)痒给,并向源站發(fā)送參數(shù)問題報(bào)文说墨。
- 改變路由(重定向)
如果路由器發(fā)現(xiàn)發(fā)送端主機(jī)使用次優(yōu)的路徑發(fā)送數(shù)據(jù)時(shí),那么它會(huì)返回一個(gè)ICMP 重定向消息給這個(gè)主機(jī)苍柏,這個(gè)消息包含了最合適的路由信息和源數(shù)據(jù)尼斧。主要發(fā)生在路由器持有更好的路由信息的情況下,路由器會(huì)通過這個(gè)ICMP 重定向消息給發(fā)送端主機(jī)一個(gè)更合適的發(fā)送路由试吁。
以下幾種情況都不會(huì)導(dǎo)致產(chǎn)生ICMP差錯(cuò)報(bào)文:
- ICMP差錯(cuò)報(bào)文(但是棺棵,ICMP查詢報(bào)文可能會(huì)產(chǎn)生ICMP差錯(cuò)報(bào)文);
- 目的地址是廣播地址或多播地址的IP數(shù)據(jù)報(bào)熄捍;
- 作為鏈路層廣播的數(shù)據(jù)報(bào)烛恤;
- 不是IP分片的第一片;
- 源地址不是單個(gè)主機(jī)的數(shù)據(jù)報(bào)余耽。即源地址不能為零地址缚柏、環(huán)回地址、廣播地址或多播地址碟贾。
這些規(guī)則是為了防止過去允許ICMP差錯(cuò)報(bào)文對(duì)廣播分組響應(yīng)所帶來的廣播風(fēng)暴币喧。
所有的ICMP差錯(cuò)報(bào)告報(bào)文中的數(shù)據(jù)字段都具有同樣的格式。將收到的需要進(jìn)行差錯(cuò)報(bào)告IP數(shù)據(jù)報(bào)的首部和數(shù)據(jù)字段的前8個(gè)字節(jié)提取出來袱耽,作為ICMP報(bào)文的數(shù)據(jù)字段杀餐。再加上響應(yīng)的ICMP差錯(cuò)報(bào)告報(bào)文的前8個(gè)字節(jié),就構(gòu)成了ICMP差錯(cuò)報(bào)告報(bào)文朱巨。提取收到的數(shù)據(jù)報(bào)的數(shù)據(jù)字段的前8個(gè)字節(jié)是為了得到運(yùn)輸層的端口號(hào)(對(duì)于TCP和UDP)以及運(yùn)輸層報(bào)文的發(fā)送序號(hào)(對(duì)于TCP)史翘。
<p><img src="http://ov2u3lly5.bkt.clouddn.com/20170929_icmp04.png"/></p>
2.ICMP詢問報(bào)文
- 回送消息
用于進(jìn)行通信的主機(jī)或路由之間,判斷發(fā)送數(shù)據(jù)包是否成功到達(dá)對(duì)端的消息∏矸恚可以向?qū)Χ酥鳈C(jī)發(fā)送回送請(qǐng)求消息必峰,也可以接收對(duì)端主機(jī)回來的回送應(yīng)答消息。
我們?nèi)粘J褂米疃嗟膒ing钻蹬,就是響應(yīng)請(qǐng)求(Type=8)和應(yīng)答(Type=0)自点,一臺(tái)主機(jī)向一個(gè)節(jié)點(diǎn)發(fā)送一個(gè)Type=8的ICMP報(bào)文,如果途中沒有異常(例如被路由器丟棄脉让、目標(biāo)不回應(yīng)ICMP或傳輸失敗)功炮,則目標(biāo)返回Type=0的ICMP報(bào)文溅潜,說明這臺(tái)主機(jī)存在。
- 時(shí)間戳消息
時(shí)間戳請(qǐng)求報(bào)文(Type=13)和時(shí)間戳應(yīng)答報(bào)文(Type=14)用于測(cè)試兩臺(tái)主機(jī)之間數(shù)據(jù)報(bào)來回一次的傳輸時(shí)間薪伏。傳輸時(shí)滚澜,主機(jī)填充原始時(shí)間戳,接收方收到請(qǐng)求后填充接收時(shí)間戳后以Type=14的報(bào)文格式返回嫁怀,發(fā)送方計(jì)算這個(gè)時(shí)間差设捐。一些系統(tǒng)不響應(yīng)這種報(bào)文。
1.4塘淑、ICMP應(yīng)用
1.PING
ping是一個(gè)用來查詢網(wǎng)絡(luò)通不通的一個(gè)工具萝招,是系統(tǒng)自帶的,運(yùn)行于內(nèi)核存捺,調(diào)用ICMP協(xié)議槐沼。
ping的工作原理:ping通過調(diào)用echo來發(fā)送請(qǐng)求,通過是否收到echo-reply來查詢網(wǎng)絡(luò)層的連通性捌治。ping的結(jié)果會(huì)給出傳送的時(shí)間和TTL的數(shù)據(jù)岗钩,還可以查看主機(jī)到目的主機(jī)的路由。這是因?yàn)镮CMP的ping請(qǐng)求數(shù)據(jù)報(bào)在每經(jīng)過一個(gè)路由器的時(shí)候肖油,路由器就會(huì)把自己的IP地址放到該數(shù)據(jù)包中兼吓,而目的主機(jī)則會(huì)把這個(gè)IP列表復(fù)制到ICMP數(shù)據(jù)包中發(fā)回給主機(jī)。但是森枪,IP頭能記錄的路由列表非常有限视搏,如果要觀看完整的路由信息,就要用到traceroute工具了疲恢。
2.traceroute
traceroute是用來偵測(cè)主機(jī)到目的主機(jī)所經(jīng)路由情況的工具凶朗,可以獲取到所經(jīng)路由器的IP地址。
traceroute的工作原理:它收到目的主機(jī)的IP后显拳,首先給目的主機(jī)發(fā)送一個(gè)TTL=1的UDP數(shù)據(jù)包棚愤,而經(jīng)過的第一個(gè)路由器收到這個(gè)數(shù)據(jù)包以后,就自動(dòng)將TTL減1。而TTL變?yōu)?以后宛畦,路由器就把這個(gè)包給拋棄了瘸洛,并同時(shí)產(chǎn)生一個(gè)主機(jī)不可達(dá)的ICMP數(shù)據(jù)包給主機(jī)。主機(jī)收到這個(gè)數(shù)據(jù)包以后就發(fā)送一個(gè)TTL=2的數(shù)據(jù)包給主機(jī)次和,然后刺激第二個(gè)路由器給主機(jī)發(fā)送ICMP數(shù)據(jù)包反肋,如此反復(fù)直到到達(dá)目的主機(jī)。這樣踏施,traceroute就拿到了所有的路由器IP石蔗,從而避免了IP頭只能記錄有限的路由IP
的問題。
二畅形、IGMP
IGMP也是IP協(xié)議的一個(gè)補(bǔ)充养距,位于TCP/IP體系中的網(wǎng)絡(luò)層。
2.1日熬、單播棍厌,多播,廣播的介紹
1.單播(Unicast)
單播是說竖席,對(duì)特定的主機(jī)進(jìn)行數(shù)據(jù)傳送耘纱。例如給某一個(gè)主機(jī)發(fā)送IP數(shù)據(jù)包。這時(shí)候毕荐,數(shù)據(jù)鏈路層給出的數(shù)據(jù)頭里面是非常具體的目的地址束析,對(duì)于以太網(wǎng)來 說,就是網(wǎng)卡的MAC地址《颍現(xiàn)在的具有路由功能的主機(jī)應(yīng)該可以將單播數(shù)據(jù)定向轉(zhuǎn)發(fā)畸陡,而目的主機(jī)的網(wǎng)絡(luò)接口則可以過濾掉和自己MAC地址不一致的數(shù)據(jù)。
2.廣播(Broadcast)
廣播是主機(jī)針對(duì)某一個(gè)網(wǎng)絡(luò)上的所有主機(jī)發(fā)送數(shù)據(jù)包虽填。這個(gè)網(wǎng)絡(luò)可能是網(wǎng)絡(luò)丁恭,可能是子網(wǎng),還可能是所有的子網(wǎng)斋日。如果是網(wǎng)絡(luò)牲览,例如A類網(wǎng)址的廣播就是 netid.255.255.255,如果是子網(wǎng)恶守,則是netid.netid.subnetid.255第献;如果是所有的子網(wǎng)(B類IP)則是則是 netid.netid.255.255。廣播所用的MAC地址FF-FF-FF-FF-FF-FF兔港。網(wǎng)絡(luò)內(nèi)所有的主機(jī)都會(huì)收到這個(gè)廣播數(shù)據(jù)庸毫,網(wǎng)卡只要把 MAC地址為FF-FF-FF-FF-FF-FF的數(shù)據(jù)交給內(nèi)核就可以了。一般說來ARP衫樊,或者路由協(xié)議RIP應(yīng)該是以廣播的形式播發(fā)的飒赃。
PS:
在使用TCP/IP 協(xié)議的網(wǎng)絡(luò)中利花,主機(jī)標(biāo)識(shí)段host ID 為全1的IP地址為廣播地址。
- 受限廣播
它不被路由發(fā)送载佳,但會(huì)被送到相同物理網(wǎng)絡(luò)段上的所有主機(jī)
IP地址的網(wǎng)絡(luò)字段和主機(jī)字段全為1就是地址255.255.255.255
- 直接廣播
網(wǎng)絡(luò)廣播會(huì)被路由炒事,并會(huì)發(fā)送到專門網(wǎng)絡(luò)上的每臺(tái)主機(jī)IP地址的網(wǎng)絡(luò)字段定義這個(gè)網(wǎng)絡(luò),主機(jī)字段通常全為1蔫慧,如 192.168.10.255挠乳。
3.多播(Multicast)
可以說廣播是多播的特例,多播就是給一組特定的主機(jī)(多播組)發(fā)送數(shù)據(jù)姑躲,這樣睡扬,數(shù)據(jù)的播發(fā)范圍會(huì)小一些(實(shí)際上播發(fā)的范圍一點(diǎn)也沒有變小),多播的MAC地址是最高字節(jié)的低位為一黍析,例 如01-00-00-00-00-00威蕉。多播組的地址是D類IP,規(guī)定是224.0.0.0-239.255.255.255橄仍。
224.0.0.0~224.0.0.255為預(yù)留的組播地址(永久組地址),地址224.0.0.0保留不做分配牍戚,其它地址供路由協(xié)議使用侮繁;
224.0.1.0~224.0.1.255是公用組播地址,可以用于Internet如孝;
224.0.2.0~238.255.255.255為用戶可用的組播地址(臨時(shí)組地址)宪哩,全網(wǎng)范圍內(nèi)有效;
239.0.0.0~239.255.255.255為本地管理組播地址第晰,僅在特定的本地范圍內(nèi)有效锁孟。
雖然多播比較特殊,但是究其原理茁瘦,多播的數(shù)據(jù)還是要通過數(shù)據(jù)鏈路層進(jìn)行MAC地址綁定然后進(jìn)行發(fā)送品抽。所以一個(gè)以太網(wǎng)卡在綁定了一個(gè)多播IP地址之后,必 定還要綁定一個(gè)多播的MAC地址甜熔,才能使得其可以像單播那樣工作圆恤。這個(gè)多播的IP和多播MAC地址有一個(gè)對(duì)應(yīng)的算法∏幌。可以看到 這個(gè)對(duì)應(yīng)不是一一對(duì)應(yīng)的盆昙,主機(jī)還是要對(duì)多播數(shù)據(jù)進(jìn)行過濾。
PS:廣播和多播的性質(zhì)是一樣的焊虏,路由器會(huì)把數(shù)據(jù)放到局域網(wǎng)里面淡喜,然后網(wǎng)卡對(duì)這些數(shù)據(jù)進(jìn)行過濾,只拿到自己打算要的數(shù)據(jù)诵闭,比如自己感興趣的多 播數(shù)據(jù)炼团,自己感興趣的組播數(shù)據(jù)。當(dāng)一個(gè)主機(jī)運(yùn)行了一個(gè)處理某一個(gè)多播IP的進(jìn)程的時(shí)候,這個(gè)進(jìn)程會(huì)給網(wǎng)卡綁定一個(gè)虛擬的多播mac地址们镜,并做出來一個(gè)多播 ip币叹。這樣,網(wǎng)卡就會(huì)讓帶有這個(gè)多播mac地址的數(shù)據(jù)進(jìn)來模狭,從而實(shí)現(xiàn)通信颈抚,而那些沒有監(jiān)聽這些數(shù)據(jù)的主機(jī)就會(huì)把這些數(shù)據(jù)過濾掉。
2.2嚼鹉、組播IP地址和MAC地址的關(guān)系
以太網(wǎng)組播地址范圍是從01-00-5E-00-00-00到01-00-5E-7F-FF-FF贩汉。組播MAC地址的高24bit位是以01-00-5E開頭,低23bit為組播IP地址的低23bit锚赤。
由于IP組播地址的高4bit是1110匹舞,標(biāo)識(shí)了組播組,而低28bit中只有23bit被映像到組播MAC地址上线脚,這樣IP組播地址中就會(huì)有5bit沒有使用赐稽,從而出現(xiàn)了32個(gè)IP組播地址映像到同一MAC地址上的結(jié)果。
2.3浑侥、IGMP概念
IGMP姊舵,就是Internet Group Management Protocol的意思。該協(xié)議用來在ip主機(jī)和與其直接相鄰的組播路由器之間建立寓落、維護(hù)組播組成員關(guān)系括丁,但不包括組播路由器之間的組成員關(guān)系信息的傳播與維護(hù),這部分工作由各組播路由協(xié)議完成伶选。所有參與組播的主機(jī)必須實(shí)現(xiàn)IGMP史飞。
IGMP目前有三個(gè)版本,目前用的最多的是IGMPv2仰税。IGMPv1主要基于查詢和響應(yīng)機(jī)制來完成對(duì)組播組成員的管理构资;IGMPv2增加了查詢器選舉機(jī)制和離開組機(jī)制;IGMPv3在兼容和繼承IGMPv1和IGMPv2的基礎(chǔ)上陨簇,進(jìn)一步增強(qiáng)了主機(jī)的控制能力蚯窥,并增強(qiáng)了查詢和報(bào)告報(bào)文的功能。
2.4塞帐、IGMP報(bào)文格式
1.IGMPv1:
V1報(bào)文格式如下:
- 4位版本
目前IGMP有V1拦赠,V2,V3三個(gè)版本葵姥,比如是V1則該4位為1荷鼠, V3則該4 位為3。
- 4位類型
有成員關(guān)系查詢0x11和成員關(guān)系報(bào)告0x12兩種類型榔幸。
- 校驗(yàn)和
該8個(gè)字節(jié)的校驗(yàn)碼允乐。
- 32位組地址
當(dāng)發(fā)送報(bào)文是成員關(guān)系報(bào)告時(shí)矮嫉,該32位組地址即組播組地址。 當(dāng)發(fā)送的報(bào)文是成員關(guān)系查詢時(shí)牍疏,該32位為全0蠢笋。V1版本只支持通用關(guān)系查詢,不支持特定組查詢鳞陨。
2.IGMPv2:
V2版本報(bào)文格式如下:
- 8位類型
有三種類型:
1昨寞、成員關(guān)系查詢0x11:在V2和V3中成員關(guān)系查詢?cè)黾犹囟ńM查詢。 常規(guī)查詢:用于確定哪些組播組是活躍的厦滤,即改組是否還有成員在使用援岩,常規(guī)查詢組地址由全零表示。
特定組查詢:用于查詢某具體組播組是否還有組成員掏导。
2享怀、成員關(guān)系報(bào)告0x16(版本1成員關(guān)系報(bào)告0x12)
3、離開組消息0x17趟咆。
- 8位最大響應(yīng)時(shí)間
以0.1秒為單位添瓷,默認(rèn)值是100,即10秒值纱。
- 校驗(yàn)和
報(bào)文段8個(gè)字節(jié)的校驗(yàn)碼仰坦。
- 組地址
1、成員關(guān)系查詢報(bào)文:常規(guī)查詢組低位為全0计雌,特定組查詢則應(yīng)設(shè)置對(duì)應(yīng)的組地址。
2玫霎、成員報(bào)告或離開組消息:組地址為要報(bào)告或要離開的組地址凿滤。
3.V1、V2庶近、V3比較:
2.5翁脆、IGMP協(xié)議
1.加入一個(gè)多播組
多播的基礎(chǔ)就是一個(gè)進(jìn)程的概念(使用的術(shù)語進(jìn)程是指操作系統(tǒng)執(zhí)行的一個(gè)程序),該進(jìn)程在一個(gè)主機(jī)的給定接口上加入了一個(gè)多播組鼻种。在一個(gè)給定接口上的多播組中的成員是動(dòng)態(tài)的—它隨時(shí)因進(jìn)程加入和離開多播組而變化反番。
這里所指的進(jìn)程必須以某種方式在給定的接口上加入某個(gè)多播組。進(jìn)程也能離開先前加入的多播組叉钥。這些是一個(gè)支持多播主機(jī)中任何API所必需的部分罢缸。使用限定詞“接口”是因?yàn)槎嗖ソM中的成員是與接口相關(guān)聯(lián)的。一個(gè)進(jìn)程可以在多個(gè)接口上加入同一多播組投队。
2.IGMP報(bào)告和查詢
多播路由器使用IGMP報(bào)文來記錄與該路由器相連網(wǎng)絡(luò)中組成員的變化情況枫疆。使用規(guī)則如下:
- 當(dāng)?shù)谝粋€(gè)進(jìn)程加入一個(gè)組時(shí),主機(jī)就發(fā)送一個(gè)IGMP報(bào)告敷鸦。如果一個(gè)主機(jī)的多個(gè)進(jìn)程加入同一組息楔,只發(fā)送一個(gè)IGMP報(bào)告寝贡。這個(gè)報(bào)告被發(fā)送到進(jìn)程加入組所在的同一接口上。
- 進(jìn)程離開一個(gè)組時(shí)值依,主機(jī)不發(fā)送IGMP報(bào)告圃泡,即便是組中的最后一個(gè)進(jìn)程離開。主機(jī)知道在確定的組中已不再有組成員后愿险,在隨后收到的IGMP查詢中就不再發(fā)送報(bào)告報(bào)文颇蜡。
- 多播路由器定時(shí)發(fā)送IGMP查詢來了解是否還有任何主機(jī)包含有屬于多播組的進(jìn)程。多播路由器必須向每個(gè)接口發(fā)送一個(gè)IGMP查詢拯啦。因?yàn)槁酚善飨M鳈C(jī)對(duì)它加入的每個(gè)多播組均發(fā)回一個(gè)報(bào)告澡匪,因此IGMP查詢報(bào)文中的組地址被設(shè)置為0。
- 主機(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ā)到(使用相應(yīng)的多播鏈路層地址)還擁有屬于那個(gè)組主機(jī)的接口上兵迅。
下圖顯示了兩個(gè)IGMP報(bào)文抢韭,一個(gè)是主機(jī)發(fā)送的報(bào)告,另一個(gè)是路由器發(fā)送的查詢恍箭。該路由器正在要求那個(gè)接口上的每個(gè)主機(jī)說明它加入的每個(gè)多播組刻恭。
3.離開報(bào)文(僅限IGMPv2和v3)
該報(bào)文由主機(jī)發(fā)出。當(dāng)主機(jī)離開組播組時(shí)發(fā)送此報(bào)文扯夭,向組播路由器報(bào)告離開了特定的組播組鳍贾。離開報(bào)文的目標(biāo)IP為224.0.0.2(所有組播路由器),IGMP報(bào)頭內(nèi)的組播IP為特定離開組的IP交洗。
2.6骑科、實(shí)現(xiàn)細(xì)節(jié)
為改善IGMP協(xié)議的效率,有許多實(shí)現(xiàn)的細(xì)節(jié)要考慮构拳。首先咆爽,當(dāng)一個(gè)主機(jī)首次發(fā)送IGMP報(bào)告(當(dāng)?shù)谝粋€(gè)進(jìn)程加入一個(gè)多播組)時(shí),并不保證該報(bào)告被可靠接收(因?yàn)槭褂玫氖荌P交付服務(wù))置森。下一個(gè)報(bào)告將在間隔一段時(shí)間后發(fā)送斗埂。這個(gè)時(shí)間間隔由主機(jī)在0 ~ 1 0秒的范圍內(nèi)隨機(jī)選擇。
其次凫海,當(dāng)一個(gè)主機(jī)收到一個(gè)從路由器發(fā)出的查詢后蜜笤,并不立即響應(yīng),而是經(jīng)過一定的時(shí)間間隔后才發(fā)出一些響應(yīng)(采用“響應(yīng)”的復(fù)數(shù)形式是因?yàn)樵撝鳈C(jī)必須對(duì)它參加的每個(gè)組均發(fā)送一個(gè)響應(yīng))盐碱。既然參加同一多播組的多個(gè)主機(jī)均能發(fā)送一個(gè)報(bào)告把兔,可將它們的發(fā)送間隔設(shè)置為隨機(jī)時(shí)延沪伙。在一個(gè)物理網(wǎng)絡(luò)中的所有主機(jī)將收到同組其他主機(jī)發(fā)送的所有報(bào)告,報(bào)告中的目的地址是那個(gè)組地址县好。這意味著如果一個(gè)主機(jī)在等待發(fā)送報(bào)告的過程中围橡,卻收到了發(fā)自其他主機(jī)的相同報(bào)告,則該主機(jī)的響應(yīng)就可以不必發(fā)送了缕贡。因?yàn)槎嗖ヂ酚善鞑⒉魂P(guān)心有多少主機(jī)屬于該組翁授,而只關(guān)心該組是否還至少擁有一個(gè)主機(jī)。的確晾咪,一個(gè)多播路由器甚至不關(guān)心哪個(gè)主機(jī)屬于一個(gè)多播組收擦。它僅僅想知道在給定的接口上的多播組中是否還至少有一個(gè)主機(jī)。
在沒有任何多播路由器的單個(gè)物理網(wǎng)絡(luò)中谍倦,僅有的IGMP通信量就是在主機(jī)加入一個(gè)新的多播組時(shí)塞赂,支持IP多播的主機(jī)所發(fā)出的報(bào)告。
三昼蛀、附
下圖是ICMP報(bào)文種類宴猾,僅供參考。
四叼旋、反思
IGMP還是不甚了解仇哆,希望往后能靜下心再來好好回顧,深入了解夫植。