Protokollfamilie TCP/IP

Werbung
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Verteilte Systeme
3. Protokollfamilie TCP/IP
Einordnung in OSIOSI-Modell
Internet-Protokolle:
FTP, TELNET, SMTP, DNS, NSP, NTP, HTTP, ...
RPC-Protokolle
Ebene 4-7
PVM, MPI, Corba, ...
UDP
Ebene 3
Ebene 1-2
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
TCP
IP / ICMP / ARP / RARP / (Routingprotokolle)
IEEE 802.X
X.25
Folie 3.2
1
Vorlesung "Verteilte Systeme"
Sommersemester 1999
IPIP-Adressen (IPv4)
IPv4)
I
Class A: 27-2 Netze mit jeweils bis zu 224-2 Rechnern
0
I
netid(7)
Class B: 214-2 Netze mit jeweils bis zu 216-2 Rechnern
1 0
I
hostid(24)
netid(14)
hostid(16)
Class C: 221-2 Netze mit jeweils bis zu 28-2 Rechnern
1 1 0
Bit 1
netid(21)
8
hostid(8)
16
24
Verteilte Systeme, Sommersemester 1999
Bit 32
Folie 3.3
IPIP-Adressen (cont.)
cont.)
I
Schreibweise: „Dotted
„Dotted Decimal“
Decimal“
10001000
11000111
00110110
11010010
= 136.199.54.210
Ist ein Class X-Netz?
I
I
Netzanteil?
I
Hostanteil?
I
Symbolische Namen
– 131.199.54.210 = balvenie.unibalvenie.uni-trier.de
– Über verteilte „Datenbank“ (DNS, NSP,
NSP, LADP,
LADP, ...)
I
IPIP-Netadresse
– Hostanteil ist 0
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.4
2
Vorlesung "Verteilte Systeme"
Sommersemester 1999
MulticastMulticast- und BroadcastBroadcast-Adressen
I
Multicast
1 1 1 0
Multicast address(28)
Bit 1
8
16
24
Bit 32
– Direkte Abbildung bei MulticastMulticast-fähigen Netzen
– FloodingFlooding-Algorithmen sonst
– Beispiel: Mbone
Tunneln bei UnicastI
Unicast-Strecken
I
Verwaltung der MulticastMulticast-Gruppen
– IGMP = Internet Group Management Protocol
I
Broadcast
– Nur innerhalb eines Netzes
– Hostanteil alles 1
Verteilte Systeme, Sommersemester 1999
Folie 3.5
Subnetze
I
Maximale Rechnernanzahl in ClassClass-A- und ClassClass-B-Netzen für ein
Netz (z.B. Ethernet) zu groß
– Class A: 16.777.214 Rechner
– Class B: 65.534 Rechner
I
Unterteilung in Unternetze
1 0
netid(14)
1 0
netid(14)
Bit 1
I
8
hostid(16)
subnetid(8)
16
hostid(8)
24
Bit 32
Netzmaske definiert Grenze zwischen Subnetz und Hostanteil
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.6
3
Vorlesung "Verteilte Systeme"
Sommersemester 1999
ARP und RARP
I
Host A
ARP = Address Resolution Protocol
– Ermittlung einer Netzwerkadresse
im gleichem Netz
Gegeben IA
I
Gesucht NA
I
– Voraussetzung BroadcastBroadcast-fähiges
Netz
Bei dedizierten Leitungen
I
Konfigurationssache
Host B
ARPQ(IAA)
ARPR(IAA,NAA)
I
RARP = Reverse ARP
– Gegeben NA, Gesucht IA
– Diskless Clients
Verteilte Systeme, Sommersemester 1999
Folie 3.7
Version
IPIP-Protokoll (IPv4)
IPv4)
Header Length
Type of service
v
hl
tos
identification
Time to live
protocol
Total Length
f
Fragment offset(13)
Header checksum
source address
destination address
I
20 Byte Header
I
Maximale Größe IPIP-Datagramm:
Datagramm: 64 Kbyte inkl. Header
I
Type of Service (tos)
– Hohe Zuverlässigkeit, Hoher Durchsatz, Geringe Latenz, Prioritäten
Prioritäten
I
Fragmentierung
– Identifikation zusammengehörender Fragmente
– Offset des Fragments im IPIP-Datagramm
I
TimeTime-toto-live
– HopHop-Count;
Count; wird von Routern dekrementiert
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.8
4
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Aufgaben der IPIP-Netzwerkebene
I
Übertragung von
IPIP-Datagrammen
– Routing
– Fragmentierung und Assembly
I
Netzverwaltung und Melden
von Fehlern
Application
Layer
Ebene 4-7
– ICMP
TCP
UDP
IP / ICMP
IEEE 802.X
X.25
Verteilte Systeme, Sommersemester 1999
Ebene 3
Ebene 1-2
Folie 3.9
IP: Routing
I
„Normale“ Rechner
– Empfänger im selben Netz
ARP falls notwendig
I
Direkt Senden
I
– Empfänger in anderem Netz
Nachricht an
I
„Default Router“
Router“
I
Router
– Routingtabelle durchsuchen
HostI
Host-Match
NetworkI
Network-Match
Default Router
I
– An ermittelte NA weiterleiten
– „Routing Mechanism“
Mechanism“
I
Host
Netz
sonst
Forward-NA
Forward-NA
Forward-NA
Routing Policy meist durch zusätzliche
Protokolle (Applikationsebene)
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.10
5
Vorlesung "Verteilte Systeme"
Sommersemester 1999
RoutingRouting-Protokolle
I
Autonome Systeme (AS)
– Verwaltungseinheiten
I
R2
X
R1
– DistanzvektorDistanzvektor-basiert
RIP (Routing Information
I
Protocol)
Protocol)
RIPI
RIP-2
– LinkLink-statestate-basiert
OSPF
I
(Open Shortest Path First)
Y
E
Z
AS
Interior Gateway Protocols
Transit AS
Multihomed
AS
I
– EGP
– BGP
(Border Gateway Protocol)
Protocol)
I
AS
Exterior Gateway Protocols
Größe der Routingtabellen
Stub AS
– CIDR
(Classless Interdomain Routing)
Routing)
Verteilte Systeme, Sommersemester 1999
Folie 3.11
IP: Fragmentierung und Assembly
I
IntranetIntranet-Fragmentierung
– An jedem Hop Assembly und
anschließende Fragmentierung für
ausgehende MTU
– Vorteil: Nutzung volle MTU
– Nachteil: Zusätzliche Kosten
– Problem: Fragmentverluste
I
InternetInternet-Fragmentierung
– Nur Fragmentierung an Hops mit kleiner
werdender MTU
– VorVor- und Nachteile?
I
Netz 1
F3
F2
F1
Router
MTUMTU-PathPath-Discovery
– Kleinste MTU auf dem Weg zum
Empfänger bestimmen und entsprechend
fragmentieren
– Wann sinnvoll?
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Netz 2
Folie 3.12
6
Vorlesung "Verteilte Systeme"
Sommersemester 1999
ICMP = Internet Control Message Protocol
I
I
Echo (Ping
(Ping))
I
– request
– reply
Source Quench
I
Redirect
–
–
–
–
Destination Unreachable
–
–
–
–
–
–
–
–
–
–
–
network unreachable
host unreachable
protocol unreachable
port unreachable
fragmentation needed but
don´t fragment bit set
source route failed
destination network unknown
destination host unknown
destination administratively
prohibited
network/
network/host unreachable for
TOS
...
I
redirect for network
redirect for host
redirect for TOS and network
redirect for TOS and host
Router
– advertisement
– solicitation
I
Time exceeded
I
Anfragen
– timestamp request
– information request
– address mask request
Verteilte Systeme, Sommersemester 1999
Folie 3.13
UDP
I
Source port
Destination port
UDP length
UDP checksum
UDP = User Datagram Protocol
– EndEnd-toto-EndEnd-Version von IP (Portnummer)
I
BestBest-Effort
– Nachrichtenverluste
– Keine Ordnung
– Keine Flußkontrolle
I
8 Byte Header
I
Maximale DatagrammDatagramm-Länge:
Länge: 64 Kbyte inkl. Header
I
UDPUDP-Multicast möglich
– Angabe einer MulticastMulticast-IPIP-Adresse als Empfänger
– Meist von Sysadmins ausgeschaltet
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.14
7
Vorlesung "Verteilte Systeme"
Sommersemester 1999
TCP
source port
destination port
Sequence number
hl
flags
checksum
I
TCP = Transmission Control Protocol
I
Reliable Stream
Window size
Urgent pointer
– Verbindungsorientiert
– Flußkontrolle (SlidingSliding-Window)
Window)
– Duplex
I
Segmente
– Maximale Datenmenge die in einem Schritt übertragen wird
– Maximale Segmentgröße (MSS
(MSS)) „handeln“ Sender und Empfänger
aus
Verteilte Systeme, Sommersemester 1999
Folie 3.15
Socketschnittstelle in UNIX
I
Socket = Kommunikationsendpunkt (Ebene 4)
I
UDPUDP- oder TCPTCP-Adresse:
Adresse:
struct sockaddr_in {
u_short sin_family;
sin_family;
u_short sin_port;
sin_port;
u_long sin_addr;
sin_addr;
}
I
I
I
sin_family = Protokollfamilie (TCP
(TCP//IP = PF_INET)
I
sin_addr = IPIP-Adresse
I
sin_port = Portnummer
Erzeugen und Schließen von Sockets vergleichbar
Dateideskriptor
Zugriffsfunktionen
– UDP:
UDP: sendto und recvfrom
– TCP:
TCP: Einbettung in Dateischnittstelle (read und write)
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.16
8
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Sockets erzeugen und schließen
I
Erzeugung:
Erzeugung:
int sock;
sock = socket (PF_INET,
PF_INET, service, 0);
I
UDP:
UDP: service = SOCK_DGRAM
TCP: service = SOCK_STREAM
I
– Es wird noch keine Portnummer vergeben
I
Schließen
Schließen::
close (sock);
Verteilte Systeme, Sommersemester 1999
Folie 3.17
Portnummer zuweisen
I
Funktion bind:
int bind (
int socket,
sockaddr_in *addr,
*addr,
int addr_len
)
I
IA: 16
NA: 1
Host
IA: 15
NA: 7
Aufrufvarianten
– Portnummer:
Portnummer:
Transient: port = 0
I
>
Fest (z.B.
I
<Portnummer>
z.B. ftpftp-Server TCPTCP-Port 21): port = <Portnummer
– NetzNetz-Interface:
Bestimmtes Interface: sin_addr = <IPI
<IP-Adresse>
Adresse>
I
An allen angeschlossenen Interfaces: sin_addr = INADDR_ANY
I
Zahlen müssen im Netzwerkstandard angegeben werden
– Konvertierungsroutinen:
Konvertierungsroutinen: htonl, htons, ...
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.18
9
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Beispiel:
Beispiel: TCPTCP-Port 21 erzeugen
int s;
struct sockaddr_in saddr;
saddr;
int ret;
s = socket(AF_INET,SOCK_STREAM,0
);
socket(AF_INET,SOCK_STREAM,0);
bzero(
bzero(&saddr,sizeof saddr);
saddr);
saddr.sin_family = AF_INET;
AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
INADDR_ANY;
saddr.sin_port = htons(21);
htons(21);
ret = bind(s,&saddr,sizeof
(saddr));
bind(s,&saddr,sizeof(
saddr));
assert(ret != -1);
...
Verteilte Systeme, Sommersemester 1999
Folie 3.19
UDPUDP-basierte Kommunikation
I
Senden eines Datagramms:
Datagramms:
retcode = sendto (
int socket,
char *msg,
*msg, int msg_len,
msg_len,
int flags,
sockaddr_in *recv,
*recv, int recv_len
)
I
Empfangen eines Datagramms:
Datagramms:
rectcode = recvfrom (
int socket,
socket,
char *msgbuf,
msgbuf, int msgbuf_len,
msgbuf_len,
int flags,
flags,
sockaddr_in *sender,
sender, int *sender_len
)
I
Rückgabewert ist die tatsächliche Datagrammlänge
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.20
10
Vorlesung "Verteilte Systeme"
Sommersemester 1999
TCPTCP-basierte Kommunikation
I
I
Asymmetrischer
Verbindungsaufbau
Server
Client
Server
Client
Server
Passive Seite (Server):
1. Socket erzeugen
2. Socket an Portnummer binden
3. Initialisierung der
Verbindungsannahme (listen)
4. Auf Verbindungswunsch warten
(accept)
I
Client
Aktive Seite (Client):
1. Socket erzeugen
2. Server ermitteln (IP
(IP--Adresse,
Adresse,
Portnummer)
3. Verbindung aufbauen (connect)
Apparat 2
Verteilte Systeme, Sommersemester 1999
Folie 3.21
Listen, Accept und Connect
ServerServer-Seite
I
Initialisierung des passiven
Wartens:
Wartens:
– retcode = listen (
int socket,
int queue_
queue_length
)
Socket wird passiv
I
I
ClientClient-Seite
I
Verbindungswunsch herstellen:
herstellen:
– retcode = connect (
int socket,
sockaddr_in *server,
*server,
int server_len
)
Auf Verbindungswünsche
Verbindungswünsche
warten:
– retcode = accept (
int socket,
sockaddr_in *client,
*client,
int *client_len
)
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.22
11
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Ablauf eines Verbindungsaufbaus
(1) Sockets erzeugen
Server
as
Client
cs
cs = socket(...,
SOCK_STREAM,0);
);
socket(...,SOCK_STREAM,0
as = socket(...,
socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
Verteilte Systeme, Sommersemester 1999
Folie 3.23
Ablauf eines Verbindungsaufbaus
(2) ServerServer-Adresse (Portnummer)
Portnummer) festlegen
Server
Client
as
cs
cs = socket(...,SOCK_STREAM,0
);
socket(...,SOCK_STREAM,0);
as = socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
bind(
bind(as,server_port);
as,server_port);
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.24
12
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Ablauf eines Verbindungsaufbaus
(3) ServerServer-Socket wird passiv
Server
Client
as
cs
cs = socket(...,SOCK_STREAM,0
);
socket(...,SOCK_STREAM,0);
as = socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
bind(as,server_port
);
bind(as,server_port);
listen(
listen(as,4);
as,4);
Verteilte Systeme, Sommersemester 1999
Folie 3.25
Ablauf eines Verbindungsaufbaus
(4) Verbindungswunsch des Clients
Server
Client
as
cs
cs = socket(...,SOCK_STREAM,0
);
socket(...,SOCK_STREAM,0);
as = socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
bind(as,server_port
);
bind(as,server_port);
listen(as,4
);
listen(as,4);
connect(
connect(cs,server(
cs,server(host,port));
host,port));
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.26
13
Vorlesung "Verteilte Systeme"
Sommersemester 1999
Ablauf eines Verbindungsaufbaus
(5) Server akzeptiert
akzeptiert Verbindungswunsch
Server
ns
Client
as
cs
cs = socket(...,SOCK_STREAM,0
);
socket(...,SOCK_STREAM,0);
as = socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
bind(as,server_port
);
bind(as,server_port);
listen(as,4
);
listen(as,4);
connect(cs,server
(host,port));
connect(cs,server(
host,port));
ns = accept(
accept(ss,...);
ss,...);
Verteilte Systeme, Sommersemester 1999
Folie 3.27
Ablauf eines Verbindungsaufbaus
(6) Datenübertragung
Datenübertragung
Server
ns
Client
as
cs
cs = socket(...,
SOCK_STREAM,0);
);
socket(...,SOCK_STREAM,0
as = socket(...,
socket(..., SOCK_STREAM,0);
SOCK_STREAM,0);
bind(
bind(as,server_port);
as,server_port);
listen(
listen(as,4);
as,4);
connect(
connect(cs,server(
cs,server(host,port));
host,port));
ns = accept(
accept(ss,...);
ss,...);
write(
write(cs,...);
cs,...);
write(
write(cs,...);
cs,...);
read(
read(ns,...);
ns,...);
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.28
14
Vorlesung "Verteilte Systeme"
Sommersemester 1999
NichtNicht-selektives Warten
I
Auf verschiedene Ereignisse blockierend Warten
– EmpfangsEmpfangs- und sendebereite Sockets
– LeseLese- und schreibbereite Dateien
I
Funktion select:
select:
as2
int sock1,
sock1, sock2;
sock2;
fd_set fds;
fds;
sock1 = socket(...);
s4
sock2 = socket(...);
FD_ZERO(
FD_ZERO(&fds);
&fds);
FD_SET(
FD_SET(sock1,&fds);
sock1,&fds);
FD_SET(
FD_SET(sock2,&fds);
sock2,&fds);
ret = select(
select(FD_SETSIZE,&fds,...,timeout);
FD_SETSIZE,&fds,...,timeout);
...
if (FD_ISSET
(sock1,&fds)
(FD_ISSET(
sock1,&fds) { ... };
I
s1
as1
Client
s2
s3
Zugegeben, die Funktion ist etwas komplex ::-)
Verteilte Systeme, Sommersemester 1999
Windows 95/NT und TCP/IP
Folie 3.29
I
I
WinsockWinsock-Schnittstelle
Alle relevanten Datenstrukturen
und Funktionen der SocketSocketSchnittstelle sind definiert
#include <winsock.h>
int main ( int ac, char **av ) {
struct WSAData wsad;
int ret;
ret = WSAStartup(0x0101,&wsad);
if (ret != 0) {
fprintf(stderr,"WSAStartup: failed\n");
return 0;
}
printf("# WSA Info:\n");
printf("# Version %xd\n",wsad.wVersion);
printf("# Highest Version %xd\n",wsad.wHighVersion);
printf("# Description: %s\n",wsad.szDescription);
printf("# System Status: %s\n",wsad.szSystemStatus);
printf("# Maximal %d open sockets per process\n",wsad.iMaxSockets);
printf("# Maximum size of UDP packet in bytes:%d\n",wsad.iMaxUdpDg);
...
WSACleanup();
}
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.30
15
Vorlesung "Verteilte Systeme"
Sommersemester 1999
FTP
I
File Transfer Protocol
– TCPTCP-basierte Kommunikation, Port 21
– Unterstützt beschränkte Menge an Dateitypen (ASCII, Binär, ...)
und Dateistrukturen (Byte Stream,
Stream, Records)
I
Zwei TCPTCP-Verbindungen
– Kontrollverbindung
FTPI
FTP-Server passiv
I
FTPFTP-Client aktiv
– Datenverbindung
Client öffnet passiven Socket
I
IPI
IP-Adresse und Portnummer wird
über die Kontrollverbindung an
Server übertragen
Server stellt Verbindung her
I
Client
1174
1173
Control
Data
20
Verteilte Systeme, Sommersemester 1999
21
Server
Folie 3.31
Literatur
I
D.E. Comer, D.L. Stevens
Internetworking with TCP/IP, Volume II-III
PrenticePrentice-Hall, 1993
I
W. Stevens
TCP/IP Illustrated, Volume 1: The Protocols (1994)
TCP/IP Illustrated, Volume 3: T/TCP, HTTP, ... (1996)
AddisonAddison-Wesley
I
G. Wright, W. Stevens
TCP/IP Illustrated, Volume 2: The Implementation
AddisonAddison-Wesley, 1995
Verteilte Systeme, Sommersemester 1999
(c) Peter Sturm, Universität Trier
Folie 3.32
16
Herunterladen