TURN サーバーは、通信相手と直接通信が行えない状況下で利用されます。利用する/しないは自動的に判断するため、開発者やエンドユーザが特に意識することなく利用できます。
直接通信するか、 TURN サーバー経由で通信するかは、接続の度に、いくつかの経路での通信を試行した上で決まります。直接通信できる環境であれば、直接の通信を選択されることが多いですが、必ずしも毎回同じ通信経路が選択されるとは限りません。
TURN サーバーを使う場合(例)
-
NAT の内側から NAT の外側に通信する必要がある場合(UDP ホールパンチング対応の NAT(※) の場合は除く)
-
プロキシの内側からプロキシの外側に通信をする場合
-
UDP 通信が許可されていない場合
上記の場合には TURN サーバー経由での通信を試みます。ただし、プロキシにて HTTPS 以外の TCP443 通信を許容していない場合など、 TURN サーバー経由でも通信できない場合もございます。
※ 一般的な NAT の種別毎の UDP ホールパンチング対応状況は以下の通りです。
NAT タイプ |
フルコーン |
制限付きフルコーン |
ポート制限付きフルコーン |
シンメトリック |
---|---|---|---|---|
フルコーン |
P2P |
P2P |
P2P |
P2P |
制限付きフルコーン |
P2P |
P2P |
P2P |
TURN |
ポート制限付きフルコーン |
P2P |
P2P |
P2P |
TURN |
シンメトリック |
P2P |
TURN |
TURN |
TURN |
TURN サーバーを利用するプロトコルやポート番号については、下記通信要件のページをご参照ください。
https://skyway.ntt.com/ja/docs/user-guide/commons/communication-requirements/
TURN サーバーの利用可否を設定したい場合
TURN サーバーを利用するかどうかはシステムで自動的に決定されますが、アプリケーション側で TURN サーバーを利用するかどうかを設定することが可能です。 SkyWayContext 生成時に下記のようにオプションを設定してください。
TURN サーバーを必ず利用するようにする場合
SkyWayContext.Create(token, { rtcConfig: { turnPolicy: 'turnOnly' }});
TURN サーバーを必ず利用しないようにする場合
SkyWayContext.Create(token, { rtcConfig: { turnPolicy: 'disable' }});
TURN サーバーを必ず利用しない場合、経路によっては通信ができない可能性があります。ご認識の上で設定してください。
SkyWayContext.Create について: https://javascript-sdk.api-reference.skyway.ntt.com/room/classes/SkyWayContext.html#Create
turnPolicy について: https://javascript-sdk.api-reference.skyway.ntt.com/room/modules.html#TurnPolicy