1 概述
本RFC描述一種ip/UDP引導(dǎo)協(xié)議(BOOTP),答應(yīng)一個(gè)無盤客戶端發(fā)現(xiàn)自己的IP地址,
服務(wù)器主機(jī)的地址,和裝入一個(gè)指定名稱的文件到內(nèi)存并且運(yùn)行。引導(dǎo)操作有兩階段組成。
本RFC描述第一個(gè)階段:'分配地址和選擇引導(dǎo)文件'。
在獲得地址和文件名信息后,就進(jìn)入引導(dǎo)的第二個(gè)階段:文件傳送。
文件傳送一般使用TFTP協(xié)議[9],因?yàn)閮蓚€(gè)階段均駐留在客戶端的PROM中。
但BOOTP也能夠與其它協(xié)議如SFTP或FTP一起工作。
我們建議客戶端的PROM軟件提供一種無須用戶交互的完整的引導(dǎo)方式。
這是一種無人值守的上電啟動(dòng)方式。
必須提供一種機(jī)制來讓用戶手工提供地址和文件名信息旁路BOOTP協(xié)議直接進(jìn)入文件傳送
階段。
假如提供非可變存儲(chǔ),我們建議在那里保存設(shè)置以旁路BOOTP協(xié)議直到這些設(shè)置導(dǎo)致文件
傳送階段失敗。
假如緩存的信息失敗,引導(dǎo)后退到第一階段并使用BOOTP。
協(xié)議的要點(diǎn):
1.使用了一個(gè)單獨(dú)的包交換(信息)。使用超時(shí)機(jī)制直到收到應(yīng)答。
雙向使用相同的包字段結(jié)構(gòu)。使用(最大可能長度的)固定長度的字段來簡(jiǎn)化結(jié)構(gòu)定義
和分析。
2.一個(gè)'opcode'字段包含兩個(gè)值。客戶端廣播一個(gè)'引導(dǎo)請(qǐng)求(bootrequest)'包。
服務(wù)器應(yīng)答一個(gè)'引導(dǎo)應(yīng)答(bootreply)'包。'bootrequest'包含客戶端的硬件地址,假如知道,
還包含它的IP地址。
3.請(qǐng)求可以包含客戶端指定的響應(yīng)服務(wù)器的名稱。
這樣客戶端可以強(qiáng)制從一個(gè)指定的主機(jī)引導(dǎo)。(假如一個(gè)相同的引導(dǎo)文件存在多種版本
或服務(wù)器在一個(gè)遠(yuǎn)距離的網(wǎng)絡(luò)/域。)
客戶端不必處理名稱/域服務(wù),這個(gè)功能推到了BOOTP服務(wù)器。
4.請(qǐng)求可以包含'通用(generic)'引導(dǎo)文件名。例如'unix'或'ethertip'。但服務(wù)器發(fā)送
引導(dǎo)應(yīng)答時(shí),它使用對(duì)應(yīng)的引導(dǎo)文件的確切的路徑名稱來取代這個(gè)字段。
服務(wù)器查詢客戶端的地址和請(qǐng)求文件名相關(guān)的數(shù)據(jù)庫,以使用客戶端自定義的特定引導(dǎo)
文件確定這個(gè)文件名稱。
假如引導(dǎo)請(qǐng)求文件名是空字符串,服務(wù)器返回一個(gè)帶有客戶端加載的默認(rèn)文件的文件名
字段。
5.客戶端不知道它們的IP地址的情況下,
服務(wù)器必須有一個(gè)硬件地址和IP地址對(duì)應(yīng)的數(shù)據(jù)庫。
這個(gè)客戶端IP地址被放在引導(dǎo)應(yīng)答的(對(duì)應(yīng))字段中。
6.某些網(wǎng)絡(luò)拓樸(如斯坦福的網(wǎng)絡(luò))可能在一個(gè)物理網(wǎng)上沒有一個(gè)直接可以訪問的TFTP
服務(wù)器
(例如在某些網(wǎng)上的所有的網(wǎng)關(guān)和主機(jī)都可能是無盤的)。
BOOTP答應(yīng)客戶端通過使用相鄰的網(wǎng)關(guān)從幾跳外的服務(wù)器上引導(dǎo)。請(qǐng)看下面'通過網(wǎng)關(guān)
引導(dǎo)'的章節(jié)。
這部分協(xié)議不需求客戶端部分做特定的動(dòng)作。
實(shí)現(xiàn)是可選的,網(wǎng)關(guān)和服務(wù)器需要一些額外的代碼。
2 包格式
除非另外指出,所有顯示的數(shù)字都是十進(jìn)制的。
簡(jiǎn)化起見,假設(shè)BOOTP包不會(huì)被分片。
所有數(shù)字的字段使用標(biāo)準(zhǔn)網(wǎng)絡(luò)字節(jié)順序。即,先傳送高位比特。
在引導(dǎo)請(qǐng)求的IP頭中,客戶端假如知道就填自己的IP源地址,否則填0。當(dāng)服務(wù)器地址不知
道時(shí),
IP目的地址將是廣播地址255.255.255.255。這個(gè)地址意味著'在本地網(wǎng)上廣播,我不知道我的
網(wǎng)絡(luò)號(hào)'[4]。
UDP頭包含源和目的端口號(hào)。BOOTP協(xié)議使用兩個(gè)保留的端口號(hào),'BOOTP客戶端'(68)
和'BOOTP服務(wù)器'(67)。
客戶使用'BOOTP服務(wù)器'做為目的端口發(fā)送請(qǐng)求;這通常是廣播。
服務(wù)器使用'BOOTP客戶端'做為目的端口發(fā)送應(yīng)答;取決于服務(wù)器的核心或驅(qū)動(dòng)設(shè)備,這可
能是也可能不是廣播
(在下面'雞和蛋的問題'標(biāo)題的章節(jié)中深入解釋)。
使用兩個(gè)保留的端口的原因是當(dāng)引導(dǎo)應(yīng)答必須廣播到客戶端避免'叫醒'并且調(diào)度BOOTP服
務(wù)器進(jìn)程。
因?yàn)榉?wù)器和其它主機(jī)都不會(huì)偵聽'BOOTP客戶端'端口,
所有進(jìn)入的廣播報(bào)文將在核心級(jí)別過濾掉。
我們不能簡(jiǎn)單地答應(yīng)客戶端找一個(gè)隨機(jī)端口號(hào)做為UDP源端口字段;因?yàn)榉?wù)器應(yīng)答可能
是廣播,
一個(gè)隨機(jī)選擇的端口號(hào)可能搞亂其它恰巧在偵聽那個(gè)端口的主機(jī)。
UDP長度字段設(shè)置成UDP長度加BOOTP部分的包。
UDP校驗(yàn)和可以由客戶端(或服務(wù)器)按照需要設(shè)置成0,以避免PROM實(shí)現(xiàn)中額外的費(fèi)用。
在下面的'包處理'章節(jié)中'[UDP校驗(yàn)和]'短語用來表示校驗(yàn)和可能被驗(yàn)證/計(jì)算。
字段字節(jié)數(shù) 描述
---------------------
op1packetopcode/messagetype.包操作碼/消息類型
1=BOOTREQUEST(引導(dǎo)請(qǐng)求),2=BOOTREPLY(引導(dǎo)應(yīng)答)
htype1hardwareaddresstype,硬件地址類型
seeARPsectionin"AssignedNumbers"RFC.請(qǐng)看"Assigned
Numbers"RFC中的ARP章節(jié)
'1'=10mbethernet10M以太網(wǎng)
hlen1hardwareaddresslength硬件地址長度
(eg'6'for10mbethernet).例如'6'是10M以太網(wǎng)
hops1clientsetstozero,客戶端設(shè)置成0
optionallyusedbygateways在跨越網(wǎng)關(guān)引導(dǎo)時(shí)網(wǎng)關(guān)可選擇使用
incross-gatewaybooting.
xid4transactionID,arandomnumber,
usedtomatchthisbootrequestwiththe
responsesitgenerates.事務(wù)ID,一個(gè)隨機(jī)數(shù),用來匹配引用請(qǐng)求
和應(yīng)答
secs2filledinbyclient,secondselapsedsince
clientstartedtryingtoboot.由客戶端填寫,客戶端引導(dǎo)開始后的
過去的秒數(shù)
--2unused未使用
ciaddr4clientIPaddress;客戶端IP地址,
filledinbyclientinbootrequestifknown.假如客戶端知道就在引導(dǎo)
請(qǐng)求中填入
yiaddr4'your'(client)IPaddress;'你的'(客戶端)IP地址
filledbyserverifclientdoesn't
knowitsownaddress(ciaddrwas0).假如客戶端不知道它的地址
(ciaddr是0),服務(wù)器填入
siaddr4serverIPaddress;服務(wù)器IP地址
returnedinbootreplybyserver.由服務(wù)器在引導(dǎo)應(yīng)答返回
giaddr4gatewayIPaddress,網(wǎng)關(guān)IP地址
usedinoptionalcross-gatewaybooting.在跨越網(wǎng)關(guān)引導(dǎo)中可以選擇
使用
chaddr16clienthardwareaddress,客戶端硬件地址
filledinbyclient.由客戶端填寫
sname64optionalserverhostname,可選的服務(wù)器主機(jī)名
nullterminatedstring.空結(jié)束的字符串
file128bootfilename,nullterminatedstring;引導(dǎo)文件名,空結(jié)束的字符串
'generic'nameornullinbootrequest,在引導(dǎo)請(qǐng)求中使用'通用'名稱
或空
fullyqualifiedDirectory-path是引導(dǎo)應(yīng)答中使用確切的目
錄路徑名稱
nameinbootreply.
vend64optionalvendor-specificarea,可選的賣主指定的區(qū)域,
e.g.couldbehardwaretype/serialonrequest,例如,可以是請(qǐng)求硬件
類型/序列,
or'capability'/remotefilesystemhandle或應(yīng)答的性能/遠(yuǎn)端文
件系統(tǒng)句柄。
onreply.Thisinfomaybesetasideforuse這些信息留給第三方
分析引導(dǎo)或核心(程序)使用。
byathirdphasebootstraporkernel.
3 雞和蛋的問題
假如客戶端不知道自己IP地址,服務(wù)器怎么發(fā)送IP報(bào)文到客戶端。
無論何時(shí)一條引導(dǎo)應(yīng)答被發(fā)送,發(fā)送設(shè)備執(zhí)行下列操作:
1.假如客戶端知道自己的IP地址('ciaddr'字段非零),
因?yàn)榭蛻舳四軌蚧貞?yīng)ARPs[5],那么IP能夠正常發(fā)送。
2.假如客戶端還不知道自己的IP地址(ciaddr是零),
客戶端就不能回應(yīng)引導(dǎo)應(yīng)答發(fā)送程序回的ARPs。這時(shí)有兩種選擇:
a.假如發(fā)送程序有必需的核心或驅(qū)動(dòng)鉤子程序來人工建立ARP地址緩沖條目,
就可以使用'chaddr'和'yiaddr'字段填入一個(gè)條目。當(dāng)然,這個(gè)條目象正常ARP建立的
其它條目一樣有一個(gè)生命時(shí)間,
引導(dǎo)應(yīng)答的發(fā)送程序就能夠簡(jiǎn)單地發(fā)送引導(dǎo)應(yīng)答到客戶端的IP地址了。UNIX(4.2
BSD)有這種功能。
b.假如發(fā)送程序缺少這些核心鉤子程序,就只能簡(jiǎn)單發(fā)送引導(dǎo)應(yīng)答到相應(yīng)接口的廣播
地址。
這只是在前面情況外的額外的廣播。
4 ARP在客戶端使用
客戶端PROM必須包含一個(gè)ARP的簡(jiǎn)單實(shí)現(xiàn),例如,地址緩沖能夠容納一個(gè)條目。
這將答應(yīng)客戶端在知道IP地址和引導(dǎo)文件名后執(zhí)行第二階段引導(dǎo)(TFTP)。
任何時(shí)候客戶端應(yīng)該預(yù)備回應(yīng)一個(gè)自己IP到硬件地址映射的ARP請(qǐng)求(假如知道)以接收
TFTP或BOOTP應(yīng)答。
因?yàn)橐龑?dǎo)應(yīng)答將包含服務(wù)器/網(wǎng)關(guān)的硬件源地址(在硬件中封裝),客戶端可以
避免發(fā)送一條ARP請(qǐng)求來申請(qǐng)后續(xù)的TFTP階段使用的服務(wù)器/網(wǎng)關(guān)IP地址。
但這應(yīng)該只是一種非凡情況,因?yàn)樯厦婷枋龅闹挥械诙A段的引導(dǎo)仍然答應(yīng)。
5 與RARP對(duì)照
提議客戶端使用一個(gè)早先的協(xié)議,反向地址解析協(xié)議(RARP)[1]來通過它的硬件地址確定自
己的IP地址。
但RARP的劣勢(shì)是它是一個(gè)硬件鏈路層的協(xié)議(不是基于IP/UDP)。
這意味著RARP只能在包含非凡的為訪問原始報(bào)文修改的核心和驅(qū)動(dòng)的主機(jī)上實(shí)現(xiàn)。
因?yàn)楝F(xiàn)在存在不同組織維護(hù)的許多網(wǎng)絡(luò)核心,一個(gè)不要求修改核心的引導(dǎo)協(xié)議是一個(gè)確定
的優(yōu)勢(shì)。
BOOTP除了上述章節(jié)描述的有用的特性外,還提供硬件到IP地址的查詢功能。
6 包處理
6.1客戶端傳送
在第一次建立包前,最好把整個(gè)包的緩沖區(qū)清零;
這將所有的字段設(shè)置成默認(rèn)狀態(tài)。任何客戶端建立包中的下列字段。
IP目的地址被設(shè)置成255.255.255.255(廣播地址)或服務(wù)器的IP地址(假如知道)。
IP源地址和'ciaddr'設(shè)置成客戶端IP地址(假如知道),或者0。UDP頭使用適當(dāng)?shù)拈L度設(shè)
置;
源端口='BOOTP客戶端'端口,目標(biāo)端口='BOOTP服務(wù)器'端口。
'op'設(shè)置成'1',BOOTREQUEST(引導(dǎo)請(qǐng)求)。'htype'設(shè)置成在"Assigned
Numbers"RFCARP章節(jié)中分配的硬件地址類型。
'hlen'設(shè)置成硬件地址長度,例如,10M以太網(wǎng)是'6'。
'xid'設(shè)置成一個(gè)'隨機(jī)'事務(wù)ID。'secs'設(shè)置成客戶端引導(dǎo)開始后過去的秒數(shù)。
這個(gè)讓服務(wù)器知道客戶端已經(jīng)試了多長時(shí)間了。
當(dāng)數(shù)字變大,某些服務(wù)器可能更多注重這個(gè)客戶端提供不同的服務(wù)。
假如客戶端缺少一個(gè)適當(dāng)?shù)臅r(shí)鐘,它可以使用循環(huán)定時(shí)器建立一個(gè)粗略的估計(jì)值。
或者它可以選擇簡(jiǎn)單發(fā)送使用一個(gè)固定值如100秒的字段。
假如客戶端知道IP地址,'ciaddr'(和IP源地址)設(shè)置成這個(gè)值。
'chaddr'使用客戶端硬件地址填寫。
假如客戶端希望限制從一個(gè)特定服務(wù)器名引導(dǎo),就可以在'sname'中放一個(gè)空結(jié)束的字符
串。
使用的名字應(yīng)該是對(duì)應(yīng)的主機(jī)的正當(dāng)?shù)拿只騽e名。
客戶端在填寫'file'文件名字段是有許多選擇。
假如設(shè)置成空,意味著'我向使用默認(rèn)的文件來引導(dǎo)我的機(jī)器'。一個(gè)空文件名也意味著
'我只對(duì)找到客戶端/服務(wù)器/網(wǎng)關(guān)的IP地址感愛好,我不在乎文件名'。
這個(gè)字段也可以是一個(gè)'通用'名字入'unix'或'gateway';這意味著
'使用命名的程序配置來引導(dǎo)我的機(jī)器'。最后這個(gè)字段可以是確切的目錄路徑名字。
'vend'字段可以由客戶端填寫賣主的字符串或結(jié)構(gòu)。例如可以填寫機(jī)器硬件類型或序列
號(hào)。
但BOOTP服務(wù)器的操作應(yīng)該不依靠與這些存在的信息。
假如使用了'vend',推薦在'vend'中第一個(gè)項(xiàng)目為一個(gè)4字節(jié)的'魔術(shù)字(magicnumber)'。
這讓服務(wù)器確定在這個(gè)字段中它看到什么類型的信息。
數(shù)值可以由通常的'魔術(shù)字'過程分配,你挑一個(gè),它就成為魔術(shù)字。
引導(dǎo)應(yīng)答使用一個(gè)與引導(dǎo)請(qǐng)求不同的魔術(shù)字以答應(yīng)客戶端按照應(yīng)答信息進(jìn)行非凡的動(dòng)
作。
[UDP校驗(yàn)和]
6.2客戶端重傳策略
在一長段時(shí)間內(nèi)沒有收到應(yīng)答,客戶端應(yīng)該重傳請(qǐng)求。
時(shí)間間隔必須仔細(xì)選擇不要引起網(wǎng)絡(luò)風(fēng)暴。
可以考慮一個(gè)包含100臺(tái)機(jī)器的網(wǎng)絡(luò)在電源故障后發(fā)生的情況。
簡(jiǎn)單的每四秒重傳請(qǐng)求將沉沒網(wǎng)絡(luò)。
一個(gè)可能的策略,你可能考慮指數(shù)級(jí)的補(bǔ)償,象以太網(wǎng)在碰撞時(shí)那樣。
例如第一個(gè)包在0:00,第二個(gè)在:04,接著:08,接著:16,:32,:64。
你應(yīng)該隨機(jī)化每個(gè)時(shí)間;這就象以太網(wǎng)規(guī)格那樣以一個(gè)掩碼'與'一個(gè)隨機(jī)數(shù)進(jìn)入第一次補(bǔ)
償。
在每次后續(xù)的補(bǔ)償中,掩碼增長一個(gè)比特。
這樣在每次補(bǔ)償中平均延遲加倍。
在'平均'補(bǔ)償?shù)竭_(dá)60秒后,就不再增長了,但仍然隨機(jī)化。
在每次重傳前,客戶端應(yīng)該修改'secs'字段。[UDP校驗(yàn)和]
6.3服務(wù)器接收BOOTREQUEST(引導(dǎo)請(qǐng)求)
[UDP校驗(yàn)和]假如UDP目的端口不匹配'BOOTP服務(wù)器'端口,丟棄這個(gè)包。
假如服務(wù)器名字字段(sname)是空(沒有指定特定的服務(wù)器),或者sname是指定的并且
匹配我們的名字或別名,
繼續(xù)包的處理。
假如sname字段是指定的,但不匹配'我們',那么有多種選擇:
1.你可以選擇簡(jiǎn)單丟棄這個(gè)包。
2.假如查詢sname的名稱顯示它在一個(gè)網(wǎng)絡(luò)中,丟棄這個(gè)包。
3.假如sname在不同的網(wǎng)絡(luò)中,你可以選擇轉(zhuǎn)發(fā)這個(gè)包到那個(gè)地址。
假如這樣,檢查'giaddr'(網(wǎng)關(guān)地址)字段。假如'giaddr'是0,填入我的地址或可以用來
到達(dá)那個(gè)網(wǎng)絡(luò)的網(wǎng)關(guān)的地址。
然后轉(zhuǎn)發(fā)這個(gè)包。
假如客戶端IP地址(ciaddr)是0,那么客戶端不知道自己的IP地址。
嘗試在我們的數(shù)據(jù)庫中查找客戶端的硬件地址(chaddr,hlen,htype)。
假如沒有匹配,丟棄這個(gè)包。否則我們現(xiàn)在對(duì)這個(gè)客戶端有一個(gè)IP地址;填入'yiaddr'(你
的IP地址)字段。
我們現(xiàn)在檢查引導(dǎo)文件名字段(文件)。假如客戶端不關(guān)注文件名或想要默認(rèn)引導(dǎo)文件,
這個(gè)字段是空。
假如這個(gè)字段非空,可以將它和客戶端的IP地址做為數(shù)據(jù)庫的查詢要害字。
假如有默認(rèn)的文件或通用文件(可能由客戶端地址做為索引)或一個(gè)匹配的指定的路徑
名稱,
然后在'file'字段中填入選擇的引導(dǎo)文件的指定的路徑名稱。
假如字段是非空并且沒有匹配,那么客戶端要一個(gè)我們沒有的文件,丟棄這個(gè)包,也許
其它BOOTP服務(wù)器有這個(gè)文件。
賣主指定的數(shù)據(jù)字段'vend'現(xiàn)在應(yīng)該檢查了。假如提供一種可識(shí)別類型的數(shù)據(jù),
應(yīng)該進(jìn)行客戶端指定的動(dòng)作,并且回應(yīng)要填入應(yīng)答包中的'vend'數(shù)據(jù)字段。
例如,一個(gè)工作站客戶端可能提供一個(gè)驗(yàn)證字,并從服務(wù)器接收一個(gè)訪問遠(yuǎn)端文件的權(quán)
限,
或一套配置選項(xiàng)傳給馬上就要引導(dǎo)入的操作系統(tǒng)。
我的(服務(wù)器)IP地址填入'siaddr'字段。設(shè)置'op'字段為BOOTREPLY(引導(dǎo)應(yīng)答)。
UDP目的端口設(shè)置成'BOOTP客戶端'。假如客戶端地址'ciaddr'非0,把包發(fā)送到那里;
否則假如網(wǎng)關(guān)地址'giaddr'非0,設(shè)置UDP目的端口為'BOOTP服務(wù)器'并把包發(fā)送到
'giaddr'。
否則客戶端在我們的一個(gè)網(wǎng)絡(luò)中但它還不知道自己的IP地址,使用在上面'蛋'章節(jié)中描述
的方法來傳送它到客戶端。
假如使用'蛋'并且我們?cè)谥鳈C(jī)上有許多接口,使用'yiaddr'(你的IP地址)字段指出發(fā)送包
到哪個(gè)網(wǎng)絡(luò)(網(wǎng)絡(luò)/接口)。
[UDP校驗(yàn)和]
6.4服務(wù)器/網(wǎng)關(guān)接收BOOTREPLY(引導(dǎo)應(yīng)答)
[UDP校驗(yàn)和]假如'yiaddr'(你的[客戶端的]IP地址)指向我們的一個(gè)網(wǎng)絡(luò),使用上述'蛋'方
法來將它轉(zhuǎn)發(fā)到客戶端。
確認(rèn)將它傳送到'BOOTP客戶端'UDP目的端口。
6.5客戶端接收
不要忘記為我自己的IP地址(假如我知道)處理ARP請(qǐng)求。[UDP校驗(yàn)和]
客戶端應(yīng)該丟棄以下進(jìn)入的包:不是定位到引導(dǎo)端口的IP/UDP;不是BOOTREPLY(引
導(dǎo)應(yīng)答);
不匹配我的IP地址(假如我知道)或我的硬件地址;不匹配我的事務(wù)ID。
否則我們就收到一個(gè)成功的應(yīng)答。假如我以前不知道的話,'yiaddr'包含我的IP地址。
'file'是TFTP'讀請(qǐng)求'的文件名。服務(wù)器地址在'siaddr'中。假如'giaddr'(網(wǎng)關(guān)地址)非0,
那么包應(yīng)該先轉(zhuǎn)發(fā)到那里,然后到達(dá)服務(wù)器。
7 通過網(wǎng)關(guān)引導(dǎo)
這部分協(xié)議是可選的并要求許多網(wǎng)關(guān)和服務(wù)器配合的額外的代碼,但它答應(yīng)跨越網(wǎng)關(guān)引導(dǎo)。
這主要在網(wǎng)關(guān)是無盤機(jī)器時(shí)有用。
帶盤網(wǎng)關(guān)(例如,一個(gè)做為網(wǎng)關(guān)的UNIX機(jī)器)可能運(yùn)行它們自己的BOOTP/TFTP服務(wù)器。
偵聽BOOTREQUEST(引導(dǎo)請(qǐng)求)廣播的網(wǎng)關(guān)可能確定轉(zhuǎn)發(fā)還是適當(dāng)?shù)卦購V播這些請(qǐng)求。
例如,做為配置表格的一部分,網(wǎng)關(guān)可以有一個(gè)接收任意BOOTREQUEST(引導(dǎo)請(qǐng)求)廣
播的其它網(wǎng)絡(luò)或主機(jī)的列表。
即使考慮有一個(gè)'hops'字段,簡(jiǎn)單全部再廣播請(qǐng)求仍是一個(gè)差的方法,因?yàn)閺V播循環(huán)幾乎肯
定會(huì)發(fā)生。
轉(zhuǎn)發(fā)可以立即開始,或等'secs'(客戶端嘗試的秒數(shù))字段超過某個(gè)閥值。
假如一個(gè)網(wǎng)關(guān)確定轉(zhuǎn)發(fā)請(qǐng)求,它應(yīng)該查看'giaddr'(網(wǎng)關(guān)IP地址)字段。
假如是0,它就在這個(gè)字段中加入自己的IP地址(在接收的網(wǎng)絡(luò)中)。
也可以使用'hops'字段來可選控制包可以轉(zhuǎn)發(fā)多遠(yuǎn)。每次轉(zhuǎn)發(fā)應(yīng)該增加跳數(shù)。
例如,假如跳數(shù)超過'3',包應(yīng)該被丟棄。
[UDP校驗(yàn)和]
這里我們推薦在網(wǎng)關(guān)中增加這個(gè)非凡的轉(zhuǎn)發(fā)功能。
但不總是這樣子的。
在網(wǎng)上存在一些'BOOTP轉(zhuǎn)發(fā)代理'引導(dǎo)客戶端,這些代理可以適當(dāng)?shù)剞D(zhuǎn)發(fā)。
這樣這些服務(wù)可以和網(wǎng)關(guān)在一起,也可以不在一起。
當(dāng)轉(zhuǎn)發(fā)代理不和網(wǎng)關(guān)在一起時(shí),代理可以通過在接收的引導(dǎo)請(qǐng)求中'giaddr'字段加上接口的廣
播地址節(jié)省一些工作。
這樣應(yīng)答就可以使用普通的網(wǎng)關(guān)來轉(zhuǎn)發(fā),而不包含轉(zhuǎn)發(fā)代理。
當(dāng)然劣勢(shì)是你失去了使用'蛋'非廣播方式來發(fā)送應(yīng)答的能力,導(dǎo)致在客戶端網(wǎng)上的每個(gè)主機(jī)
的額外的花費(fèi)。
8 樣例BOOTP服務(wù)器數(shù)據(jù)庫
做為一個(gè)建議,我們提供一個(gè)BOOTP服務(wù)器查詢可以使用的樣例文本文件數(shù)據(jù)庫。
數(shù)據(jù)庫有兩個(gè)節(jié),使用第一列使用一個(gè)百分符的行做為定界符。
第一個(gè)節(jié)包含一個(gè)'默認(rèn)目錄',和從通用名稱到目錄/路徑的映射。
這個(gè)節(jié)中第一個(gè)通用名稱是當(dāng)引用請(qǐng)求包含空'file'字符串是你使用的'默認(rèn)文件'。
第二節(jié)映射硬件地址類型/地址到IP地址。可選的,你可以使用一個(gè)特定IP地址的通用名稱
來忽略默認(rèn)通用名稱。
一個(gè)'后綴'項(xiàng)目也是可選的;假如提供,可以訪問任意客戶端特定的通用名稱對(duì)應(yīng)的'路徑名
稱'加上'后綴'。
假如那個(gè)文件沒有找到,就嘗試簡(jiǎn)單的'路徑名稱'。
這個(gè)'后綴'選項(xiàng)答應(yīng)輕而易舉建立整套用戶通用(配置)。
下面顯示通用格式;一個(gè)或多個(gè)空格或TAB來定界字段;后面的空字段被省略;空行和以'#'
開始的行忽略。
#commentline
homedirectory
genericname1pathname1
genericname2pathname2
...
%endofgenericnames,startofaddressmappings
hostname1hardwaretypehardwareaddr1ipaddr1genericnamesuffix
hostname2hardwaretypehardwareaddr2ipaddr2genericnamesuffix
...
這是一個(gè)特定的樣例。注重'硬件類型'數(shù)值同'AssignedNumbers'RFC中ARP章節(jié)。
'硬件類型'和'IP地址'數(shù)值是十進(jìn)制;'硬件地址'是十六進(jìn)制的。
#lastupdatedbysmith
/usr/boot
vmunixvmunix
tipethertip
watch/usr/diag/etherwatch
gategate.
%endofgenericnames,startofaddressmappings
hamilton102.60.8c.06.34.9836.19.0.5
burr102.60.8c.34.11.7836.44.0.12
101-gateway102.60.8c.23.ab.3536.44.0.32gate101
mjh-gateway102.60.8c.12.32.bc36.42.0.64gatemjh
welch-tipa102.60.8c.22.65.3236.47.0.14tip
welch-tipb102.60.8c.12.15.c836.46.0.12tip
在上述樣例中,假如'mjh-gateway'是一個(gè)默認(rèn)的引導(dǎo)程序,它將得到文件'/usr/boot/gate.mjh'。
9 致謝
RossFinlayson等早先提出了兩個(gè)使用討論RARP[1]的TFTP引導(dǎo)的RFC。
我們感謝NoelChiappa,BobLyon,JeffMogul,MarkLewis,和DavidPlummer的前期工作和
注解。
10 參考文獻(xiàn)
1.RossFinlayson,TimothyMann,JeffreyMogul,MarvinTheimer.A
ReverseAddressResolutionProtocol.RFC903,NIC,June,1984.
2.RossFinlayson.BootstrapLoadingusingTFTP.RFC906,NIC,
June,1984.
3.MarkLottor.SimpleFileTransferProtocol.RFC913,NIC,
September,1984.
4.JeffreyMogul.BroadcastingInternetPackets.RFC919,NIC,
October,1984.
5.DavidPlummer.AnEthernetAddressResolutionProtocol.RFC
826,NIC,September,1982.
6.JonPostel.FileTransferProtocol.RFC765,NIC,June,1980.
7.JonPostel.UserDatagramProtocol.RFC768,NIC,August,1980.
8.JonPostel.InternetProtocol.RFC791,NIC,September,1981.
9.K.R.Sollins,NoelChiappa.TheTFTPProtocol.RFC783,NIC,
June,1981.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注