Wie Skype funktioniert

Letzte Woche im c’t (17/06) auf Seite 142/143 gelesen, was mich schon länger beschäftigt hat: VoIP erzeugt relativ viel Verkehr, und dies wärend eines Gesprächs laufend. Wenn alle User, momentan rund 6 Millionen, über die Skype Server Telefonieren würden, wäre das ein enormer Datenverkehr und dies könnte Skype wohl kaum zahlen. Aber Skype arbeitet bekanntlich mit der P2P Technologie, welche direkte Verbindungen zur Gegenstelle aufbaut. Dies setzt aber voraus dass einer der beiden miteinander kommunizierenden Computer Verbindungen von aussen zulässt. Da heute viele User ADSL besitzen und somit meistens hinter einem Router mit NAT sind, kann aber in diesen fällen keine direkte Verbindung hergestellt werden! Das dachte ich bis anhin zumindest.

Und darum geht es in diesem Artikel: Wie Skype eine direkte Verbindung zwischen zwei Firewall mit NAT herstellen kann. Die Idee dahinter ist genial: Das System braucht dazu ein Vermittler, welcher die User und dessen IPs kennt. Mit diesem Server ist man bei Skype bereits beim Anmelden über TCP verbunden. Da UDP ein Verbindungsloses Protokoll ist, kann die Reihenfolge der Packete auf dem Router nicht überprüft werden. Sendet ein Client ein UDP Packet ins Internet, werden alle UDP Packete welche auf diese Anfrage antworten (das heisst, gleiche IP) wieder dem gleichen Client zugeordnet. Will Client A also mit Client B telefonieren, wobei beide hinter einem NAT Router sind, bekommt Client B über den Vermittlungsserver ersteinmal die IP von Client A. Nun sendet Client A ein UDP Packet an Client B. Die meisten NAT Router ändern die UDP Adresse dabei nicht (wenn Sie nicht bereits besetzt ist) und somit kann über den Vermittlungsserver den Absendeport von Client B an Client A übermittelt werden. Client A kann nun Client B ein UDP Packet senden, welches, da die Firewall denkt dass es immernoch zur selben Verbindung gehört, an den Client B weitergeleitet wird. Somit besteht eine direkte Verbindung zwischen den beiden Clients. Auch wenn der Port geändert wird, wird meistens einfach ein Port höher gewählt, so Versucht dann Client A Client B auf einem Port höher die Gegenstelle zu erreichen.

Diese Technik wurde sogar nach RFC 3489 standardisiert, unter dem Namen STUN (Simple Traversal of UDP through NAT). Mich erstaunt es dass diese Technik noch nicht mehr Anklang gefunden hat. Es gäbe sicher noch viele Anwendungen welche dadurch stark vereinfacht werden könnten…

Leave a Comment