版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ICMP在IP系統(tǒng)間傳遞差錯(cuò)和管理報(bào)文,是任何IP實(shí)現(xiàn)必需和要求的組成部分。ICMP的規(guī)RFC792[Pos1981b]。RFC950[Mogul和Pos1985]和RFC1256[Deering1991a]定義了的ICMP報(bào)文類型。RFC792[Braden1989a]提供了重要的ICMP細(xì)節(jié)。ICMP有自己的傳輸協(xié)議號(1),允許ICMP報(bào)文在IP數(shù)據(jù)報(bào)內(nèi)攜帶。應(yīng)用程序可以直接從第32章討論的原始IP接口發(fā)送或接收ICMP報(bào)文。我們可把ICMP報(bào)文分成兩類:差錯(cuò)和查詢。查詢報(bào)文是用一對請求和回答定義的。ICMP差錯(cuò)報(bào)文通常包含了引起錯(cuò)誤的IP數(shù)據(jù)報(bào)的第一個(gè)分片的IP首部(和選項(xiàng)),加上該分片數(shù)據(jù)部分的前8個(gè)字節(jié)。標(biāo)準(zhǔn)假定這8個(gè)字節(jié)包含了該分組層首部的所有分用信息,這樣層協(xié)議可以向正確的進(jìn)程提交ICMPTCP和UDP端在它們首部的前8個(gè)字節(jié)內(nèi)出現(xiàn) ICMP_ECHICMP_ECHOREPLICMP_TSAMICMP_TSTAMPREPLICMP_MASKREICMP_MASKREPLICMP_IICMP_IREQREPL信息回答(過時(shí)的ICMP_ROUTERADVERTICMP_ROUTESOLICIICMP_REDIRECICMP_REDIRECT_NEICMP_REDIRECT_HOSICMP_REDIRECT_TOSNEICMP_REDIRECT_TOSHOSICMP_UNREACICMP_UNREACH_NEICMP_UNREACH_HOS圖11-1ICMP ICMP_UNREACH_PROTOCOLICMP_UNREACH_PORTICMP_UNREACH_SRCFAIICMP_UNREACH_NEEDFRAICMP_UNREACH_NET_UNKNOWICMP_UNREACH_HOST_UNKNOWICMP_UNREACH_ISOLATEDICMP_UNREACH_NET_PROHIBICMP_UNREACH_HOST_PROHIICMP_UNREACH_TOSNETICMP_UNREACH_TOSHOST13N目的網(wǎng)絡(luò)未知N目的主機(jī)未知 B從管理上 ICMP_TIMXCEEICMP_TIMXCEED_INTRANSICMP_TIMXCEED_REASSICMP_PRRAMPROB_OPTABSETICMP_SOURCEQUENC
圖11-1(續(xù)PRC_欄顯示了Net/3處理的與協(xié)議無關(guān)的差錯(cuò)碼(1.6節(jié))和ICMP報(bào)文之間的映射。對請求和回答,這一列是空的。因?yàn)樵谶@種情況下不會產(chǎn)生差錯(cuò)。如果對一個(gè)ICMP這一行為空,說明Net/3不識別該碼,并自動(dòng)丟棄該差錯(cuò)報(bào)文。UDP欄是為UDP插口處理ICMPTCP欄是為TCP插口處理ICMP報(bào)文的函數(shù)。注意,是tcp_quench處理ICMP差錯(cuò),而不是tcp_notify。如果errno欄為空,內(nèi)核不向進(jìn)程報(bào)告ICMPICMPICMP報(bào)文被提其他協(xié)議格式化并發(fā)送報(bào)文。ICMP傳遞到達(dá)的差錯(cuò),并向適當(dāng)?shù)膫鬏攨f(xié)議或等待ICMP報(bào)文的進(jìn)程發(fā)出回答。另一方面,ICMP用一個(gè)合適的ICMP回答響應(yīng)大多數(shù)ICMP請求。圖11-4對和圖11-2ICMP報(bào)文類型和代碼(續(xù) 進(jìn)程不識別的ICMP圖11- 傳給原始圖11-4ICMP 圖11-5本章介紹的全局變量如圖11-6 structicmpstaICMP統(tǒng)計(jì)量(圖11-圖11-6統(tǒng)計(jì)量是由圖11-7所示的icmpstat 圖11-7 圖11-7續(xù)圖11-8顯示的是執(zhí)行netstat-s 圖11-8ICMP圖11-9顯示了SNMPICMP組的變量與Net/3 圖11-9ICMP組內(nèi)的簡單SNMP 圖11-9續(xù)icmpInMsgs是icps_inhist數(shù)組和icmpInErrors中的計(jì)數(shù)之和 Net/3通過圖11-10中的icmp結(jié)構(gòu)某個(gè)ICMP報(bào)文42-45 icmp_type標(biāo)識特定報(bào)文,icmp_cod進(jìn)一步指定該報(bào)文(圖1-1第1欄)。計(jì)算icmp_cksum的算與I首部檢驗(yàn)和相同,保護(hù)整個(gè)IMP報(bào)像IP一樣,不僅僅保護(hù)首部)。46-79 聯(lián)合icmp_hun(首部聯(lián)合)和icmp_dun(數(shù)據(jù)聯(lián)合)按照icmp_type和icmp_code多種ICMP報(bào)文。每種ICMP報(bào)使用icmp_hun;只有一部分報(bào)文用icmp_dun。沒有使用的字段必須設(shè)置為0。808 我們已經(jīng)看到,利用其他嵌套的結(jié)構(gòu)(例如mbuf、le_softc和ether_arp),圖1-11顯示了ICMP報(bào)文的整體結(jié)構(gòu),并再次強(qiáng)調(diào)ICMP報(bào)文是封裝在IP數(shù)據(jù)報(bào)里的。我們將在分析程序時(shí),分析所遇報(bào)文的特定結(jié)構(gòu)。圖11-10icmp圖11-10續(xù)
圖11-11一個(gè)ICMP報(bào)文(省略icmp_ICMP的protoswinetsw[4](圖11-13)的protosw結(jié)構(gòu)描述了ICMP,并支持內(nèi)核和進(jìn)程對協(xié)議的。圖11-12顯示了該結(jié)構(gòu)。在內(nèi)核里,icmp_input處理到達(dá)的ICMP報(bào)文,進(jìn)程產(chǎn)生的外出ICMP報(bào)文由rip_output處理。以rip_開頭的三個(gè)函數(shù)將在第32 SOCK_RA&inetdomai圖11-12ICMP的inetsw IPPROTO_ICMP(1PR_ATOMIC|PR_ADDicmp_inpurip_outpu將ICMP報(bào)文發(fā)送到IP0rip_ctloutpurip_usrre00000圖11-12續(xù)圖11-13數(shù)值為1的ip_p選擇了輸入處理:icmp_input回想起ipintr對數(shù)據(jù)報(bào)進(jìn)行分用是根據(jù)IP首部中的傳輸協(xié)議編號ip_p。對于ICMP函數(shù),間接調(diào)用icmp_input看到,在icmp_input中,每一個(gè)ICMP報(bào)文要被處理3次:被icmp_input處理一次;被與ICMP差錯(cuò)報(bào)文中的IP分組相關(guān)聯(lián)的傳輸協(xié)議處理一次;被記錄收到ICMP報(bào)文的進(jìn)程處理一次。ICMP
處理過程的總的構(gòu)成情況如
C
出 圖11-14ICMP的輸入處理過在以下5節(jié)(11.6~11.10)討論icmp_input:(1)驗(yàn)證收到的報(bào)文;(2)ICMP差錯(cuò)報(bào)文;(3)ICMP請求報(bào)文;(4)ICMP重定向報(bào)文;(5)ICMP回答報(bào)文。icmp_input函數(shù)的
圖11-15續(xù)131-134因?yàn)閕cmp_input是在中斷時(shí)調(diào)用的,此時(shí)堆棧的大小是有限的。所以,為了在每次調(diào)用icmp_input時(shí),避免動(dòng)態(tài)分配造成的延遲,以及使堆棧最小,這4個(gè)結(jié)構(gòu)是動(dòng)態(tài)分icmpsrc名容易引起誤解,因?yàn)閕cmp_input把它用作臨時(shí)sockaddr_in變量它也從包過源站址在Net/2版本的icmp_input中,在報(bào)文被raw_input函數(shù)提交給原始IP之前,報(bào)文的源站地址在函數(shù)的最后被到 中。而et/3調(diào)用只需要一個(gè)指向該分組的指針的rip_input,而不是raw_input。雖然有這個(gè)改變,但是 仍然保留了在et/2中名字。135-139icmp_input希望收到的ICMP報(bào)文(m)中含有一個(gè)指向該數(shù)據(jù)報(bào)的指針,以及該數(shù)據(jù)報(bào)IP首部的字節(jié)長度(hlen)。圖11-16列出了幾個(gè)在icmp_input里用于簡化檢測無效值 ICMP_MINLE8ICMP_TSLEICMP_MASKLEICMP_ADVLENMI(IP+ICMP+BADIP=20+8+8=ICMP_ADVL36+圖11-16ICMP的用來驗(yàn)證報(bào)文的常140-160icmp_input從ip_len取出IMP報(bào)文的大小,并把它存放在icmplen中。第8ipintr從ip_len中排除了IP首部的長度。如果報(bào)文長度太短,不是有效報(bào)文,就icps_tooshort,并丟棄該報(bào)文。如果在第一個(gè)mbuf中,ICMP首部和IP首部不是連續(xù)的,則由m_pullup保證IMP首部以及封閉的I分組的IP首部在同一個(gè)mbuf中。161-170icmp_input隱藏mbuf中的IP首部,并用in_cksum驗(yàn)證ICMP的檢驗(yàn)和。如果171-175如果報(bào)文類型(icmp_type)icmp_input就跳過switchraw語句(圖11-9)。如果在識別范圍內(nèi),icmp_inputicmp_code,switch按在ICMPswitchicmp_input向rip_input發(fā)送ICMP報(bào)文,后者把ICMP報(bào)文發(fā)布給準(zhǔn)備接收的進(jìn)程。只有那些被破壞的報(bào)文(長度或檢驗(yàn)和出錯(cuò))以及只由內(nèi)核處理的ICMP請求報(bào)不傳給rip_input。在這兩種情況下,icmp_input都立即返回,并跳過raw處的源程序。原始ICMP317-325 icmp_input把到達(dá)的報(bào)文傳給rip_input,rip_input依據(jù)報(bào)文里含有的協(xié)議及源站和目的站地址信息(32章),把報(bào)文發(fā)布給正在的進(jìn)程。原始IP機(jī)制允許進(jìn)程直接發(fā)送和接收ICMP新ICMP報(bào)文可由進(jìn)程處理而無需修改內(nèi)核(例如,路由器通告,圖11-28可以用進(jìn)程而無需用內(nèi)核模塊來實(shí)現(xiàn)發(fā) ICMP請求和處理回答的機(jī)制(ping 我們首先考慮ICMP差錯(cuò)報(bào)文。當(dāng)主機(jī)發(fā)出的數(shù)據(jù)報(bào)無法成功地提交給目的主機(jī)時(shí),它就顯示了多種ICMP差錯(cuò)報(bào)文的格式。
圖11-17ICMP差錯(cuò)報(bào)文(省略icmp_圖11-18中的源程序來自圖11-15中的switch圖11-18續(xù)176-216對ICMP差錯(cuò)的處理是最少的,因?yàn)檫@主要是層協(xié)議的責(zé)任。imcp_input把icmp_type和icmp_code映射到一個(gè)與協(xié)議無關(guān)的差錯(cuò)碼集上,該差錯(cuò)碼是由PRC_(圖11-19)表示的。PRC_常量有一個(gè)隱含的順序,正好與ICMP的code相對應(yīng)。這就解釋了為什么code是按一個(gè)PRC_常量遞增的。217-225如果識別出類型和碼,icmp_input就跳到delivericps_badlen的值就加1Net/3總是丟棄無效的ICMP報(bào)文,也不生成有關(guān)該無效報(bào)文的ICMP差錯(cuò)。這樣,就避免在兩個(gè)有缺陷的實(shí)現(xiàn)之間形成無限的差錯(cuò)報(bào)文序列。226-231icmp_input調(diào)用層協(xié)議的pr_ctlinput函數(shù),該函數(shù)根據(jù)原始數(shù)據(jù)報(bào)的ip_p,把到達(dá)分組分用到正確的協(xié)議,從而構(gòu)造出原始的IP數(shù)據(jù)報(bào)。差錯(cuò)碼(code)、原始IPicmpsrc)以及一個(gè)指向無效數(shù)據(jù)報(bào)的指針(icmp_ip)被傳給pr_ctlinput(如果是為該協(xié)議定義的)。圖23-31和圖27-12討論這些差錯(cuò)。232-23 PRC_IFDOWNPRC_MSGSIZEPRC_QUENCHPRC_QUENCHPRC_REDIRECT_HOSTPRC_REDIRECT_TOSHOSPRC_REDIRECT_TOSNETPRC_ROUTEDEADPRC_TIMXCEED_INTRANPRC_TIMXCEED_REASSPRC_UNREACH_HOSTPRC_UNREACH_NETPRC_UNREACH_PORPRC_UNREACH_PROTOCOPRC_UNREACH_SRCFAIS傳送過程中分組生命期到期圖11-19盡管PRC_常量表面上與協(xié)議無關(guān),但它們主要還是基于Internet協(xié)議族。其結(jié)果是,當(dāng)某個(gè)Internet協(xié)議族以外的協(xié)議把自己的差錯(cuò)映射到PRC_常量時(shí),會失去可指除路由器通告報(bào)文外,大多數(shù)Net/3所接收的ICMP請求報(bào)生成回答報(bào)文。為避免為回顯詢問:ICMP_ECHO和盡管ICMP非常簡單,但是ICMP回顯請求和回答卻是網(wǎng)絡(luò)管理員最有力的診斷工具。發(fā)出ICMP“”一個(gè)機(jī),也就是調(diào)用程序一次。許多系統(tǒng)提供該程序來手工發(fā)送ICMP回顯請求。卷1的第7章詳細(xì)討論了。程序的名字依照了聲納脈沖(soar),用其他物體對聲納脈沖的反射所產(chǎn)生的回聲確定它們的位置。卷1把這個(gè)名字解釋成PacketInterNetGroper,是不正確的。
圖11-20ICMPicmp_code總是0。icmp_id和icmp_seq設(shè)置成請求的發(fā)送方,回答中也不做修改。源系統(tǒng)可以用這些字段匹配請求和回答。icmp_data1-21是ICMP回顯處理和icmp_input實(shí)現(xiàn)反射ICMP請求的源程序。235-237通過把icmp_type變成ICMP_ECHOREPLY,并跳轉(zhuǎn)到reflect277-282在為每個(gè)ICMPicmp_input執(zhí)行reflect這里,數(shù)據(jù)報(bào)正確的長度被恢復(fù),在icps_reflect和icps_outhist[]中分別計(jì)算 圖11-22ICMPicmp_code總是0。icmp_id和icmp_seq的作用與它們在ICMP回顯報(bào)文中的一樣。請求的發(fā)送方設(shè)置icmp_otime(發(fā)出請求的時(shí)間);icmp_rtime(收到請求的時(shí)間)和icmp_ttim(發(fā)出回答的時(shí)間)UTC午夜開始的毫把與IP時(shí)間戳選項(xiàng)一樣。238-246 icmp_input對ICMP的響應(yīng),包括:把icmp_type改成ICMP_TSTAMPREPLY,記錄當(dāng)前icp_rtim和cmp_ttie,并跳轉(zhuǎn)到eflect地址掩碼詢問:ICMP_MASKREQ和ICMP地址掩碼請求和回答如圖11-24RFC950[Mogul和Pos 除非系統(tǒng)被明確地配置成地址掩碼的,否則,RFC1122向其發(fā)送掩碼回答。這樣,就避免系統(tǒng)與所有向它發(fā)出請求的系統(tǒng)共享不正確的地址掩碼。如果沒有管理員回答,系統(tǒng)也要忽略地址掩碼請求。
圖11- 如果全局整數(shù)icmpmaskrepl非零,Net/3會響應(yīng)地址掩碼請求。icmpmaskrepl的默認(rèn)值是0,icmp_sysctl可以通過systctl(811.14節(jié))修改它。Net/2系統(tǒng)中沒有控制回答地址掩碼請求的機(jī)制。其結(jié)果是,必須非常正確地配置Net/2接口的地址掩碼;該信息是與網(wǎng)絡(luò)上所有發(fā)出地址掩碼請求的系統(tǒng)共享的。地址掩碼報(bào)文的處理如圖11-25247256switch的執(zhí)行,在這里Net3無法增加icps_badlen。對其他ICMP257-267如果地址掩碼請求被發(fā)到0.0.0.0或255.255.255.255,源地址被保存在icmpdst中。ifaof_offoraddr把icmpdst作為源站地址,在同一網(wǎng)絡(luò)上查找in_ofaddr結(jié)0.0.0.0或255.255.255.255,ifaof_offoraddr返回一個(gè)指針,該指針指向與接收接口相關(guān)的第一個(gè)IP地址。269-270通過改變icmp_type,并把所選子網(wǎng)掩碼ia_sockmask到icmp_mask,271-276如果請求的源站地址全0RFC1122),并且源站不知道自己的地址,Net/3必須廣播這個(gè)回答,使源站系統(tǒng)接收到這個(gè)報(bào)文。在這種情況下,如果接收接口位于某個(gè)廣播或點(diǎn)到點(diǎn)網(wǎng)絡(luò)上,該回答的目的地址將分別是ia_ddr和ia_dstaddr。icmp_input把回答的目的地址放在ip_src里,因?yàn)閞eflect處的程序(圖11-21)會把源站和目的站地址倒過來。不改變單播請求的地址。信息詢問:ICMP_IREQ和ICMP信息報(bào)文已經(jīng)過時(shí)了。它們企圖廣播一個(gè)源和目的站地址字段的網(wǎng)絡(luò)部分為全0的請求,使系統(tǒng)發(fā)現(xiàn)連接的IP網(wǎng)絡(luò)的數(shù)量。響應(yīng)該請求的主機(jī)將返回一個(gè)填好網(wǎng)絡(luò)號的報(bào)文。RFC1122推薦主機(jī)不要實(shí)現(xiàn)ICMP信息報(bào)文,因?yàn)镽ARP(RFC903[Finlaysonetal,1984])和BOOTP(RFC951[Croft和Gilmore1985])更適于發(fā)現(xiàn)地址。RFC1541[Droms1993]描述的一個(gè)新協(xié)議,動(dòng)態(tài)主機(jī)配置協(xié)議(DynamicHostConfigurationProtocol,DHCP),可能會Net/2響應(yīng)ICMP信息請求報(bào)文。但是,Net/3把它們傳給rip_input路由器發(fā)現(xiàn): RFC1256定義了ICMP路由器發(fā)現(xiàn)報(bào)文。Net/3內(nèi)核不直接處理這些報(bào)文,而由rip_inputicmp_input中要討論的最后一個(gè)case是ICMP_REDIRECT。如8.5被發(fā)給錯(cuò)誤的路由器時(shí),產(chǎn)生重定向報(bào)文。該路由器把分組轉(zhuǎn)發(fā)給正確的路由器,并發(fā)回一個(gè)ICMP重定向報(bào)文,系統(tǒng)把信息記入它自己的路由表。
圖11-26ICMP283-290如果重定向報(bào)文中含有未識別的ICMP碼,icmp_input就跳到badcode(圖11-18的232行);如果報(bào)文具有無效長度或封閉的IP分組具有無效首部長度,則中止switch。圖11-16顯示了ICMP差錯(cuò)報(bào)文的最小長度是36(ICMP_ADVLENMIN)。ICMP_ADVLEN(icp)是當(dāng)選項(xiàng)時(shí),291-300icmp_input分別把重定向報(bào)文的源站地址(發(fā)送該報(bào)文的網(wǎng)關(guān))、為原始分組推薦的路由器(第一跳目的地)和原始分組的最終目的地址分配給icmpgw、icmpdst和這里,icmpsrc并不包含源站地址—這是方便存放目的地址的位置,無需再301-306Net/3按照RFC1122的推薦,等價(jià)地對待網(wǎng)絡(luò)重定向和主機(jī)重定向。重定向信息被傳給rtredirect,由這個(gè)函數(shù)更新路由表。重定向的目的地址(保存在icmpsrc)被傳給pfctlinput,由它通告重定向的所有協(xié)議域(7.3節(jié)),使協(xié)議有機(jī)會把緩存的到目的站的路由作廢。按照RFC1122,應(yīng)該把網(wǎng)絡(luò)重定向作為主機(jī)重定向?qū)Υ驗(yàn)楫?dāng)目的網(wǎng)絡(luò)劃分RFC1009要求,在網(wǎng)絡(luò)劃分子Net/3從不發(fā)重定向報(bào)文。ICMP重定向報(bào)文是IP路由選擇體系結(jié)構(gòu)的基本組成部分。盡管被劃分到差錯(cuò)報(bào)文類,但它卻是在任何有多個(gè)路由器的網(wǎng)絡(luò)正常運(yùn)行時(shí)出現(xiàn)的。第18章更詳細(xì)討論了IP路由選擇問題。內(nèi)核不處理任何ICMP回答報(bào)文。ICMP請求由進(jìn)程產(chǎn)生,內(nèi)核從不產(chǎn)生請求。所以,內(nèi)核把它接收的所有回答傳給等待ICMP報(bào)文的進(jìn)程。另外,ICMP路由器發(fā)現(xiàn)報(bào)文被傳給rip_input。有幾種方法產(chǎn)生外出的ICMP報(bào)文。第8章講到IP調(diào)用icmp_error來產(chǎn)生和發(fā)送ICMP差錯(cuò)報(bào)文。icmp_reflect發(fā)送ICMP回答報(bào)文,同時(shí),進(jìn)程也可能通過原始ICMPICMP報(bào)文。圖11-29顯示了這些函數(shù)與ICMP
圖11-29ICMPicmp_error在IP或?qū)訁f(xié)議的請求下,構(gòu)造一個(gè)ICMP差錯(cuò)請求報(bào)文,并把它傳確認(rèn)該報(bào)文(圖11-構(gòu)造首部(圖11-32把原來的數(shù)據(jù)報(bào)包含進(jìn)來(圖11-3346-57參數(shù)是:n,指向包含無效數(shù)據(jù)報(bào)緩存鏈的指針;type和code,ICMP差錯(cuò)類型和代碼;dest,ICMP重定向報(bào)文中的下一跳路由器地址;以及destifp,指向原始IP分組外出接口的指針。mtod把緩存鏈指針n轉(zhuǎn)換成oip,oip是指向緩存中ip結(jié)構(gòu)的指針。原始IP58-75icps_error統(tǒng)計(jì)除重定向報(bào)文外的所有ICMP差錯(cuò)。Net/3不把重定向報(bào)文看作錯(cuò)除IP_MF和IP_DF外,ip_off的某些位非零(習(xí)題1.10)。這表明oip不是數(shù)據(jù)報(bào)的第一個(gè)分片,而且ICMP決不能為數(shù)據(jù)報(bào)的分片而生成差錯(cuò)報(bào)文。無效數(shù)據(jù)報(bào)本身是一個(gè)ICMP差錯(cuò)報(bào)文。如果icmp_type是ICMPNet/3不考慮ICMP重定向報(bào)文差錯(cuò),盡管RFC1122該數(shù)據(jù)報(bào)是發(fā)給IP廣播和IPIP地址(也即,這個(gè)源站地址是一個(gè)全零地址、環(huán)回地址、Net/3無法檢查第一種情況。icmp_reflect函數(shù)強(qiáng)調(diào)了第二種情況(11.12Net/2的DeeringNet/3的 這些規(guī)則適用于ICMP差錯(cuò)報(bào)文,但不適用于ICMP回答。如RFC1122和RFC1127的討論,允許響應(yīng)廣播請求,但既不推薦也不鼓勵(lì)。Net/3只響應(yīng)具有單播源地址的廣播請求,因?yàn)閕p_output會把返回到廣播地址的ICMP報(bào)文丟棄(圖11-39)。76-106icmp_error以下面的方式構(gòu)造ICMPm_gethdr分配一個(gè)新的分組首部緩存。MH_ALIGN定位緩存的數(shù)據(jù)指針,使無效數(shù)據(jù)icmp_type、icmp_code、icmp_gwaddr(用于重定向)、icmp_pptr(用于參數(shù)問題)和icmp_nextmtu(用于要求分片報(bào)文)被初始化。icmp_nextmtu字段實(shí)現(xiàn)了RFC191中描述的要求分片報(bào)文的擴(kuò)展。卷1的24.2節(jié)描述的“路徑MTU發(fā)現(xiàn)算法”依賴于一旦構(gòu)造好ICMP首部,就必須把原始數(shù)據(jù)報(bào)的一部分附到首部上,如圖11-33
圖11-31ICMP107-125無效數(shù)據(jù)報(bào)的IP首部、選項(xiàng)和數(shù)據(jù)(一共是icmplen個(gè)字節(jié))被到ICMP差錯(cuò)報(bào)文中。同時(shí),首部的長度被加回?zé)o效數(shù)據(jù)報(bào)的ip_len中。在udp_usrreq中,UDP也把首部長度加回到無效數(shù)據(jù)報(bào)的ip_len一個(gè)ICMP報(bào)文,該報(bào)文具有無效分組IP首部內(nèi)的不正確的數(shù)據(jù)報(bào)長度。作者發(fā)現(xiàn),許多基于Net/2Net/1系統(tǒng)沒有這個(gè)問題。IP首部。無效數(shù)據(jù)報(bào)的IP首部(除選項(xiàng)外)被到ICMP報(bào)文的前面Net/2版本的這部分有一個(gè)錯(cuò)誤:函數(shù)的最后一個(gè)bcopy移動(dòng)oiplen個(gè)字節(jié),ip_lenip_hlip_pIP首部就完整了。RFC792和RFC1122推薦在ICMP報(bào)文中,把TOS字段設(shè)為0126-129 完整的報(bào)文被傳給icmp_reflect,由icmp_reflect把它發(fā)回源主機(jī)。丟掉無效數(shù)據(jù)報(bào)。icmp_reflect把ICMP回答或差錯(cuò)發(fā)回給請求或無效數(shù)據(jù)報(bào)的源站。必須牢記,icmp_reflect在發(fā)送數(shù)據(jù)報(bào)之前,把它的源站地址和目的地址倒過來。與ICMP報(bào)文的源站和目的站地址有關(guān)的規(guī)則非常復(fù)雜,圖11-34對其中幾個(gè)函數(shù)的作用作了小結(jié)。我們分三部分討論icmp_reflect函數(shù):源站和目的站地址選擇、選項(xiàng)構(gòu)造及組裝和發(fā)送。圖1-3顯示了該函數(shù)的第一部分。329-34 icmp_reflect一開始,就ip_dst,并把請求或差錯(cuò)報(bào)文的源站地ip_src移到ip_dst。icmp_error和icmp_reflect保證:ip_src對差錯(cuò)報(bào)文而言是有效的目的地址。ip_output丟掉所有發(fā)往廣播地址的分組。 在地址掩碼請求中,用接收接口的廣播或目的地址代替全0把作為鏈路級廣播或多播發(fā)送的數(shù)據(jù)報(bào)引起的差錯(cuò)報(bào)文丟棄。應(yīng)該丟棄(但沒有)發(fā)往把非單播目的地址轉(zhuǎn)換成接收接口的地址,對返回的報(bào)文來說,目的地址就是一個(gè)有效的源地址按照ICMP的請求丟棄輸出的廣播(也就是說,丟棄由發(fā)往廣播地址的分組產(chǎn)生的差錯(cuò)
圖11-34ICMP346-371 icmp_reflec在in_ifaddr中找到具有單播或廣播地址的接口,該接口地址與icmp_reflect匹配的接口可能不是接收該數(shù)據(jù)報(bào)的接口。如果沒有匹配,就選擇正在接收的接口的in_ifaddr結(jié)構(gòu),或者in_ifaddr中的第一個(gè)地址(如果該接口沒有被配置成IP函數(shù)把ip_src設(shè)成所選的地址,并把ip_tt改為255(MAXTT),因?yàn)檫@是一個(gè)新的數(shù)據(jù)報(bào)。RFC1700推薦把所有IP分組的TTL字段設(shè)成64。但是現(xiàn)在,許多系統(tǒng)把ICMP報(bào)TTL的取值有一個(gè)拆衷。小的TTL避免分組在路由回路里面循環(huán),但也有可能使分組無法到達(dá)遠(yuǎn)一點(diǎn)的節(jié)點(diǎn)(有很多跳)。大的TTL允許分組到達(dá)遠(yuǎn)距離的主機(jī),但卻讓分組在路由回路里循環(huán)較長時(shí)間。圖11-35續(xù)RFC1122提出,對到達(dá)的回顯請求或時(shí)間戳請求,要求把其中的源路由選項(xiàng)及記錄路由和時(shí)間戳選項(xiàng)的建議,附到回答報(bào)文中。在這個(gè)過程期間,源路由必須被逆轉(zhuǎn)過來。RFC1122沒有涉及在其他ICMP回答報(bào)文中如何處理這些選項(xiàng)。Net/3把這些規(guī)則應(yīng)用于地址掩碼icmp_reflect(圖11-21
圖11-36續(xù)372-385如果到達(dá)的數(shù)據(jù)報(bào)沒有選項(xiàng),控制被傳給430行(圖11-37)。icmp_error傳給icmp_reflect的差錯(cuò)報(bào)文從來沒有IP選項(xiàng),所以后面的程序只用于那些被轉(zhuǎn)換成回答并直接傳給icmp_reflect的ICMP請求。cp指向回答的選項(xiàng)的開始。ip_srcroute逆轉(zhuǎn)并返回所有在ipintr處理數(shù)據(jù)報(bào)時(shí)保存下來的源路由選項(xiàng)。如果ip_srcoute返回0,即請求中沒有源路由選項(xiàng),icmp_reflect386-416如果opts指向某個(gè)緩存,for循環(huán)搜索原始IP首部的選項(xiàng),在ip_srcroute返回在ICMP報(bào)文發(fā)送
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025招標(biāo)控制價(jià)建設(shè)工程造價(jià)咨詢合同
- 2025儀器儀表購銷合同
- 2024年刮泥機(jī)項(xiàng)目投資申請報(bào)告
- 醫(yī)療健康產(chǎn)業(yè)對宏觀經(jīng)濟(jì)的拉動(dòng)作用研究
- 2025年滬教版必修3生物上冊階段測試試卷含答案
- 2025年粵人版選擇性必修3地理下冊月考試卷
- 2024年滬教新版必修1物理上冊月考試卷
- 二零二五版牛只運(yùn)輸與養(yǎng)殖基地環(huán)保責(zé)任合同3篇
- 二零二五年度模具加工環(huán)保工藝與技術(shù)改造合同4篇
- 二零二五年度園林綠化苗木育種合同3篇
- 開展課外讀物負(fù)面清單管理的具體實(shí)施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國洗衣液市場未來發(fā)展趨勢及前景調(diào)研分析報(bào)告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 北京市房屋租賃合同自行成交版北京市房屋租賃合同自行成交版
- 《AM聚丙烯酰胺》課件
- 系統(tǒng)動(dòng)力學(xué)課件與案例分析
- 《智能網(wǎng)聯(lián)汽車智能傳感器測試與裝調(diào)》電子教案
- 客戶分級管理(標(biāo)準(zhǔn)版)課件
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
- 人教版數(shù)學(xué)七年級下冊數(shù)據(jù)的收集整理與描述小結(jié)
評論
0/150
提交評論