QUICのNATトラバーサル用 拡張仕様

IETFに「Using QUIC to traverse NATs」という提案仕様が提出されています。

このDraftでは「WebRTC over QUIC」や「P2P QUIC」のユースケースを想定しています。

大まかな流れとしては

  • 『Proxying Listener UDP in HTTP』といったProxy経由でクライアントはサーバに接続する
  • そのコネクション上でIPアドレスを交換してICE相当の処理を行う
  • QUICのPath validationの仕組みを用いてホールパンチングする
  • コネクションマイグレーションを行う

IETF 118の発表スライドがわかりやすいので、それをもって流れを説明していく

Address Discovery

QUICがProxyを経由してコネクションが確立したあと、サーバから ADD_ADDRESSフレームで候補となるIPアドレス及びポートをクライアントに送信する


Address Matching

ICEと同様にアドレスのマッチングを行う


Traversing the NAT

クライアントはPUNCH_ME_NOW フレームを使用して候補ペアをサーバに送信し、QUICのPath Validationの仕組みでパスプローブを送りホールパンチングします。
Path Validationがうまくいくと、コネクションマイグレーションの仕組みで直通信に切り替えます