2.2.4 Beispiel-Kommunikation

Nach soviel Theorie ist es sicher ganz interessant, die zwischen zwei Anwendungen ausgetauschten Datagramme einmal praktisch anzuschauen. Wir gehen von einem Klient-Server-Szenario aus, in dem der Klient die Zeichenfolge Request an den Server schickt, worauf dieser mit Reply antwortet. Zwischen beiden Beteiligten existiert eine Ethernet-Verbindung.

Es werden also bei dieser Kommunikation exakt zwei Ethernet-Rahmen (Frames) auf dem Netz übertragen, die jeweils ein IP-Datagramm und als dessen Nutzlast ein UDP-Datagramm befördern. Um die Details sichtbar zu machen, verwenden wir das beim Betriebssystem Solaris 2.x mitgelieferte Programm snoop, das seine Informationen in verschiedener Form präsentieren kann. Für einen guten Überblick eignet sich meist der Modus Verbose Summary:

________________________________
  1   0.00000 ultra.informatik.tu-chemnitz.de -> yang.informatik.tu-chemnitz.de
      ETHER Type=0800 (IP), size = 50 bytes
  1   0.00000 ultra.informatik.tu-chemnitz.de -> yang.informatik.tu-chemnitz.de
      IP  D=134.109.192.215 S=134.109.192.89 LEN=36, ID=1401
  1   0.00000 ultra.informatik.tu-chemnitz.de -> yang.informatik.tu-chemnitz.de
      UDP D=5000 S=36170 LEN=16
________________________________
  2   2.79088 yang.informatik.tu-chemnitz.de -> ultra.informatik.tu-chemnitz.de
      ETHER Type=0800 (IP), size = 60 bytes
  2   2.79088 yang.informatik.tu-chemnitz.de -> ultra.informatik.tu-chemnitz.de
      IP  D=134.109.192.89 S=134.109.192.215 LEN=34, ID=52429
  2   2.79088 yang.informatik.tu-chemnitz.de -> ultra.informatik.tu-chemnitz.de
      UDP D=36170 S=5000 LEN=14
Hier eine kurze Erläuterung zur Ausgabe:
snoop analysiert pro Ethernet-Rahmen schrittweise von außen nach innen (also von vorn nach hinten) die Köpfe (Header) der einzelnen Protokolle und stellt die zu den unterschiedlichen Schichten gehörigen Informationen jeweils in separaten Zeilen dar. Der besseren Lesbarkeit wegen haben wir uns allerdings entschieden, in die docht recht langen Zeilen einen zusätzlichen Zeilenumbruch einzufügen. Im obigen Fall erhalten wir für jeden Frame drei getrennte Aussagen zur Subnetz-, Internet- und Transportschicht, d.h. konkret zu Ethernet, IP und UDP.

Die erste Spalte gibt stets die Nummer des Pakets an, auf das sich die anderen Angaben der jeweiligen Zeile beziehen. Dahinter folgen Zeitstempel in Sekunden, die als relative Abstände zum vorherigen Paket zu verstehen sind. Auf UDP-Ebene steht D= für Destination Port und S= für Source Port.

Im Verbose-Modus erhalten wie eine wesentlich detailliertere Ausgabe [udpdgr.txt], die aus Platzgründen in einer separaten Datei zu finden ist. Dort sehen Sie auch die Paket-Inhalte in hexadezimaler und ASCII-Darstellung.

Um den Server erreichen zu können, muß der Klient dessen Port kennen. Dafür gibt es zwei Möglichkeiten:

Wir wählen in unserem Beispiel für den Server den festen Port 5000 und überlassen beim Klienten dem Betriebssystem die Auswahl eines freien Ports.

In dem Mittschnitt ist zu erkennen, daß die UDP-Implementierung die optionale Prüfsumme tatsächlich berechnet hat, so wie das im RFC 1122 (Requirements for Internet Hosts -- Communication Layers) als Standard gefordert wird.

Mit dem unter Linux und anderen UNIX-Systemen frei verfügbaren Netzwerk-Monitor tcpdump sind (zumindest mit der gegenwärtig aktuellen Version) nicht ganz so detaillierte Ausgaben erhältlich wie mit snoop. Speziell die Prüfsumme wird nicht angezeigt. Da aber der C-Quelltext von tcpdump vorliegt, läßt sich bei Bedarf die Ausgabe mit relativ geringem Programmieraufwand geeignet erweitern.


© Holger Trapp, 22.5.1998