10. Send- und Data-Methoden
TURN unterstützt zwei Mechanismen zum Senden und Empfangen von Daten von Peers. Dieser Abschnitt beschreibt die Verwendung der Send- und Data-Mechanismen, während Abschnitt 11 die Verwendung von Kanälen beschreibt.
10.1. Bilden einer Send-Indikation
Der Client kann eine Send-Indikation verwenden, um Daten an den Server zur Weiterleitung an einen Peer zu übergeben. Ein Client kann eine Send-Indikation verwenden, auch wenn ein Kanal an diesen Peer gebunden ist. Der Client muss jedoch sicherstellen, dass für die IP-Adresse des Peers, an den eine Send-Indikation gesendet wird, eine Berechtigung installiert ist, was den TURN-Server davor schützt, von Dritten zum Senden von Daten an beliebige Ziele verwendet zu werden.
Beim Bilden einer Send-Indikation muss der Client sowohl ein XOR-PEER-ADDRESS-Attribut als auch ein DATA-Attribut einschließen. Das XOR-PEER-ADDRESS-Attribut enthält die Transportadresse des Peers, an den die Daten gesendet werden sollen, und das DATA-Attribut enthält die tatsächlichen Anwendungsdaten, die an den Peer gesendet werden sollen.
Der Client kann ein DONT-FRAGMENT-Attribut in die Send-Indikation einschließen, wenn er möchte, dass der Server das DF-Bit auf dem an den Peer gesendeten UDP-Datagramm setzt.
10.2. Empfangen einer Send-Indikation
Wenn der Server eine Send-Indikation erhält, verarbeitet er sie gemäß Abschnitt 4 sowie den hier erwähnten spezifischen Regeln.
Die Nachricht wird zunächst auf Gültigkeit geprüft. Die Send-Indikation muss sowohl ein XOR-PEER-ADDRESS-Attribut als auch ein DATA-Attribut enthalten. Wenn eines dieser Attribute fehlt oder ungültig ist, wird die Nachricht verworfen. Beachten Sie, dass das DATA-Attribut null Bytes Daten enthalten darf.
Die Send-Indikation kann auch das DONT-FRAGMENT-Attribut enthalten. Wenn der Server nicht in der Lage ist, das DF-Bit auf dem ausgehenden UDP-Datagramm zu setzen, wenn dieses Attribut vorhanden ist, behandelt der Server das DONT-FRAGMENT-Attribut als unbekanntes verständniserforderliches Attribut (und verwirft daher die Send-Indikation).
Der Server prüft auch, ob für die im XOR-PEER-ADDRESS-Attribut enthaltene IP-Adresse eine Berechtigung installiert ist. Wenn keine solche Berechtigung existiert, wird die Nachricht verworfen. Beachten Sie, dass eine Send-Indikation niemals dazu führt, dass der Server die Berechtigung aktualisiert.
Der Server kann Einschränkungen für die im XOR-PEER-ADDRESS-Attribut zulässigen IP-Adressen und Portwerte auferlegen -- wenn ein Wert nicht zulässig ist, verwirft der Server die Send-Indikation stillschweigend.
Wenn alles in Ordnung ist, bildet der Server ein UDP-Datagramm wie folgt:
-
die Quell-Transportadresse ist die weitergeleitete Transportadresse der Allokation, wobei die Allokation durch das 5-Tupel bestimmt wird, auf dem die Send-Indikation ankam
-
die Ziel-Transportadresse wird aus dem XOR-PEER-ADDRESS-Attribut entnommen
-
die Daten nach dem UDP-Header sind der Inhalt des Wertfelds des DATA-Attributs
Die Behandlung des DONT-FRAGMENT-Attributs (falls vorhanden) wird in Abschnitt 12 beschrieben.
Das resultierende UDP-Datagramm wird dann an den Peer gesendet.
10.3. Empfangen eines UDP-Datagramms
Wenn der Server ein UDP-Datagramm an einer aktuell zugewiesenen weitergeleiteten Transportadresse empfängt, sucht der Server die der weitergeleiteten Transportadresse zugeordnete Allokation. Der Server prüft dann, ob die Menge der Berechtigungen für die Allokation die Weiterleitung des UDP-Datagramms wie in Abschnitt 8 beschrieben erlaubt.
Wenn die Weiterleitung erlaubt ist, prüft der Server, ob ein Kanal an den Peer gebunden ist, der das UDP-Datagramm gesendet hat (siehe Abschnitt 11). Wenn ein Kanal gebunden ist, wird die Verarbeitung wie in Abschnitt 11.7 beschrieben fortgesetzt.
Wenn die Weiterleitung erlaubt ist, aber kein Kanal an den Peer gebunden ist, bildet und sendet der Server eine Data-Indikation. Die Data-Indikation muss sowohl ein XOR-PEER-ADDRESS- als auch ein DATA-Attribut enthalten. Das DATA-Attribut wird auf den Wert des 'data octets'-Felds aus dem Datagramm gesetzt, und das XOR-PEER-ADDRESS-Attribut wird auf die Quell-Transportadresse des empfangenen UDP-Datagramms gesetzt. Die Data-Indikation wird dann auf dem mit der Allokation verbundenen 5-Tupel gesendet.
10.4. Empfangen einer Data-Indikation
Wenn der Client eine Data-Indikation erhält, prüft er, ob die Data-Indikation sowohl ein XOR-PEER-ADDRESS- als auch ein DATA-Attribut enthält, und verwirft die Indikation, wenn dies nicht der Fall ist. Der Client sollte auch prüfen, ob der Wert des XOR-PEER-ADDRESS-Attributs eine IP-Adresse enthält, mit der der Client glaubt, dass eine aktive Berechtigung besteht, und die Data-Indikation andernfalls verwerfen. Beachten Sie, dass das DATA-Attribut null Bytes Daten enthalten darf.
HINWEIS: Die letztere Prüfung schützt den Client vor einem Angreifer, dem es irgendwie gelingt, den Server dazu zu bringen, vom Client nicht gewünschte Berechtigungen zu installieren.
Wenn die Data-Indikation die oben genannten Prüfungen besteht, liefert der Client die Daten-Oktette innerhalb des DATA-Attributs an die Anwendung, zusammen mit einer Angabe, dass sie vom Peer empfangen wurden, dessen Transportadresse durch das XOR-PEER-ADDRESS-Attribut angegeben ist.