WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
BOOTP
來自站長百科
BOOTP自舉協(xié)議是一個基于IP/UDP協(xié)議的協(xié)議,它可以讓無盤站從一個中心服務器上獲得IP地址,為局域網(wǎng)中的無盤工作站分配動態(tài)IP地址并不需要每個用戶去設置靜態(tài)IP地址,使用BOOTP協(xié)議的時候,一般包括Bootstrap Protocol Server自舉協(xié)議服務端和Bootstrap Protocol Client(自舉協(xié)議客戶端)兩部分。該協(xié)議主要用于有無盤工作站的局域網(wǎng)中,運行BOOTP協(xié)議的服務器接收到這個請求,會根據(jù)請求中提供的MAC地址找到客戶端,并發(fā)送一個含有IP地址、服務器IP地址、網(wǎng)關等信息的FOUND幀。最后客戶端會根據(jù)該FOUND幀來通過專用TFTP服務器下載啟動鏡像文件,模擬成磁盤啟動。
BOOTP協(xié)議要點[ ]
- 使用了一個單獨的包交換,使用超時機制直到收到應答,雙向使用相同的包字段結(jié)構(gòu)。使用最大固定長度的字段來簡化結(jié)構(gòu)定義和分析。
- 一個'opcode'字段包含兩個值??蛻舳藦V播一個'引導請求(bootrequest)'包,服務器應答一個'引導應答(bootreply)'包。'bootrequest'包含客戶端的硬件地址,如果知道還包含它的IP地址。
- 請求可以包含客戶端指定的響應服務器的名稱,這樣客戶端可以強制從一個指定的主機引導,如果一個相同的引導文件存在多種版本或服務器在一個遠距離的網(wǎng)絡/域,客戶端不必處理名稱/域服務,這個功能推到了BOOTP服務器。
- 請求可以包含'通用(generic)'引導文件名,例如'unix'或'ethertip'。但服務器發(fā)送 引導應答時,它使用對應的引導文件的確切的路徑名稱來取代這個字段,服務器查詢客戶端的地址和請求文件名相關的數(shù)據(jù)庫,以使用客戶端自定義的特定引導文件確定這個文件名稱。
- 客戶端不知道它們的IP地址的情況下,服務器必須有一個硬件地址和IP地址對應的數(shù)據(jù)庫,這個客戶端IP地址被放在引導應答的(對應)字段中。
- 某些網(wǎng)絡拓樸(如斯坦福的網(wǎng)絡)可能在一個物理網(wǎng)上沒有一個直接可以訪問的TFTP服務器BOOTP允許客戶端通過使用相鄰的網(wǎng)關從幾跳外的服務器上引導,這部分協(xié)議不需求客戶端部分做特定的動作,實現(xiàn)是可選的,網(wǎng)關和服務器需要一些額外的代碼。
BOOTP包格式[ ]
- UDP頭包含源和目的端口號。BOOTP協(xié)議使用兩個保留的端口號,'BOOTP客戶端'(68)和'BOOTP服務器'(67),客戶使用'BOOTP服務器'作為目的端口發(fā)送請求;這通常是廣播,服務器使用'BOOTP客戶端'做為目的端口發(fā)送應答;取決于服務器的核心或驅(qū)動設備,這可能是也可能不是廣播
- 使用兩個保留的端口的原因是當引導應答必須廣播到客戶端避免'叫醒'并且調(diào)度BOOTP服務器進程。因為服務器和其它主機都不會偵聽'BOOTP客戶端'端口,所有進入的廣播報文將在核心級別過濾掉,我們不能簡單地允許客戶端找一個隨機端口號做為UDP源端口字段,因為服務器應答可能是廣播,
- UDP長度字段設置成UDP長度加BOOTP部分的包,UDP校驗和可以由客戶端(或服務器)按照需要設置成0,以避免PROM實現(xiàn)中額外的費用。
BOOTP客戶端重傳策略[ ]
- 在一長段時間內(nèi)沒有收到應答,客戶端應該重傳請求,時間間隔必須仔細選擇不要引起網(wǎng)絡風暴,可以考慮一個包含100臺機器的網(wǎng)絡在電源故障后發(fā)生的情況。 簡單的每四秒重傳請求將淹沒網(wǎng)絡。一個可能的策略,你可能考慮指數(shù)級的補償,象以太網(wǎng)在碰撞時那樣,例如第一個包在0:00,第二個在:04,接著:08,接著:16,:32,:64。 你應該隨機化每個時間;這就象以太網(wǎng)規(guī)格那樣以一個掩碼'與'一個隨機數(shù)進入第一次補償。
- 在每次后續(xù)的補償中,掩碼增長一個比特,這樣在每次補償中平均延遲加倍,在'平均'補償?shù)竭_60秒后,就不再增長了,但仍然隨機化,在每次重傳前,客戶端應該修改'secs'字段。數(shù)值可以由通常的'魔術字'過程分配,你挑一個它就成為魔術字,引導應答使用一個與引導請求不同的魔術字以允許客戶端按照應答信息進行特殊的動作。
服務器接收BOOTREQUEST[ ]
- 如果UDP目的端口不匹配'BOOTP服務器'端口丟棄這個包,如果服務器名字字段(sname)是空(沒有指定特定的服務器),或者sname是指定的并且匹配我們的名字或別名,繼續(xù)包的處理,如果sname字段是指定的,但不匹配'我們'那么有多種選擇:
- 你可以選擇簡單丟棄這個包。
- 如果查詢sname的名稱顯示它在一個網(wǎng)絡中,丟棄這個包。
- 如果sname在不同的網(wǎng)絡中你可以選擇轉(zhuǎn)發(fā)這個包到那個地址。
- 如果這樣檢查'giaddr'(網(wǎng)關地址)字段,如果'giaddr'是0,填入我的地址或可以用來到達那個網(wǎng)絡的網(wǎng)關的地址,然后轉(zhuǎn)發(fā)這個包,如果客戶端IP地址(ciaddr)是0那么客戶端不知道自己的IP地址。嘗試在我們的數(shù)據(jù)庫中查找客戶端的硬件地址(chaddr,hlen,htype),如果沒有匹配,丟棄這個包。否則我們現(xiàn)在對這個客戶端有一個IP地址;填入'yiaddr'(你的IP地址)字段,我們現(xiàn)在檢查引導文件名字段,如果客戶端不關注文件名或想要默認引導文件這個字段是空。
- 如果字段是非空并且沒有匹配,那么客戶端要一個我們沒有的文件丟棄這個包,也許其它BOOTP服務器有這個文件,賣主指定的數(shù)據(jù)字段'vend'現(xiàn)在應該檢查了。如果提供一種可識別類型的數(shù)據(jù),應該進行客戶端指定的動作,并且回應要填入應答包中的'vend'數(shù)據(jù)字段,UDP目的端口設置成'BOOTP客戶端',如果客戶端地址'ciaddr'非0,把包發(fā)送到那里;否則如果網(wǎng)關地址'giaddr'非0,設置UDP目的端口為'BOOTP服務器'并把包發(fā)送到'giaddr',否則客戶端在我們的一個網(wǎng)絡中但它還不知道自己的IP地址。