Institut für Technische Informatik und Kommunikationsnetze Prof. Bernhard Plattner, Fachgruppe Kommunikationssysteme Technische Informatik II SS 2007 Übung 5: Kommunikationsprotokolle Hinweis: Weitere Aufgaben zu diesem Thema finden sie in den Begleitbüchern zur Vorlesung. Aufgabe 1: Vermittlungsverfahren In dieser Aufgabe geht es um zwei grundlegende Netzwerk-Prinzipien: Paketvermittlung (packet switching) und Leitungsvermittlung (circuit switching). 1. Kreuzen Sie bei den folgenden Netzwerk-Technologien an, ob sie paket- und/oder leitungsvermittelt sind: Netzwerk-Technologie Internet Analog-Telefonie ISDN-Telefonie Paketvermittlung ! ! ! Leitungsvermittlung ! ! ! 2. Ist es möglich, einen verbindungslosen Dienst über ein leitungsvermitteltes Netzwerk anzubieten? Falls Ja, beschreiben Sie ein sinnvolles Beispiel. Falls Nein, begründen Sie, weshalb dies nicht möglich ist. 3. Analog dazu: Ist es möglich, einen verbindungsorientierten Dienst über ein paketvermitteltes Netzwerk anzubieten? Falls Ja, beschreiben Sie ein sinnvolles Beispiel. Falls Nein, begründen Sie, weshalb dies nicht möglich ist. Musterlösung 1 Netzwerk-Technologie Paketvermittlung Leitungsvermittlung Internet " ! Analog-Telefonie ! " 2 Ja, IP über Analog-Telefonnetz (Modem). 3 Ja, Telefonie über IP (VoIP). ISDN-Telefonie ! " Aufgabe 2: Verteilte Systeme Es gibt zwei wichtige Kategorien von verteilten Systemen: Client-/Server-System und Peer-to-peerSysteme. Im Folgenden betrachten wir die Unterschiede und Gemeinsamkeiten dieser Systeme. 1. Was sind die Stärken von Client-/Server-Systemen? In welchen Bereichen kommen sie heute zum Einsatz? Nennen Sie mindestens zwei Beispiele. 2. Was sind die Stärken von Peer-to-peer-Systemen? In welchen Bereichen kommen sie heute zum Einsatz? Nennen Sie mindestens zwei Beispiele. 3. Peer-to-peer-Systeme werden heute oft mit der Verbreitung von urheberrechtlich geschützten Werken in Verbindung gebracht. Ist diese Technologie also illegal? 4. Weshalb gab es in den Anfängen der Computer-Technik v.a. Client-Server und praktisch keine Peer-to-peer-Systeme? Musterlösung 1 Einfache, zentrale Verwaltung, da die ganze Intelligenz im Server sitzt. 2 Flexibel in der Anwendung, jeder PC kann mitmachen. Ausfallsicher, da keine zentralen Komponenten ausfallen können. 3 Die Technik als solche ist keineswegs illegal. Sie kann jedoch leicht zur Verbreitung von Software aller Art genutzt werden, u.a. auch zur Verbreitung von Raubkopien. 4 Computer waren teuer und nur wenige Institutionen konnten sich welche leisten. Deshalb mussten diese Computer von möglichst vielen Nutzern gleichzeitig benutzt werden können. Peer-to-peer-System hingegen setzen voraus, dass jede Nutzerin einen PC hat. 2 Aufgabe 3: Protokollhierarchie Das OSI-Referenzmodell ist ein Standard der International Standard Organization und hat in erster Linie akademische Bedeutung. Im Gegensatz dazu stammt das TCP/IP-Modell aus einer konkreten SoftwareImplementation und hat vorwiegend praktische Bedeutung. OSI-Referenzmodell In dieser Aufgabe geht es um folgendes Beispiel-Szenario: Sie surfen mit Ihrem Laptop per drahtlosem Netzwerk mit gängiger WLAN-Technik auf die WWW-Homepage mit der URL http://www.ee.ethz.ch/ Als Referenzmodelle verwenden wir die folgenden zwei Varianten: Open Systems InterconnectionSchichtenmodell (OSI-Modell) und TCP/IP-Schichtenmodell (TCP/IP-Modell). Anhand des durch ein Protokoll angebotenen Dienstes kann es einem oder mehreren Schichten des OSIModells zugewiesen werden. 1. Stellen Sie einen Bezug zwischen den beiden Modellen her, indem Sie in der untenstehenden Tabelle alle leeren Felder ausfüllen. OSI-Schicht TCP/IP-Schicht 7 Anwendungsschicht 6 Anwendungsschicht 5 Anwendungsschicht 4 Transportschicht 3 Vermittlungsschicht 2 Sicherungsschicht 1 Bitübertragungsschicht 2. Markieren Sie dann durch Ankreuzen alle Schichten des OSI-Modells auf denen die Funktionen der untenstehenden Protokolle liegen. OSI-Schicht 7 6 5 4 3 2 1 TCP ! ! ! ! ! ! ! HTTP ! ! ! ! ! ! ! IP ! ! ! ! ! ! ! WLAN ! ! ! ! ! ! ! 3. Nennen Sie mögliche Gründe, weshalb sich wohl das OSI-Modell in der Praxis nicht durchgesetzt hat. 3 Musterlösung 1 2 7 6 5 4 3 2 1 OSI-Schicht Anwendungsschicht Darstellungsschicht Sitzungsschicht Transportschicht Vermittlungsschicht Sicherungsschicht Bitübertragungsschicht OSI-Schicht 7 6 5 4 3 2 1 TCP ! ! ! " ! ! ! HTTP " ! ! ! ! ! ! TCP/IP-Schicht Anwendungsschicht Anwendungsschicht Anwendungsschicht Transportschicht Netzwerkschicht Netzwerkschicht Netzwerkschicht IP ! ! ! ! " ! ! WLAN ! ! ! ! ! " " 3 Das OSI-Modell wurde von einem Standardisierungs-Gremium (ISO) entwickelt und wird von Praktikern als zu praxisfern und komplex angesehen. Die Vernetzung begann erst mit der Einführung von TCP/IP durch das UNIX-Betriebssystem BSD (Berkeley System Distribution) an der Universität Berkely, Kalifornien. Deshalb setzte sich auch das damit einhergehende TCP/IP-Modell eher durch. In der Praxis trifft man heute auf ein hybrides Modell aus OSI und TCP/IP, das wie folgt aussieht: 5 4 3 2 1 Anwendungsschicht Transportschicht Vermittlungsschicht Sicherungsschicht Bitübertragungsschicht Application Layer Transport Layer Network Layer Data Link Control Layer Physical Layer 4 Aufgabe 4: Rahmenbildung und Transparenz 1. Rahmenbildung Bei welcher Art von Netzwerk wird Rahmenbildung (Framing) benötigt? 2. Weshalb funktioniert folgendes Übertragungsverfahren nicht: Der Sender sendet ein paar Bytes und macht dann später weiter, dort wo er aufgehört hat? Musterlösung 1 Paketorientierte Leitungsvermittlung (packet switching). 2 Es können verschiedene Probleme auftreten, ohne dass Sender resp. Empfänger dies feststellen können. Beispiele: • Der Empfänger kann nicht festsellen, ob Daten verloren gingen • Je nach Kanaleigenschaften kann die Reihenfolge der Daten durcheinander geraten OSI-Schicht 2 Wir betrachten in dieser Aufgabe Framing auf Schicht 2 des OSI-Referenzmodells. 1. Wie werden die einzelnen Datenblöcke (“Frames”) beim Protokoll HDLC voneinander abgetrennt? Wir betrachten im Folgenden das hypothetische Protokoll UDLC. (Bemerkung: UDLC ist nicht dasselbe wie HDLC.) Dieses Protokoll sende am Anfang jedes Datenblocks die Bitfolge 00000000. 2. Ist es ein Problem, wenn Nutzdaten übertragen werden, welche die Bitfolge 00000000 enthalten? Falls Ja: Welche Lösungen kennen Sie und welche Möglichkeit wird wohl auf Schicht 2 eingesetzt? Begründen Sie Ihre Antwort in max. 2 Sätzen. Falls Nein: Woran erkennt der Empfänger, dass die Bitfolge nicht eine Blockgrenze markiert? Ist es ein Problem, wenn zweimal nacheinander die Bitfolge 00000000 übertragen wird? Begründen Sie Ihre Antwort in max. 2 Sätzen. Musterlösung 1 Es wird ein sogenanntes Flag, bei HDLC die Bitfolge 01111110, am Anfang und am Ende jedes Datenblocks gesendet. 2 Ja, denn diese Nutzdaten würden vom Empfänger als Beginn eines neuen Datenblocks interpretiert. Abhilfe: Stuffing. Auf Schicht 2 wird meist Bit-Stuffing verwendet. 5 Character Stuffing 1. Das folgende Datenfragment komme in der Mitte eines Datenstroms vor. Es werde mit ‘\’ gestufft. Wie sieht das Datenfragment nach dem Stuffen aus? Datenfragment: ...\[A\B\]... 2. Ist Stuffing immer gleich effizient, egal welches Stuffing-Zeichen verwendet wird und bei beliebigen Daten? Falls Ja: Zeigen Sie dies analytisch. Falls Nein: Was ist eine geschickter Algorithmus um bei verschiedenem Input immer effizient zu stuffen? Musterlösung 1 Gestufftes Datenfragment: ...\\[A\\B\\]... 2 Nein. Bei dem in der Vorlesung vorgestellten Algorithmus kommt es darauf an, wie oft das StuffingZeichen im Text vorkommt. Am effizientesten ist Stuffing, wenn das am wenigsten häufig auftretende Zeichen zum Stuffen verwendet wird. Beispiel COBS-Algorithmus (Consistent Overhead Byte Stuffing) Grundidee: • Wähle ein oft vorkommendes Zeichen als Stuffing-Zeichen • Dort, wo es das erste Mal vorkommt, ersetze es durch die Anzahl der Zeichen, bis das Stuffing-Zeichen das nächste Mal vorkommt Beispiel: Das Paket Ich_habe_bei_dieser_Uebung_viel_gelernt wird durch Stuffing mit dem Zeichen ’_’ zu 4Ich5habe4bei6dieser7Uebung5viel0gelernt Dieser Algorithmus hat sehr viel bessere worst-case Eigenschaften als konventionelles Stuffing; ein Datenpaket wird um max. 1 Zeichen verlängert. Weitere Optimierungen wie zum Beispie das spezielle Behandeln von aufeinander folgenden Stuffing-Zeichen indem diese durch ein Zeichen ersetzt werden, sind möglich. 6 Aufgabe 5: Fenstermethode In einem Programm, welches ein Sicherungsprotokoll implementiert, sind Protokolldateneinheiten durch die folgende Typenvereinbarung dargestellt: typedef struct { int Seqnr; DATA_TYPE Daten; } Pakettyp; 1 Der Sendeprozess benutzt das nachstehend in Pseudocode beschriebene Protokoll, um Datenpakete zu empfangen: int Seqnr; Pakettyp ACK,Paket; Seqnr = 0; Paket.Seqnr = Seqnr; Paket.Daten = Produziere_Daten; repeat Sende(Paket); Starte_Timer(); <Warte auf ein ankommendes ACK oder bis der Timer ablaeuft> if (Paket ist angekommen) { ACK = Empfange_Paket; Stoppe_Timer(); Seqnr = Seqnr + 1; Paket.Seqnr = Seqnr; Paket.Data = Produziere_Daten; } until (Keine Daten mehr da); <Schliesse Verbindung> 1 6 11 16 Der Empfangsprozess sieht wie folgt aus: int Seqnr; Pakettyp Paket; Seqnr = 0; repeat <Warte auf ein neues Paket> Paket = Empfange_Paket; if (Paket.Seqnr == Seqnr) { Seqnr = Seqnr + 1; Verarbeite(Paket.Daten); } Paket.Daten = "ACKNOWLEDGE"; Sende(Paket); until (Verbindung abgebrochen); 2 7 12 1. Arbeitet der Sendeprozess korrekt? Untersuchen Sie folgende Szenarien: (a) Verlust eines Datenpaketes (b) Verlust eines ACK-Paketes (c) Verzögerungen (was zu Duplikaten führen kann). Geben Sie bei jedem Szenario an, ob der Sender korrekt arbeitet oder ein Beispiel, das den Fehler illustriert! 7 2. Arbeitet der Empfangsprozess korrekt? Untersuchen Sie die gleichen Szenarien wie bei 1: Musterlösung 1 (a) Verlust eines Datenpaketes Funktioniert: Das Packet wird nach timeout unverändert neu gesendet. (b) Verlust eines ACK-Paketes Funktioniert: Funktion wie bei Verlust eines Datenpaketes (c) Verzögerungen (was zu Duplikaten führen kann). Geben Sie bei jedem Szenario an, ob der Sender korrekt arbeitet oder ein Beispiel, das den Fehler illustriert! Funktioniert nicht: ACKs werden nicht unterschieden, d.h. bei verzögertem Packet wiederholt der Sender das Datenpacket. Er erhält dann zwei ACKs für das gleiche Packet. Er interpretiert das zweite ACK aber u.U. als ACK für das nächste Datenpacket. Der unterliegende Grund ist, das der Sender die Sequenznumer des ACKs nicht auswertet. Geht dieses nächste Datenpacket nun verloren (oder ein anderes zukünftiges), so wird der Verlust vom Sender nicht erkannt. 2 (a) Verlust eines Datenpaketes Funktioniert: Der Empfänger schickt kein ACK. Das Neusenden des Datenpacketes bei fehlendem ACK ist Aufgabe des Senders. (b) Verlust eines ACK-Paketes Funktioniert: Der Empfänger muss hier nur bei wiederholtem Eintreffen eines bereits empfangenen Packetes dieses erneut bestätigen und ansonsten ignorieren. (c) Verzögerungen (was zu Duplikaten führen kann). Funktioniert: Der Empfänger muss hier nur bei wiederholtem Eintreffen eines bereits empfangenen Packetes dieses erneut bestätigen und ansonsten ignorieren. Bemerkung Die Funktion eines Sender/Empfänger Paares kann immer nur zusammen bewertet werden. Für die Zuordnung von Fehlern zu einer der beiden Komponenten muss festgestellt werden, welche verantwortlich für die Verhinderung des Problems gewesen währe. Oft können spezifische Probleme auf beiden Seiten gelöst werden, nur die Verantwortlichkeiten erlauben dann eine Zuordnung des Fehlers. Beispiel: Der Verlust eines ACK kann vom Sender durch Neusenden des Packetes behandelt werden (die übliche Lösung) oder vom Empfänger, indem, wenn nach einer gewissen Zeit keine weiteren Datenpackete eintreffen, das letzte ACK wiederholt wird, bis wieder Datenpackete eintreffen (eine ineffiziente, unübliche Lösung). 8