10. Send and Data Methods (SendとDataメソッド)
TURNは、ピアからデータを送受信するための2つのメカニズムをサポートしています。このセクションでは、SendとDataメカニズムの使用について説明し、セクション11ではチャネルの使用について説明します。
10.1. Forming a Send Indication (Sendインディケーションの構成)
クライアントは、Sendインディケーションを使用して、ピアに中継するためにサーバーにデータを渡すことができます。クライアントは、そのピアにチャネルがバインドされている場合でも、Sendインディケーションを使用できます。ただし、クライアントは、Sendインディケーションを送信するピアのIPアドレスに対してパーミッションがインストールされていることを確認しなければなりません (MUST)。これにより、第三者がTURNサーバーを使用して任意の宛先にデータを送信するのを防ぎます。
Sendインディケーションを構成する際、クライアントは、XOR-PEER-ADDRESS属性とDATA属性の両方を含めなければなりません (MUST)。XOR-PEER-ADDRESS属性には、データを送信するピアのトランスポートアドレスが含まれ、DATA属性には、ピアに送信する実際のアプリケーションデータが含まれます。
クライアントが、ピアに送信されるUDPデータグラムにDFビットを設定することをサーバーに要求する場合、クライアントは、SendインディケーションにDONT-FRAGMENT属性を含めてもよいです (MAY)。
10.2. Receiving a Send Indication (Sendインディケーションの受信)
サーバーがSendインディケーションを受信すると、セクション4の規定に加えて、ここで言及されている特定のルールに従って処理します。
最初にメッセージの有効性がチェックされます。Sendインディケーションは、XOR-PEER-ADDRESS属性とDATA属性の両方を含まなければなりません (MUST)。これらの属性の1つが欠落しているか無効な場合、メッセージは破棄されます。DATA属性には0バイトのデータを含めることができることに注意してください。
SendインディケーションにはDONT-FRAGMENT属性も含まれている場合があります。この属性が存在するときに、サーバーが送信UDPデータグラムにDFビットを設定できない場合、サーバーはDONT-FRAGMENT属性を未知の必須理解属性として扱います(したがってSendインディケーションを破棄します)。
サーバーはまた、XOR-PEER-ADDRESS属性に含まれるIPアドレスに対してパーミッションがインストールされているかどうかをチェックします。そのようなパーミッションが存在しない場合、メッセージは破棄されます。Sendインディケーションがサーバーにパーミッションを更新させることはないことに注意してください。
サーバーは、XOR-PEER-ADDRESS属性で許可されるIPアドレスとポート値に制限を課してもよいです (MAY) -- 値が許可されていない場合、サーバーはSendインディケーションを静かに破棄します。
すべてが正常な場合、サーバーは次のようにUDPデータグラムを構成します:
-
送信元トランスポートアドレスは、アロケーションの中継トランスポートアドレスです。ここで、アロケーションは、Sendインディケーションが到着した5タプルによって決定されます
-
宛先トランスポートアドレスは、XOR-PEER-ADDRESS属性から取得されます
-
UDPヘッダーに続くデータは、DATA属性の値フィールドの内容です
DONT-FRAGMENT属性(存在する場合)の処理は、セクション12で説明されています。
生成されたUDPデータグラムは、ピアに送信されます。
10.3. Receiving a UDP Datagram (UDPデータグラムの受信)
サーバーが、現在割り当てられている中継トランスポートアドレスでUDPデータグラムを受信すると、サーバーは、中継トランスポートアドレスに関連付けられたアロケーションを検索します。次に、サーバーは、セクション8で説明されているように、アロケーションのパーミッションセットがUDPデータグラムの中継を許可しているかどうかをチェックします。
中継が許可されている場合、サーバーは、UDPデータグラムを送信したピアにバインドされているチャネルがあるかどうかをチェックします(セクション11を参照)。チャネルがバインドされている場合、処理はセクション11.7で説明されているように進みます。
中継が許可されているが、ピアにバインドされているチャネルがない場合、サーバーはDataインディケーションを構成して送信します。Dataインディケーションは、XOR-PEER-ADDRESS属性とDATA属性の両方を含まなければなりません (MUST)。DATA属性は、データグラムの'data octets'フィールドの値に設定され、XOR-PEER-ADDRESS属性は、受信したUDPデータグラムの送信元トランスポートアドレスに設定されます。次に、Dataインディケーションは、アロケーションに関連付けられた5タプル上で送信されます。
10.4. Receiving a Data Indication (Dataインディケーションの受信)
クライアントがDataインディケーションを受信すると、DataインディケーションにXOR-PEER-ADDRESS属性とDATA属性の両方が含まれているかどうかをチェックし、含まれていない場合はインディケーションを破棄します。クライアントはまた、XOR-PEER-ADDRESS属性値に、クライアントがアクティブなパーミッションが存在すると考えるIPアドレスが含まれているかどうかをチェックすべきであり (SHOULD)、そうでない場合はDataインディケーションを破棄します。DATA属性には0バイトのデータを含めることができることに注意してください。
注意: 後者のチェックは、何らかの方法でサーバーをだましてクライアントが望まないパーミッションをインストールさせることに成功した攻撃者からクライアントを保護します。
Dataインディケーションが上記のチェックに合格した場合、クライアントは、DATA属性内のデータオクテットを、XOR-PEER-ADDRESS属性で指定されたトランスポートアドレスを持つピアから受信されたことを示す情報とともに、アプリケーションに配信します。