TCP/IP--ICMP和IGMP

本篇結(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ī)則如下:

  1. 當(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)程加入組所在的同一接口上。
  2. 進(jìn)程離開一個(gè)組時(shí)值依,主機(jī)不發(fā)送IGMP報(bào)告圃泡,即便是組中的最后一個(gè)進(jìn)程離開。主機(jī)知道在確定的組中已不再有組成員后愿险,在隨后收到的IGMP查詢中就不再發(fā)送報(bào)告報(bào)文颇蜡。
  3. 多播路由器定時(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。
  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ā)到(使用相應(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還是不甚了解仇哆,希望往后能靜下心再來好好回顧,深入了解夫植。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讹剔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子详民,更是在濱河造成了極大的恐慌延欠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阐斜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诀紊,警方通過查閱死者的電腦和手機(jī)谒出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻奠,“玉大人笤喳,你說我怎么就攤上這事÷笛纾” “怎么了杀狡?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贰镣。 經(jīng)常有香客問我呜象,道長(zhǎng)膳凝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任恭陡,我火速辦了婚禮蹬音,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘休玩。我一直安慰自己著淆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布拴疤。 她就那樣靜靜地躺著永部,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呐矾。 梳的紋絲不亂的頭發(fā)上苔埋,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音凫佛,去河邊找鬼讲坎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愧薛,可吹牛的內(nèi)容都是我干的晨炕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼毫炉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瓮栗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞄勾,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤费奸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后进陡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愿阐,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年趾疚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缨历。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糙麦,死狀恐怖辛孵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赡磅,我是刑警寧澤魄缚,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站焚廊,受9級(jí)特大地震影響冶匹,放射性物質(zhì)發(fā)生泄漏习劫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一徙硅、第九天 我趴在偏房一處隱蔽的房頂上張望榜聂。 院中可真熱鬧,春花似錦嗓蘑、人聲如沸须肆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榜揖。三九已至愉昆,卻和暖如春盹憎,著一層夾襖步出監(jiān)牢的瞬間耕蝉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工佛嬉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逻澳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓暖呕,卻偏偏與公主長(zhǎng)得像斜做,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湾揽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容