BOOTP
IP/UDP bootstrap protocol (BOOTP)
自身の IP アドレスやサーバホストのアドレス、メモリ上にロード & 実行されるファイルの名前等を発見するためのプロトコル
設定情報の集合を伝送するためのメカニズム
ブートストラップのフェーズ
アドレスの決定およびブートファイルの選択 : BOOTP
ファイルの転送 : TFTP, SFTP, FTP
主に OS がブートする際に用いられる
PROM 上のソフトウェアによって動作し、ユーザの操作を必要としない
拡張可能な仕様であり、実際にいくつかの設定値については拡張が存在する
DHCP が BOOTP の上位互換となっており、今ではあまり使われていない パケットフォーマット
標準的な IP, UDP データグラム内に包括される。簡単のため、BOOTP パケットは決して断片化されないものとする。全ての数値フィールドは標準ネットワークバイトオーダーで格納される (高いオーダーのビットが最初に送信される)。
BOOTREQUEST の IP ヘッダー
クライアントは、自身のアドレスを知っていればそれを、しらなければ 0 にする
サーバのアドレスがわからない場合、ブロードキャストアドレス 255.255.255.255 を指定
BOOTREQUEST の UDP ヘッダー
ポート番号は、クライアントが 68 でサーバーが 67 に予約されている
クライアントからの送信は大抵ブロードキャスト
サーバからの送信んは OS やドライバにもよるが、ブロードキャストのこともあればそうでないこともある
BOOTP message のヘッダーは以下のような感じ
code:bootp_message_header
FIELD BYTES DESCRIPTION
----- ----- -----------
op 1 packet op code / message type.
1 = BOOTREQUEST, 2 = BOOTREPLY
htype 1 hardware address type,
see ARP section in "Assigned Numbers" RFC.
'1' = 10mb ethernet
hlen 1 hardware address length
(eg '6' for 10mb ethernet).
hops 1 client sets to zero,
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.
secs 2 filled in by client, seconds elapsed since
client started trying to boot.
-- 2 unused
ciaddr 4 client IP address;
filled in by client in bootrequest if known.
yiaddr 4 'your' (client) IP address;
filled by server if client doesn't
know its own address (ciaddr was 0).
siaddr 4 server IP address;
returned in bootreply by server.
giaddr 4 gateway IP address,
used in optional cross-gateway booting.
chaddr 16 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.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op (1) | htype (1) | hlen (1) | hops (1) |
+---------------+---------------+---------------+---------------+
| xid (4) |
+-------------------------------+-------------------------------+
| secs (2) | flags (2) |
+-------------------------------+-------------------------------+
| ciaddr (4) |
+---------------------------------------------------------------+
| yiaddr (4) |
+---------------------------------------------------------------+
| siaddr (4) |
+---------------------------------------------------------------+
| giaddr (4) |
+---------------------------------------------------------------+
| |
| chaddr (16) |
| |
| |
+---------------------------------------------------------------+
| |
| sname (64) |
+---------------------------------------------------------------+
| |
| file (128) |
+---------------------------------------------------------------+
| |
| vend (64) |
+---------------------------------------------------------------+
ローカルサブネットマスク、ローカルタイムオフセット、デフォルトルータのアドレス、様々なインターネットサービスのアドレス等も、BOOTP によって伝送できる。
上記のオリジナルの使用では、いくつかの側面についての仕様が厳密ではなかった。特に、BOOTP relay agents (元は BOOTP forwarding agents) について概要しか触れていなかった。これについて詳しく説明しているのが RFC 1542。 用語
BOOTREQUEST
BOOTP クライアントから BOOTP サーバへの BOOTP メッセージ
設定情報のリクエスト
BOOTREPLY
BOOTP サーバから BOOTP クライアントへの BOOTP メッセージ
設定情報を含む
Silently discard
いくつかのケースにおいて、BOOTP エンティティが暗黙的に破棄される
受け取った BOOTP エンティティがそれ以上処理されずに破棄され、 ICMP エラーもはかない
しかし、問題を診断するため、エンティティはエラーのロギング機能を提供すべき
flags
RFC 951 では unused だったオクテットを、新たに flags として定義し、フラグを詰めていくことになった。この仕様時点ではフラグは BLOADCAST フラグのみ。
BOOTP relay agent
BOOTP のクライアント及びサーバは同様の IP ネットワークやサブネットに存在しない場合がある
このような場合には、クライアント/サーバ間でメッセージを伝送するエージェントがひつようで、そのようなエージェントは BOOTP forwarding agent と呼ばれる
ローカルで、67 番あてに送信された UDP メッセージは、BOOTP relay agent により特別に処理される
Martian address filtering によって、通常ルーターやホストは不正な IP アドレスをもつデータグラムは破棄する。これは例えば 0.0.0.0 だが、BOOTP relay agent はこれを BOOTPREQUEST として受け取る必要がある