以下は、コマンドのいくつかのサンプル出力です。
$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/00:15:5d:5a:e4:c5
Sending on LPF/eth0/00:15:5d:5a:e4:c5
Listening on LPF/dummy0/6e:0b:72:f9:83:f0
Sending on LPF/dummy0/6e:0b:72:f9:83:f0
Listening on LPF/bond0/82:a2:7e:03:69:19
Sending on LPF/bond0/82:a2:7e:03:69:19
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x3115634c)
DHCPDISCOVER on dummy0 to 255.255.255.255 port 67 interval 3 (xid=0x1ab3dc37)
DHCPDISCOVER on bond0 to 255.255.255.255 port 67 interval 3 (xid=0xcea7a32d)
「LPF」または「ソケット/代替」が何であるかについての文書が見つかりません。
説明を少しできますか?これに関する追加情報はどこにありますか?
リンクhttps://www.isc.org/software/dhcp/あまり役に立ちません。
答え1
明らかに、LPFはLinuxパケットフィルタを表します。https://gitlab.isc.org/isc-projects/dhcp/-/blob/master/common/lpf.c
他の文脈では、次のようにも知られています。LinuxソケットフィルタリングまたはBerkeleyパケットフィルタ。
DHCPクライアントはブロードキャストUDPパケットを送受信できる必要があり、ネットワークインターフェイスには設定されたIPアドレスが必要ではありません。また、複数のインターフェイスを持つシステムのインターフェイスではなくパケットを受信する特定のネットワークインターフェイスにネットワーク設定が割り当てられるように、パケットがどのインターフェイスを通過するかを気にする必要があります。
パケットフィルタリングAPI(LinuxのLPFなど)は、DHCPソフトウェアがオペレーティングシステムのネットワークスタックに次のように通知する最も柔軟で効率的な方法です。 「私のネットワークトラフィック要件は少し珍しいので、生のパケットソケットを使用する予定ですが、まだコピーを受けたくありませんパケットあたりネットワークインターフェイスを介して到着するパケット - 特定のポート番号のUDPパケット。 」
LPFまたは同様のパケットフィルタAPIが利用できない場合、DHCPソフトウェアは標準のネットワークソケットAPIとさまざまな拡張、特にソケットオプションに依存する必要があります。ただし、ISC DHCP ファミリがサポートするすべてのオペレーティング システムで一様にサポートされるわけではありません。ISC DHCPのソケットコードは比較的複雑です。そして#ifdef
sでいっぱいです。
パケットフィルタAPIまたは特定のソケットオプションの両方が利用できない場合、ホストにネットワークインターフェイスが1つしかない場合にのみDHCPファミリが正しく機能する可能性があります。
#if !defined(SO_BINDTODEVICE) && !defined(USE_FALLBACK)
/* Make sure only one interface is registered. */
if (once) {
log_fatal ("The standard socket API can only support %s",
"hosts with a single network interface.");
}
once = 1;
#endif
パケットフィルタリングAPIを使用する場合、ISC DHCPファミリも代替ソケット標準のWebソケットAPIを使用してください。受信側では、フォールバックソケットは到着するすべてのトラフィックを破棄します。一部のパケットフィルタリングAPIコピー着信トラフィックの量とオペレーティングシステムがDHCPで使用されているUDPポートが閉じられているとは思わないように、通常のソケットが必要です。これにより、受信したユニキャストDHCPパケットに対してICMPエラーメッセージが送信されます(例:既存のフラッシュアクティビティなど)。 。
送信側では、フォールバックソケットの使用はあまり明確ではありません。より多くの情報を知っている人がいる場合は、この回答を編集または直接追加してください。