詞語(yǔ)解釋
BootP(Bootstrap Protocol),又稱(chēng)為引導(dǎo)協(xié)議,是一種網(wǎng)絡(luò)協(xié)議,主要用于網(wǎng)絡(luò)客戶(hù)端(如個(gè)人電腦)獲取IP地址,并從服務(wù)器獲取相關(guān)配置信息。它是一種發(fā)現(xiàn)和配置網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)協(xié)議,是一種基于UDP的應(yīng)用層協(xié)議,它使用客戶(hù)端/服務(wù)器模型,客戶(hù)端發(fā)出一個(gè)BootP請(qǐng)求報(bào)文,服務(wù)器收到后,回復(fù)一個(gè)包含IP地址、子網(wǎng)掩碼等信息的BootP響應(yīng)報(bào)文。 BootP協(xié)議主要用于網(wǎng)絡(luò)客戶(hù)端(如個(gè)人電腦)獲取IP地址,并從服務(wù)器獲取相關(guān)配置信息,它的應(yīng)用非常廣泛,主要應(yīng)用在以太網(wǎng)(Ethernet)網(wǎng)絡(luò)中,也可以應(yīng)用于其他網(wǎng)絡(luò)技術(shù),如Token Ring網(wǎng)絡(luò),F(xiàn)DDI網(wǎng)絡(luò),PPP網(wǎng)絡(luò)等。BootP協(xié)議的主要功能是為客戶(hù)端提供IP地址,并且可以提供其他配置信息,如子網(wǎng)掩碼,網(wǎng)關(guān)地址,DNS服務(wù)器地址等,它使用客戶(hù)端/服務(wù)器模型,客戶(hù)端發(fā)出一個(gè)BootP請(qǐng)求報(bào)文,服務(wù)器收到后,回復(fù)一個(gè)包含IP地址、子網(wǎng)掩碼等信息的BootP響應(yīng)報(bào)文。 BootP協(xié)議可以用來(lái)分配IP地址,并將其他配置信息(如子網(wǎng)掩碼,網(wǎng)關(guān)地址,DNS服務(wù)器地址等)發(fā)送到客戶(hù)端,以便客戶(hù)端可以連接到網(wǎng)絡(luò),它的應(yīng)用非常廣泛,主要應(yīng)用在以太網(wǎng)(Ethernet)網(wǎng)絡(luò)中,也可以應(yīng)用于其他網(wǎng)絡(luò)技術(shù),如Token Ring網(wǎng)絡(luò),F(xiàn)DDI網(wǎng)絡(luò),PPP網(wǎng)絡(luò)等。 BootP協(xié)議是一種簡(jiǎn)單的客戶(hù)端/服務(wù)器協(xié)議,它可以讓客戶(hù)端從服務(wù)器獲取IP地址和其他配置信息,它的優(yōu)點(diǎn)是可以讓客戶(hù)端自動(dòng)獲取IP地址,而不需要人工干預(yù),可以提高網(wǎng)絡(luò)管理的效率,但是它的缺點(diǎn)是只能提供靜態(tài)的IP地址,不能提供動(dòng)態(tài)的IP地址,也不能提供多種服務(wù),因此,它的應(yīng)用范圍有限。 BootP協(xié)議是一種非常重要的網(wǎng)絡(luò)協(xié)議,它可以讓客戶(hù)端從服務(wù)器獲取IP地址和其他配置信息,它的應(yīng)用非常廣泛,主要應(yīng)用在以太網(wǎng)(Ethernet)網(wǎng)絡(luò)中,也可以應(yīng)用于其他網(wǎng)絡(luò)技術(shù),如Token Ring網(wǎng)絡(luò),F(xiàn)DDI網(wǎng)絡(luò),PPP網(wǎng)絡(luò)等。它的優(yōu)點(diǎn)是可以讓客戶(hù)端自動(dòng)獲取IP地址,而不需要人工干預(yù),可以提高網(wǎng)絡(luò)管理的效率,但是它的缺點(diǎn)是只能提供靜態(tài)的IP地址,不能提供動(dòng)態(tài)的IP地址,也不能提供多種服務(wù),因此,它的應(yīng)用范圍有限。 英文原義:Bootstrap Protocol 中文釋義:自舉協(xié)議 注解:該協(xié)議是一個(gè)基于TCP/IP協(xié)議的協(xié)議,它可以讓無(wú)盤(pán)站從一個(gè)中心服務(wù)器上獲得IP地址,為局域網(wǎng)中的無(wú)盤(pán)工作站分配動(dòng)態(tài)IP地址,并不需要每個(gè)用戶(hù)去設(shè)置靜態(tài)IP地址。使用BOOTP協(xié)議的時(shí)候,一般包括Bootstrap Protocol Server(自舉協(xié)議服務(wù)端)和Bootstrap Protocol Client(自舉協(xié)議客戶(hù)端)兩部分。 應(yīng) 用:該協(xié)議主要用于有無(wú)盤(pán)工作站的局域網(wǎng)中,客戶(hù)端獲取IP地址的過(guò)程如下:首先,由BOOTP啟動(dòng)代碼啟動(dòng)客戶(hù)端,這個(gè)時(shí)候客戶(hù)端還沒(méi)有IP地址,使用廣播形式以IP地址0.0.0.0向網(wǎng)絡(luò)中發(fā)出IP地址查詢(xún)要求。接著,運(yùn)行BOOTP協(xié)議的服務(wù)器接收到這個(gè)請(qǐng)求,會(huì)根據(jù)請(qǐng)求中提供的MAC地址找到客戶(hù)端,并發(fā)送一個(gè)含有IP地址、服務(wù)器IP地址、網(wǎng)關(guān)等信息的FOUND幀。最后,客戶(hù)端會(huì)根據(jù)該FOUND幀來(lái)通過(guò)專(zhuān)用TFTP服務(wù)器下載啟動(dòng)鏡像文件,模擬成磁盤(pán)啟動(dòng)。 本RFC描述一種IP/UDP引導(dǎo)協(xié)議(BOOTP),允許一個(gè)無(wú)盤(pán)客戶(hù)端發(fā)現(xiàn)自己的IP地址, 服務(wù)器主機(jī)的地址,和裝入一個(gè)指定名稱(chēng)的文件到內(nèi)存并且運(yùn)行。引導(dǎo)操作有兩階段組成。 本RFC描述第一個(gè)階段:'分配地址和選擇引導(dǎo)文件'。 在獲得地址和文件名信息后,就進(jìn)入引導(dǎo)的第二個(gè)階段:文件傳送。 文件傳送一般使用TFTP協(xié)議[9],因?yàn)閮蓚(gè)階段均駐留在客戶(hù)端的PROM中。 但BOOTP也能夠與其它協(xié)議如SFTP或FTP一起工作。 我們建議客戶(hù)端的PROM軟件提供一種無(wú)須用戶(hù)交互的完整的引導(dǎo)方式。 這是一種無(wú)人值守的上電啟動(dòng)方式。 必須提供一種機(jī)制來(lái)讓用戶(hù)手工提供地址和文件名信息旁路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)。使用(最大可能長(zhǎng)度的)固定長(zhǎng)度的字段來(lái)簡(jiǎn)化結(jié)構(gòu)定義 和分析。 2.一個(gè)'opcode'字段包含兩個(gè)值?蛻(hù)端廣播一個(gè)'引導(dǎo)請(qǐng)求(bootrequest)'包。 服務(wù)器應(yīng)答一個(gè)'引導(dǎo)應(yīng)答(bootreply)'包。'bootrequest'包含客戶(hù)端的硬件地址,如果知道, 還包含它的IP地址。 3.請(qǐng)求可以包含客戶(hù)端指定的響應(yīng)服務(wù)器的名稱(chēng)。 這樣客戶(hù)端可以強(qiáng)制從一個(gè)指定的主機(jī)引導(dǎo)。(如果一個(gè)相同的引導(dǎo)文件存在多種版本 或服務(wù)器在一個(gè)遠(yuǎn)距離的網(wǎng)絡(luò)/域。) 客戶(hù)端不必處理名稱(chēng)/域服務(wù),這個(gè)功能推到了BOOTP服務(wù)器。 4.請(qǐng)求可以包含'通用(generic)'引導(dǎo)文件名。例如'unix'或'ethertip'。但服務(wù)器發(fā)送 引導(dǎo)應(yīng)答時(shí),它使用對(duì)應(yīng)的引導(dǎo)文件的確切的路徑名稱(chēng)來(lái)取代這個(gè)字段。 服務(wù)器查詢(xún)客戶(hù)端的地址和請(qǐng)求文件名相關(guān)的數(shù)據(jù)庫(kù),以使用客戶(hù)端自定義的特定引導(dǎo) 文件確定這個(gè)文件名稱(chēng)。 如果引導(dǎo)請(qǐng)求文件名是空字符串,服務(wù)器返回一個(gè)帶有客戶(hù)端加載的默認(rèn)文件的文件名 字段。 5.客戶(hù)端不知道它們的IP地址的情況下, 服務(wù)器必須有一個(gè)硬件地址和IP地址對(duì)應(yīng)的數(shù)據(jù)庫(kù)。 這個(gè)客戶(hù)端IP地址被放在引導(dǎo)應(yīng)答的(對(duì)應(yīng))字段中。 6.某些網(wǎng)絡(luò)拓樸(如斯坦福的網(wǎng)絡(luò))可能在一個(gè)物理網(wǎng)上沒(méi)有一個(gè)直接可以訪問(wèn)的TFTP 服務(wù)器 (例如在某些網(wǎng)上的所有的網(wǎng)關(guān)和主機(jī)都可能是無(wú)盤(pán)的)。 BOOTP允許客戶(hù)端通過(guò)使用相鄰的網(wǎng)關(guān)從幾跳外的服務(wù)器上引導(dǎo)。請(qǐng)看下面'通過(guò)網(wǎng)關(guān) 引導(dǎo)'的章節(jié)。 這部分協(xié)議不需求客戶(hù)端部分做特定的動(dòng)作。 實(shí)現(xiàn)是可選的,網(wǎng)關(guān)和服務(wù)器需要一些額外的代碼。 2 包格式 除非另外指出,所有顯示的數(shù)字都是十進(jìn)制的。 簡(jiǎn)化起見(jiàn),假設(shè)BOOTP包不會(huì)被分片。 所有數(shù)字的字段使用標(biāo)準(zhǔn)網(wǎng)絡(luò)字節(jié)順序。即,先傳送高位比特。 在引導(dǎo)請(qǐng)求的IP頭中,客戶(hù)端如果知道就填自己的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客戶(hù)端'(68) 和'BOOTP服務(wù)器'(67)。 客戶(hù)使用'BOOTP服務(wù)器'做為目的端口發(fā)送請(qǐng)求;這通常是廣播。 服務(wù)器使用'BOOTP客戶(hù)端'做為目的端口發(fā)送應(yīng)答;取決于服務(wù)器的核心或驅(qū)動(dòng)設(shè)備,這可 能是也可能不是廣播 (在下面'雞和蛋的問(wèn)題'標(biāo)題的章節(jié)中深入解釋?zhuān)?BR> 使用兩個(gè)保留的端口的原因是當(dāng)引導(dǎo)應(yīng)答必須廣播到客戶(hù)端避免'叫醒'并且調(diào)度BOOTP服 務(wù)器進(jìn)程。 因?yàn)榉⻊?wù)器和其它主機(jī)都不會(huì)偵聽(tīng)'BOOTP客戶(hù)端'端口, 所有進(jìn)入的廣播報(bào)文將在核心級(jí)別過(guò)濾掉。 我們不能簡(jiǎn)單地允許客戶(hù)端找一個(gè)隨機(jī)端口號(hào)做為UDP源端口字段;因?yàn)榉⻊?wù)器應(yīng)答可能 是廣播, 一個(gè)隨機(jī)選擇的端口號(hào)可能搞亂其它恰巧在偵聽(tīng)那個(gè)端口的主機(jī)。 UDP長(zhǎng)度字段設(shè)置成UDP長(zhǎng)度加BOOTP部分的包。 UDP校驗(yàn)和可以由客戶(hù)端(或服務(wù)器)按照需要設(shè)置成0,以避免PROM實(shí)現(xiàn)中額外的費(fèi)用。 在下面的'包處理'章節(jié)中'[UDP校驗(yàn)和]'短語(yǔ)用來(lái)表示校驗(yàn)和可能被驗(yàn)證/計(jì)算。 字段 字節(jié)數(shù) 描述 ----- ----- ----------- op 1 packet op code / message type. 包操作碼/消息類(lèi)型 1 = BOOTREQUEST(引導(dǎo)請(qǐng)求), 2 = BOOTREPLY(引導(dǎo)應(yīng)答) htype 1 hardware address type, 硬件地址類(lèi)型 see ARP section in "Assigned Numbers" RFC. 請(qǐng)看"Assigned Numbers" RFC中的ARP章節(jié) '1' = 10mb ethernet 10M以太網(wǎng) hlen 1 hardware address length 硬件地址長(zhǎng)度 (eg '6' for 10mb ethernet). 例如'6'是10M以太網(wǎng) hops 1 client sets to zero, 客戶(hù)端設(shè)置成0 optionally used by gateways 在跨越網(wǎng)關(guān)引導(dǎo)時(shí)網(wǎng)關(guān)可選擇使用 in cross-gateway booting. xid 4 transaction ID, a random number, used to match this boot request with the responses it generates. 事務(wù)ID,一個(gè)隨機(jī)數(shù),用來(lái)匹配引用請(qǐng)求和應(yīng)答 secs 2 filled in by client, seconds elapsed since client started trying to boot. 由客戶(hù)端填寫(xiě),客戶(hù)端引導(dǎo)開(kāi)始后的過(guò)去的秒數(shù) -- 2 unused未使用 ciaddr 4 client IP address;客戶(hù)端IP地址, filled in by client in bootrequest if known.如果客戶(hù)端知道就在引導(dǎo)請(qǐng)求中填入 yiaddr 4 'your' (client) IP address;'你的'(客戶(hù)端)IP地址 filled by server if client doesn't know its own address (ciaddr was 0).如果客戶(hù)端不知道它的地址(ciaddr是0),服務(wù)器填入 siaddr 4 server IP address;服務(wù)器IP地址 returned in bootreply by server.由服務(wù)器在引導(dǎo)應(yīng)答返回 giaddr 4 gateway IP address,網(wǎng)關(guān)IP地址 used in optional cross-gateway booting.在跨越網(wǎng)關(guān)引導(dǎo)中可以選擇使用 chaddr 16 client hardware address,客戶(hù)端硬件地址 filled in by client.由客戶(hù)端填寫(xiě) sname 64 optional server host name,可選的服務(wù)器主機(jī)名 null terminated string. 空結(jié)束的字符串 file 128 boot file name, null terminated string; 引導(dǎo)文件名,空結(jié)束的字符串 'generic' name or null in bootrequest, 在引導(dǎo)請(qǐng)求中使用'通用'名稱(chēng)或空 fully qualified directory-path 是引導(dǎo)應(yīng)答中使用確切的目錄路徑名稱(chēng) name in bootreply. vend 64 optional vendor-specific area, 可選的賣(mài)主指定的區(qū)域, e.g. could be hardware type/serial on request, 例如,可以是請(qǐng)求硬件類(lèi)型/序列, or 'capability' / remote file system handle 或應(yīng)答的性能/遠(yuǎn)端文件系統(tǒng)句柄。 on reply. This info may be set aside for use 這些信息留給第三方分析引導(dǎo)或核心(程序)使用。 by a third phase bootstrap or kernel. 3 雞和蛋的問(wèn)題 如果客戶(hù)端不知道自己IP地址,服務(wù)器怎么發(fā)送IP報(bào)文到客戶(hù)端。 無(wú)論何時(shí)一條引導(dǎo)應(yīng)答被發(fā)送,發(fā)送設(shè)備執(zhí)行下列操作: 1.如果客戶(hù)端知道自己的IP地址('ciaddr'字段非零), 因?yàn)榭蛻?hù)端能夠回應(yīng)ARPs[5],那么IP能夠正常發(fā)送。 2.如果客戶(hù)端還不知道自己的IP地址(ciaddr是零), 客戶(hù)端就不能回應(yīng)引導(dǎo)應(yīng)答發(fā)送程序回的ARPs。這時(shí)有兩種選擇: a.如果發(fā)送程序有必需的核心或驅(qū)動(dòng)鉤子程序來(lái)人工建立ARP地址緩沖條目, 就可以使用'chaddr'和'yiaddr'字段填入一個(gè)條目。當(dāng)然,這個(gè)條目象正常ARP建立的 其它條目一樣有一個(gè)生命時(shí)間, 引導(dǎo)應(yīng)答的發(fā)送程序就能夠簡(jiǎn)單地發(fā)送引導(dǎo)應(yīng)答到客戶(hù)端的IP地址了。UNIX(4.2 BSD)有這種功能。 b.如果發(fā)送程序缺少這些核心鉤子程序,就只能簡(jiǎn)單發(fā)送引導(dǎo)應(yīng)答到相應(yīng)接口的廣播 地址。 這只是在前面情況外的額外的廣播。 4 ARP在客戶(hù)端使用 客戶(hù)端PROM必須包含一個(gè)ARP的簡(jiǎn)單實(shí)現(xiàn),例如,地址緩沖能夠容納一個(gè)條目。 這將允許客戶(hù)端在知道IP地址和引導(dǎo)文件名后執(zhí)行第二階段引導(dǎo)(TFTP)。 任何時(shí)候客戶(hù)端應(yīng)該準(zhǔn)備回應(yīng)一個(gè)自己IP到硬件地址映射的ARP請(qǐng)求(如果知道)以接收 TFTP或BOOTP應(yīng)答。 因?yàn)橐龑?dǎo)應(yīng)答將包含服務(wù)器/網(wǎng)關(guān)的硬件源地址(在硬件中封裝),客戶(hù)端可以 避免發(fā)送一條ARP請(qǐng)求來(lái)申請(qǐng)后續(xù)的TFTP階段使用的服務(wù)器/網(wǎng)關(guān)IP地址。 但這應(yīng)該只是一種特殊情況,因?yàn)樯厦婷枋龅闹挥械诙A段的引導(dǎo)仍然允許。 5 與RARP對(duì)照 提議客戶(hù)端使用一個(gè)早先的協(xié)議,反向地址解析協(xié)議(RARP)[1]來(lái)通過(guò)它的硬件地址確定自 己的IP地址。 但RARP的劣勢(shì)是它是一個(gè)硬件鏈路層的協(xié)議(不是基于IP/UDP)。 這意味著RARP只能在包含特殊的為訪問(wèn)原始報(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地址的查詢(xún)功能。 6 包處理 6.1客戶(hù)端傳送 在第一次建立包前,最好把整個(gè)包的緩沖區(qū)清零; 這將所有的字段設(shè)置成默認(rèn)狀態(tài)。任何客戶(hù)端建立包中的下列字段。 IP目的地址被設(shè)置成255.255.255.255(廣播地址)或服務(wù)器的IP地址(如果知道)。 IP源地址和'ciaddr'設(shè)置成客戶(hù)端IP地址(如果知道),或者0。UDP頭使用適當(dāng)?shù)拈L(zhǎng)度設(shè) 置; 源端口='BOOTP客戶(hù)端'端口,目標(biāo)端口='BOOTP服務(wù)器'端口。 'op'設(shè)置成'1',BOOTREQUEST(引導(dǎo)請(qǐng)求)。'htype'設(shè)置成在"Assigned Numbers"RFCARP章節(jié)中分配的硬件地址類(lèi)型。 'hlen'設(shè)置成硬件地址長(zhǎng)度,例如,10M以太網(wǎng)是'6'。 'xid'設(shè)置成一個(gè)'隨機(jī)'事務(wù)ID。'secs'設(shè)置成客戶(hù)端引導(dǎo)開(kāi)始后過(guò)去的秒數(shù)。 這個(gè)讓服務(wù)器知道客戶(hù)端已經(jīng)試了多長(zhǎng)時(shí)間了。 當(dāng)數(shù)字變大,某些服務(wù)器可能更多注意這個(gè)客戶(hù)端提供不同的服務(wù)。 如果客戶(hù)端缺少一個(gè)適當(dāng)?shù)臅r(shí)鐘,它可以使用循環(huán)定時(shí)器建立一個(gè)粗略的估計(jì)值。 或者它可以選擇簡(jiǎn)單發(fā)送使用一個(gè)固定值如100秒的字段。 如果客戶(hù)端知道IP地址,'ciaddr'(和IP源地址)設(shè)置成這個(gè)值。 'chaddr'使用客戶(hù)端硬件地址填寫(xiě)。 如果客戶(hù)端希望限制從一個(gè)特定服務(wù)器名引導(dǎo),就可以在'sname'中放一個(gè)空結(jié)束的字符 串。 使用的名字應(yīng)該是對(duì)應(yīng)的主機(jī)的正當(dāng)?shù)拿只騽e名。 客戶(hù)端在填寫(xiě)'file'文件名字段是有許多選擇。 如果設(shè)置成空,意味著'我向使用默認(rèn)的文件來(lái)引導(dǎo)我的機(jī)器'。一個(gè)空文件名也意味著 '我只對(duì)找到客戶(hù)端/服務(wù)器/網(wǎng)關(guān)的IP地址感興趣,我不在乎文件名'。 這個(gè)字段也可以是一個(gè)'通用'名字入'unix'或'gateway';這意味著 '使用命名的程序配置來(lái)引導(dǎo)我的機(jī)器'。最后這個(gè)字段可以是確切的目錄路徑名字。 'vend'字段可以由客戶(hù)端填寫(xiě)賣(mài)主的字符串或結(jié)構(gòu)。例如可以填寫(xiě)機(jī)器硬件類(lèi)型或序列 號(hào)。 但BOOTP服務(wù)器的操作應(yīng)該不依賴(lài)與這些存在的信息。 如果使用了'vend',推薦在'vend'中第一個(gè)項(xiàng)目為一個(gè)4字節(jié)的'魔術(shù)字(magicnumber)'。 這讓服務(wù)器確定在這個(gè)字段中它看到什么類(lèi)型的信息。 數(shù)值可以由通常的'魔術(shù)字'過(guò)程分配,你挑一個(gè),它就成為魔術(shù)字。 引導(dǎo)應(yīng)答使用一個(gè)與引導(dǎo)請(qǐng)求不同的魔術(shù)字以允許客戶(hù)端按照應(yīng)答信息進(jìn)行特殊的動(dòng) 作。 [UDP校驗(yàn)和] 6.2客戶(hù)端重傳策略 在一長(zhǎng)段時(shí)間內(nèi)沒(méi)有收到應(yīng)答,客戶(hù)端應(yīng)該重傳請(qǐng)求。 時(shí)間間隔必須仔細(xì)選擇不要引起網(wǎng)絡(luò)風(fēng)暴。 可以考慮一個(gè)包含100臺(tái)機(jī)器的網(wǎng)絡(luò)在電源故障后發(fā)生的情況。 簡(jiǎn)單的每四秒重傳請(qǐng)求將淹沒(méi)網(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ǔ)償中,掩碼增長(zhǎng)一個(gè)比特。 這樣在每次補(bǔ)償中平均延遲加倍。 在'平均'補(bǔ)償?shù)竭_(dá)60秒后,就不再增長(zhǎng)了,但仍然隨機(jī)化。 在每次重傳前,客戶(hù)端應(yīng)該修改'secs'字段。[UDP校驗(yàn)和] 6.3服務(wù)器接收BOOTREQUEST(引導(dǎo)請(qǐng)求) [UDP校驗(yàn)和]如果UDP目的端口不匹配'BOOTP服務(wù)器'端口,丟棄這個(gè)包。 如果服務(wù)器名字字段(sname)是空(沒(méi)有指定特定的服務(wù)器),或者sname是指定的并且 匹配我們的名字或別名, 繼續(xù)包的處理。 如果sname字段是指定的,但不匹配'我們',那么有多種選擇: 1.你可以選擇簡(jiǎn)單丟棄這個(gè)包。 2.如果查詢(xún)sname的名稱(chēng)顯示它在一個(gè)網(wǎng)絡(luò)中,丟棄這個(gè)包。 3.如果sname在不同的網(wǎng)絡(luò)中,你可以選擇轉(zhuǎn)發(fā)這個(gè)包到那個(gè)地址。 如果這樣,檢查'giaddr'(網(wǎng)關(guān)地址)字段。如果'giaddr'是0,填入我的地址或可以用來(lái) 到達(dá)那個(gè)網(wǎng)絡(luò)的網(wǎng)關(guān)的地址。 然后轉(zhuǎn)發(fā)這個(gè)包。 如果客戶(hù)端IP地址(ciaddr)是0,那么客戶(hù)端不知道自己的IP地址。 嘗試在我們的數(shù)據(jù)庫(kù)中查找客戶(hù)端的硬件地址(chaddr,hlen,htype)。 如果沒(méi)有匹配,丟棄這個(gè)包。否則我們現(xiàn)在對(duì)這個(gè)客戶(hù)端有一個(gè)IP地址;填入'yiaddr'(你 的IP地址)字段。 我們現(xiàn)在檢查引導(dǎo)文件名字段(文件)。如果客戶(hù)端不關(guān)注文件名或想要默認(rèn)引導(dǎo)文件, 這個(gè)字段是空。 如果這個(gè)字段非空,可以將它和客戶(hù)端的IP地址做為數(shù)據(jù)庫(kù)的查詢(xún)關(guān)鍵字。 如果有默認(rèn)的文件或通用文件(可能由客戶(hù)端地址做為索引)或一個(gè)匹配的指定的路徑 名稱(chēng), 然后在'file'字段中填入選擇的引導(dǎo)文件的指定的路徑名稱(chēng)。 如果字段是非空并且沒(méi)有匹配,那么客戶(hù)端要一個(gè)我們沒(méi)有的文件,丟棄這個(gè)包,也許 其它BOOTP服務(wù)器有這個(gè)文件。 賣(mài)主指定的數(shù)據(jù)字段'vend'現(xiàn)在應(yīng)該檢查了。如果提供一種可識(shí)別類(lèi)型的數(shù)據(jù), 應(yīng)該進(jìn)行客戶(hù)端指定的動(dòng)作,并且回應(yīng)要填入應(yīng)答包中的'vend'數(shù)據(jù)字段。 例如,一個(gè)工作站客戶(hù)端可能提供一個(gè)驗(yàn)證字,并從服務(wù)器接收一個(gè)訪問(wèn)遠(yuǎn)端文件的權(quán) 限, 或一套配置選項(xiàng)傳給馬上就要引導(dǎo)入的操作系統(tǒng)。 我的(服務(wù)器)IP地址填入'siaddr'字段。設(shè)置'op'字段為BOOTREPLY(引導(dǎo)應(yīng)答)。 UDP目的端口設(shè)置成'BOOTP客戶(hù)端'。如果客戶(hù)端地址'ciaddr'非0,把包發(fā)送到那里; 否則如果網(wǎng)關(guān)地址'giaddr'非0,設(shè)置UDP目的端口為'BOOTP服務(wù)器'并把包發(fā)送到 'giaddr'。 否則客戶(hù)端在我們的一個(gè)網(wǎng)絡(luò)中但它還不知道自己的IP地址,使用在上面'蛋'章節(jié)中描述 的方法來(lái)傳送它到客戶(hù)端。 如果使用'蛋'并且我們?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'(你的[客戶(hù)端的]IP地址)指向我們的一個(gè)網(wǎng)絡(luò),使用上述'蛋'方 法來(lái)將它轉(zhuǎn)發(fā)到客戶(hù)端。 確認(rèn)將它傳送到'BOOTP客戶(hù)端'UDP目的端口。 6.5客戶(hù)端接收 不要忘記為我自己的IP地址(如果我知道)處理ARP請(qǐng)求。[UDP校驗(yàn)和] 客戶(hù)端應(yīng)該丟棄以下進(jìn)入的包:不是定位到引導(dǎo)端口的IP/UDP;不是BOOTREPLY(引 導(dǎo)應(yīng)答); 不匹配我的IP地址(如果我知道)或我的硬件地址;不匹配我的事務(wù)ID。 否則我們就收到一個(gè)成功的應(yīng)答。如果我以前不知道的話(huà),'yiaddr'包含我的IP地址。 'file'是TFTP'讀請(qǐng)求'的文件名。服務(wù)器地址在'siaddr'中。如果'giaddr'(網(wǎng)關(guān)地址)非0, 那么包應(yīng)該先轉(zhuǎn)發(fā)到那里,然后到達(dá)服務(wù)器。 7 通過(guò)網(wǎng)關(guān)引導(dǎo) 這部分協(xié)議是可選的并要求許多網(wǎng)關(guān)和服務(wù)器配合的額外的代碼,但它允許跨越網(wǎng)關(guān)引導(dǎo)。 這主要在網(wǎng)關(guān)是無(wú)盤(pán)機(jī)器時(shí)有用。 帶盤(pán)網(wǎng)關(guān)(例如,一個(gè)做為網(wǎng)關(guān)的UNIX機(jī)器)可能運(yùn)行它們自己的BOOTP/TFTP服務(wù)器。 偵聽(tīng)BOOTREQUEST(引導(dǎo)請(qǐng)求)廣播的網(wǎng)關(guān)可能確定轉(zhuǎn)發(fā)還是適當(dāng)?shù)卦購(gòu)V播這些請(qǐng)求。 例如,做為配置表格的一部分,網(wǎng)關(guān)可以有一個(gè)接收任意BOOTREQUEST(引導(dǎo)請(qǐng)求)廣 播的其它網(wǎng)絡(luò)或主機(jī)的列表。 即使考慮有一個(gè)'hops'字段,簡(jiǎn)單全部再?gòu)V播請(qǐng)求仍是一個(gè)差的方法,因?yàn)閺V播循環(huán)幾乎肯 定會(huì)發(fā)生。 轉(zhuǎn)發(fā)可以立即開(kāi)始,或等'secs'(客戶(hù)端嘗試的秒數(shù))字段超過(guò)某個(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'字段來(lái)可選控制包可以轉(zhuǎn)發(fā)多遠(yuǎn)。每次轉(zhuǎn)發(fā)應(yīng)該增加跳數(shù)。 例如,如果跳數(shù)超過(guò)'3',包應(yīng)該被丟棄。 [UDP校驗(yàn)和] 這里我們推薦在網(wǎng)關(guān)中增加這個(gè)特殊的轉(zhuǎn)發(fā)功能。 但不總是這樣子的。 在網(wǎng)上存在一些'BOOTP轉(zhuǎn)發(fā)代理'引導(dǎo)客戶(hù)端,這些代理可以適當(dāng)?shù)剞D(zhuǎn)發(fā)。 這樣這些服務(wù)可以和網(wǎng)關(guān)在一起,也可以不在一起。 當(dāng)轉(zhuǎn)發(fā)代理不和網(wǎng)關(guān)在一起時(shí),代理可以通過(guò)在接收的引導(dǎo)請(qǐng)求中'giaddr'字段加上接口的廣 播地址節(jié)省一些工作。 這樣應(yīng)答就可以使用普通的網(wǎng)關(guān)來(lái)轉(zhuǎn)發(fā),而不包含轉(zhuǎn)發(fā)代理。 當(dāng)然劣勢(shì)是你失去了使用'蛋'非廣播方式來(lái)發(fā)送應(yīng)答的能力,導(dǎo)致在客戶(hù)端網(wǎng)上的每個(gè)主機(jī) 的額外的花費(fèi)。
英文原義:Bootstrap Protocol 中文釋義:自舉協(xié)議 注解:該協(xié)議是一個(gè)基于TCP/IP協(xié)議的協(xié)議,它可以讓無(wú)盤(pán)站從一個(gè)中心服務(wù)器上獲得IP地址,為局域網(wǎng)中的無(wú)盤(pán)工作站分配動(dòng)態(tài)IP地址,并不需要每個(gè)用戶(hù)去設(shè)置靜態(tài)IP地址。使用BOOTP協(xié)議的時(shí)候,一般包括Bootstrap Protocol Server(自舉協(xié)議服務(wù)端)和Bootstrap Protocol Client(自舉協(xié)議客戶(hù)端)兩部分。 應(yīng) 用:該協(xié)議主要用于有無(wú)盤(pán)工作站的局域網(wǎng)中,客戶(hù)端獲取IP地址的過(guò)程如下:首先,由BOOTP啟動(dòng)代碼啟動(dòng)客戶(hù)端,這個(gè)時(shí)候客戶(hù)端還沒(méi)有IP地址,使用廣播形式以IP地址0.0.0.0向網(wǎng)絡(luò)中發(fā)出IP地址查詢(xún)要求。接著,運(yùn)行BOOTP協(xié)議的服務(wù)器接收到這個(gè)請(qǐng)求,會(huì)根據(jù)請(qǐng)求中提供的MAC地址找到客戶(hù)端,并發(fā)送一個(gè)含有IP地址、服務(wù)器IP地址、網(wǎng)關(guān)等信息的FOUND幀。最后,客戶(hù)端會(huì)根據(jù)該FOUND幀來(lái)通過(guò)專(zhuān)用TFTP服務(wù)器下載啟動(dòng)鏡像文件,模擬成磁盤(pán)啟動(dòng)。 本RFC描述一種IP/UDP引導(dǎo)協(xié)議(BOOTP),允許一個(gè)無(wú)盤(pán)客戶(hù)端發(fā)現(xiàn)自己的IP地址, 服務(wù)器主機(jī)的地址,和裝入一個(gè)指定名稱(chēng)的文件到內(nèi)存并且運(yùn)行。引導(dǎo)操作有兩階段組成。 本RFC描述第一個(gè)階段:'分配地址和選擇引導(dǎo)文件'。 在獲得地址和文件名信息后,就進(jìn)入引導(dǎo)的第二個(gè)階段:文件傳送。 文件傳送一般使用TFTP協(xié)議[9],因?yàn)閮蓚(gè)階段均駐留在客戶(hù)端的PROM中。 但BOOTP也能夠與其它協(xié)議如SFTP或FTP一起工作。 我們建議客戶(hù)端的PROM軟件提供一種無(wú)須用戶(hù)交互的完整的引導(dǎo)方式。 這是一種無(wú)人值守的上電啟動(dòng)方式。 必須提供一種機(jī)制來(lái)讓用戶(hù)手工提供地址和文件名信息旁路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)。使用(最大可能長(zhǎng)度的)固定長(zhǎng)度的字段來(lái)簡(jiǎn)化結(jié)構(gòu)定義 和分析。 2.一個(gè)'opcode'字段包含兩個(gè)值?蛻(hù)端廣播一個(gè)'引導(dǎo)請(qǐng)求(bootrequest)'包。 服務(wù)器應(yīng)答一個(gè)'引導(dǎo)應(yīng)答(bootreply)'包。'bootrequest'包含客戶(hù)端的硬件地址,如果知道, 還包含它的IP地址。 3.請(qǐng)求可以包含客戶(hù)端指定的響應(yīng)服務(wù)器的名稱(chēng)。 這樣客戶(hù)端可以強(qiáng)制從一個(gè)指定的主機(jī)引導(dǎo)。(如果一個(gè)相同的引導(dǎo)文件存在多種版本 或服務(wù)器在一個(gè)遠(yuǎn)距離的網(wǎng)絡(luò)/域。) 客戶(hù)端不必處理名稱(chēng)/域服務(wù),這個(gè)功能推到了BOOTP服務(wù)器。 4.請(qǐng)求可以包含'通用(generic)'引導(dǎo)文件名。例如'unix'或'ethertip'。但服務(wù)器發(fā)送 引導(dǎo)應(yīng)答時(shí),它使用對(duì)應(yīng)的引導(dǎo)文件的確切的路徑名稱(chēng)來(lái)取代這個(gè)字段。 服務(wù)器查詢(xún)客戶(hù)端的地址和請(qǐng)求文件名相關(guān)的數(shù)據(jù)庫(kù),以使用客戶(hù)端自定義的特定引導(dǎo) 文件確定這個(gè)文件名稱(chēng)。 如果引導(dǎo)請(qǐng)求文件名是空字符串,服務(wù)器返回一個(gè)帶有客戶(hù)端加載的默認(rèn)文件的文件名 字段。 5.客戶(hù)端不知道它們的IP地址的情況下, 服務(wù)器必須有一個(gè)硬件地址和IP地址對(duì)應(yīng)的數(shù)據(jù)庫(kù)。 這個(gè)客戶(hù)端IP地址被放在引導(dǎo)應(yīng)答的(對(duì)應(yīng))字段中。 6.某些網(wǎng)絡(luò)拓樸(如斯坦福的網(wǎng)絡(luò))可能在一個(gè)物理網(wǎng)上沒(méi)有一個(gè)直接可以訪問(wèn)的TFTP 服務(wù)器 (例如在某些網(wǎng)上的所有的網(wǎng)關(guān)和主機(jī)都可能是無(wú)盤(pán)的)。 BOOTP允許客戶(hù)端通過(guò)使用相鄰的網(wǎng)關(guān)從幾跳外的服務(wù)器上引導(dǎo)。請(qǐng)看下面'通過(guò)網(wǎng)關(guān) 引導(dǎo)'的章節(jié)。 這部分協(xié)議不需求客戶(hù)端部分做特定的動(dòng)作。 實(shí)現(xiàn)是可選的,網(wǎng)關(guān)和服務(wù)器需要一些額外的代碼。 2 包格式 除非另外指出,所有顯示的數(shù)字都是十進(jìn)制的。 簡(jiǎn)化起見(jiàn),假設(shè)BOOTP包不會(huì)被分片。 所有數(shù)字的字段使用標(biāo)準(zhǔn)網(wǎng)絡(luò)字節(jié)順序。即,先傳送高位比特。 在引導(dǎo)請(qǐng)求的IP頭中,客戶(hù)端如果知道就填自己的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客戶(hù)端'(68) 和'BOOTP服務(wù)器'(67)。 客戶(hù)使用'BOOTP服務(wù)器'做為目的端口發(fā)送請(qǐng)求;這通常是廣播。 服務(wù)器使用'BOOTP客戶(hù)端'做為目的端口發(fā)送應(yīng)答;取決于服務(wù)器的核心或驅(qū)動(dòng)設(shè)備,這可 能是也可能不是廣播 (在下面'雞和蛋的問(wèn)題'標(biāo)題的章節(jié)中深入解釋?zhuān)?BR> 使用兩個(gè)保留的端口的原因是當(dāng)引導(dǎo)應(yīng)答必須廣播到客戶(hù)端避免'叫醒'并且調(diào)度BOOTP服 務(wù)器進(jìn)程。 因?yàn)榉⻊?wù)器和其它主機(jī)都不會(huì)偵聽(tīng)'BOOTP客戶(hù)端'端口, 所有進(jìn)入的廣播報(bào)文將在核心級(jí)別過(guò)濾掉。 我們不能簡(jiǎn)單地允許客戶(hù)端找一個(gè)隨機(jī)端口號(hào)做為UDP源端口字段;因?yàn)榉⻊?wù)器應(yīng)答可能 是廣播, 一個(gè)隨機(jī)選擇的端口號(hào)可能搞亂其它恰巧在偵聽(tīng)那個(gè)端口的主機(jī)。 UDP長(zhǎng)度字段設(shè)置成UDP長(zhǎng)度加BOOTP部分的包。 UDP校驗(yàn)和可以由客戶(hù)端(或服務(wù)器)按照需要設(shè)置成0,以避免PROM實(shí)現(xiàn)中額外的費(fèi)用。 在下面的'包處理'章節(jié)中'[UDP校驗(yàn)和]'短語(yǔ)用來(lái)表示校驗(yàn)和可能被驗(yàn)證/計(jì)算。 字段 字節(jié)數(shù) 描述 ----- ----- ----------- op 1 packet op code / message type. 包操作碼/消息類(lèi)型 1 = BOOTREQUEST(引導(dǎo)請(qǐng)求), 2 = BOOTREPLY(引導(dǎo)應(yīng)答) htype 1 hardware address type, 硬件地址類(lèi)型 see ARP section in "Assigned Numbers" RFC. 請(qǐng)看"Assigned Numbers" RFC中的ARP章節(jié) '1' = 10mb ethernet 10M以太網(wǎng) hlen 1 hardware address length 硬件地址長(zhǎng)度 (eg '6' for 10mb ethernet). 例如'6'是10M以太網(wǎng) hops 1 client sets to zero, 客戶(hù)端設(shè)置成0 optionally used by gateways 在跨越網(wǎng)關(guān)引導(dǎo)時(shí)網(wǎng)關(guān)可選擇使用 in cross-gateway booting. xid 4 transaction ID, a random number, used to match this boot request with the responses it generates. 事務(wù)ID,一個(gè)隨機(jī)數(shù),用來(lái)匹配引用請(qǐng)求和應(yīng)答 secs 2 filled in by client, seconds elapsed since client started trying to boot. 由客戶(hù)端填寫(xiě),客戶(hù)端引導(dǎo)開(kāi)始后的過(guò)去的秒數(shù) -- 2 unused未使用 ciaddr 4 client IP address;客戶(hù)端IP地址, filled in by client in bootrequest if known.如果客戶(hù)端知道就在引導(dǎo)請(qǐng)求中填入 yiaddr 4 'your' (client) IP address;'你的'(客戶(hù)端)IP地址 filled by server if client doesn't know its own address (ciaddr was 0).如果客戶(hù)端不知道它的地址(ciaddr是0),服務(wù)器填入 siaddr 4 server IP address;服務(wù)器IP地址 returned in bootreply by server.由服務(wù)器在引導(dǎo)應(yīng)答返回 giaddr 4 gateway IP address,網(wǎng)關(guān)IP地址 used in optional cross-gateway booting.在跨越網(wǎng)關(guān)引導(dǎo)中可以選擇使用 chaddr 16 client hardware address,客戶(hù)端硬件地址 filled in by client.由客戶(hù)端填寫(xiě) sname 64 optional server host name,可選的服務(wù)器主機(jī)名 null terminated string. 空結(jié)束的字符串 file 128 boot file name, null terminated string; 引導(dǎo)文件名,空結(jié)束的字符串 'generic' name or null in bootrequest, 在引導(dǎo)請(qǐng)求中使用'通用'名稱(chēng)或空 fully qualified directory-path 是引導(dǎo)應(yīng)答中使用確切的目錄路徑名稱(chēng) name in bootreply. vend 64 optional vendor-specific area, 可選的賣(mài)主指定的區(qū)域, e.g. could be hardware type/serial on request, 例如,可以是請(qǐng)求硬件類(lèi)型/序列, or 'capability' / remote file system handle 或應(yīng)答的性能/遠(yuǎn)端文件系統(tǒng)句柄。 on reply. This info may be set aside for use 這些信息留給第三方分析引導(dǎo)或核心(程序)使用。 by a third phase bootstrap or kernel. 3 雞和蛋的問(wèn)題 如果客戶(hù)端不知道自己IP地址,服務(wù)器怎么發(fā)送IP報(bào)文到客戶(hù)端。 無(wú)論何時(shí)一條引導(dǎo)應(yīng)答被發(fā)送,發(fā)送設(shè)備執(zhí)行下列操作: 1.如果客戶(hù)端知道自己的IP地址('ciaddr'字段非零), 因?yàn)榭蛻?hù)端能夠回應(yīng)ARPs[5],那么IP能夠正常發(fā)送。 2.如果客戶(hù)端還不知道自己的IP地址(ciaddr是零), 客戶(hù)端就不能回應(yīng)引導(dǎo)應(yīng)答發(fā)送程序回的ARPs。這時(shí)有兩種選擇: a.如果發(fā)送程序有必需的核心或驅(qū)動(dòng)鉤子程序來(lái)人工建立ARP地址緩沖條目, 就可以使用'chaddr'和'yiaddr'字段填入一個(gè)條目。當(dāng)然,這個(gè)條目象正常ARP建立的 其它條目一樣有一個(gè)生命時(shí)間, 引導(dǎo)應(yīng)答的發(fā)送程序就能夠簡(jiǎn)單地發(fā)送引導(dǎo)應(yīng)答到客戶(hù)端的IP地址了。UNIX(4.2 BSD)有這種功能。 b.如果發(fā)送程序缺少這些核心鉤子程序,就只能簡(jiǎn)單發(fā)送引導(dǎo)應(yīng)答到相應(yīng)接口的廣播 地址。 這只是在前面情況外的額外的廣播。 4 ARP在客戶(hù)端使用 客戶(hù)端PROM必須包含一個(gè)ARP的簡(jiǎn)單實(shí)現(xiàn),例如,地址緩沖能夠容納一個(gè)條目。 這將允許客戶(hù)端在知道IP地址和引導(dǎo)文件名后執(zhí)行第二階段引導(dǎo)(TFTP)。 任何時(shí)候客戶(hù)端應(yīng)該準(zhǔn)備回應(yīng)一個(gè)自己IP到硬件地址映射的ARP請(qǐng)求(如果知道)以接收 TFTP或BOOTP應(yīng)答。 因?yàn)橐龑?dǎo)應(yīng)答將包含服務(wù)器/網(wǎng)關(guān)的硬件源地址(在硬件中封裝),客戶(hù)端可以 避免發(fā)送一條ARP請(qǐng)求來(lái)申請(qǐng)后續(xù)的TFTP階段使用的服務(wù)器/網(wǎng)關(guān)IP地址。 但這應(yīng)該只是一種特殊情況,因?yàn)樯厦婷枋龅闹挥械诙A段的引導(dǎo)仍然允許。 5 與RARP對(duì)照 提議客戶(hù)端使用一個(gè)早先的協(xié)議,反向地址解析協(xié)議(RARP)[1]來(lái)通過(guò)它的硬件地址確定自 己的IP地址。 但RARP的劣勢(shì)是它是一個(gè)硬件鏈路層的協(xié)議(不是基于IP/UDP)。 這意味著RARP只能在包含特殊的為訪問(wèn)原始報(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地址的查詢(xún)功能。 6 包處理 6.1客戶(hù)端傳送 在第一次建立包前,最好把整個(gè)包的緩沖區(qū)清零; 這將所有的字段設(shè)置成默認(rèn)狀態(tài)。任何客戶(hù)端建立包中的下列字段。 IP目的地址被設(shè)置成255.255.255.255(廣播地址)或服務(wù)器的IP地址(如果知道)。 IP源地址和'ciaddr'設(shè)置成客戶(hù)端IP地址(如果知道),或者0。UDP頭使用適當(dāng)?shù)拈L(zhǎng)度設(shè) 置; 源端口='BOOTP客戶(hù)端'端口,目標(biāo)端口='BOOTP服務(wù)器'端口。 'op'設(shè)置成'1',BOOTREQUEST(引導(dǎo)請(qǐng)求)。'htype'設(shè)置成在"Assigned Numbers"RFCARP章節(jié)中分配的硬件地址類(lèi)型。 'hlen'設(shè)置成硬件地址長(zhǎng)度,例如,10M以太網(wǎng)是'6'。 'xid'設(shè)置成一個(gè)'隨機(jī)'事務(wù)ID。'secs'設(shè)置成客戶(hù)端引導(dǎo)開(kāi)始后過(guò)去的秒數(shù)。 這個(gè)讓服務(wù)器知道客戶(hù)端已經(jīng)試了多長(zhǎng)時(shí)間了。 當(dāng)數(shù)字變大,某些服務(wù)器可能更多注意這個(gè)客戶(hù)端提供不同的服務(wù)。 如果客戶(hù)端缺少一個(gè)適當(dāng)?shù)臅r(shí)鐘,它可以使用循環(huán)定時(shí)器建立一個(gè)粗略的估計(jì)值。 或者它可以選擇簡(jiǎn)單發(fā)送使用一個(gè)固定值如100秒的字段。 如果客戶(hù)端知道IP地址,'ciaddr'(和IP源地址)設(shè)置成這個(gè)值。 'chaddr'使用客戶(hù)端硬件地址填寫(xiě)。 如果客戶(hù)端希望限制從一個(gè)特定服務(wù)器名引導(dǎo),就可以在'sname'中放一個(gè)空結(jié)束的字符 串。 使用的名字應(yīng)該是對(duì)應(yīng)的主機(jī)的正當(dāng)?shù)拿只騽e名。 客戶(hù)端在填寫(xiě)'file'文件名字段是有許多選擇。 如果設(shè)置成空,意味著'我向使用默認(rèn)的文件來(lái)引導(dǎo)我的機(jī)器'。一個(gè)空文件名也意味著 '我只對(duì)找到客戶(hù)端/服務(wù)器/網(wǎng)關(guān)的IP地址感興趣,我不在乎文件名'。 這個(gè)字段也可以是一個(gè)'通用'名字入'unix'或'gateway';這意味著 '使用命名的程序配置來(lái)引導(dǎo)我的機(jī)器'。最后這個(gè)字段可以是確切的目錄路徑名字。 'vend'字段可以由客戶(hù)端填寫(xiě)賣(mài)主的字符串或結(jié)構(gòu)。例如可以填寫(xiě)機(jī)器硬件類(lèi)型或序列 號(hào)。 但BOOTP服務(wù)器的操作應(yīng)該不依賴(lài)與這些存在的信息。 如果使用了'vend',推薦在'vend'中第一個(gè)項(xiàng)目為一個(gè)4字節(jié)的'魔術(shù)字(magicnumber)'。 這讓服務(wù)器確定在這個(gè)字段中它看到什么類(lèi)型的信息。 數(shù)值可以由通常的'魔術(shù)字'過(guò)程分配,你挑一個(gè),它就成為魔術(shù)字。 引導(dǎo)應(yīng)答使用一個(gè)與引導(dǎo)請(qǐng)求不同的魔術(shù)字以允許客戶(hù)端按照應(yīng)答信息進(jìn)行特殊的動(dòng) 作。 [UDP校驗(yàn)和] 6.2客戶(hù)端重傳策略 在一長(zhǎng)段時(shí)間內(nèi)沒(méi)有收到應(yīng)答,客戶(hù)端應(yīng)該重傳請(qǐng)求。 時(shí)間間隔必須仔細(xì)選擇不要引起網(wǎng)絡(luò)風(fēng)暴。 可以考慮一個(gè)包含100臺(tái)機(jī)器的網(wǎng)絡(luò)在電源故障后發(fā)生的情況。 簡(jiǎn)單的每四秒重傳請(qǐng)求將淹沒(méi)網(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ǔ)償中,掩碼增長(zhǎng)一個(gè)比特。 這樣在每次補(bǔ)償中平均延遲加倍。 在'平均'補(bǔ)償?shù)竭_(dá)60秒后,就不再增長(zhǎng)了,但仍然隨機(jī)化。 在每次重傳前,客戶(hù)端應(yīng)該修改'secs'字段。[UDP校驗(yàn)和] 6.3服務(wù)器接收BOOTREQUEST(引導(dǎo)請(qǐng)求) [UDP校驗(yàn)和]如果UDP目的端口不匹配'BOOTP服務(wù)器'端口,丟棄這個(gè)包。 如果服務(wù)器名字字段(sname)是空(沒(méi)有指定特定的服務(wù)器),或者sname是指定的并且 匹配我們的名字或別名, 繼續(xù)包的處理。 如果sname字段是指定的,但不匹配'我們',那么有多種選擇: 1.你可以選擇簡(jiǎn)單丟棄這個(gè)包。 2.如果查詢(xún)sname的名稱(chēng)顯示它在一個(gè)網(wǎng)絡(luò)中,丟棄這個(gè)包。 3.如果sname在不同的網(wǎng)絡(luò)中,你可以選擇轉(zhuǎn)發(fā)這個(gè)包到那個(gè)地址。 如果這樣,檢查'giaddr'(網(wǎng)關(guān)地址)字段。如果'giaddr'是0,填入我的地址或可以用來(lái) 到達(dá)那個(gè)網(wǎng)絡(luò)的網(wǎng)關(guān)的地址。 然后轉(zhuǎn)發(fā)這個(gè)包。 如果客戶(hù)端IP地址(ciaddr)是0,那么客戶(hù)端不知道自己的IP地址。 嘗試在我們的數(shù)據(jù)庫(kù)中查找客戶(hù)端的硬件地址(chaddr,hlen,htype)。 如果沒(méi)有匹配,丟棄這個(gè)包。否則我們現(xiàn)在對(duì)這個(gè)客戶(hù)端有一個(gè)IP地址;填入'yiaddr'(你 的IP地址)字段。 我們現(xiàn)在檢查引導(dǎo)文件名字段(文件)。如果客戶(hù)端不關(guān)注文件名或想要默認(rèn)引導(dǎo)文件, 這個(gè)字段是空。 如果這個(gè)字段非空,可以將它和客戶(hù)端的IP地址做為數(shù)據(jù)庫(kù)的查詢(xún)關(guān)鍵字。 如果有默認(rèn)的文件或通用文件(可能由客戶(hù)端地址做為索引)或一個(gè)匹配的指定的路徑 名稱(chēng), 然后在'file'字段中填入選擇的引導(dǎo)文件的指定的路徑名稱(chēng)。 如果字段是非空并且沒(méi)有匹配,那么客戶(hù)端要一個(gè)我們沒(méi)有的文件,丟棄這個(gè)包,也許 其它BOOTP服務(wù)器有這個(gè)文件。 賣(mài)主指定的數(shù)據(jù)字段'vend'現(xiàn)在應(yīng)該檢查了。如果提供一種可識(shí)別類(lèi)型的數(shù)據(jù), 應(yīng)該進(jìn)行客戶(hù)端指定的動(dòng)作,并且回應(yīng)要填入應(yīng)答包中的'vend'數(shù)據(jù)字段。 例如,一個(gè)工作站客戶(hù)端可能提供一個(gè)驗(yàn)證字,并從服務(wù)器接收一個(gè)訪問(wèn)遠(yuǎn)端文件的權(quán) 限, 或一套配置選項(xiàng)傳給馬上就要引導(dǎo)入的操作系統(tǒng)。 我的(服務(wù)器)IP地址填入'siaddr'字段。設(shè)置'op'字段為BOOTREPLY(引導(dǎo)應(yīng)答)。 UDP目的端口設(shè)置成'BOOTP客戶(hù)端'。如果客戶(hù)端地址'ciaddr'非0,把包發(fā)送到那里; 否則如果網(wǎng)關(guān)地址'giaddr'非0,設(shè)置UDP目的端口為'BOOTP服務(wù)器'并把包發(fā)送到 'giaddr'。 否則客戶(hù)端在我們的一個(gè)網(wǎng)絡(luò)中但它還不知道自己的IP地址,使用在上面'蛋'章節(jié)中描述 的方法來(lái)傳送它到客戶(hù)端。 如果使用'蛋'并且我們?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'(你的[客戶(hù)端的]IP地址)指向我們的一個(gè)網(wǎng)絡(luò),使用上述'蛋'方 法來(lái)將它轉(zhuǎn)發(fā)到客戶(hù)端。 確認(rèn)將它傳送到'BOOTP客戶(hù)端'UDP目的端口。 6.5客戶(hù)端接收 不要忘記為我自己的IP地址(如果我知道)處理ARP請(qǐng)求。[UDP校驗(yàn)和] 客戶(hù)端應(yīng)該丟棄以下進(jìn)入的包:不是定位到引導(dǎo)端口的IP/UDP;不是BOOTREPLY(引 導(dǎo)應(yīng)答); 不匹配我的IP地址(如果我知道)或我的硬件地址;不匹配我的事務(wù)ID。 否則我們就收到一個(gè)成功的應(yīng)答。如果我以前不知道的話(huà),'yiaddr'包含我的IP地址。 'file'是TFTP'讀請(qǐng)求'的文件名。服務(wù)器地址在'siaddr'中。如果'giaddr'(網(wǎng)關(guān)地址)非0, 那么包應(yīng)該先轉(zhuǎn)發(fā)到那里,然后到達(dá)服務(wù)器。 7 通過(guò)網(wǎng)關(guān)引導(dǎo) 這部分協(xié)議是可選的并要求許多網(wǎng)關(guān)和服務(wù)器配合的額外的代碼,但它允許跨越網(wǎng)關(guān)引導(dǎo)。 這主要在網(wǎng)關(guān)是無(wú)盤(pán)機(jī)器時(shí)有用。 帶盤(pán)網(wǎng)關(guān)(例如,一個(gè)做為網(wǎng)關(guān)的UNIX機(jī)器)可能運(yùn)行它們自己的BOOTP/TFTP服務(wù)器。 偵聽(tīng)BOOTREQUEST(引導(dǎo)請(qǐng)求)廣播的網(wǎng)關(guān)可能確定轉(zhuǎn)發(fā)還是適當(dāng)?shù)卦購(gòu)V播這些請(qǐng)求。 例如,做為配置表格的一部分,網(wǎng)關(guān)可以有一個(gè)接收任意BOOTREQUEST(引導(dǎo)請(qǐng)求)廣 播的其它網(wǎng)絡(luò)或主機(jī)的列表。 即使考慮有一個(gè)'hops'字段,簡(jiǎn)單全部再?gòu)V播請(qǐng)求仍是一個(gè)差的方法,因?yàn)閺V播循環(huán)幾乎肯 定會(huì)發(fā)生。 轉(zhuǎn)發(fā)可以立即開(kāi)始,或等'secs'(客戶(hù)端嘗試的秒數(shù))字段超過(guò)某個(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'字段來(lái)可選控制包可以轉(zhuǎn)發(fā)多遠(yuǎn)。每次轉(zhuǎn)發(fā)應(yīng)該增加跳數(shù)。 例如,如果跳數(shù)超過(guò)'3',包應(yīng)該被丟棄。 [UDP校驗(yàn)和] 這里我們推薦在網(wǎng)關(guān)中增加這個(gè)特殊的轉(zhuǎn)發(fā)功能。 但不總是這樣子的。 在網(wǎng)上存在一些'BOOTP轉(zhuǎn)發(fā)代理'引導(dǎo)客戶(hù)端,這些代理可以適當(dāng)?shù)剞D(zhuǎn)發(fā)。 這樣這些服務(wù)可以和網(wǎng)關(guān)在一起,也可以不在一起。 當(dāng)轉(zhuǎn)發(fā)代理不和網(wǎng)關(guān)在一起時(shí),代理可以通過(guò)在接收的引導(dǎo)請(qǐng)求中'giaddr'字段加上接口的廣 播地址節(jié)省一些工作。 這樣應(yīng)答就可以使用普通的網(wǎng)關(guān)來(lái)轉(zhuǎn)發(fā),而不包含轉(zhuǎn)發(fā)代理。 當(dāng)然劣勢(shì)是你失去了使用'蛋'非廣播方式來(lái)發(fā)送應(yīng)答的能力,導(dǎo)致在客戶(hù)端網(wǎng)上的每個(gè)主機(jī) 的額外的花費(fèi)。
抱歉,此頁(yè)面的內(nèi)容受版權(quán)保護(hù),復(fù)制需扣除次數(shù),次數(shù)不足時(shí)需付費(fèi)購(gòu)買(mǎi)。
如需下載請(qǐng)點(diǎn)擊:點(diǎn)擊此處下載
掃碼付費(fèi)即可復(fù)制
cmx | 捕獲 | IPN | 數(shù)據(jù)傳輸速率 | PPOE | sudlos | 鏈路聚合 | uFi | NUMBER | APS協(xié)議 | 網(wǎng)絡(luò)制式 | 中國(guó)移動(dòng)通信集團(tuán)四川有限公司 |
移動(dòng)通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團(tuán)隊(duì)博客 | 免責(zé)聲明 | 關(guān)于詞典 | 幫助