Netzwerke - Uni Bielefeld

Werbung
Netzwerk-Programmierung
Netzwerke
Alexander Sczyrba
Michael Beckstette
{asczyrba,mbeckste}@TechFak.Uni-Bielefeld.DE
1
Übersicht
• Netzwerk-Protokolle
• Protkollfamilie TCP/IP
• Transmission Control Protocol (TCP)
• erste Schritte mit sockets
2
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
3
Netzwerk-Schichten
application
telnet, SMTP, HTTP
transport
TCP, UDP
network
IP, ICMP
link
Ethernet, ARP/RARP
4
link layer
• modelliert physikalische Verbindung
• Hardware-Adressen
• Daten in Frames
• empfindlich gegenüber Störungen
• Prüfsummen
• Beispiel: Ethernet, PPP, . . .
5
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
”
6
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
7
application layer
• nutzt transport layer
• TCP oder UDP hängt von Problemstellung ab
• Programmierschnittstellen:
– Berkeley sockets
– X/Open Transport Interface
– ...
8
encapsulation
Ethernet header
IP header
TCP header
application header
9
user data
Ethernet trailer
Kommunikation zwischen Schichten
Rechner 2
Rechner 1
application
ftp
transport
TCP
network
IP
link
Ethernet
ftp-Protokoll
TCP-Protokoll
IP-Protokoll
Ethernet-Protokoll
10
ftp
TCP
IP
Ethernet
Routing
Rechner 1
application
transport
Rechner 2
ftp-Protokoll
ftp
ftp
TCP-Protokoll
TCP
TCP
Router
network
link
IP
Ethernet
IP-Protokoll
IP-Protokoll
IP
Ethernet-Protokoll
Token Ring-Protokoll
Ethernet
11
Token Ring
IP
Token Ring
Transmission Control Protocol
• Bestätigung von empfangenen Paketen
• erneuter Versand von verlorenen Paketen
• sequence numbers
data
data
ACK
ACK
data
data
ACK
12
Verbindungsaufbau
CLOSED
passive open
SYN
active open
K
SYN + AC
LISTEN
ACK
SYN RCVD
SYN SENT
ESTABLISHED
13
Verbindungsabbau
FIN
ACK
FIN
CLOSED
ACK
ESTABLISHED
CLOSE WAIT
FIN WAIT 1
CLOSING
LAST ACK
FIN WAIT 2
TIME WAIT
14
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
(TF = TechFak.Uni-Bielefeld.DE)
15
24820 0
32768 0
32768 0
ESTABLISHED
ESTABLISHED
ESTABLISHED
16
• Es kommt je ein neuer Eintrag hinzu:
teak.TF.846
teak.TF.login
teak.TF.login teak.TF.846
32768 0
32768 2
32768 3
32768 0
ESTABLISHED
ESTABLISHED
Dem rlogin-Client wurde eine freie Port-Nummer zugewiesen, in diesem Beispiel
846.
• Es bleibt ein Eintrag im TIME WAIT-Zustand zur ück:
teak.TF.login teak.TF.846
32768 0
32768 0
TIME_WAIT
Da es sich um die ehemalige Serverseite der Verbindung handelt, kann man erkennen, daß das Beenden der Verbindung vom rlogin-Client initiiert wurde, dieser also
der erste FIN-Segment verschickt hat.
Tip: Der service heißt telnet“
”
• Schließe die telnet-Verbindung wieder. Wie verändert sich die
Ausgabe von netstat?
• 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?
Aufgaben
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
$ netstat -a | grep 54321
*.54321
*.*
0
0
24576 0
LISTEN
• Der Server bindet sich an den angegebenen Port und wartet auf Verbindungen:
17
18
• Es wird eine Verbindung zwischen Client und Server aufgebaut. Der LISTEN-Eintrag
bleibt erhalten:
*.54321
localhost.56305
localhost.54321
*.*
localhost.54321
localhost.56305
0
0
32768 0
32768 0
24576 0
32768 0
32768 0
LISTEN
ESTABLISHED
ESTABLISHED
• Es wird eine neue Verbindung aufgebaut. Dabei verwendet der Client eine neue
Port-Nummer. Die alten Verbindungen sind eventuell noch im Zustand TIME WAIT:
*.54321
localhost.54321
localhost.56315
localhost.54321
*.*
localhost.56305
localhost.54321
localhost.56315
0
32768
32768
32768
0
0
0
0
24576
32768
32768
32768
0
0
0
0
LISTEN
TIME_WAIT
ESTABLISHED
ESTABLISHED
• Die Port-Nummer des Clients hat den angegebenen Wert:
*.54321
localhost.55443
localhost.54321
*.*
localhost.54321
localhost.55443
0
0
32768 0
32768 0
24576 0
32768 0
32768 0
LISTEN
ESTABLISHED
ESTABLISHED
Nachdem der Client beendet ist, bleibt wieder eine Socket im Zustand TIME WAIT
zurück. Diese verschwindet, sobald eine neue Verbindung mit der gleichen PortNummer aufgebaut wird.
Wiederhole auch diesen Aufruf zweimal.
$ client.pl 54321 55443
• Rufe den Client mit einer festen Portnummer auf:
• Rufe den Client zwei weitere Male auf. Was ändert sich bei jedem
Aufruf?
Benutze währenddessen netstat, um die Verbindung zu
untersuchen.
$ client.pl 54321
• Laß den Client Daten vom Server lesen:
Aufgaben, cont.
19
• Die drei Clients arbeiten parallel. Es werden gleichzeit drei Verbindungen aufgebaut:
*.54321
localhost.56427
localhost.54321
localhost.56428
localhost.54321
localhost.56429
localhost.54321
*.*
localhost.54321
localhost.56427
localhost.54321
localhost.56428
localhost.54321
localhost.56429
0
32768
32768
32768
32768
32768
32768
0
0
0
0
0
0
0
24576
32768
32768
32768
32768
32768
32768
0
0
0
0
0
0
0
LISTEN
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
• Ein Client verbindet sich mit dem Server. Der andere wird mit einer Fehlermeldung
abgebrochen:
can’t bind socket: Address already in use at ./client.pl line 19.
• Der Server läßt sich nicht sofort neu starten, es kommt ebenfalls die Fehlermeldung
can’t bind socket: Address already in use at ./server.pl line 16.
Erst, wenn keine Socket im TIME WAIT-Zustand mehr vorhanden ist, die den ServerPort verwendet, kann der Server erneut mit der selben Port-Nummer gestartet werden.
• Der Server wird beendet, in einigen Shells erscheint zusätzlich die Meldung Bro”
ken pipe“. Sämtliche Verbindungen werden beendet, es bleiben keine Sockets im
Zustand TIME WAIT oder einem anderen übrig.
• Was passiert, wenn Du den Client mit CTRL-C abbrichst, während er
Daten vom Server liest?
• Beende den Server und versuche ihn sofort mit der gleichen
Portnummer neu zu starten. Was passiert?
Was passiert?
client.pl 54321 55443 &; client.pl 54321 55443
• Starte zwei Clients mit der gleichen Portnummer gleichzeitig:
Was ist zu beobachten?
client.pl 54321 &; client.pl 54321 &; client.pl 54321
• Starte mehrere Clients gleichzeitig:
Aufgaben, cont.
Herunterladen