« memcachedのリソースモニター | メイン | PIONEERカーナビ AVIC-MRZ99 »

TCPフォールバック

TCPフォールバック

DNSの問い合わせに対する回答が512byteを超える場合にUDPプロトコルではなくTCPプロトコルによって応答される事象を示す。

なぜudp/53宛に問い合わせしたのになぜTCPプロトコルで応答するのか?
- MTUの最小値である576byteDNSの応答パケットとしては512byte(現在は、576byteという経路はほとんどなく、1980年当初の事情を引きずっている)を超えてしまうと経路によってはパケット分割されてしまう。1パケットで処理できるようにRFC1035にて512byte以下の応答パケットに制限されると規定されている。そのため、512byteを超える場合には、TCPプロトコルで応答する。

○備考
DNSクライアント(リゾルバ)はudpプロトコルの任意のポートをバインドして問い合わせしており、応答があるまでバインドし続ける。DNSサーバーは送信元ポートを送信先ポートにし、送信元ポートを53番ポートにして応答することで途中の(外→内の通信を制限する)F/Wを通過することができ(るように設定されていることが一般的であり)、またリゾルバは応答を受けることができる。TCPフォールバックされる場合、UDPの応答パケットにてTCPプロトコルによって再度接続確立が行われて、TCPプロトコルによって応答される。

○なぜDNSはTCPのみでやり取りしてはいけないのか?(個人的な考察)
・SYN Flood攻撃により容易にサービス拒否に追い込まれる
・スリーウェイハンドシェイクをしなければならず、DNSの応答パケットの大きさにかかわらず、絶対的な通信量が多くなってしまう
・下位互換性がなくなる

詳しくはJPRSの資料を参考にするとわかりやすい。



トラックバック

トラックバックは本サイトの紹介(リンクがあれば可)があるものに限り受付いたします。このエントリーのトラックバックURLは以下のとおりです。

http://blog.development-network.net/mt/mt-tb.cgi/1010

コメントを投稿