TCPフォールバック 【TCP fallback】
概要
TCPフォールバック(TCP fallback)とは、ドメイン名とIPアドレスの変換などを行うDNS(Domain Name System)で、DNSサーバからの応答が512バイトを超える場合に通信をUDPからTCPに切り替える仕組み。DNSではクライアントからサーバへ問い合わせを送り、サーバは問い合わせに応じて調べた内容を応答する。このやり取りは通常、トランスポート層のプロトコルとしてUDP(User Datagram Protocol)を使用するが、DNSの初期の仕様では一度に応答できる内容は512バイトまでに制限されていた。
512バイトを超える場合、サーバは応答メッセージの制御情報に含まれる「TCビット」(Truncation Bit)をオンに設定し、短く切り詰めた応答を返信する。クライアントはこれを受けてTCP(Transmission Control Protocol)で改めて同じ問い合わせを送り、TCPによって応答全体を受け取る。この仕組みをTCPフォールバックという。
TCPフォールバックが発生すると同じやり取りをTCPでやり直さなければならないため応答を得られるまでの時間が長くなる。また、TCPはデータ伝送を確実にするため手順が複雑で、UDPによる通信よりもサーバの処理負荷が増大する。
512バイトはIP(Internet Protocol)の仕様上、UDPデータグラムが分割されずに必ず一度で送信できることが保証された最大サイズであるため、信頼性の低かった古いインターネット環境では必要な制約だったが、現代では通信環境が改善されており、ほとんど意味のない制約となっている。
一方、現代ではDNSによる情報のやり取りは様々な用途で用いられており、長い応答を返す場面も増えている。そこで、1999年に「EDNS0」という拡張仕様が策定され、可能であればUDPで一度に最大65,535バイトまで送受信するよう制限が緩和された。現在ではクライアントとサーバの双方がEDNS0での通信に合意すればTCPフォールバックは起こらなくなっている。