BIND
提供: Wikinote
動作・仕様
UDP と TCP
DNS の通信には、通常 UDP が用いられる。 ただし、UDP パケットが 512 バイト [1] を超えるような通信 (応答) が必要となった場合、TCP による通信が行われる。
- クライアントは UDP にてクエリをサーバへ送信する。
- (512 バイトを超える場合) サーバは UDP にて、ヘッダ部の TC ビットを 1 にセットした回答をクライアントへ送信する。
- クライアントは、TCP にてサーバへ接続し、クエリを送信する。
- サーバは、回答をクライアントへ送信する。
したがって、iptables などでパケットをフィルタリングしている場合、UDP/TCP ともに 53 番ポートを通す必要がある。
EDNS0
BIND 8.3 以降、BIND 9 以降は EDNS0 (Extension Mechanisms for DNS version 0) に対応している。
脚注
- ↑ UDP にてデータ分割が行われないことが保証される最大サイズ。 UDP にてデータが分割されると、TCP と違ってデータの順序が保証されていないため、問題が生じる。 ただし、近年の現実のネットワークでは、もっと大きなパケットでも分割せずに送信されるため、後述の EDNS0 が提案された。