技術(shù)tcpip詳解卷2實(shí)現(xiàn)_第1頁(yè)
技術(shù)tcpip詳解卷2實(shí)現(xiàn)_第2頁(yè)
技術(shù)tcpip詳解卷2實(shí)現(xiàn)_第3頁(yè)
技術(shù)tcpip詳解卷2實(shí)現(xiàn)_第4頁(yè)
技術(shù)tcpip詳解卷2實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

IGMP在本地網(wǎng)絡(luò)上的主機(jī)和路由器之間傳達(dá)組成員信息。路由器定時(shí)向“所有主機(jī)組”多播IGMP查詢。主機(jī)多播IGMPIGMP規(guī)范在RFC1112中。卷1的第13章討論了IGMP的規(guī)范,并給出了一些例子。IGMP是位于IP(2),它的報(bào)文是由IP數(shù)據(jù)報(bào)運(yùn)載的(與ICMP一樣)。與ICMPIGMP,但進(jìn)程可以通過(guò)IGMP插口發(fā)送或接收IGMP報(bào)文。這個(gè)特性使得能夠把多播選路守護(hù)程序作為用戶級(jí)進(jìn)程實(shí)現(xiàn)。圖13-1IGMPIGMP處理的關(guān)鍵是一組在圖13-1in_multiIGMP查詢使igmp_input為每個(gè)in_multi結(jié)構(gòu)初始化一個(gè)遞減定時(shí)器。該定時(shí)器由igmp_fasttimoigmp_fasttimo調(diào)用igmp_sendreport。12in_multiip_setmoptionsigmp_joingroup。igmp_joingroup調(diào)用igmp_sendreport來(lái)發(fā)布新的組成員信息,igmp_sendreport完成對(duì)IGMP化,并把它傳給ip_output在圖13-1的左邊和右邊,我們看到一個(gè)原始插口可以直接發(fā)送和接收IGMP圖13-2中列出了實(shí)現(xiàn)IGMP協(xié)議的4 IGMP協(xié)議定義IGMP實(shí)現(xiàn)定義圖13-2 struct圖13-3 igpssndreports圖13-4IGMP圖13-5是在上執(zhí)行netstat-pigmp命令后,輸出的在圖15中,我們看到vangogh是連到一個(gè)使用P的網(wǎng)絡(luò)上的,但是vangogh沒(méi)有加入任何多播組,因?yàn)閟是0。第第13章IGMP:Internet組管理協(xié) 圖13-5IGMP IGMP沒(méi)有標(biāo)準(zhǔn)的SNMPMIB,但[McCloghrieFarinacci1994a]描述了一個(gè)IGMP的實(shí)驗(yàn) IGMP報(bào)文只有8字節(jié)長(zhǎng)。圖13-6顯示了Net/3使用的igmp圖13-6igmpigmp_type包括一個(gè)4bit的版本碼和一個(gè)4bit的類(lèi)型碼。圖13-7 1111230x11(IGMP_HOST_MEMBERSHIP_REPO圖13-7IGMP 2443-44 Net/3只使用版本1的報(bào)文。多播路由器發(fā)送1類(lèi)報(bào)文(IGMP_HOST_MEMBERSHIP_QUERY)向本地網(wǎng)絡(luò)上所有主機(jī)請(qǐng)求成員關(guān)系報(bào)告。對(duì)1類(lèi)IGMP報(bào)文的響應(yīng)是主機(jī)的一個(gè)2類(lèi)報(bào)文(IGMP_HOST_MEMBERSHIP_REPORT),報(bào)告它們的多播成員信息。3類(lèi)報(bào)文在路由器之間傳輸多播選路信息(第14章)。主機(jī)不處理31類(lèi)和245-46 在IGMP版本1中沒(méi)有使用igmp_code。igmp_cksum與IP類(lèi)似,計(jì)算IGMP報(bào)文的所有8 IPROTO_IGMP0000圖13-9IGMPprotosw盡管進(jìn)程有可能通過(guò)IGMPprotosw入口發(fā)送原始IP分組,但在本章,我們只考慮內(nèi)核三種事件觸發(fā)IGMP一個(gè)本地接口加入一個(gè)新的多播組(13.5節(jié)某個(gè)IGMP定時(shí)器超時(shí)(13.6節(jié))收到一個(gè)IGMP查詢(13.7節(jié))收到一個(gè)IGMP報(bào)告(13.7節(jié))加入一個(gè)組:igmp_joingroup在第12章中我們看到,當(dāng)一個(gè)新的in_multiin_addmultiigmp_joingroup。后面加入同一多播組的請(qǐng)求只增加in_multi164-178in指向組的新in_multi是環(huán)回接口的,則inm_timerigmp_joingroup返回。不報(bào)告“所有主機(jī)組”的成員關(guān)系,因?yàn)榧俣總€(gè)多播主機(jī)都是該組的成員。沒(méi)必要向環(huán)回接口發(fā)送組成員報(bào)告,因?yàn)楸镜刂鳈C(jī)是在回路網(wǎng)絡(luò)上的唯一系統(tǒng),它已經(jīng)知道它的成員狀態(tài)了。在其他情況下,新組的報(bào)告被立即發(fā)送,并根據(jù)組的情況為組定時(shí)器選擇一個(gè)隨機(jī)的值。全局標(biāo)志位igmp_timers_are_running被設(shè)置,表明至少使能一個(gè)定時(shí)器。igmp_fasttimo(13.6節(jié))檢查這個(gè)變量,避免不必要的處理。 告丟失或被破壞時(shí),有了它就保險(xiǎn)了。IGMP_RANDOM_DELAY(13-11圖)計(jì)算報(bào)告時(shí)延。根據(jù)RFC1122,報(bào)告定時(shí)器必須設(shè)成0到10之間的隨機(jī)秒數(shù)(IGMP_MAX_HOSTREPORT_DELAY)。因?yàn)镮GMP5次(PR_FASTHZ),所以IGMP_RANDOM_DELAY必須選擇一個(gè)在1~50之間的隨機(jī)數(shù)。如果r是把接到的所有IP分組數(shù)、主機(jī)的原始地址和多播組相加后得到的隨機(jī)數(shù),則且為找到各個(gè)in_multiNet/3in_multi表。在遍歷過(guò)程中, i_ia指向下一個(gè)in_ifaddri_inm指向當(dāng)前接口的in_multi結(jié)構(gòu)。第13章IGMP:Internet組管理協(xié) 154-169如果in_multi表有多個(gè)入口,i_inm就前進(jìn)到下一個(gè)入口。當(dāng)IN_NEXT_MULTI到達(dá)多播表的最后時(shí),i_ia就指向下一個(gè)接口,i_inm指向與該接口相關(guān)的第一個(gè)in_multi結(jié)構(gòu)。如果該接口沒(méi)有多播結(jié)構(gòu),while循環(huán)繼續(xù)遍歷整個(gè)接口表,直到搜索完 139igmp_fasttimo是IGMP的快速超時(shí)函數(shù),每秒被調(diào)用5187-198 如果igmp_timers_are_running為假,igmp_fasttimo立即返回,不再浪費(fèi)時(shí)間檢查各個(gè)定時(shí)器。199-213 igmp_fasttimoIN_FIRST_MULTI初始化step和inm。igmp_fasttimo函數(shù)用while循環(huán)找到各個(gè)in_multi結(jié)構(gòu)和IN_NEXT_MULTI宏。對(duì)每個(gè)結(jié)構(gòu):如果定時(shí)器不是0,則將其遞減。如果到達(dá)0,則發(fā)送一個(gè)IGMP0igmp_timers_are_214-232 唯一的參數(shù)inm指向被報(bào)告組的in_multi結(jié)構(gòu)。igmp_sendreport新的mbuf,準(zhǔn)備存放一個(gè)IGMP報(bào)文。igmp_sendreportmbuf第13章IGMP:Internet組管理協(xié) 233-245每次構(gòu)造IP首部和IGMP報(bào)文的一個(gè)字段。數(shù)據(jù)報(bào)的源地址設(shè)成INADDR_ANY,目的地址是被報(bào)告的多播組。ip_output用輸出接口的單播地址替換INADDR_ANY。每個(gè)組成員 最后,igmp_sentreport構(gòu)造一個(gè)ip_moptions結(jié)構(gòu),并把它與報(bào)文一起傳給ip_output。與in_multi結(jié)構(gòu)相關(guān)的接口被選做輸出的接口;TTL被設(shè)成1,使報(bào)告只進(jìn)程級(jí)的多播路由器必須監(jiān)聽(tīng)成員關(guān)系報(bào)告。在12.14節(jié)中我們看到,當(dāng)系統(tǒng)被IGMP數(shù)據(jù)報(bào)。通過(guò)普通的運(yùn)輸層分用程序把報(bào)文傳給在12.14節(jié)中,我們描述了ipintr的多播處理部分。我們看到,多播路由器接受所有IGMPIGMP報(bào)文(也即,那些接收它們的接口是組成員的查詢和成員關(guān)系報(bào)告)。驗(yàn)證IGMP

圖13-16(續(xù)52-96函數(shù)ipintr傳遞一個(gè)指向接受分組(存放在一個(gè)mbuf中)的指針m,和數(shù)據(jù)報(bào)IP首部數(shù)據(jù)報(bào)的長(zhǎng)度必須足夠容納一個(gè)IGMP報(bào)文(IGMP_MIN_LEN),并能被放在一個(gè)標(biāo)準(zhǔn)的mbuf首部中(m_pullup),而且還必須有正確的IGMP檢驗(yàn)和。如果發(fā)現(xiàn)有任何錯(cuò)誤,統(tǒng)計(jì)錯(cuò)igmp_input返回。igmp_inputigmp_type內(nèi)的代碼處理無(wú)效報(bào)文。記得在圖13-6中,igmp_typeswitch語(yǔ)句基于igmp_type(圖13-7)的結(jié)合。下面兒節(jié)分別討論幾種情況。把IGMP報(bào)文傳給原始157-163這個(gè)switch語(yǔ)句沒(méi)有default情況。所有有效報(bào)文(也就是,格式正確的報(bào)文)被傳給rip_input,在rip_input里被提交給所有監(jiān)聽(tīng)I(yíng)GMP報(bào)文的進(jìn)程。監(jiān)聽(tīng)進(jìn)程可以自IGMP報(bào)文。RFC1075推薦多播路由器每120秒至少發(fā)布一次IGMP97- 到達(dá)環(huán)回接口上的查詢報(bào)文被自動(dòng)丟棄(習(xí)題13.1)第第13章IGMP:Internet組管理協(xié) 接受查詢報(bào)文并不會(huì)立即引起IGM成員報(bào)告。相反,igmp_input為與接收查詢的接口相關(guān)的各個(gè)組定時(shí)器設(shè)置一個(gè)隨機(jī)的值IGMP_RANDOM_DELAY。當(dāng)某組的定時(shí)器超時(shí),則o一旦某個(gè)主機(jī)上的某個(gè)特定組的隨機(jī)定時(shí)器超時(shí),就向該組多播一個(gè)報(bào)告。這個(gè)報(bào)告將取消其接收一個(gè)IGMP成員關(guān)系報(bào)告是我們?cè)?3.1節(jié)中提到的不會(huì)產(chǎn)生IGMP報(bào)文的兩種事件之一。該報(bào)文的效果限于接收它的接口本地。圖13-18顯示了報(bào)文處理。123-146和發(fā)送到不正確多播組的成員關(guān)系報(bào)告一樣,發(fā)到環(huán)回接口上的報(bào)告被丟棄。也不完整地初始化的主機(jī)的源地址中可能沒(méi)有網(wǎng)絡(luò)號(hào)或主機(jī)號(hào)或兩者都沒(méi)有。igmp_report查看地址的A類(lèi)網(wǎng)絡(luò)部分,如果地址的網(wǎng)絡(luò)或子網(wǎng)部分是00。識(shí)符。這樣做的唯一原因是為了通知子網(wǎng)號(hào)所標(biāo)識(shí)的正在接收接口上的某個(gè)進(jìn)程級(jí)守護(hù)程序。如果接收接口屬于被報(bào)告的組,就把相關(guān)的報(bào)告定時(shí)器重新設(shè)成0圖13-18IGMP離開(kāi)一個(gè)組:igmp_leavegroup我們?cè)?2章中看到,當(dāng)in_multi結(jié)構(gòu)中的引用計(jì)數(shù)器跳到0in_delmulti調(diào)用第13章IGMP:Internet組管理協(xié) 179-186IGMP沒(méi)有采取任何動(dòng)作。不發(fā)明確的通知—下一次多播路由器發(fā)布IGMP查詢時(shí),接口不為該組生成IGMP報(bào)告。如果沒(méi)有為某個(gè)組生成報(bào)告,(),就不再發(fā)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論