ping程序?yàn)槲覀兲峁┝瞬榭碔P記錄路由(RR)選項(xiàng)的機(jī)會。大多數(shù)不同版本的ping程序都提供-R選項(xiàng),以提供記錄路由的功能。它使得ping程序在發(fā)送出去的IP數(shù)據(jù)報(bào)中設(shè)置IPRR選項(xiàng)(該IP數(shù)據(jù)報(bào)包含ICMP回顯請求報(bào)文)。這樣,每個處理該數(shù)據(jù)報(bào)的路由器都把它的IP地址放入選項(xiàng)。
ping程序?yàn)槲覀兲峁┝瞬榭碔P記錄路由(RR)選項(xiàng)的機(jī)會。大多數(shù)不同版本的ping程序都提供-R選項(xiàng),以提供記錄路由的功能。它使得ping程序在發(fā)送出去的IP數(shù)據(jù)報(bào)中設(shè)置IPRR選項(xiàng)(該IP數(shù)據(jù)報(bào)包含ICMP回顯請求報(bào)文)。這樣,每個處理該數(shù)據(jù)報(bào)的路由器都把它的IP地址放入選項(xiàng)字段中。當(dāng)數(shù)據(jù)報(bào)到達(dá)目的端時,IP地址清單應(yīng)該復(fù)制到ICMP回顯應(yīng)答中,這樣返回途中所經(jīng)過的路由器地址也被加入清單中。當(dāng)ping程序收到回顯應(yīng)答時,它就打印出這份IP地址清單。
這個過程聽起來簡單,但存在一些缺陷。源端主機(jī)生成RR選項(xiàng),中間路由器對RR選項(xiàng)的處理,以及把ICMP回顯請求中的RR清單復(fù)制到ICMP回顯應(yīng)答中,所有這些都是選項(xiàng)功能。幸運(yùn)的是,現(xiàn)在的大多數(shù)系統(tǒng)都支持這些選項(xiàng)功能,只是有一些系統(tǒng)不把ICMP請求中的IP清單復(fù)制到ICMP應(yīng)答中。
但是,最大的問題是IP首部中只有有限的空間來存放IP地址。我們從圖3-1可以看到,IP首部中的首部長度字段只有4bit,因此整個IP首部最長只能包括15個32bit長的字(即60個字節(jié))。由于IP首部固定長度為20字節(jié),RR選項(xiàng)用去3個字節(jié)(下面我們再討論),這樣只剩下37個字節(jié)(60-20-3)來存放IP地址清單,也就是說只能存放9個IP地址。對于早期的ARPANET來說,9個IP地址似乎是很多了,但是現(xiàn)在看來是非常有限的(在第8章中,我們將用Traceroute工具來確定數(shù)據(jù)報(bào)的路由)。除了這些缺點(diǎn),記錄路由選項(xiàng)工作得很好,為詳細(xì)查看如何處理IP選項(xiàng)提供了一個機(jī)會。
IP數(shù)據(jù)報(bào)中的RR選項(xiàng)的一般格式如圖7-3所示。
code是一個字節(jié),指明IP選項(xiàng)的類型。對于RR選項(xiàng)來說,它的值為7。len是RR選項(xiàng)總字節(jié)長度,在這種情況下為39(盡管可以為RR選項(xiàng)設(shè)置比最大長度小的長度,但是ping程序總是提供39字節(jié)的選項(xiàng)字段,最多可以記錄9個IP地址。由于IP首部中留給選項(xiàng)的空間有限,它一般情況都設(shè)置成最大長度)。
ptr稱作指針字段。它是一個基于1的指針,指向存放下一個IP地址的位置。它的最小值為4,指向存放第一個IP地址的位置。隨著每個IP地址存入清單,ptr的值分別為8,12,16,最大到36。當(dāng)記錄下9個IP地址后,ptr的值為40,表示清單已滿。
當(dāng)路由器(根據(jù)定義應(yīng)該是多穴的)在清單中記錄IP地址時,它應(yīng)該記錄哪個地址呢?是入口地址還是出口地址?為此,RFC791[Postel1981a]指定路由器記錄出口IP地址。我們在后面將看到,當(dāng)原始主機(jī)(運(yùn)行ping程序的主機(jī))收到帶有RR選項(xiàng)的ICMP回顯應(yīng)答時,它也要把它的入口IP地址放入清單中。
眾信咨詢:互聯(lián)網(wǎng)資質(zhì)代理誠信品牌