DHCP Discover and Requestの送信元IPで使用されている0.0.0.0の宛先IPアドレスをサーバーが使用できないのはなぜですか? DHCP Discover and Requestから学習したクライアントのMACアドレスを使用して、フレームを適切なクライアントマシンに送信できます。
ユニキャストまたはブロードキャストの選択は、DHCP RFC 2131で指定されます。
クライアントからのDHCPメッセージの「giaddr」フィールドがゼロ以外の場合、サーバーは、アドレスが「giaddr」に表示されるBOOTPリレーエージェントの「DHCPサーバー」ポートにリターンメッセージを送信します。 'giaddr'フィールドがゼロで、 'ciaddr'フィールドがゼロ以外の場合、サーバーはDHCPOFFERおよびDHCPACKメッセージを 'ciaddr'のアドレスにユニキャストします。 'giaddr'がゼロで 'ciaddr'がゼロで、ブロードキャストビットが設定されている場合、サーバーはDHCPOFFERおよびDHCPACKメッセージを0xffffffffにブロードキャストします。ブロードキャストビットが設定されておらず、「giaddr」がゼロで「ciaddr」がゼロの場合、サーバーはDHCPOFFERメッセージとDHCPACKメッセージをクライアントのハードウェアアドレスと「yiaddr」アドレスにユニキャストします。いずれの場合も、「giaddr」がゼロの場合、サーバーはDHCPNAKメッセージを0xffffffffにブロードキャストします。
ciaddrおよびgiaddrは次のとおりです。
ciaddr 4 Client IP address; only filled in if client is in BOUND, RENEW or REBINDING state and can respond to ARP requests. giaddr 4 Relay agent IP address, used in booting via a relay agent.
したがって、DHCPサーバーは、クライアントの現在の状態(主にIPアドレスを既に持っているかどうか)に応じて、またメッセージの送信者(リレーエージェントまたは単なるクライアントの場合)に応じてブロードキャストするかどうかを選択します。
この場合、私のマシンにはすでにIPアドレスがあり、LANにリレーエージェントがないため、DCHPサーバーはDHCPOFFERをユニキャストすることを選択しました。
編集:
また、IPアドレス0.0.0.0を宛先アドレスとして使用することはできません。 IPv4 RFC 5735 で指定されているとおり:
0.0.0.0/8-このブロック内のアドレスはソースホストを参照します 「この」ネットワーク上。 アドレス0.0.0.0/32は、このネットワーク上のこのホストの送信元アドレスとして使用できます; 0.0.0.0/8内の他のアドレスは、このネットワーク上の指定されたホストを参照するために使用される場合があります([RFC1122]、セクション3.2.1.3)。
RFC 2131 、24ページから:
通常、DHCPサーバーとBOOTPリレーエージェントは、uicast配信を使用して、DHCPOFFER、DHCPACK、およびDHCPNAKメッセージをクライアントに直接配信しようとします。 (IPヘッダー内の)IP宛先アドレスはDHCP'yiaddr 'アドレスに設定され、リンク層宛先アドレスはDHCP'chaddr'アドレスに設定されます。残念ながら、一部のクライアント実装は、実装が有効なIPアドレスで構成されるまで、そのようなユニキャストIPデータグラムを受信できません(クライアントがIPアドレスで構成されるまで、クライアントのIPアドレスを配信できないデッドロックにつながります)。
プロトコルソフトウェアがIPアドレスで構成されるまでユニキャストIPデータグラムを受信できないクライアントは、クライアントが送信するDHCPDISCOVERまたはDHCPREQUESTメッセージの「flags」フィールドのBROADCASTビットを1に設定する必要があります。 BROADCASTビットは、DHCPサーバーとBOOTPリレーエージェントにヒントを提供して、クライアントのサブネット上のクライアントにメッセージをブロードキャストします。
プロトコルソフトウェアが構成される前にユニキャストIPデータグラムを受信できるクライアントは、BROADCASTビットを0にクリアする必要があります。BOOTPの説明文書では、BROADCASTビットの使用による影響について説明しています。