DHCP、闇すぎる。
同じ種類のパケットなのにブロードキャストが使われたり使われなかったり、しかもペイロードにブロードキャストかユニキャストかを識別するフラグがあるのに実際と一致してないことがある。
このフラグは、サーバからの応答に期待するパケット種別らしい。
また、BROADCASTフラグ(2バイトフィールドの第1ビット。他のビットは通常は0になっている)によってクライアントがDHCPOFFERをブロードキャスト・ユニキャストのどちらで受け取りたいかをサーバに通知することができる。また、BROADCASTフラグ(2バイトフィールドの第1ビット。他のビットは通常は0になっている)によってクライアントがDHCPOFFERをブロードキャスト・ユニキャストのどちらで受け取りたいかをサーバに通知することができる。
DHCPクライアントによっても挙動が大きく異なる。
リース延長の時は普通はREQUESTを投げるはずがDISCOVERを投げる奴がいる。DHCPサーバはリースに持ってるMACアドレスからのDISCOVERに対しても大体は同じIPを払い出してくれるけどそうではないこともあって結果としてIPが変わってしまう。
手動でリース解放できない奴もある。意味不明。
WindowsはDHCPのやり取りの間隔制限があるらしく(ソース失念)、極端に短いリース期間にするとDHCPパケットを投げないくせにリース期間は順守してIP割り当てが消失する。
REQUESTをブロードキャストで投げるかユニキャストで投げるかもまちまちだし、DHCPサーバからの応答がなかった時のフォールバックの動きもまちまち。
DHCPリレーが絡むとさらに厄介になる。フェイルオーバーが絡むともっと厄介になる。
BINDと組み合わせてDDNSを実装するとさらに混迷を極めるのでお勧め。