要約

  • RFC 3074はクライアント識別子またはハードウェアアドレスを256個の値の一つへ写し、共有されたバケット割当てから応答すべきDHCPサーバーを決めた。
  • 文書は、担当サーバーの停止やアドレス不足、未割当てバケット、不正確な時刻、改ざんされた割当ても扱う。正しいハッシュが示すのは設定上の担当であり、現在のサービス能力ではない。

DHCPDISCOVERはブロードキャストされるため、複数サーバーが受信し、いずれも応答できる。BOOTPリレーも複数の設定先へ同じ要求を送ることがある。B. Volz、S. Gonczi、T. Lemon、R. Stevensが2001年2月に発表したRFC 3074は、この重複を抑える方法を示した。初期設定を共有すれば、各参加者は通信を続けなくても同じ「処理する/しない」を計算できる。

入力はService Transaction IDである。Client Identifierがあれば必ずそれを用い、なければhlenの長さとchaddrの先頭最大16バイトを用いる。指定されたPearsonハッシュは0から255の値を返す。サーバーには32オクテットのHash Bucket Assignmentビットマップがあり、立っているビットに対応する要求はそのサーバーが処理しなければならない。

これは有用な合意だった。同じ入力、同じ混合表、同じHBAなら、追加交渉なしに同じ担当へ到達する。リレーはServer-IDとバケットの組を使って転送先を選べる。既存のDHCPクライアントを変更せず、応答の母集団を協調サーバー間で分けられた。

しかし演算はサーバーの現況を読まない。プロセスの生存、経路の到達性、リース状態の一致、適切な空きアドレスを問い合わせない。STIDは取引を、HBAは管理上の担当を表す。どちらもライブの容量計ではない。

RFC自身がその差を明示する。本来応答すべきサーバーが利用不能、または適切なアドレスを持たない場合を想定し、任意のDelayed Serviceを設けた。通常ならハッシュで除外されるサーバーも、最初の試行からS秒後に応答できる。最初の割当てを誤りとするのではなく、その機会が結果を生まなかった時に別の入口を開く仕組みだ。

時間の証拠にも条件がある。非ゼロのsecsがあれば使うべきだが、文書は正しく実装しないクライアントがあると述べる。代わりに、断った最初の要求を記憶し、同じtransaction IDの再送でsecsがゼロならローカルの経過時間を使える。前者は申告、後者は二観測の結合であり、担当サーバーが沈黙した理由までは証明しない。

Delayed Serviceを設定しなければ、HBAは厳格な処理境界になる。未割当てバケットの取引は完全に無視され、状況によっては望ましいとも書かれている。ゆえにカバレッジは独立した確認対象だ。実装が正確でも、誰も応答しない値を正確に算出できる。

負荷率も瞬間測定ではない。短期間の実際の割合は設定比から外れ得るが、要求数が増えれば近づくという母集団上の性質である。ハッシュはCPU、キュー、空きアドレス、応答時間を量らない。STIDは一意である必要はないが、分布に十分な多様性が必要だ。

設定そのものも実行経路に含まれる。HBAはファイル、Windows NTレジストリ、EEPROM、合意済みアルゴリズムから得られ、別プロトコル内を運ばれることもある。RFC 3074自体はセキュリティを提供しない。転送時は改ざんを防がなければ、バケット変更によって一部または全クライアントをサービス拒否にできる。同じコードでも、異なる地図や共通して改ざんされた地図は救えない。

RFC 2131のDHCP本体では、クライアントは複数応答を想定し、仕組みはローカル管理方針の下で動く。DISCOVERの後にもOFFER、選択、REQUEST、ACK、設定利用が残る。RFC 3074が最適化するのは誰が先に答えるかであり、後続結果ではない。RFC 1542のリレー規則も、個別装置によるこの方式の正しい採用を証明しない。

後年のRFC 7031は、failover相手の設定不一致を頻出問題とし、負荷分散をDHCPv6 failoverの中核外に置いた。これはRFC 3074の導入実績を遡及的に示す資料ではない。それでも、要求配分、状態同期、障害回復を別の仕事として保つ助けになる。

Running-Code Primacyで並べるべき受領証は、STIDの出所、ハッシュ、HBAカバレッジ、担当機、到達性、空きアドレス、遅延交代、OFFER、選択、REQUEST、ACK、利用可能な設定である。Reality Layersは、計算された担当の象徴的確実さを実行結果と取り違えないよう促す。いずれも後世の分析枠組みで、RFC著者やIETFの主張ではない。

RFC 3074は「誰が最初に試すか」を小さな計算で再現可能にした。その成果は、稼働性まで計算したことではなく、計算しなかったものを別の条件として残したことにもある。バケットの答えが正しくても、サービスはまだ始まったばかりだ。

出典