なぜIPv6とIPv4の名前解決は別々に行なわれるのか?
www.example.comなどの「名前」に対応するIPアドレスをDNSサーバに問い合わせるとき、IPv4とIPv6に関する名前解決を単一の問い合わせで行うことはできません。そのため、DNSサーバに対して、IPv4に関する問い合わせと、IPv6に関する問い合わせを、別々に2度行う必要があります。
これは、DNSサーバに対しての問い合わせが単一のレコードに対してしか行えないためです。 Aレコード(IPv4アドレス)の問い合わせと、AAAAレコード(IPv6アドレス)の問い合わせは、それぞれ別々のレコードに対する問い合わせなので、両方を同時には行えないのです。
ただし、「IPv4とIPv6に関するDNSサーバへの問い合わせは別々に行わなければならない」というのは、事実上の話であって、「仕様上そうなっている」と言い切れるのかどうかは微妙かも知れません。
DNSに関するRFCは、悪名高いRFC 1034とRFC 1035を基本としています。 RFC 1034がDNSのコンセプトを解説し、RFC 1035に仕様が記載されています。 これらのRFCは、1987年に発行されていますが、現時点においてRFC 1034とRFC 1035を上書きして廃止するRFCは存在しないため、DNSに関してはRFC 1034とRFC 1035がベースになるのです。
- RFC 1034 : DOMAIN NAMES - CONCEPTS AND FACILITIES (1987年)
- RFC 1035 : DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION (1987年)
DNSサーバに対して問い合わせを行うときに利用されるDNSメッセージのフォーマットは、RFC 1035に記載されていますが、そこに書いてある仕様上は、複数の問い合わせを1つのDNSメッセージで行えるようにも読めます。
RFC 1035の28ページにある「4.1.2. Question section format」には、「The section contains QDCOUNT (usually 1) entries」と書いてあります。1987年のRFCなので、いまほど厳密な記述方法になってないとはいえ、「普段は1(usually 1)」という仕様を見ると、どうして良いのかわからなくなります。そして、この「普段は1」という仕様は今も上書きされずにそのまま残っています。そもそも、QDCOUNTのQDが何の略であるかも書いてません。QはQuestionだと推測されますが、Dは何なのか明確に定義されていないので謎です。
「普段は1」ということは、普段とは違う内容も明確に禁止しているわけではないので、RFCの仕様上は複数のQuestionを同時に送信できるようにも読めなくはないです。RFC 1035だけを読む限りは、QDCOUNTを2にしたうえで、QuestionセクションとしてIPv4用のAレコードとIPv6用のAAAAレコードを同時に送信できれば、IPv4とIPv6に関する問い合わせを同時にできなくはないとも思えるわけです。
ただし、現時点ではQDCOUNTが1ではない値を受け付ける実装がありません。複数の問い合わせを同時に含むDNSメッセージを受け入れる実装が存在しないため、単一のDNSメッセージで行える問い合わせは事実上1つだけになっているのです。
昔のRFCに謎仕様が残されていることも多いのですが、DNSというインターネットの根幹的な仕組みにおいても、修正されずに残っている謎仕様が存在し、それを元に世界中での運用が行われているのです。
最近のエントリ
- 「ピアリング戦記」の英訳版EPUBを無料配布します!
- IPv4アドレス移転の売買価格推移および移転組織ランキング100
- 例示用IPv6アドレス 3fff::/20 が新たに追加
- ShowNet 2024のL2L3
- ShowNet 2024 ローカル5G
- ShowNetのローカル5G企画(2022年、2023年)
過去記事