在不知道自身IP地址的情況下,在進(jìn)行系統(tǒng)引導(dǎo)時(shí)能夠通過RARP來(lái)獲取它的IP地址。然而使用RARP有兩個(gè)問題:(1)IP地址是返回的唯一結(jié)果;(2)既然RARP使用鏈路層廣播,RARP請(qǐng)求就不會(huì)被路由器轉(zhuǎn)發(fā)(迫使每個(gè)實(shí)際網(wǎng)絡(luò)設(shè)置一個(gè)RARP服務(wù)器)。本章將介紹一種用于無(wú)盤系統(tǒng)進(jìn)行系統(tǒng)引導(dǎo)的替代方法,又稱為引導(dǎo)程序協(xié)議,或BOOTP。
BOOTP使用UDP,且通常需與TFTP(參見第15章)協(xié)同工作。RFC951[CroftandGilmore1985]是BOOTP的正式規(guī)范,RFC1542[Wimer1993]則對(duì)它作了說(shuō)明。
BOOTP的分組格式
BOOTP請(qǐng)求和應(yīng)答均被封裝在UDP數(shù)據(jù)報(bào)中,如下圖所示。
“操作碼”字段為1表示請(qǐng)求,為2表示應(yīng)答。硬件類型字段為1表示10Mb/s的以太網(wǎng),這和ARP請(qǐng)求或應(yīng)答中同名字段表示的含義相同。類似地,對(duì)于以太網(wǎng),硬件地址長(zhǎng)度字段為6字節(jié)。
“跳數(shù)”字段由客戶設(shè)置為0,但也能被一個(gè)代理服務(wù)器設(shè)置?!笆聞?wù)標(biāo)識(shí)”字段是一個(gè)由客戶設(shè)置并由服務(wù)器返回的32bit整數(shù)??蛻粲盟鼘?duì)請(qǐng)求和應(yīng)答進(jìn)行匹配。對(duì)每個(gè)請(qǐng)求,客戶應(yīng)該將該字段設(shè)置為一個(gè)隨機(jī)數(shù)。客戶開始進(jìn)行引導(dǎo)時(shí),將“秒數(shù)”字段設(shè)置為一個(gè)時(shí)間值。服務(wù)器能夠看到這個(gè)時(shí)間值,備用服務(wù)器在等待時(shí)間超過這個(gè)時(shí)間值后才會(huì)響應(yīng)客戶的請(qǐng)求,這意味著主服務(wù)器沒有啟動(dòng)。
如果該客戶已經(jīng)知道自身的IP地址,它將寫入“客戶IP地址”字段。否則,它將該字段設(shè)置為0。對(duì)于后面這種情況,服務(wù)器用該客戶的IP地址寫入“你的IP地址”字段?!胺?wù)器IP地址”字段則由服務(wù)器填寫。如果使用了某個(gè)代理服務(wù)器,則該代理服務(wù)器就填寫“網(wǎng)關(guān)IP地址”字段。
客戶必須設(shè)置它的“客戶硬件地址”字段。盡管這個(gè)值與以太網(wǎng)數(shù)據(jù)幀頭中的值相同,UDP數(shù)據(jù)報(bào)中也設(shè)置這個(gè)字段,但任何接收這個(gè)數(shù)據(jù)報(bào)的用戶進(jìn)程能很容易地獲得它(例如一個(gè)BOOTP服務(wù)器)。一個(gè)進(jìn)程通過查看UDP數(shù)據(jù)報(bào)來(lái)確定以太網(wǎng)幀首部中的該字段通常是很困難的(或者說(shuō)是不可能的)。
“服務(wù)器主機(jī)名”字段是一個(gè)空值終止串,由服務(wù)器填寫。服務(wù)器還將在“引導(dǎo)文件名字段”填入包括用于系統(tǒng)引導(dǎo)的文件名及其所在位置的路徑全名。
“特定廠商區(qū)域”字段用于對(duì)BOOTP進(jìn)行不同的擴(kuò)展。16.6節(jié)將介紹這些擴(kuò)展中的一些。當(dāng)一個(gè)客戶使用BOOTP(操作碼為1)進(jìn)行系統(tǒng)引導(dǎo)時(shí),引導(dǎo)請(qǐng)求通常是采用鏈路層廣播,IP首部中的目的IP地址為255.255.255.255(受限的廣播,12.2節(jié))。源IP地址通常是0.0.0.0,因?yàn)榇藭r(shí)客戶還不知道它本身的IP地址?;仡檲D3-9,在系統(tǒng)進(jìn)行自引導(dǎo)時(shí),0.0.0.0是一個(gè)有效的IP地址。
端口號(hào)
BOOTP有兩個(gè)熟知端口:BOOTP服務(wù)器為67,BOOTP客戶為68。這意味著BOOTP客戶不會(huì)選擇未用的臨時(shí)端口,而只用端口68。選擇兩個(gè)端口而不是僅選擇一個(gè)端口為BOOTP服務(wù)器用的原因是:服務(wù)器的應(yīng)答可以進(jìn)行廣播(但通常是不用廣播的)。
如果服務(wù)器的應(yīng)答是通過廣播傳送的,同時(shí)客戶又選擇未用的臨時(shí)端口,那么這些廣播也能被其他的主機(jī)中碰巧使用相同臨時(shí)端口的應(yīng)用進(jìn)程接收到。因此,采用隨機(jī)端口(即臨時(shí)端口)對(duì)廣播來(lái)說(shuō)是一個(gè)不好的選擇。如果客戶也使用服務(wù)器的知名端口(67)作為它的端口,那么網(wǎng)絡(luò)內(nèi)的所有服務(wù)器會(huì)被喚醒來(lái)查看每個(gè)廣播應(yīng)答(如果所有的服務(wù)器都被喚醒,它們將檢查操作碼,如果是一個(gè)應(yīng)答而不是請(qǐng)求,就不作處理)。因此可以讓所有的客戶使用與服務(wù)器知名端口不同的同一知名端口。
如果多個(gè)客戶同時(shí)進(jìn)行系統(tǒng)引導(dǎo),并且服務(wù)器廣播所有應(yīng)答,這樣每個(gè)客戶都會(huì)收到其他客戶的應(yīng)答??蛻艨梢酝ㄟ^BOOTP首部中的事務(wù)標(biāo)識(shí)字段來(lái)確認(rèn)應(yīng)答是否與請(qǐng)求匹配,或者可以通過檢查返回的客戶硬件地址加以區(qū)分。
眾信咨詢:互聯(lián)網(wǎng)資質(zhì)代理誠(chéng)信品牌