16

クライアントが68ポートでリッスンしない場合、DHCPサーバーは要求を受信すると、要求を受信したアドレスに送信できます(送信時にクライアントが選択したエフェメラルポートを使用)。プロトコルがクライアントを指定するのはなぜですか。ポート68でリッスンしていますか?

4

3 に答える 3

19

主な理由は、DHCPサーバーが、要求を受信したMACアドレスにユニキャストで送信するのではなく、Macレベルで「DHCPオファー」をブロードキャストする可能性があるためです。ポートが一定でない場合、この同じランダムポートを偶然にリッスンしている一部のホストは、レイヤー5(アプリケーションレイヤー)へのパケットを受け入れます。つまり、アプリケーションは、正常な状況ではなく、まったく異なるアプリケーションからメッセージを受け取ります。

于 2013-03-11T13:43:50.833 に答える
3

DHCPの動作を指定するのはRFC(Request for Comments)にあるためです。RFC 2131は、DHCPクライアントとサーバーがどのように動作する必要があるかを指定するドキュメントです。

DHCPの詳細については、ここを参照してください(特にセクション4.1)。RFCとは何かについては、ここを参照してください。

于 2009-11-24T15:56:00.650 に答える
3

私は自分で同じ質問に直面する必要がありました。いくつかの調査の結果、DHCPプロトコルについて説明しているRFC2131のセクション1.6設計目標で次のことがわかりました。

  • DHCPは、既存のBOOTPクライアントにサービスを提供する必要があります

また、BOOTPプロトコルを記述しているRFC 951には、次のものがあります。

UDPヘッダーには、送信元ポート番号と宛先ポート番号が含まれています。BOOTPプロトコルは、「BOOTPクライアント」(68)と「BOOTPサーバー」(67)の2つの予約済みポート番号を使用します。クライアントは、宛先ポートとして「BOOTPサーバー」を使用して要求を送信します。これは通常、放送です。サーバーは、宛先ポートとして「BOOTPクライアント」を使用して応答を送信します。サーバーのカーネルまたはドライバー機能に応じて、これはブロードキャストである場合とそうでない場合があります(これについては、以下の「鶏/卵の問題」というタイトルのセクションで詳しく説明します)。2つの予約済みポートが使用される理由は、ブート応答をクライアントにブロードキャストする必要がある場合に、「ウェイクアップ」してBOOTPサーバーデーモンをスケジュールすることを回避するためです。サーバーと他のホストは「BOOTPクライアント」ポートでリッスンしないため、このような着信ブロードキャストは、カーネルレベルで除外されます。クライアントがUDP送信元ポートフィールドに「ランダムな」ポート番号を選択できるようにすることはできません。サーバーの応答がブロードキャストされる可能性があるため、ランダムに選択されたポート番号は、そのポートでリッスンしている他のホストを混乱させる可能性があります。

したがって、質問に対する答えは上記から得られます。DHCPがBOOTPプロトコルと互換性を持つために、DHCPクライアントはUDPポート68を使用する必要があり、BOOTPREPLIESはブロードキャストできるため、BOOTPプロトコルはクライアントに特定のポートを必要とし、クライアントにランダムなポートが選択された場合、同じポートでリッスンしている他のホストの混乱を招く可能性があります。

于 2017-05-31T20:09:31.503 に答える