Netzwerk - Programmierung Netzwerke Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Madis Rumming mrumming@cebitec.uni-bielefeld.de
Übersicht Netzwerk-Protokolle Protokollfamilie TCP/IP Transmission Control Protocol (TCP) erste Schritte mit sockets
vernetzte Rechner Problem: versende Daten von Rechner A zu Rechner B A und B sind (indirekt) durch Netzwerk(e) verbunden Möglichkeiten: ein Protokoll für alles Familie von spezialisierten Protokollen, die aufeinander aufbauen
Netzwerk-Schichten application transport network link ssh,smtp,http TCP, UDP IP
link layer modelliert physikalische Verbindung Hardware-Adressen Daten in Frames empfindlich gegenüber Störungen Prüfsummen Beispiel:,...
network layer modelliert Verknüpfung von mehreren Netzwerken Packets innerhalb von Frames connectionless, unreliable, best effort routing eigener Adressraum Beispiel: Internet Protocol (IP) Domain Name System (DNS) für lesbare Adressen
transport layer demultiplexing, Port-Nummern well known ports, /etc/services User Datagram Protocol (UDP): ähnlich zu IP: Datagramme, connectionless, unreliable Transmission Control Protocol (TCP): Datenstrom Verbindung Zuverlässigkeit durch Quittierverfahren flow control, congestion avoidance
application layer nutzt transport layer TCP oder UDP hängt von Problemstellung ab Programmierschnittstellen: Berkeley sockets X/Open Transport Interface...
encapsulation header IP header TCP header Application header User data trailer
Kommunikation zwischen den Schichten Rechner 1 Rechner 1 application http Http Protokoll http transport TCP TCP-Protokoll TCP network IP IP-Protokoll IP link -Protokoll
Routing Rechner 1 Rechner 1 application http Http Protokoll http transport TCP TCP-Protokoll Router TCP network IP IP-Protokoll IP IP-Protokoll IP link Protokoll Protokoll
Transmission Control Protocol Bestätigung von empfangenen Paketen erneuter Versand von verlorenen Paketen sequence numbers Data Data ACK Data ACK Data ACK
Verbindungsaufbau passive open CLOSED LISTEN active open SYN SYN+ACK SYN_RCVD SYN_SENT ACK ESTABLISHED
Verbindungsabbau FIN ACK FIN ESTABLISHED CLOSE_WAIT ACK FIN_WAIT_1 CLOSING LAST_ACK CLOSED FIN_WAIT_2 TIME_WAIT
TCP verwenden Verbindung durch socket pair identifiziert: (IP-AdresseL, PortL, IP-AdresseR, PortR) Verbindungsdaten anzeigen: $ netstat -A inet more Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 leonardo.tf:1018 kaylee.tf:nfs ESTABLISHED tcp 0 0 leonardo.tf:50657 simon.tf:nfs TIME_WAIT tcp 0 0 leonardo.tf:38896 donatello.tf:ssh ESTABLISHED (TF = TechFak.Uni-Bielefeld.DE)
Aufgaben Erzeuge eine ssh-verbindungen zu einem Rechner (z.b. von goldfinger nach goldeneye). Beobachte in zwei verschiedenen Terminals (jeweils eines auf dem jeweiligen Rechner) die Ausgabe von netstat. Welche Einträge kommen neu hinzu? Tip: Der service heißt ssh Schließe die ssh-verbindung wieder. Wie verändert sich die Ausgabe von netstat?
Aufgaben Die Skripte server.pl und client.pl befinden sich im Archiv uebung4.tar.gz. (Auspacken kannst Du dieses Archiv nach dem Download mit dem Kommando tar -xvf uebung4.tar.gz) Bei den nachfolgenden Aufgaben brauchst Du drei Terminals, um alle Programme starten zu können. Starte den Server. Du mußt dabei eine Portnummer angeben: $ server.pl 54321 Sieh Dir den Zustand des Servers an: $ netstat -a grep 54321
Aufgaben Laß den Client Daten vom Server lesen: $ client.pl 54321 Benutze währenddessen netstat, um die Verbindung zu untersuchen. Rufe den Client zwei weitere Male auf. Was ändert sich bei jedem Aufruf? Rufe den Client mit einer festen Portnummer auf: $ client.pl 54321 55443 Wiederhole auch diesen Aufruf zweimal.
Aufgaben Starte mehrere Clients gleichzeitig: client.pl 54321 & [enter] client.pl 54321 & [enter] client.pl 54321 & [enter] Was ist zu beobachten? Starte zwei Clients mit der gleichen Portnummer gleichzeitig: client.pl 54321 55443 & [enter] client.pl 54321 55443 & [enter] Was passiert? Beende den Server und versuche ihn sofort mit der gleichen Portnummer neu zu starten. Was passiert? Was passiert, wenn Du den Client mit CTRL-C abbrichst, während er Daten vom Server liest?