1. Einleitung

Im Block E des Praktikums Kommunikationsnetze geht es um die Socket-Schnittstelle. Kommunizieren zwei Prozesse miteinander, die sich auf verschiedenen Rechnern befinden, müssen zum Datentransport über das Netzwerk Protokolle verwendet werden. Dabei realisiert die Socket-Schnittstelle (kurz Sockets (deutsch Steckdose, Anschluss)) den Zugriff auf diese Protokolle und bietet somit eine Möglichkeit zur Interprozesskommunikation an. Prinzipiell kann die Kommunikation zwischen Prozessen im selben Rechner ebenfalls durch die Socket-Schnittstelle realisiert werden. Jeder UNIX-Rechner bietet hierzu ein sogenanntes „Loop-Back“-Interface an, über das auf ein rechnerinternes Netzwerk zugegriffen werden kann.

Die Socket-Schnittstelle ist so aufgebaut, dass aus Sichtweise eines Programmierers zwischen einem Socket und einer Datei (eng. File) nahezu kein Unterschied besteht, zumindest was die grundlegenden Funktionen betrifft. Ähnlich wie bei einer Datei wird ein Socket durch einen Socket-Deskriptor (bei Dateien File-Deskriptoren) angesprochen. Wie bei einer Datei kann man Sockets öffnen und schließen, von ihnen lesen oder schreiben.

In den ersten beiden Terminen werden Sie sich mit der Erstellung eines Sockets vertraut machen und über den Socket einen zuverlässigen, verbindungsorientierten Dienst zur Datenübertragung im Internet verwenden, den sogenannten Stream-Socket. Ein Stream-Socket garantiert, dass Daten verlustfrei übertragen und in der Reihenfolge, in der sie gesendet werden, beim Empfänger bereitgestellt werden. Dabei erstellen Sie sowohl einen Client, der eine Kommunikation initiiert und eine Nachricht sendet, als auch einen Server, der die Nachricht empfängt und sie am Bildschirm anzeigt.

Der Vollständigkeit halber soll erwähnt werden, dass es neben dem Stream-Socket auch einen Datagram- und einen Raw-Socket gibt. Mittels des Datagram-Sockets können zwei Prozesse über eine unzuverlässige Verbindung (es gibt Datenverluste und die Daten brauchen nicht in der Reihenfolge empfangen werden in der sie gesendet wurden) miteinander kommunizieren. Ein Raw-Socket ermöglicht die Implementation eigener Protokolle.

Die von Ihnen zu erstellende kleine Applikation ist nicht in der Lage, die volle Leistungsfähigkeit von Sockets zu zeigen. Deshalb werden Sie eine verbreitete Applikation zur Leistungsanalyse von Netzwerken, das Programm „iperf“, kennenlernen. Iperf ist ein sogenannter Lastgenerator, der beliebige Daten erzeugt und diese mittels der Socket-Schnittstelle über ein Netzwerk zu einer Datensenke sendet.

Iperf besteht aus zwei Teilen: Einem Client, der als Lastgenerator verwendet wird, und einem Server, der als Datensenke dient. Der Client verwendet wahlweise einen unzuverlässigen Datagram- oder zuverlässigen Stream-Socket, um mit dem Server zu kommunizieren.

Beim Client wird eine Senderate in Bit/s eingestellt, mit der Daten zum Server gesendet werden. Der Server misst den Datendurchsatz und die Datenverlustrate der vom Client erzeugten Daten.

Unter Verwendung von iperf soll später eine praktische Hausaufgabe angefertigt werden: Innerhalb eines Rechners sollen ein iperf-Client und ein -Server installiert werden und sowohl der Datendurchsatz, als auch die Datenverlustrate zwischen Client und Server in einem simulierten Netzwerk gemessen werden. Das simulierte Netzwerk ermöglicht es, die Verzögerungszeit und Kapazität des Netzwerkes künstlich einzustellen. Im simulierten Netzwerk soll der Datendurchsatz und die Datenverlustrate einer zuverlässigen und einer unzuverlässigen Übertragung mit unterschiedlichen Senderaten des Lastgenerators gemessen werden.