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