Netzwerk-Programmierung Netzwerke Sven Hartmeier Arne Hauenschild {shartmei,ahauensc}@TechFak.Uni-Bielefeld.DE Übersicht • Netzwerk-Protokolle • Protokollfamilie TCP/IP • Transmission Control Protocol (TCP) • erste Schritte mit sockets Netzwerk-Programmierung Netzwerke 2/19 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-Programmierung Netzwerke 3/19 Netzwerk-Schichten Netzwerk-Programmierung application telnet, SMTP, HTTP transport TCP, UDP network IP, ICMP link Ethernet, ARP/RARP Netzwerke 4/19 link layer • modelliert physikalische Verbindung • Hardware-Adressen • Daten in Frames • empfindlich gegenüber Störungen • Prüfsummen • Beispiel: Ethernet, PPP, . . . Netzwerk-Programmierung Netzwerke 5/19 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 ” Netzwerk-Programmierung Netzwerke 6/19 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 Netzwerk-Programmierung Netzwerke 7/19 application layer • nutzt transport layer • TCP oder UDP hängt von Problemstellung ab • Programmierschnittstellen: – Berkeley sockets – X/Open Transport Interface – ... Netzwerk-Programmierung Netzwerke 8/19 encapsulation Ethernet header Netzwerk-Programmierung IP header TCP header application header Netzwerke user data Ethernet trailer 9/19 Kommunikation zwischen Schichten Rechner 1 application transport TCP network IP link Netzwerk-Programmierung ftp Ethernet Rechner 2 ftp-Protokoll TCP-Protokoll IP-Protokoll Ethernet-Protokoll Netzwerke ftp TCP IP Ethernet 10/19 Routing Rechner 1 application transport Rechner 2 ftp-Protokoll ftp ftp TCP-Protokoll TCP TCP Router network link Netzwerk-Programmierung IP Ethernet IP-Protokoll IP-Protokoll IP Ethernet-Protokoll Token Ring-Protokoll Ethernet Token Ring Netzwerke IP Token Ring 11/19 Transmission Control Protocol • Bestätigung von empfangenen Paketen • erneuter Versand von verlorenen Paketen • sequence numbers data data ACK ACK data data ACK Netzwerk-Programmierung Netzwerke 12/19 Verbindungsaufbau CLOSED passive open SYN active open SYN + A LISTEN CK ACK SYN RCVD SYN SENT ESTABLISHED Netzwerk-Programmierung Netzwerke 13/19 Verbindungsabbau FIN ACK FIN CLOSED ACK ESTABLISHED CLOSE WAIT FIN WAIT 1 CLOSING LAST ACK FIN WAIT 2 TIME WAIT Netzwerk-Programmierung Netzwerke 14/19 TCP verwenden • Verbindung durch socket pair identifiziert: (IP-AdresseL , PortL , IP-AdresseR , PortR ) • Verbindungsdaten anzeigen: $ netstat -f inet | more ... asien.1011 vino.TF.login 24820 0 49640 0 ESTABLISHED asien.48353 www-proxy.TF.www 24820 0 49640 0 CLOSE_WAIT asien.ssh sangay.TF.40441 64128 0 49232 0 ESTABLISHED ... (TF = TechFak.Uni-Bielefeld.DE) Netzwerk-Programmierung Netzwerke 15/19 Aufgaben • Erzeuge eine rlogin-Verbindungen zu einem Rechner (z.B. von asien nach australien). Beobachte in zwei verschiedenen xterms (jeweils eines auf dem jeweiligen Rechner) die Ausgabe von netstat. Welche Einträge kommen neu hinzu? Tip: Der service heißt login“ ” • Schließe die rlogin-Verbindung wieder. Wie verändert sich die Ausgabe von netstat? Netzwerk-Programmierung Netzwerke 16/19 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 xterms, 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 Netzwerk-Programmierung Netzwerke 17/19 Aufgaben, cont. • 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. Netzwerk-Programmierung Netzwerke 18/19 Aufgaben, cont. • Starte mehrere Clients gleichzeitig: client.pl 54321 &; client.pl 54321 &; client.pl 54321 Was ist zu beobachten? • Starte zwei Clients mit der gleichen Portnummer gleichzeitig: client.pl 54321 55443 &; client.pl 54321 55443 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? Netzwerk-Programmierung Netzwerke 19/19