BIND

提供: Wikinote
2009年5月10日 (日) 14:23時点におけるHagio (トーク | 投稿記録)による版 (動作・仕様)

移動: 案内検索

動作・仕様

UDP と TCP

DNS の通信には、通常 UDP が用いられる。 ただし、UDP パケットが 512 バイト [1] を超えるような通信 (応答) が必要となった場合、TCP による通信が行われる。

  1. クライアントは UDP にてクエリをサーバへ送信する。
  2. (512 バイトを超える場合) サーバは UDP にて、ヘッダ部の TC ビットを 1 にセットした回答をクライアントへ送信する。
  3. クライアントは、TCP にてサーバへ接続し、クエリを送信する。
  4. サーバは、回答をクライアントへ送信する。

したがって、iptables などでパケットをフィルタリングしている場合、UDP/TCP ともに 53 番ポートを通す必要がある。

EDNS0

BIND 8.3 以降、BIND 9 以降は EDNS0 (Extension Mechanisms for DNS version 0) に対応している。

脚注

  1. UDP にてデータ分割が行われないことが保証される最大サイズ。 UDP にてデータが分割されると、TCP と違ってデータの順序が保証されていないため、問題が生じる。 ただし、近年の現実のネットワークでは、もっと大きなパケットでも分割せずに送信されるため、後述の EDNS0 が提案された。