1.TFTP:


-
- netascii表示數據是以成行的ascii碼字符組成,以兩個字節\r \n作為行結束符
- octet則將數據看做8bit一組的字節流而不作任何解釋。



- 操作碼:1請求,2應答
- 硬件類型:1表示10Mb/s的以太網
- 硬件地址長度:對於以太網,硬件地址長度字段為6個字節
- 跳數:由客戶端設置為0
- 事務標識:一個由客戶端設置並由服務器返回的32bit整數。客戶用它對請求和應答進行匹配。
- 秒數:客戶開始進行引導時,將設置一個時間值,備用服務器能看到這個時間,超過這個時間備用服務器會響應客戶的請求,這意味着主服務器沒有啟動。
- 客戶IP地址:客戶端寫入,否則將設置為0
- 客戶硬件地址: 有客戶設置。
- 服務器主機名:一個空值終止的字符串,由服務器填寫。
- 特定廠商區域:用於對BOOTP進行不同的擴展。
協議流程
-
由BOOTP啟動代碼來啟動BOOTP客戶端,這個時候BOOTP客戶端還沒有IP地址。
-
BOOTP客戶端使用廣播,源IP地址為0.0.0.0,目的IP地址為255.255.255.255,向網絡中發出IP地址查詢要求。
-
運行BOOTP協議的服務器接收到這個請求,會根據請求中提供的MAC地址找到BOOTP客戶端,並發送一個含有IP地址、服務器IP地址、網關等信息的回應幀。
-
BOOTP客戶端會根據該回應幀來獲得自己的IP地址並通過專用文件服務器(如TFTP服務器)下載啟動鏡像文件,模擬成磁盤來完成啟動。
端口號
BOOTP服務器67號端口,BOOTP客戶端68號端口。
選擇兩個端口而不是僅選擇一個端口為BOOTP服務器用的原因是:服務器的應答可以進行廣播。
- 當服務器廣播,客戶端使用臨時端口時。廣播也能被其他的主機中碰巧使用相同臨時端口的應用進程接收到。因此,采用隨機端口(即臨時端口)對廣播來說是一個不好的選擇。
- 客戶端和服務器使用同一個端口時。可以,此時網絡內的所有服務器會被喚醒來查看這個廣播,若是應答服務器就不做處理。
- 多個客戶端同時引導時,且服務器廣播所有應答。這樣每個客戶都會收到其他客戶的應答。客戶可以通過BOOTP首部中的事務標識字段來確認應答是否與請求匹配,或者可以通過檢查返回的客戶硬件地址加以區分。
BOOTP中繼
路由器(也稱作“ BOOTP 中繼代理”),當收到一個BOOTP請求時,中繼代理將它的IP地址填入收到BOOTP請求中的“網關IP地址字段”,然后將該請求發送到真正的BOOTP服務器(由中繼代理填入網關字段的地址是收到的BOOTP請求接口的IP地址)。該代理中繼還將跳數字段值加1(這是為防止請求被無限地在網絡內轉發)。既然發出的請求是一個單播的數據報(與發起的客戶的請求是廣播的相反),它能按照一定的路由通過其他的路由器到達真正的BOOTP服務器。真正的BOOTP服務器收到這個請求后,產生BOOTP應答,並將它發回中繼代理,而不是請求的客戶。既然請求網關字段不為零,真正的BOOTP服務器知道這個請求是經過轉發的。中繼代理收到應答后將它發給請求的客戶。
特定廠商信息
如果有信息要提供,這個區域的前4個字節被設置為I P地址99.130.83.99。這可稱作魔術甜餅,表示該區域內包含信息。
BOOTP vs. RARP
無盤系統用RARP獲取IP存在的問題:
- IP地址是返回的唯一結果,沒有其他信息返回。
- RARP使用鏈路層廣播,路由器不會轉發該請求,使得在每個實際網絡中得設置一個RARP服務器。
BOOTP vs. DHCP
- DHCP可以說是BOOTP的增強版本,比較起BOOTP,DHCP透過"租約"的概念,有效且動態的分配客戶端的IP設定,而且,作為兼容考慮,DHCP也完全照顧了BOOTP Client的需求。
- 必須至少有一台DHCP工作在網絡上面,它會監聽網絡的DHCP請求。它提供兩種IP定位方式:自動分配,一旦DHCP客戶端第一次成功的從DHCP服務器租用到IP地址之后,就永遠使用這個地址;動態分配,當DHCP第一次從HDCP服務器端租用到IP地址之后,並非永久的使用該地址,只要租約到期,客戶端就得釋放。
- DHCP除了可以動態的進行設定IP地址之外,還能夠直接將一些IP保留下來給一些特殊用途的機器進行使用。另外一個方面,它能夠直接按照硬件地址來固定的分配IP地址。
- DHCP與BOOTP的不同點在於,BOOTP也可以完成給主機分配IP地址的任務,但它要求主機的硬件地址必須被手工輸入到BOOTP表中。可以講DHCP看成一個動態的BOOTP。但是,BOOTP還可以將用來引導主機的操作系統發送給主機。而DHCP不可以。
總結:
這種協議允許正在啟動的主機動態配置而無需用戶監督。BOOTP 主要用於客戶機從服務器獲得自己的 IP 地址,服務器的 IP 地址以及啟動映象文件名。其它一些配置信息,如本地子網掩碼、本地時間偏移量、默認路由器地址和各種 Internet 服務器地址,都能與使用 BOOTP 協議的客戶機交流。
BOOTP 使用兩個不同的知名通訊端口 UDP67/68。UDP67 用於服務器,UDP68 用於 BOOTP 客戶機。客戶機啟動時,本身還沒有 IP 地址,這時 BOOTP 客戶機就以廣播的形式發出一個名為 BOOTREQUEST 的 IP 地址查詢請求包,這個請求包中包含了客戶機物理地址,還可能有一個 IP 地址,如果已有的話。客戶使用地址 255.255.255.255 發送廣播,這種特殊地址稱為有限廣播地址。然后客戶機等待服務器的響應,如果在特定時間段內沒有收到響應,客戶機就重新發出請求。 通過引導答復(bootreply)包,服務器響應客戶機請求。請求可以包含“通用”引導文件名,例如,“unix”或“ethertip”。但服務器發送引導應答包時,它使用對應的引導文件的確切的路徑名稱來取代這個字段。
為了確定路徑名,服務器會查詢本身的的數據庫。這個數據庫關聯了客戶機地址、請求文件名和為用戶定制的特殊引導文件。如果請求(bootrequest)文件名是空,服務器就返回一個文件名字段用於表示客戶機需加載的默認文件。 在客戶機 IP 地址不知道的情況下,服務器必須要有一個硬件地址和 IP 地址相對應的數據庫。客戶機 IP 地址也被放到“bootreply”的某一字段中。 BOOTP 和 RARP 類似,但 RARP 只運行於 LAN 網絡的數據鏈路層;而基於 UDP/IP 的配置協議 BOOTP 則提供了更多配置方面的信息,它允許整個 IP 網絡動態配置。
總之,BOOTP 及其擴展成為動態主機配置協議(DHCP)的基礎。 協議結構8 16 24 32Op Htype Hlen HopsXidSecs FlagsCiaddrYiaddrSiaddrGiaddrChaddr (16 bytes) sname (64 bytes) File (128 bytes) Option (variable) Op – 消息操作代碼,可以是引導請求( BOOTREQUEST )也可以是引導答復( BOOTREPLY ) Htype – 硬件地址類型 Hlen – 硬件地址長度 Xid – 事務 ID. Secs – 客戶機開始地址請求或續約后消耗的時間(秒數) Flags – 標記 Ciaddr – 客戶機 IP 地址 Yiaddr – “你的”(客戶機) IP 地址 Siaddr –在 bootstrap 中下一台服務器可用服務器的 IP 地址 Giaddr – 通過代理啟動時代理的 IP 地址 Chaddr – 客戶機硬件地址。