2. Overview of ICE (ICE-Übersicht)
In einer typischen ICE-Bereitstellung gibt es zwei Endpunkte (ICE-Agenten, ICE agents), die kommunizieren möchten. Beachten Sie, dass ICE nicht für die NAT-Traversierung des Signalisierungsprotokolls (signaling protocol) vorgesehen ist, von dem angenommen wird, dass es über einen anderen Mechanismus bereitgestellt wird. ICE geht davon aus, dass die Agenten in der Lage sind, eine Signalisierungsverbindung untereinander aufzubauen.
Zunächst kennen die Agenten ihre eigenen Topologien nicht. Insbesondere können sich die Agenten hinter NATs (oder mehreren NAT-Ebenen) befinden oder auch nicht. ICE ermöglicht es den Agenten, genügend Informationen über ihre Topologien zu entdecken, um potenziell einen oder mehrere Pfade zu finden, über die sie eine Datensitzung aufbauen können.
Abbildung 1 zeigt eine typische ICE-Bereitstellung. Die Agenten sind mit L und R gekennzeichnet. Sowohl L als auch R befinden sich hinter ihren jeweiligen NATs, obwohl sie sich dessen möglicherweise nicht bewusst sind. Der NAT-Typ und seine Eigenschaften sind ebenfalls unbekannt. L und R sind in der Lage, an einem Kandidatenaustauschprozess (candidate exchange) teilzunehmen, dessen Zweck darin besteht, eine Datensitzung zwischen L und R einzurichten. Typischerweise erfolgt dieser Austausch über einen Signalisierungsserver (z. B. einen SIP-Proxy).
Zusätzlich zu den Agenten, einem Signalisierungsserver und NATs wird ICE typischerweise in Verbindung mit STUN- oder TURN-Servern im Netzwerk verwendet. Jeder Agent kann seinen eigenen STUN- oder TURN-Server haben, oder sie können identisch sein.
+---------+
+--------+ |Signaling| +--------+
| STUN | |Server | | STUN |
| Server | +---------+ | Server |
+--------+ / \ +--------+
/ \
/ \
/ <- Signaling -> \
/ \
+--------+ +--------+
| NAT | | NAT |
+--------+ +--------+
/ \
/ \
+-------+ +-------+
| Agent | | Agent |
| L | | R |
+-------+ +-------+
Abbildung 1: ICE-Bereitstellungsszenario
Die Grundidee hinter ICE ist wie folgt: Jeder Agent verfügt über eine Vielzahl von Kandidaten-Transportadressen (candidate transport addresses) (Kombination aus IP-Adresse und Port für ein bestimmtes Transportprotokoll, das in dieser Spezifikation immer UDP ist), die er zur Kommunikation mit dem anderen Agenten verwenden könnte. Diese können Folgendes umfassen:
- Eine Transportadresse auf einer direkt angeschlossenen Netzwerkschnittstelle
- Eine übersetzte Transportadresse auf der öffentlichen Seite eines NAT (eine "Server-reflexive Adresse (server-reflexive address)")
- Eine von einem TURN-Server zugewiesene Transportadresse (eine "Relay-Adresse (relayed address)")
Potenziell kann jede Kandidaten-Transportadresse von L verwendet werden, um mit jeder Kandidaten-Transportadresse von R zu kommunizieren. In der Praxis funktionieren jedoch viele Kombinationen nicht. Wenn sich beispielsweise sowohl L als auch R hinter NATs befinden, können ihre direkt angeschlossenen Schnittstellenadressen wahrscheinlich nicht direkt kommunizieren (schließlich ist dies der Grund, warum ICE benötigt wird!). Der Zweck von ICE besteht darin, herauszufinden, welche Adresspaare funktionieren. Die Art und Weise, wie ICE dies tut, besteht darin, systematisch alle möglichen Paare (in einer sorgfältig sortierten Reihenfolge) auszuprobieren, bis eines oder mehrere gefunden werden, die funktionieren.
2.1. Gathering Candidates (Kandidaten sammeln)
Um ICE auszuführen, identifiziert und sammelt ein ICE-Agent einen oder mehrere Adresskandidaten. Ein Kandidat hat eine Transportadresse -- eine Kombination aus IP-Adresse und Port für ein bestimmtes Transportprotokoll (hier wird nur UDP spezifiziert).
2.2. Connectivity Checks (Konnektivitätsprüfungen)
Sobald L alle seine Kandidaten gesammelt hat, ordnet es sie nach höchster bis niedrigster Priorität und sendet sie über den Signalisierungskanal an R. Die Konnektivitätsprüfungen werden dann systematisch durchgeführt.
2.3. Nominating Candidate Pairs and Concluding ICE (Nominierung von Kandidatenpaaren und Abschluss von ICE)
ICE weist einem der ICE-Agenten die Rolle des kontrollierenden Agenten zu, und dem anderen die Rolle des kontrollierten Agenten. Für jede Komponente eines Datenstroms nominiert der kontrollierende Agent ein gültiges Paar zur Verwendung für Daten.
2.4. ICE Restart (ICE-Neustart)
Sobald ICE abgeschlossen ist, kann es jederzeit für einen oder alle Datenströme durch einen der ICE-Agenten neu gestartet werden.
2.5. Lite Implementations (Lite-Implementierungen)
Bestimmte ICE-Agenten sind immer mit dem öffentlichen Internet verbunden und haben eine öffentliche IP-Adresse. ICE definiert einen speziellen Implementierungstyp namens "Lite". Lite-Agenten verwenden nur Host-Kandidaten und generieren keine Konnektivitätsprüfungen.