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 Matching
ICEと同様にアドレスのマッチングを行う
Traversing the NAT
クライアントはPUNCH_ME_NOW フレームを使用して候補ペアをサーバに送信し、QUICのPath Validationの仕組みでパスプローブを送りホールパンチングします。
Path Validationがうまくいくと、コネクションマイグレーションの仕組みで直通信に切り替えます