UDPホールパンチング 【UDP hole punching】
概要
UDPホールパンチング(UDP hole punching)とは、インターネットとの境界でNATによるアドレス変換が行われているネットワーク内の端末から、外部の相手と双方向の通信を行う手法の一つ。UDPによる双方向の伝送経路を確保する。家庭や企業、大学などの構内ネットワーク(LAN)では、内部の機器間はLAN内でのみ通用するプライベートIPアドレスで通信し、インターネットへ中継するルータのみがグローバルIPネットワークで外部と通信するという構成を取ることが多い。
その際、内外で通信を中継するため、ルータが「NAT」(ネットワークアドレス変換)や「NAPT」(IPマスカレード)などの技術によって、内側と外側のIPアドレスとポート番号を対応付けて相互に変換するという処理を行う。内側から通信を開始することはできるが、外側から着信を受け付けることはできない。
UDPホールパンチングは互いに別のネットワークでNATの内側にいる機器同士が、インターネットを通じて自由に双方向の通信を行えるようにする「NATトラバーサル」(NAT越え)手法の一つである。双方がインターネット上の中継サーバにUDP通信を開始し、サーバが互いの接続窓口を相手方に教える。
接続手順
機器Aと機器Bは共に中継サーバSへUDP接続を行う。すると、機器Aも機器BもそれぞれのネットワークのNAT機能により、Sと通信するためのグローバルIPアドレスとポート番号の組が割り当てられ、Sとの間でUDPによる双方向通信が可能となる。
Sは機器Aの接続窓口(IPアドレスとポート番号)を機器Bに教え、同様に機器Bの窓口も機器Aに教える。以降はSを介さずに機器Aは機器Bの窓口へ、機器Bは機器Aの窓口へ直接UDP通信することができるようになる。NATの対応付けが終了してしまうと接続が途絶してしまうため、一定時間ごとに通信を維持するためのキープアライブ通信を行う必要がある。
TCPだとパケットの順序番号など複雑な制御情報が記録されており、接続相手が途中で変わると正しく通信を維持することができなくなってしまうため、この手法はUDPでのみ有効である。また、業務用のネットワーク機器などではNAT接続の相手を監視するタイプのものもあり、中継サーバから相手方端末への切り替えが許可されない場合がある。