Netzwerk-Programmierung Netzwerke Alexander Sczyrba Michael Beckstette {asczyrba,mbeckste}@TechFak.Uni-Bielefeld.DE Übersicht • Netzwerk-Protokolle • Protkollfamilie 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 Quitierverfahren – 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 CK SYN + A LISTEN 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 ... teak.TF.1023 eiche.TF.nfsd teak.TF.32820 teak.TF.ldap teak.TF.ldap teak.TF.32820 ... 24820 0 32768 0 32768 0 24820 0 32768 0 32768 0 ESTABLISHED ESTABLISHED ESTABLISHED (TF = TechFak.Uni-Bielefeld.DE) Netzwerk-Programmierung Netzwerke 15/19 Aufgaben • Erzeuge eine telnet-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 telnet“ ” • Schließe die telnet-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. 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