はじめに
IPv6 IPoEインターネット接続サービスを利用してIPv4インターネット上のAgora SD-RTNへ接続する条件において接続が安定しない事象が報告されています。本FAQではこの事象について2024年5月7日時点で判明している点も含めて説明致します。
問題の内容
端末側から観測できる接続の不安定な事象は以下の通りです。
- joinChannelには成功している (コネクションの状態(※)が接続(Connected)に遷移)
- その後にコネクションの状態が中断(Interrupted)と再接続(Reconnected)との間を行き来している
- 再接続されるまで相手の映像信号を受信できず会話ができない
- 最初は大丈夫な場合もあるのだが接続を繰り返すうちに症状が悪化する
- しばらくすると復帰する場合もあるのだがまた症状が再現する
※ コネクションの状態遷移はSDKログで追跡することが可能です。状態遷移のイベント発火時にコールバック手続きを登録することも可能です。詳しくは https://docs.agora.io/en/video-calling/develop/ensure-channel-quality?platform=web#connection-states もご覧ください。
問題の原因
IPv6 IPoEインターネット接続サービスのネットワークアーキテクチャとAgora Video SDKが使用するUDPベースのプロプライエタリなネットワークプロトコルの複合要因で前述した事象が発生しています。
ここでそのようなネットワークアーキテクチャの代表的なものとしてv6プラスを利用したネットワークアーキテクチャを紹介します。
- NTT東西フレッツ網の回線契約を締結
- IPv6 IPoEを使用
- IPv6トンネルの実現方法としてMAP-E (NAT44)を採用
(図出典: 株式会社JPIX 監修、小川晃通・久保田聡 共著『徹底解説 v6プラス』(2020))
このIPv6 IPoEインターネット接続サービスにおいてはIPv4 over IPv6トンネルを通じてIPv4パケットを配信するのですが、サービス事業者がIPv4グローバルアドレスを複数の回線で共用するために利用できるポートをあらかじめ回線毎に振り分けます。
宅内のネットワーク機器はこの割り当てられたポートをもとにNATテーブルを運用するのですが、Agora Video SDKが使用するUDPベースのプロプライエタリなネットワークプロトコルを使用した場合に特定のIPv4アドレスに対する大量のUDPデータグラムの送受信が発生しポートの枯渇が発生しNATテーブルに新規エントリすることが出来ずIPパケットを破棄してしまいます。
枯渇するまではIPパケットの配信機能に問題はなく、端末側もSD-RTNへの接続が問題なく出来ています。その後ポートが枯渇するとIPパケットの破棄が発生し始めます。コネクションの状態が中断、再接続を繰り返します。ポート枯渇の状況が緩和すると状態が一時的に復帰しますがポートが再度枯渇すると同じ状況が繰り返し発生します。そのため、中途半端に動作する様子が端末側からは観測されることになります。
ポートの枯渇が発生するまでのシナリオは複数考えられますが前述したシナリオが支配項と考えております。
対策
短期観点ではポートの利用に制限を受けることのないインターネット接続サービスに切り替えてAgora Video SDKの利用をご提案します。
なお、ForceTCPモードでのCloud Proxy for Video SDKを利用することでポート枯渇発生の緩和を期待することができます。Cloud Proxy製品概要については https://agora-support.vcube.com/hc/ja/articles/14887487490201-Cloud-Proxy%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95 をご覧ください。有償オプション製品でのご提供となりますのでご検討のお客様は当社アカウント営業までお声がけください。
対策への補足
中長期観点ではこのような不安定な状況を即座に検知できないか、またAgora Video SDKの使用するネットワークプロトコルをUDPベースからTCPベースに切り替えることでポート枯渇の発生を緩和できないか、継続して改善の可能性を模索しております。こちらについては適宜更新して参ります。