Netzwerke

Werbung
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
user data
Netzwerk-Programmierung
Netzwerke
9/19
encapsulation
application header
Netzwerk-Programmierung
Netzwerke
user data
9/19
encapsulation
TCP header
Netzwerk-Programmierung
application header
Netzwerke
user data
9/19
encapsulation
IP header
Netzwerk-Programmierung
TCP header
application header
Netzwerke
user data
9/19
encapsulation
Ethernet header
Netzwerk-Programmierung
IP header
TCP header
application header
Netzwerke
user data
Ethernet trailer
9/19
Kommunikation zwischen Schichten
application
Netzwerk-Programmierung
Rechner 1
Rechner 2
ftp
ftp
Netzwerke
10/19
Kommunikation zwischen Schichten
Rechner 1
application
Netzwerk-Programmierung
ftp
Rechner 2
ftp-Protokoll
Netzwerke
ftp
10/19
Kommunikation zwischen Schichten
Rechner 1
application
transport
Netzwerk-Programmierung
ftp
Rechner 2
ftp-Protokoll
TCP
ftp
TCP
Netzwerke
10/19
Kommunikation zwischen Schichten
Rechner 1
application
transport
Netzwerk-Programmierung
ftp
TCP
Rechner 2
ftp-Protokoll
TCP-Protokoll
Netzwerke
ftp
TCP
10/19
Kommunikation zwischen Schichten
Rechner 1
application
Netzwerk-Programmierung
ftp
transport
TCP
network
IP
Rechner 2
ftp-Protokoll
TCP-Protokoll
ftp
TCP
IP
Netzwerke
10/19
Kommunikation zwischen Schichten
Rechner 1
application
Netzwerk-Programmierung
ftp
transport
TCP
network
IP
Rechner 2
ftp-Protokoll
TCP-Protokoll
IP-Protokoll
Netzwerke
ftp
TCP
IP
10/19
Kommunikation zwischen Schichten
Rechner 1
application
transport
TCP
network
IP
link
Netzwerk-Programmierung
ftp
Rechner 2
ftp-Protokoll
TCP-Protokoll
IP-Protokoll
Ethernet
ftp
TCP
IP
Ethernet
Netzwerke
10/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
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
SYN
passive open
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
CK
SYN + A
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
CK
SYN + A
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
CK
SYN + A
LISTEN
ACK
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
CK
SYN + A
LISTEN
ACK
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsaufbau
CLOSED
passive open
SYN
active open
CK
SYN + A
LISTEN
ACK
SYN RCVD
SYN SENT
ESTABLISHED
Netzwerk-Programmierung
Netzwerke
13/19
Verbindungsabbau
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
FIN
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
FIN
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
FIN
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/19
Verbindungsabbau
FIN
ACK
FIN
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
Netzwerk-Programmierung
Netzwerke
14/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
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
Herunterladen