-
BOOTP
鎖定
- 中文名
- 引導程序協議
- 外文名
- Bootstrap Protocol
- 縮 寫
- BOOTP
- 性 質
- 一種引導協議
目錄
- ▪ 如果客户端還不知道自己的IP地址
- ▪ ARP在客户端使用
- 3 包處理
- ▪ 客户端傳送
- ▪ 客户端重傳策略
- ▪ 服務器接收BOOTREQUEST(引導請求)
BOOTP簡介
BOOTP使用UDP報文傳輸,並使用保留端口號67(BOOTP服務器)和68(BOOTP客户端)工作。使用BOOTP協議的時候,一般包括Bootstrap Protocol Server(自舉協議服務端)和Bootstrap Protocol Client(自舉協議客户端)兩部分。
BOOTP的一般工作流程就是BOOTP客户端和BOOTP服務器之間的交互,其流程如下:
- 由BOOTP啓動代碼來啓動BOOTP客户端,這個時候BOOTP客户端還沒有IP地址。
- BOOTP客户端使用廣播形式的IP地址255.255.255.255向網絡中發出IP地址查詢要求。
我們熟知的DHCP協議是從BOOTP的基礎上發展而來的,它們都是主機配置協議,都可以大大減少管理員的工作量。BOOTP可以看成是簡單版的DHCP,是對主機的靜態配置,而DHCP可以依據一些策略對主機進行動態配置。BOOTP用於無盤工作站的啓動和配置,而DHCP更適用於客户端接入變化的網絡,即客户端接入時間、接入地點不固定。
[1]
BOOTPRFC詳解
本RFC描述第一個階段:'分配地址和選擇引導文件'。
在獲得地址和文件名信息後,就進入引導的第二個階段:文件傳送。
文件傳送一般使用TFTP協議[9],因為兩個階段均駐留在客户端的PROM中。
但BOOTP也能夠與其它協議如SFTP或FTP一起工作。
這是一種無人值守的上電啓動方式。
必須提供一種機制來讓用户手工提供地址和文件名信息旁路BOOTP協議直接進入文件傳送
階段。
如果提供非可變存儲,我們建議在那裏保存設置以旁路BOOTP協議直到這些設置導致文件
傳送階段失敗。
如果緩存的信息失敗,引導後退到第一階段並使用BOOTP。
BOOTP協議的要點
1.使用了一個單獨的包交換(信息)。使用超時機制直到收到應答。
雙向使用相同的包字段結構。使用(最大可能長度的)固定長度的字段來簡化結構定義
和分析。
2.一個'opcode'字段包含兩個值。客户端廣播一個'引導請求(bootrequest)'包。
還包含它的IP地址。
或服務器在一個遠距離的網絡/域。)
4.請求可以包含'通用(generic)'引導文件名。例如'unix'或'ethertip'。但服務器發送
引導應答時,它使用對應的引導文件的確切的路徑名稱來取代這個字段。
服務器查詢客户端的地址和請求文件名相關的數據庫,以使用客户端自定義的特定引導
文件確定這個文件名稱。
字段。
5.客户端不知道它們的IP地址的情況下,
服務器必須有一個硬件地址和IP地址對應的數據庫。
這個客户端IP地址被放在引導應答的(對應)字段中。
6.某些網絡拓樸(如斯坦福的網絡)可能在一個物理網上沒有一個直接可以訪問的TFTP
引導'的章節。
這部分協議不需求客户端部分做特定的動作。
BOOTP包格式
除非另外指出,所有顯示的數字都是十進制的。
簡化起見,假設BOOTP包不會被分片。
所有數字的字段使用標準網絡字節順序。即,先傳送高位比特。
道時,
IP目的地址將是廣播地址255.255.255.255。這個地址意味着'在本地網上廣播,我不知道我的
網絡號'[4]。
和'BOOTP服務器'(67)。
能是也可能不是廣播
(在下面'雞和蛋的問題'標題的章節中深入解釋)。
務器進程。
所有進入的廣播報文將在核心級別過濾掉。
是廣播,
UDP長度字段設置成UDP長度加BOOTP部分的包。
在下面的'包處理'章節中'[UDP校驗和]'短語用來表示校驗和可能被驗證/計算。
字段字節數 描述
----- ----- -----------
op 1 packet op code / message type. 包操作碼/消息類型
1.= BOOTREQUEST(引導請求),2 = BOOTREPLY(引導應答)
htype 1 hardware address type,硬件地址類型
see ARP section in "Assigned Numbers" RFC. 請看"Assigned Numbers" RFC中的ARP章節
'1' = 10mb ethernet 10M以太網
hlen 1 hardware address length 硬件地址長度
(eg '6' for 10mb ethernet). 例如'6'是10M以太網
hops 1 client sets to zero,客户端設置成0
optionally used by gateways 在跨越網關引導時網關可選擇使用
in cross-gateway booting.
xid 4 transaction ID,a random number,
used to match this boot request with the
responses it generates.事務ID,一個隨機數,用來匹配引用請求和應答
secs 2 filled in by client,seconds elapsed since
client started trying to boot.由客户端填寫,客户端引導開始後的過去的秒數
-- 2 unused未使用
ciaddr4 client IP address;客户端IP地址,
filled in by client in bootrequest if known.如果客户端知道就在引導請求中填入
yiaddr4 'your' (client) IP address;'你的'(客户端)IP地址
filled by server if client doesn't
siaddr4 server IP address;服務器IP地址
returned in bootreply by server.由服務器在引導應答返回
giaddr4 gateway IP address,網關IP地址
used in optional cross-gateway booting.在跨越網關引導中可以選擇使用
chaddr16 client hardware address,客户端硬件地址
filled in by client.由客户端填寫
sname 64 optional server host name,可選的服務器主機名
null terminated string. 空結束的字符串
file 128 boot file name,null terminated string; 引導文件名,空結束的字符串
'generic' name or null in bootrequest,在引導請求中使用'通用'名稱或空
fully qualified directory-path 是引導應答中使用確切的目錄路徑名稱
name in bootreply.
vend 64 optional vendor-specific area,可選的賣主指定的區域,
e.g. could be hardware type/serial on request,例如,可以是請求硬件類型/序列,
or 'capability' / remote file system handle 或應答的性能/遠端文件系統句柄。
on reply.This info may be set aside for use這些信息留給第三方分析引導或核心(程序)使用。
by a third phase bootstrap or kernel.
BOOTP雞和蛋的問題
無論何時一條引導應答被髮送,發送設備執行下列操作:
BOOTP如果客户端知道自己的IP地址
('ciaddr'字段非零),
因為客户端能夠迴應ARPs[5],那麼IP能夠正常發送。
BOOTP如果客户端還不知道自己的IP地址
(ciaddr是零),
客户端就不能迴應引導應答發送程序回的ARPs。這時有兩種選擇:
a.如果發送程序有必需的核心或驅動鈎子程序來人工建立ARP地址緩衝條目,
就可以使用'chaddr'和'yiaddr'字段填入一個條目。當然,這個條目象正常ARP建立的
其它條目一樣有一個生命時間,
引導應答的發送程序就能夠簡單地發送引導應答到客户端的IP地址了。UNIX(4.2
BSD)有這種功能。
b.如果發送程序缺少這些核心鈎子程序,就只能簡單發送引導應答到相應接口的廣播
地址。
BOOTPARP在客户端使用
客户端PROM必須包含一個ARP的簡單實現,例如,地址緩衝能夠容納一個條目。
這將允許客户端在知道IP地址和引導文件名後執行第二階段引導(TFTP)。
TFTP或BOOTP應答。
但這應該只是一種特殊情況,因為上面描述的只有第二階段的引導仍然允許。
與RARP對照 提議客户端使用一個早先的協議,反向地址解析協議(RARP)[1]來通過它的硬件地址確定自
己的IP地址。
但RARP的劣勢是它是一個硬件鏈路層的協議(不是基於IP/UDP)。
因為存在不同組織維護的許多網絡核心,一個不要求修改核心的引導協議是一個確定
的優勢。
BOOTP除了上述章節描述的有用的特性外,還提供硬件到IP地址的查詢功能。
BOOTP包處理
BOOTP客户端傳送
在第一次建立包前,最好把整個包的緩衝區清零;
這將所有的字段設置成默認狀態。任何客户端建立包中的下列字段。
IP源地址和'ciaddr'設置成客户端IP地址(如果知道),或者0。UDP頭使用適當的長度設
置;
'op'設置成'1',BOOTREQUEST(引導請求)。'htype'設置成在"Assigned
Numbers"RFCARP章節中分配的硬件地址類型。
'hlen'設置成硬件地址長度,例如,10M以太網是'6'。
'xid'設置成一個'隨機'事務ID。'secs'設置成客户端引導開始後過去的秒數。
這個讓服務器知道客户端已經試了多長時間了。
或者它可以選擇簡單發送使用一個固定值如100秒的字段。
如果客户端知道IP地址,'ciaddr'(和IP源地址)設置成這個值。
'chaddr'使用客户端硬件地址填寫。
串。
使用的名字應該是對應的主機的正當的名字或別名。
客户端在填寫'file'文件名字段是有許多選擇。
如果設置成空,意味着'我向使用默認的文件來引導我的機器'。一個空文件名也意味着
這個字段也可以是一個'通用'名字入'unix'或'gateway';這意味着
'使用命名的程序配置來引導我的機器'。最後這個字段可以是確切的目錄路徑名字。
'vend'字段可以由客户端填寫賣主的字符串或結構。例如可以填寫機器硬件類型或序列
號。
但BOOTP服務器的操作應該不依賴與這些存在的信息。
如果使用了'vend',推薦在'vend'中第一個項目為一個4字節的'魔術字(magicnumber)'。
這讓服務器確定在這個字段中它看到什麼類型的信息。
數值可以由通常的'魔術字'過程分配,你挑一個,它就成為魔術字。
作。
[UDP校驗和]
BOOTP客户端重傳策略
在一長段時間內沒有收到應答,客户端應該重傳請求。
時間間隔必須仔細選擇不要引起網絡風暴。
可以考慮一個包含100台機器的網絡在電源故障後發生的情況。
簡單的每四秒重傳請求將淹沒網絡。
一個可能的策略,你可能考慮指數級的補償,象以太網在碰撞時那樣。
例如第一個包在0:00,第二個在:04,接着:08,接着:16,:32,:64。
你應該隨機化每個時間;這就象以太網規格那樣以一個掩碼'與'一個隨機數進入第一次補
償。
在每次後續的補償中,掩碼增長一個比特。
這樣在每次補償中平均延遲加倍。
在'平均'補償到達60秒後,就不再增長了,但仍然隨機化。
在每次重傳前,客户端應該修改'secs'字段。[UDP校驗和]
BOOTP服務器接收BOOTREQUEST(引導請求)
如果服務器名字字段(sname)是空(沒有指定特定的服務器),或者sname是指定的並且
匹配我們的名字或別名,
繼續包的處理。
如果sname字段是指定的,但不匹配'我們',那麼有多種選擇:
1.你可以選擇簡單丟棄這個包。
2.如果查詢sname的名稱顯示它在一個網絡中,丟棄這個包。
3.如果sname在不同的網絡中,你可以選擇轉發這個包到那個地址。
如果這樣,檢查'giaddr'(網關地址)字段。如果'giaddr'是0,填入我的地址或可以用來
到達那個網絡的網關的地址。
然後轉發這個包。
如果客户端IP地址(ciaddr)是0,那麼客户端不知道自己的IP地址。
嘗試在我們的數據庫中查找客户端的硬件地址(chaddr,hlen,htype)。
如果沒有匹配,丟棄這個包。否則我們對這個客户端有一個IP地址;填入'yiaddr'(你
的IP地址)字段。
這個字段是空。
如果這個字段非空,可以將它和客户端的IP地址做為數據庫的查詢關鍵字。
如果有默認的文件或通用文件(可能由客户端地址做為索引)或一個匹配的指定的路徑
名稱,
然後在'file'字段中填入選擇的引導文件的指定的路徑名稱。
如果字段是非空並且沒有匹配,那麼客户端要一個我們沒有的文件,丟棄這個包,也許
其它BOOTP服務器有這個文件。
賣主指定的數據字段'vend'應該檢查了。如果提供一種可識別類型的數據,
應該進行客户端指定的動作,並且迴應要填入應答包中的'vend'數據字段。
限,
或一套配置選項傳給馬上就要引導入的操作系統。
我的(服務器)IP地址填入'siaddr'字段。設置'op'字段為BOOTREPLY(引導應答)。
'giaddr'。
否則客户端在我們的一個網絡中但它還不知道自己的IP地址,使用在上面'蛋'章節中描述
的方法來傳送它到客户端。
如果使用'蛋'並且我們在主機上有許多接口,使用'yiaddr'(你的IP地址)字段指出發送包
到哪個網絡(網絡/接口)。
BOOTP服務器/網關接收BOOTREPLY(引導應答)
[UDP校驗和]如果'yiaddr'(你的[客户端的]IP地址)指向我們的一個網絡,使用上述'蛋'方
法來將它轉發到客户端。
確認將它傳送到'BOOTP客户端'UDP目的端口。
BOOTP客户端接收
不要忘記為我自己的IP地址(如果我知道)處理ARP請求。[UDP校驗和]
導應答);
不匹配我的IP地址(如果我知道)或我的硬件地址;不匹配我的事務ID。
否則我們就收到一個成功的應答。如果我以前不知道的話,'yiaddr'包含我的IP地址。
那麼包應該先轉發到那裏,然後到達服務器。
[4]
BOOTP通過網關引導
帶盤網關(例如,一個做為網關的UNIX機器)可能運行它們自己的BOOTP/TFTP服務器。
偵聽BOOTREQUEST(引導請求)廣播的網關可能確定轉發還是適當地再廣播這些請求。
例如,做為配置表格的一部分,網關可以有一個接收任意BOOTREQUEST(引導請求)廣
播的其它網絡或主機的列表。
即使考慮有一個'hops'字段,簡單全部再廣播請求仍是一個差的方法,因為廣播循環幾乎肯
定會發生。
轉發可以立即開始,或等'secs'(客户端嘗試的秒數)字段超過某個閥值。
如果一個網關確定轉發請求,它應該查看'giaddr'(網關IP地址)字段。
如果是0,它就在這個字段中加入自己的IP地址(在接收的網絡中)。
也可以使用'hops'字段來可選控制包可以轉發多遠。每次轉發應該增加跳數。
例如,如果跳數超過'3',包應該被丟棄。
[UDP校驗和]
這裏我們推薦在網關中增加這個特殊的轉發功能。
但不總是這樣子的。
在網上存在一些'BOOTP轉發代理'引導客户端,這些代理可以適當地轉發。
這樣這些服務可以和網關在一起,也可以不在一起。
當轉發代理不和網關在一起時,代理可以通過在接收的引導請求中'giaddr'字段加上接口的廣
播地址節省一些工作。
這樣應答就可以使用普通的網關來轉發,而不包含轉發代理。
的額外的花費。