Vorlesung "Verteilte Systeme" Winter 2002 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, Winter 2002/03 (c) Peter Sturm, Universität Trier TCP IP / ICMP / ARP / RARP / (Routingprotokolle) IEEE 802.X X.25 Folie 3.2 1 Vorlesung "Verteilte Systeme" Winter 2002 IPIP-Adressen (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, Winter 2002/03 Bit 32 Folie 3.3 IPIP-Adressen (cont.) I Schreibweise: „Dotted Decimal“ 10001000 11000111 00110110 11010010 = 136.199.54.210 Ist ein Class XI X-Netz? Netzanteil? I Hostanteil? I I Symbolische Namen – 131.199.54.210 = balvenie.unibalvenie.uni-trier.de – Über verteilte „Datenbank“ (DNS, NSP, LADP, ...) I IPIP-Netadresse – Hostanteil ist 0 Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.4 2 Vorlesung "Verteilte Systeme" Winter 2002 MulticastMulticast- und BroadcastBroadcast-Adressen I Multicast 1 1 1 0 Bit 1 Multicast address(28) 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, Winter 2002/03 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, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.6 3 Vorlesung "Verteilte Systeme" Winter 2002 ARP und RARP I Host A ARP = Address Resolution Protocol – Ermittlung einer Netzwerkadresse im gleichem Netz Gegeben IA I I Gesucht NA – Voraussetzung BroadcastBroadcast-fähiges Netz I Bei dedizierten Leitungen Konfigurationssache Host B ARPQ(IAA) ARPR(IAA,NAA) I RARP = Reverse ARP – Gegeben NA, Gesucht IA – Diskless Clients Verteilte Systeme, Winter 2002/03 Folie 3.7 Version IPIP-Protokoll (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: 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; wird von Routern dekrementiert Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.8 4 Vorlesung "Verteilte Systeme" Winter 2002 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, Winter 2002/03 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“ I Router – Routingtabelle durchsuchen HostI Host-Match NetworkI Network-Match Default Router I – An ermittelte NA weiterleiten – „Routing Mechanism“ I Host Netz sonst Forward-NA Forward-NA Forward-NA Routing Policy meist durch zusätzliche Protokolle (Applikationsebene) Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.10 5 Vorlesung "Verteilte Systeme" Winter 2002 RoutingRouting-Protokolle I Autonome Systeme (AS) – Verwaltungseinheiten I R2 X R1 – DistanzvektorDistanzvektor-basiert RIP (Routing Information I 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) I AS Exterior Gateway Protocols Größe der Routingtabellen Stub AS – CIDR (Classless Interdomain Routing) Verteilte Systeme, Winter 2002/03 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, Winter 2002/03 (c) Peter Sturm, Universität Trier Netz 2 Folie 3.12 6 Vorlesung "Verteilte Systeme" Winter 2002 ICMP = Internet Control Message Protocol I I Echo (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/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, Winter 2002/03 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: 64 Kbyte inkl. Header I UDPUDP-Multicast möglich – Angabe einer MulticastMulticast-IPIP-Adresse als Empfänger – Meist von Sysadmins ausgeschaltet Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.14 7 Vorlesung "Verteilte Systeme" Winter 2002 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 (Sliding(Sliding-Window) – Duplex I Segmente – Maximale Datenmenge die in einem Schritt übertragen wird – Maximale Segmentgröße (MSS) „handeln“ Sender und Empfänger aus Verteilte Systeme, Winter 2002/03 Folie 3.15 Socketschnittstelle in UNIX I Socket = Kommunikationsendpunkt (Ebene 4) I UDPUDP- oder TCPTCP-Adresse: struct sockaddr_in { u_short sin_family; u_short sin_port; u_long sin_addr; } I I I sin_family = Protokollfamilie (TCP/IP = PF_INET) I sin_addr = IPIP-Adresse I sin_port = Portnummer Erzeugen und Schließen von Sockets vergleichbar Dateideskriptor Zugriffsfunktionen – UDP: sendto und recvfrom – TCP: Einbettung in Dateischnittstelle (read und write) Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.16 8 Vorlesung "Verteilte Systeme" Winter 2002 Sockets erzeugen und schließen I Erzeugung: int sock; sock = socket (PF_INET, service, 0); I UDP: service = SOCK_DGRAM TCP: service = SOCK_STREAM I – Es wird noch keine Portnummer vergeben I Schließen: Schließen: close (sock); Verteilte Systeme, Winter 2002/03 Folie 3.17 Portnummer zuweisen I Funktion bind: int bind ( int socket, sockaddr_in *addr, int addr_len ) I IA: 16 NA: 1 Host IA: 15 NA: 7 Aufrufvarianten – Portnummer: Transient: port = 0 I I Fest (z.B. ftpftp-Server TCPTCP-Port 21): port = <Portnummer> – NetzNetz-Interface: I Bestimmtes Interface: sin_addr = <IP<IP-Adresse> I An allen angeschlossenen Interfaces: sin_addr = INADDR_ANY I Zahlen müssen müssen im Netzwerkstandard angegeben werden – Konvertierungsroutinen: htonl, htons, ... Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.18 9 Vorlesung "Verteilte Systeme" Winter 2002 Beispiel: TCPTCP-Port 21 erzeugen int s; struct sockaddr_in saddr; int ret; s = socket(AF_INET,SOCK_STREAM,0); bzero(&saddr,sizeof saddr); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = INADDR_ANY; saddr.sin_port = htons(21); ret = bind(s,&saddr,sizeof(saddr)); assert(ret != -1); ... Verteilte Systeme, Winter 2002/03 Folie 3.19 UDPUDP-basierte Kommunikation I Senden eines Datagramms: retcode = sendto ( int socket, char *msg, int msg_len, int flags, sockaddr_in *recv, int recv_len ) I Empfangen eines Datagramms: rectcode = recvfrom ( int socket, char *msgbuf, int msgbuf_len, int flags, sockaddr_in *sender, int *sender_len ) I Rückgabewert ist die tatsächliche Datagrammlänge Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.20 10 Vorlesung "Verteilte Systeme" Winter 2002 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, Portnummer) 3. Verbindung aufbauen (connect) Apparat 2 Verteilte Systeme, Winter 2002/03 Folie 3.21 Listen, Accept und Connect ServerServer-Seite I Initialisierung des passiven Wartens: – retcode = listen ( int socket, int queue_length queue_length ) Socket wird passiv I I ClientClient-Seite I Verbindungswunsch herstellen: – retcode = connect ( int socket, sockaddr_in *server, int server_len ) Auf Verbindungswünsche Verbindungswünsche warten: – retcode = accept ( int socket, sockaddr_in *client, int *client_len ) Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.22 11 Vorlesung "Verteilte Systeme" Winter 2002 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); Verteilte Systeme, Winter 2002/03 Folie 3.23 Ablauf eines Verbindungsaufbaus (2) ServerServer-Adresse (Portnummer) festlegen Server Client as cs cs = socket(...,SOCK_STREAM,0); as = socket(..., SOCK_STREAM,0); bind(as,server_port); bind(as,server_port); Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.24 12 Vorlesung "Verteilte Systeme" Winter 2002 Ablauf eines Verbindungsaufbaus (3) ServerServer-Socket wird passiv Server Client as cs cs = socket(...,SOCK_STREAM,0); as = socket(..., SOCK_STREAM,0); bind(as,server_port); listen(as,4); listen(as,4); Verteilte Systeme, Winter 2002/03 Folie 3.25 Ablauf eines Verbindungsaufbaus (4) Verbindungswunsch des Clients Server Client as cs cs = socket(...,SOCK_STREAM,0); as = socket(..., SOCK_STREAM,0); bind(as,server_port); listen(as,4); connect(cs,server(host,port)); connect(cs,server(host,port)); Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.26 13 Vorlesung "Verteilte Systeme" Winter 2002 Ablauf eines Verbindungsaufbaus (5) Server akzeptiert akzeptiert Verbindungswunsch Server ns Client as cs cs = socket(...,SOCK_STREAM,0); as = socket(..., SOCK_STREAM,0); bind(as,server_port); listen(as,4); connect(cs,server(host,port)); ns = accept(ss,...); accept(ss,...); Verteilte Systeme, Winter 2002/03 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); 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(ss,...); accept(ss,...); write(cs,...); write(cs,...); write(cs,...); write(cs,...); read(ns,...); read(ns,...); Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.28 14 Vorlesung "Verteilte Systeme" Winter 2002 NichtNicht-selektives Warten I Auf verschiedene Ereignisse blockierend Warten – EmpfangsEmpfangs- und sendebereite Sockets – LeseLese- und schreibbereite Dateien I Funktion select: select: as2 int sock1, sock2; sock2; fd_set fds; sock1 = socket(...); s4 sock2 = socket(...); FD_ZERO(&fds); FD_SET(sock1,&fds); FD_SET(sock2,&fds); ret = select(FD_SETSIZE,&fds,...,timeout); select(FD_SETSIZE,&fds,...,timeout); ... if (FD_ISSET(sock1,&fds) { ... }; I s1 as1 Client s2 s3 Zugegeben, die Funktion ist etwas komplex ::-) Verteilte Systeme, Winter 2002/03 Folie 3.29 Windows und TCP/IP I Aller Anfang ist schwer I Seit Windows 95 winsock – Explizite Initialisierung des ProtokollProtokoll-Stacks – Alle gängigen Funktionen anschließend verfügbar I Ab .NET – Klassen im .NET Framework Direkter Zugriff auf SocketI Socket-Klassen Cooked: TcpClient, TcpListener, … I – Wegen CLR in allen „managed“ Sprachen verfügbar – Winsock weiterhin vorhanden I Beispiel? Verteilte Systeme, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.30 15 Vorlesung "Verteilte Systeme" Winter 2002 FTP I File Transfer Protocol – TCPTCP-basierte Kommunikation, Port 21 – Unterstützt beschränkte Menge an Dateitypen (ASCII, Binär, ...) und Dateistrukturen (Byte Stream, Records) I Zwei TCPTCP-Verbindungen – Kontrollverbindung FTPI FTP-Server passiv FTPI FTP-Client aktiv – Datenverbindung I Client öffnet passiven Socket 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, Winter 2002/03 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, Winter 2002/03 (c) Peter Sturm, Universität Trier Folie 3.32 16