Internet-Protokolle Grundstudiums-Seminar im Wintersemester 2001/2002 Herausgeber: Jörn Clausen Technische Fakultät Universität Bielefeld 31. Mai 2002 ii Inhaltsverzeichnis 1 Netzwerk-(Ge)Schichten 1.1 Vernetzte Rechner . 1.2 Rechnernetze . . . . 1.3 Datenpakete . . . . . 1.4 Netzwerk-Schichten . 1.5 Datenkapselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 4 6 6 9 2 Organisationen im Internet 11 3 Request for Comments 3.1 Was RFCs sind . . . . . . . . . . . . 3.2 Entstehungsgeschichte . . . . . . . . 3.3 RFC-Nebensereien . . . . . . . . . . 3.3.1 STD-Serie . . . . . . . . . . . 3.3.2 Best Current Practice (BCP) 3.3.3 For Your Information (FYI) . 3.4 Der Internet Standard Track . . . . 3.4.1 Maturity Levels . . . . . . . . 3.4.2 Internet Standards Process . 3.5 RFC-Formate . . . . . . . . . . . . . 3.5.1 Keywords . . . . . . . . . . . 3.6 Interessante RFCs . . . . . . . . . . 3.7 Jon Postel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 18 20 20 21 21 22 22 23 26 26 26 27 4 Link-Layer, Ethernet 4.1 Zeitliche Einordnung des Link-Layers . . . . . . . . . . . . . . . . . . . . . . 4.2 Gremien die interessant sind . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Das ISO-OSI-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 29 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Inhaltsverzeichnis 4.4 4.5 4.6 4.7 Der Link-Layer . . . . . . . . . . . . . . . . . Ethernet . . . . . . . . . . . . . . . . . . . . . 4.5.1 Die zeitliche Entwicklung des Ethernet 4.5.2 Erfolg mal anders. . . . . . . . . . . . 4.5.3 Arbeitsweise des CSMA/CD . . . . . 4.5.4 Der Backoff-Algortihmus . . . . . . . . Versionsunterschiede . . . . . . . . . . . . . . Andere Protokollarten kurz angeschnitten . . 5 Internet Protocol (IP) 5.1 IP Header . . . . . 5.2 Der Befehl ifconfig 5.3 Der Befehl netstat 5.4 Die Zukunft des IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Address Resolution Protocol (ARP) 6.1 ARP (Address Resolution Protocol) . . . . . 6.1.1 Funktionsprinzip des ARPs . . . . . . 6.1.2 ARP-Cache . . . . . . . . . . . . . . . 6.1.3 ARP-Format . . . . . . . . . . . . . . 6.2 RARP (Reverse Address Resolution Protocol) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 33 33 33 34 35 36 36 . . . . 39 40 44 45 45 . . . . . . . . . . . . . . . . . . . . 47 47 47 48 49 51 7 Prüfsummen im Internet Protocol – Internet Checksum 7.1 Prüfsummen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Prüfsummen im IP (Internet Protocol) . . . . . . . . . . . . . . . . . . 7.3 Ermittlung und Kontrolle der Prüfsumme . . . . . . . . . . . . . . . . 7.3.1 Prüfsummenberechnung beim Sender eines Datenpaketes . . . 7.3.2 Kontrolle der Prüfsumme beim Empfänger eines Datenpaketes 7.4 Eigenschaften des Prüfsummen-Operators . . . . . . . . . . . . . . . . 7.5 1er-Komplement-Addition . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.1 Addition mit Übertrag . . . . . . . . . . . . . . . . . . . . . . . 7.5.2 Addition ohne Übertrag . . . . . . . . . . . . . . . . . . . . . . 7.5.3 Komplement-Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 53 53 54 54 54 54 55 56 56 57 . . . . . . . . . . . . 59 59 59 60 61 62 71 71 72 75 75 75 75 . . . . . . . . . . . . . . . 8 Internet Control Message Proctocol (ICMP) 8.1 Internet Control Message Protocol . . . . . . . . . 8.1.1 Einleitung . . . . . . . . . . . . . . . . . . . 8.1.2 ICMP-Prinzipien . . . . . . . . . . . . . . . 8.1.3 ICMP-Spezifikationen - Nachrichtenformat 8.1.4 ICMP-Spezifikationen - Typen . . . . . . . 8.1.5 Typenbetrachtung . . . . . . . . . . . . . . 8.1.6 Zusammenfassung . . . . . . . . . . . . . . 8.2 ICMP auf Anwendungsebene: ping . . . . . . . . . 8.3 ICMP-Schwachstellen . . . . . . . . . . . . . . . . 8.3.1 Denial of Service . . . . . . . . . . . . . . . 8.3.2 Ping of Death . . . . . . . . . . . . . . . . . 8.3.3 Redirect - Umleiten von Daten . . . . . . . iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhaltsverzeichnis 8.3.4 Abhilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9 IP Routing 9.1 IP-Routing . . . . . . . . . . 9.1.1 Statisches Routing . . 9.1.2 Traceroute . . . . . . 9.1.3 Dynamisches Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 77 77 81 83 10 User Datagram Protocol (UDP) 10.1 Ein kurzer Überblick . . . . 10.2 Aufbau . . . . . . . . . . . 10.3 Checksum . . . . . . . . . . 10.4 Ports . . . . . . . . . . . . . 10.5 UDP & ICMP . . . . . . . 10.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 85 86 86 87 87 87 11 IP Fragmentation 11.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Der IP-Header . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Aufteilung in Fragmente . . . . . . . . . . . . . . . . . . . . 11.4 Fragmentation und ICMP . . . . . . . . . . . . . . . . . . . 11.4.1 Type 3, Code 4 - Fragmentation needed, but DF set. 11.4.2 Type 11, Code 1 - Reassembly time exceeded. . . . . 11.5 RFC 1812: Anforderungen an Router . . . . . . . . . . . . . 11.6 MTU Path Discovery . . . . . . . . . . . . . . . . . . . . . . 11.7 Probleme durch Fragmentation . . . . . . . . . . . . . . . . 11.8 Fragmentation und Angriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 89 89 91 92 92 92 92 93 94 94 12 Domain Name System (DNS) 12.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Die Theorie des DNS . . . . . . . . . . . . . . . . . . . 12.2.1 Alternative zu DNS: die host-Datei . . . . . . . 12.2.2 Die Geschichte des DNS . . . . . . . . . . . . . 12.2.3 Die Organisation des DNS . . . . . . . . . . . . 12.2.4 Der Begriff der Zone . . . . . . . . . . . . . . . 12.2.5 Verschiedene Arten von Nameservern . . . . . 12.3 Die Namensauflösung . . . . . . . . . . . . . . . . . . . 12.3.1 Der Resolver . . . . . . . . . . . . . . . . . . . 12.3.2 Rekursive DNS-Queries . . . . . . . . . . . . . 12.3.3 Iterative DNS-Queries . . . . . . . . . . . . . . 12.4 Die Resource Records . . . . . . . . . . . . . . . . . . 12.5 Das DNS-Protokoll . . . . . . . . . . . . . . . . . . . . 12.5.1 Codierung des Domainnamens . . . . . . . . . 12.5.2 DNS-Header . . . . . . . . . . . . . . . . . . . 12.5.3 DNS-Question . . . . . . . . . . . . . . . . . . 12.5.4 DNS-Answer, DNS-Authority, DNS-Additional 12.6 nslookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 95 95 96 96 97 98 99 100 100 100 101 101 103 103 104 105 106 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Inhaltsverzeichnis 13 Transmission Control Protocol (TCP) 109 14 TCP Flow Control und Congestion Avoidance 14.1 Silly Windows Syndrome . . . . . . . . . . . . . . . . . 14.1.1 Heuristiken gegen das Silly Window Syndrome 14.2 Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.1 Retransmission Timer . . . . . . . . . . . . . . 14.2.2 TCP Persist Timer . . . . . . . . . . . . . . . . 14.2.3 Keepalive Timer . . . . . . . . . . . . . . . . . 14.3 Congestion . . . . . . . . . . . . . . . . . . . . . . . . 14.3.1 Congestion Collapse . . . . . . . . . . . . . . . 14.4 End-to-End Congestion Control . . . . . . . . . . . . . 14.4.1 Slow-Start . . . . . . . . . . . . . . . . . . . . . 14.4.2 Congestion Avoidance . . . . . . . . . . . . . . 14.4.3 Fast Retransmit/Fast Recovery Algorithmus . 14.4.4 Beispiel . . . . . . . . . . . . . . . . . . . . . . 14.5 Network-Assisted Congestion Control . . . . . . . . . 14.5.1 Random Early Discard (RED) . . . . . . . . . 14.5.2 Explicit Congestion Notification (ECN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 111 112 112 112 116 116 117 118 118 118 119 119 121 123 124 124 15 Telnet und rlogin 15.1 Einleitung . . . . . . . . . . . . 15.2 Telnet-Protokoll . . . . . . . . 15.2.1 Client-Server-Modell . . 15.2.2 NVT ASCII . . . . . . . 15.2.3 Telnet-Kommandos . . . 15.2.4 Option Negotiation . . . 15.2.5 Übertragungsmodi . . . 15.2.6 Beispiel-Session . . . . . 15.3 Rlogin-Protokoll . . . . . . . . 15.3.1 Aufbau der Verbindung 15.3.2 Rlogin-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 125 125 126 127 127 127 128 129 132 133 133 16 File Transfer Protocol (FTP) 16.1 Einführung . . . . . . . . . . . 16.2 FTP Protocol . . . . . . . . . . 16.2.1 The control connection . 16.2.2 The data connection . . 16.3 Data Representation . . . . . . 16.4 FTP Commands . . . . . . . . 16.5 FTP Replies . . . . . . . . . . . 16.6 Connection Management . . . . 16.7 Anonymes FTP . . . . . . . . . 16.8 Ephemeral Data Port . . . . . 16.9 Default Data Port . . . . . . . 16.10FTP Beispiel . . . . . . . . . . 16.11Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 135 135 136 136 137 138 138 139 140 140 140 142 146 vi Inhaltsverzeichnis 17 Simple Mail Transfer Protocol (SMTP) 17.1 Einleitung . . . . . . . . . . . . . . . . . . . 17.2 E-Mail-Systeme . . . . . . . . . . . . . . . . 17.3 Entwicklung . . . . . . . . . . . . . . . . . . 17.4 Simple Mail Transfer Protocol . . . . . . . . 17.4.1 Nachrichtenformat (RFC 822) . . . . 17.4.2 Das Protokoll (RFC 821) . . . . . . 17.4.3 SMTP-Befehle . . . . . . . . . . . . 17.4.4 Reply codes . . . . . . . . . . . . . . 17.4.5 Relay . . . . . . . . . . . . . . . . . 17.4.6 MX-Records . . . . . . . . . . . . . 17.5 Weiterentwicklung . . . . . . . . . . . . . . 17.5.1 ESMTP - SMTP Service Extensions 17.5.2 MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 147 147 149 150 150 151 152 153 156 157 158 158 159 18 Hypertext Transfer Protocol (HTTP) 18.1 HTTP . . . . . . . . . . . . . . . . 18.1.1 Allgemeiner Aufbau . . . . 18.2 URL . . . . . . . . . . . . . . . . . 18.3 Client Request . . . . . . . . . . . 18.3.1 Aufbau . . . . . . . . . . . 18.3.2 Methoden . . . . . . . . . . 18.4 Server Response . . . . . . . . . . 18.4.1 Aufbau . . . . . . . . . . . 18.4.2 Status Codes . . . . . . . . 18.5 Header Einträge . . . . . . . . . . 18.6 Beispiele . . . . . . . . . . . . . . . 18.7 Keep-Alive . . . . . . . . . . . . . 18.8 Proxy . . . . . . . . . . . . . . . . 18.8.1 Proxy-Caching . . . . . . . 18.9 HTTP 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 161 162 162 162 163 163 164 164 164 165 166 168 169 169 170 . . . . . . . anfangen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 171 171 172 173 173 173 175 175 176 176 177 181 181 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Internet Relay Chat (IRC) 19.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 19.1.1 Was ist das IRC und was kann man damit 19.1.2 Die Entstehung des IRC . . . . . . . . . . 19.2 Die Technische Struktur des IRC . . . . . . . . . 19.2.1 Netzaufbau . . . . . . . . . . . . . . . . . 19.2.2 Das IRC-Protokoll . . . . . . . . . . . . . 19.2.3 Nachrichtenformat . . . . . . . . . . . . . 19.2.4 Sendemöglichkeiten . . . . . . . . . . . . . 19.3 Verwendung . . . . . . . . . . . . . . . . . . . . . 19.3.1 Netzübersicht . . . . . . . . . . . . . . . . 19.3.2 Strukturen im IRC . . . . . . . . . . . . . 19.4 Probleme und Risiken des IRC . . . . . . . . . . 19.4.1 Aktuelle Probleme . . . . . . . . . . . . . vii Inhaltsverzeichnis viii KAPITEL 1 Netzwerk-(Ge)Schichten Jörn Clausen Liebe LeserInnen, liebe Studierende, liebe Angehörige! Im Herbst 2001 schrieb ich im kommentierten Vorlesungsverzeichnis zu diesem Seminar: Das Internet ist inzwischen aus dem Alltag vieler Leute nicht mehr wegzudenken. Medien wie EMail oder das WWW werden ebenso selbstverständlich benutzt wie Telefon oder Fax. Und ebenso wie bei diesen klassischen Kommunikationsformen nimmt das Wissen um ihre Funktionsweise und die zugrundeliegenden Techniken ab. Diese Situation ist für den reinen Konsumenten“ dieser ” Medien sicherlich akzeptabel, aber Personen, die unmittelbar mit den neuen Medien arbeiten, können typischerweise von einem Blick unter die Motorhaube“ ” profitieren. Ich konnte ich nicht ahnen, daß das Thema Internet-Protokolle“ ein derart großes Interes” se finden würde. Die Teilnehmerzahl war geradezu überwältigend, und trotz des üblichen Schwunds im Laufe des Semesters konnten auch noch die letzten Vortragenden vor einem beachtlichen Publikum sprechen. Allen Teilnehmern, Vortragenden wie Zuhörenden, Aktiven wie Passiven, sei an dieser Stelle gedankt. Mit diesem Reader (der leider mit etwas Verspätung erscheint) liegt nun endlich auch eine schriftliche Zusammenfassung des Seminars vor. 1 1 Netzwerk-(Ge)Schichten 1.1 Vernetzte Rechner Wie im kVV-Kommentar erwähnt, hat das Internet inzwischen den Weg in unseren Alltag gefunden. Seit etwa Mitte der 90er Jahre des letzten Jahrhunderts haben wir uns allmählich daran gewöhnt, an allen möglichen und unmöglichen Stellen EMail- oder Web-Adressen zu finden. Wir wissen (hoffentlich), was die Netiquette ist, und wir glauben auch nicht mehr, das jemand auf der Tastatur ausgerutscht ist, wenn wir ein :-) sehen. Und dennoch ist das Internet nicht erst zum oben genannten Zeitpunkt entstanden. Und es wurde auch nicht erschaffen, um bunte Bilder, sinnfreie Webseiten und geklaute Musik zu transportieren. Die Geschichte des Internets ist sehr viel älter, und es war ursprünglich zu weit weniger spannenden Zwecken gedacht. Eine ausführliche Beschreibung der Ereignisse kann in [12] nachgelesen werden. Das Internet basiert auf Technologien, die zunächst wenige Rechner über große Strecken miteinander verbinden sollten. Angestoßen wurde die Entwicklung von einem Mitarbeiter des DoD (Department of Defense), dem US-amerikanischen Verteidigungsministerium. Dieser ärgerte sich darüber, daß in seinem Büro vier einzelne Terminals standen, jedes mit einem anderen Großrechner in einem der nationalen Rechenzentren verbunden. Die berechtigte Frage dieses Mitarbeiters war: Reicht denn nicht ein Terminal, mit dem ich mich mit ” jedem der vier Rechner verbinden kann?“ Damit war bereits die erste grundlegende Anwendung in einem Rechnernetzwerk formuliert: Das Arbeiten auf einem entfernten Rechner, das remote login. Einige Jahre später. . . Das DoD hatte inzwischen per Forschungsauftrag das ARPANet entwickeln lassen. Dieses verband zunächst Rechner in den Universitäten, die an seiner Entwicklung beteiligt waren. Im Laufe der Zeit kamen immer mehr Computer an neuen Standorten hinzu, und mehr und mehr Leute waren an der Entwicklung des Netzes beteiligt oder wurden zu seinen Nutzern. Und die Leute entdeckten, daß man mit diesem Netz nicht nur auf den Großrechnern am anderen Ende des Kontinents Forschung betreiben konnte. Schnell entwickelten sich Anwendungen, um Dateien auszutauschen, Nachrichten zu verschicken, oder mit anderen Nutzern zu diskutieren. Im Laufe der Zeit wurden immer mehr Anwendungen entwickelt oder entdeckt“, die man ” in einem Rechnernetz einsetzen kann. Hier nur eine (unvollständige) Auswahl der Möglichkeiten: verteiltes Arbeiten Das oben bereits erwähnte remote login ist einer der grundlegendsten Dienste. Im einfachsten Fall wird dem Benutzer ein virtuelles Terminal zur Verfügung gestellt, mit dem er sich auf einem Computer einloggen kann, als säße er an einem Terminal, das direkt mit diesem verbunden ist. Das X-Window System erlaubt es, eine graphische Arbeitsoberfläche ganz oder teilweise (d.h. einzelne Applikationen) auf einem entfernten Rechner laufen zu lassen. Kommunikation Im Laufe der Zeit haben sich verschiedene Arten der netzbasierten Kommunikation entwickelt, die in den meisten Fällen aber lediglich bereits bestehenden 2 1.1 Vernetzte Rechner Kommunikationsformen nachempfunden wurden. EMail ist das Versenden von elektronischer Post, und inzwischen haben wir auch unter dem Äquivalent zur Werbung per Postwurfsendung zu leiden: Spam. Andere Arten der Kommunikation sind Diskussionen zwischen mehreren Personen, die entweder per EMail (auf Mailing-Listen), in Newsgroups, im IRC oder in Chatrooms ablaufen können. Datentransfer Daten aller Art lassen sich über ein Netzwerk verteilen. Dabei kann es sich um Software, wissenschaftliche Ergebnisse, Literatur und viele andere Dinge handeln. Durch das WWW ist die Bedeutung von FTP und vor allem von anonymous FTP zurückgegangen, trotzdem handelt es sich in vielen Fällen (immer) noch um eine adäquate Technik, um bestimmte Daten allgemein zur Verfügung zu stellen. verteilte Ressourcen Viele Ressourcen, die zum Betrieb eines Computers benötigt werden, besitzen einerseits einen gewissen Anschaffungswiderstand, andererseits ist ihr Betrieb mit administrativer Arbeit verbunden. So kosten Plattenplatz (und vor allem ein dazugehöriges Backup-System), Drucker, Scanner und andere Geräte Geld in der Anschaffung, aber vor allem Geld und Zeit in der Einrichtung und Unterhaltung. In vielen Fällen rentiert es sich daher doppelt, bestimmte Peripherie lediglich einmal anzuschaffen und von mehreren Rechnern nutzen zu lassen. Ein weiterer Vorteil ist eine homogene Arbeitsumgebung: Egal an welchem Rechner man arbeitet, man hat immer die gleichen Daten und kann auf die gleiche Peripherie zugreifen. verteiltes Rechnen Viele aktuelle wissenschaftliche Probleme erfordern einen hohen Rechenaufwand. Massiv Parallele Rechner, die über eine Vielzahl von Prozessoren verfügen, sind in der Regel deutlich teurer, als die gleiche Anzahl Prozessoren in Einzelrechnern. Ausserdem lassen sich Netzwerke von Rechnern besser skalieren und leichter modernisieren. Durch geeignete Software läßt sich ein derartiges Rechnernetz als ein homogenes Rechner-Reservoir“ benutzen. Der Benutzer kann eine Berechnung an” stoßen, hat aber keine Kontrolle darüber, auf welchem (oder welchen) Knoten des Netzwerks die Berechnung ausgeführt wird. Projekte wie SETI haben die Möglichkeiten und Grenzen einer Skalierung solcher Rechnerverbünde auf globaler Ebene gezeigt. Informationssysteme Wie bereits eingangs erwähnt, ist das World Wide Web vor einigen Jahren zu der Killer-Applikation“ geworden, durch die die Allgemeinheit auf das ” Internet aufmerksam wurde. Ein negativer Seiteneffekt dieser Entwicklung ist leider, daß die Begriffe Internet“ und World Wide Web“ häufig synonym verwendet werden. ” ” So ist häufig von Internet-Adressen“ die Rede, wenn eigentlich Web-Adressen (oder ” noch genauer: Uniform Resource Locators, URLs) gemeint sind. Vermutlich muß das Web nicht näher vorgestellt werden: Alle und jeder können im WWW über nahezu beliebige Dinge berichten. Große und kleine Firmen, öffentliche Einrichtungen, Vereine und Interessengruppen aller Art, und viele Privatpersonen betreiben ihre eigenen Websites, auf denen sie die Informationen verbreiten, die sie verbreiten wollen. Jegliche Schätzungen über die Anzahl der existierenden Webseiten dürften mit Unsicherheiten verbunden sein, deren absolute Werte im Bereich von Millionen von Seiten liegen. Und dennoch sind Angebote dieser Art nicht erst mit dem WWW entstanden. Bereits einige Jahre zuvor gab es Gopher, ein rein textbasiertes, hierarchischen System. 3 1 Netzwerk-(Ge)Schichten (a) Bus (b) Ring (c) Stern Abbildung 1.1: Verschiedene Netz-Topologien. Diverse Einrichtungen verbreiteten bereits auf diese Weise Informationen, darunter viele Universitäten, aber z.B. auch die Vereinten Nationen. Und auch ganz andere Protokolle wurden für Informationssysteme mißbraucht“: So konnte man lange Jah” re aktuelle Wetterinformationen erhalten, indem man XXX@YYY anfingerte, und ein telnet auf Port 451 von McKusick.COM lieferte über mehrere Jahre den Zustand des Weinkellers von Marshall Kirk McKusick. Unterhaltung/Spiele Und zu guter Letzt kann man natürlich auch seine Freizeit in Rechnernetzen bzw. im Internet verbringen. Bereits 1978 enstand das erste Multi-User Dungeon. MUDs sind vergleichbar mit textbasierte Adventures. Der entscheidende Unterschied ist, daß man andere, reale Mitspieler treffen kann, die ebenfalls auf der Suche nach einem Schatz, einem Drachen oder Dem Einen Ring sind. Inzwischen hat auch die Spiele-Industrie den Nutzen des Internets erkannt. Der aktuelle Trend sind MPOGs, multiplayer online games, bei denen die Teilnehmer rund um den Globus mit- oder gegeneinander spielen können. Das Bemerkenswerte ist, daß alle diese Anwendungen die gleichen Basis-Technologien verwenden, die Internet-Protokolle. Und auch wenn einige dieser Protokolle allmählich an ihre Grenzen stoßen, die Tatsache, die sie teilweise mehr als 30 Jahre gehalten“ haben, sollte ” Beachtung finden. Jegliche Erweiterung, Erneuerung und jeder Ersatz muß sich an diesem Erfolg messen lassen. 1.2 Rechnernetze Damit Rechner untereinander Daten austauschen können, müssen sie miteinander verbunden sein. Wenn mehrere Rechner gemeinsam miteinander verbunden sind, spricht man von einem Rechnernetz. Im Laufe der Zeit wurden verschiedene Vernetzungsverfahren entwickelt, die unterschiedliche Netz-Topologien verwenden (siehe Abb. 1.1): 4 1.2 Rechnernetze Abbildung 1.2: Zwei Bus-förmige Netze, die durch einen Router miteinander verbunden sind. Bus Bei der in Abb. 1.1(a) gezeigten Struktur sind alle Rechner über eine gemeinsame Datenleitung miteinander verbunden. Jeder Rechner kann mit jedem anderen Rechner kommunizieren. Allerdings können im gesamten Netz immer nur jeweils zwei Rechner gleichzeitig Daten austauschen. Wenn gerade zwei Rechner miteinander reden“ und ” ein dritter Rechner versucht, Daten zu versenden, kommt es zu einer Kollision. Ring In ringförmigen Netzen (siehe Abb. 1.1(b)) wandern die Daten auf der geschlossenen Datenleitung im Kreis. Die angeschlossenen Rechner können zu bestimmten Zeitpunkten Daten in den Ring schicken bzw. für sie bestimmte Daten auslesen. Die Daten bewegen sich immer in der gleichen Richtung durch den Ring. Eine unmittelbare Kommunikation wie im Bus findet daher nicht statt. Stern Bei einer Sternverknüpfung (Abb. 1.1(c)) sind alle Rechner über eine eigene Datenleitung mit einer zentralen Netzwerkkomponente, einem Switch, verbunden. Wenn ein Rechner Daten sendet, stellt der Switch eine temporäre Verbindung mit dem Zielrechner her. Der Switch kann mehrere solcher Verbindungen gleichzeitig verwalten, so daß mehrere unabhängige Paare von Rechnern zur selben Zeit miteinander Daten austauschen können. Die Rechnernetze, die sich mit diesen Technologien aufbauen lassen, sind in ihrer Größe beschränkt. Mit derartigen Netzen lassen sich maximal einige hundert Rechner verbinden, die räumlich nicht allzu weit voneinander getrennt sein dürfen, maximal einige hundert Meter. Um eine größere Anzahl Rechner zu vernetzen, oder um größere Entfernungen zwischen Netzen überbrücken zu können, müssen einzelne Rechnernetze miteinander verbunden werden. Dies geschieht, wie in Abb. 1.2 angedeutet, mit Hilfe eines Routers. Wenn ein Rechner im oberen Netz Daten mit einem Rechner im unteren Netz austauschen will, sorgt der Router für den Transfer der Daten zwischen den beiden Netzen. Andere Daten, die zwischen zwei Rechnern eines Teilnetzes ausgetauscht werden, werden nicht in das jeweils andere Netz übertragen. Durch die Verknüpfung mehrerer Netze können auf diese Weise Verbünde von Netzwerken geschaffen werden, sogenannte internets. Als Internet (mit großem I“) bezeichnet man ” 5 1 Netzwerk-(Ge)Schichten das globale Netz, das durch die Verknüpfung vieler einzelner Teilnetze weltweit entstanden ist. Gemeinsames Merkmal aller Teilnetze ist, daß in ihnen die Internet-Protokolle zur Kommunikation eingesetzt werden. 1.3 Datenpakete Die Kommunikation zwischen zwei Rechnern kann prinzipiell auf zwei Arten erfolgen: Verbindungsorientiert und verbindungslos. Bei der verbindungsorientierten Kommunikation erfolgt der Austausch der Daten über eine dedizierte Verbindung, die speziell für diese Kommunikation bereitgestellt wird. Dies ist vergleichbar mit dem Telefonsystem, bei dem zunächst eine Verbindung aufgebaut werden muß, bevor Sprache oder Daten übertragen werden können. Im Gegensatz dazu wird bei einer verbindungslosen Kommunikation keine direkte Verbindung aufgebaut. Die Daten werden über Zwischenstationen (üblicherweise Router) vom Absender zum Empfänger transportiert. Dabei versucht jeder Router, einen günstigen nächsten Empfänger der Daten auszuwählen, um die Daten zum Ziel zu bringen. In aller Regel kann der Absender den genauen Weg der Daten nicht bestimmen oder ermitteln. Vor der Übertragung werden die Daten in Pakete zerteilt. Jedes Paket wird einzeln und unabhängig von anderen Paketen an den Empfänger geschickt. Dort müssen die einzelnen Fragmente wieder zusammengesetzt werden, um die Ausgangsdaten zu erhalten. Dabei hat der Empfänger zu beachten, daß die Pakete in einer anderen Reihenfolge eintreffen können, als sie beim Absender abgeschickt wurden. Außerdem können einzelne Pakete verloren gegangen sein, oder es können Pakete dupliziert worden sein. Sender und Empfänger versuchen, solche Fehlerzustände festzustellen, was aber nicht immer möglich ist. Alle Kommunikationsteilnehmer versuchen, die Daten so weiterzuleiten, daß sie den gewünschten Empfänger erreichen. Es kann aber nicht garantiert werden, daß dies auch tatsächlich gelingt. Dieses Vorgehen wird als best effort“ bezeichnet. ” 1.4 Netzwerk-Schichten Um die Kommunikation in einem Rechnernetz zu ermöglichen, existieren verschiedene Protokolle, die jeweils unterschiedliche Aspekte des Datentransports behandeln. Die Protokolle sind in Schichten angeordnet, wie in Abb. 1.3 gezeigt. Die Internet-Protokolle werden typischerweise in die folgenden vier Schichten unterteilt: link layer Die Verbindungsschicht beschreibt die physikalische Verbindung eines Rechners mit einem Netzwerk. Durch die Beschaffenheit des Übertragungsmediusm werden in dieser Schicht üblicherweise Eigenschaften wie Übertragungsgeschwindigkeiten oder 6 1.4 Netzwerk-Schichten application DNS, telnet, SMTP, HTTP transport TCP, UDP network IP, ICMP link Ethernet, ARP/RARP Abbildung 1.3: Netzwerk-Schichten minimale und maximale Paketgrößen festgelegt. In dieser Schicht sind Protokolle wie Ethernet oder PPP angesiedelt. network layer Die Netzwerkschicht sorgt für den Transport von Datenpaketen im Netzwerk. Wenn sich zwei Kommunikationspartner in unterschiedlichen Teilnetzen befinden, sorgen die Protokolle der Netzwerkschicht dafür, daß die Daten zum Empfänger geroutet werden. In dieser Schicht befindet sich u.a. das Internet Protocol (IP). transport layer Die Transportschicht ermöglicht den Austausch von Daten zwischen zwei Rechnern. Einige Protokolle dieser Schicht abstrahieren von der Paket-orientierten Kommunikation der Netzwerkschicht. Sie ermöglichen einen scheinbar konstanten und fehlerfreien Datenstrom zwischen zwei vernetzten Rechnern. Ein derartiges Protokoll ist das Transport Control Protocol (TCP). application layer In der Anwendungsschicht befinden sich die Protokolle verschiedener Dienste. Dies sind Protokolle wie telnet oder HTTP. Jede Schicht baut auf den Protokollen der darunterliegenden Schicht auf. So verwenden die Protokolle des application layer die Protokolle des transport layer. Diese Anordnung der Protokolle in Schichten hat vor allem zwei Gründe: • Eine Applikation (bzw. ihr Programmierer) muß sich nicht um Dinge wie Routing oder die physikalischen Eigenschaften eines Übertragungsmediums kümmern. Der transport layer abstrahiert von diesen Problemen, und stellt einheitliche Mechanismen zur Verfügung, Daten von einem Rechner zu einem anderen zu transportieren. Der Programmierer muß nicht für jede Anwendung das Rad neu erfinden“. ” • Durch die klare Trennung in Schichten lassen sich leichter Änderungen vornehmen, z.B. neue Protokolle etablieren. Wenn ein neues Protokoll in der Verbindungsschicht eingeführt wird, muß in der Netzwerkschicht eine Anpassung daran vorgenommen werden. Die Protokolle der Transport- oder Applikationsschicht sollten von dieser Änderung aber nicht betroffen sein, bestehende Applikationen sollten also weiterhin funktionieren. 7 1 Netzwerk-(Ge)Schichten ftp-Protokoll application transport network link ftp ftp TCP-Protokoll TCP IP-Protokoll IP Ethernet Ethernet-Protokoll Rechner 1 TCP IP Ethernet Rechner 2 Abbildung 1.4: Kommunikation zwischen den Schichten ftp ftp TCP TCP IP Ethernet Rechner 1 IP IP Ethernet Ethernet Router Ethernet Rechner 2 Abbildung 1.5: Routing in der Netzwerkschicht In Abb. 1.4 ist schematisch dargestellt, wie zwei Rechner Daten per ftp austauschen. Die Daten fließen vom ftp-Client auf dem einen Rechner durch dessen Transport-, Netzwerkund Verbindungsschicht, um auf dieser letzten Ebene zum zweiten Rechner übertragen zu werden. Dort fließen die Daten wieder durch die Protokollschichten nach oben, bis sie im ftpServer verarbeitet werden können. Die scheinbare Sicht für jede Protokoll-Ebene wird durch die horizontalen Pfeile angedeutet: Für den ftp-Client sieht es so aus, als würde er direkt mit dem ftp-Server kommunizieren. Ebenso scheinen sich die beiden TCP-Implementierungen auf den beiden Rechnern direkt“ miteinandern zu verständigen. ” Wenn sich der Zielrechner nicht im gleichen Netz befindet wie der Quellrechner, sondern in einem Netz, das über einen Router erreicht werden kann, stellt sich die Situation wie in Abb. 1.5 dar. Die Daten müssen innerhalb des Routers von einem Netzwerk-Interface zu einem anderen weitergereicht werden. Dazu besitzt der Router intern eine Implementierung eines Netzwerkschicht-Protokolls, in diesem Fall IP. In der Transport- und der Anwendungs- 8 1.5 Datenkapselung user data Eth. header app. header user data TCP header app. header user data IP header TCP header app. header user data IP header TCP header app. header user data Eth. trailer Abbildung 1.6: Kapselung der Daten beim Transport schicht treten gegenüber Abb. 1.4 keine Unterschiede auf. Diese Schichten bemerken“ den ” Router garnicht. Aus der Sicht des ftp-Clients ist es vollkommen unerheblich, ob sich der Zielrechner im gleichen Netz befindet, oder in einem anderen Netzwerk. Neben dem hier gezeigten Modell mit vier Schichten gibt es andere Netzwerk-Modelle. Das ISO-OSI-Modell verwendet sieben Netzwerk-Schichten, in die sich die einzelnen Protokolle einordnen lassen. Einige der Schichten besitzen eine Entsprechung im gezeigten Vier-Schichten-Modell, andere kommen neu hinzu. So existiert unterhalb des link layers eine physikalische Schicht, die z.B. Signal-Pegel beschreibt, also deutlich hardware-näher ist als der link layer. 1.5 Datenkapselung Das Ziel der ftp-Verbindung im vorherigen Abschnitt ist der Transport von Daten von einem Rechner zum anderen. Tatsächlich werden aber viel mehr Informationen übertragen, als die eigentlichen Nutzdaten. Jedes Protokoll, das beim Durchlaufen der Schichten verwendet wird, erweitert das zu transportierende Datenpaket um einen header, manche Protokolle hängen zusätzlich noch einen trailer an (siehe Abb. 1.6). Der header beschreibt die Daten, und wie sie weiterzuverarbeiten sind. Header enthalten typischerweise Zieladressen, Längeninformationen oder Prüfsummen. Damit können die Daten dem richtigen Empfänger zugestellt werden, der sie dann extrahieren und auf ihre Korrektheit überprüfen kann. Das Datenpaket durchläuft auf dem Zielrechner die Protokoll-Schichten in umgekehrter Reihenfolge, und jede Schicht schält“ die enthaltene Nutzlast heraus, um sie an die nächsthöhere ” Schicht weiterzureichen. 9 1 Netzwerk-(Ge)Schichten 10 KAPITEL 2 Organisationen im Internet Anja Durigo, Christina Partzsch Organisationen im Internet Internet Society (ISOC) http://www.isoc.org Die Internet Society wurde im Juni 1992 gegründet und ist eine internationale Non-ProfitOrganisation für akademische, forschungs- und lehrebezogene sowie gemeinnützige Belange. Die ISOC befasst sich mit dem Wachstum und der Entwicklung des weltweiten Internet und der Art, wie das Internet benutzt wird. Neben sozialen, politischen und technischen Fragen im Zusammenhang mit dem Internet beschäftigt sich die Internet Society vornehmlich mit PR-Arbeiten. Die ISOC ernennt die Mitarbeiter des Internet Architecture Boards, welche der Nominierungs-Ausschuss des Internet Engineering Task Force vorschlägt. Internet Architectur Board (IAB) http://www.iab.org 11 2 Organisationen im Internet Zu den Aufgaben des Internet Architectur Board zählt die Beratung der Internet Society. Sie ernennt des weiteren den Vorsitzenden der Internet Engineering Steeling Group. Das Internet Architecture Board setzt Maßstäbe für Entwicklung und Dokumentation, insbesondere der Request For Comment Serien. Internet Engineering Task Force (IETF) http://www.ietf.org Die Internet Engineering Task Force ist ein Teil des Internet Architecture Board (IAB) und kann als eine offene, internationale Gemeinschaft angesehen werden. Eine Aufgabe der IETF ist es, technische Standards im Internet vorzuschlagen. Weiter ist sie zuständig für das Internet Protokoll Engineering und die anschliessend notwendige Standardisierung. Die IETF ist in folgende acht Gebiete aufgeteilt: 1. Anwendungen (Applications) 2. Internet 3. IP: Next Generation 4. Netzwerkmanagement (Network Management) 5. Betriebliche Anforderungen (Operational Requirements) 6. Routing 7. Sicherheit (Security) 8. Transport- und Anwenderdienste (Transport and User Services) Jedes Gebiet hat ein oder zwei Gebiet-Direktoren. Die Gebiet-Direktoren, zusammen mit dem IETF/IESG Vorsitzenden, bilden die IESG. Jedes Gebiet hat mehrere Working Groups (Arbeitsgruppen), die, sobald eine Arbeitsgruppe ihr Ziel erreicht hat, wieder aufgelöst wird. Als Teil des Internet Architectur Board befasst sichder IETF mit der Entwicklung des Internet und dessen reibungslosen Funktionieren. Hierfür sorgen viele internationale Designer, Forscher, sowie Betreiber und Anbieter von Netzwerken. Da es sich um eine offene Gemeinschaft handelt, kann jeder Interessent Mitglied werden. Internet Engineering Steering Group (IESG) Jedes Gebiet der IETF hat zwei Gebiet-Direktoren. Die Gebiet-Direktoren, zusammen mit dem IETF-Vorsitzenden, bilden die IESG. 12 Jedes Gebiet hat mehrere Arbeitsgruppen, eine Working Group, die auf ein ganz bestimmtes Ziel hinarbeitet. Das Ziel kann ein informatives Dokument, die Schöpfung einer ProtokollSpezifizierung, oder der Entschluss von Problemen im Internet sein. Die meisten Arbeitsgruppen haben eine endliche Lebenszeit. Das heisst, sobald eine Arbeitsgruppe ihr Ziel erreicht hat, wird sie aufgelöst. Ein Mitglied einer Arbeitsgruppe ist jemand, der die Mailingliste der Arbeitsgruppe abonniert hat. Es ist jedermann erlaubt eine Arbeitsgruppensitzung zu besuchen. Gebiete können auch Birds of a Feather (BOF) sessions haben (das sind spontane Arbeitsgruppensitzungen), diese haben die gleichen Ziele wie Arbeitsgruppen allgemein, ausgenommen, dass sie keine spezielles Ziel haben und nur ein oder zwei mal zusammenkommen. BOFs werden oft gehalten, um zu entscheiden, ob genug Interesse zum Bilden einer Arbeitsgruppe vorhanden ist. Die Internet Engineering Steering Group (IESG) ist verantwortlich für das technische Management der IETF Aktivitäten und für die Internet Standards. Aufgabe der IESG ist es, den Prozess der Entwicklung zu verwalten. Weiter ist sie direkt verantwortlich für die Handlungen, die mit Eintragung in und Ausführung der Internet Standards verbunden werden. Internet Research Steering Group (IRSG) Die Internet Research Steering Group (IRSG) steuert und koordiniert die Arbeiten der IRTF. Die IRSG besteht aus dem Vorsitzenden des IRTF, den Vorsitzenden der verschiedenen Forschungsgruppen und weiteren Personen der Forschungsgemeinschaft. Internet Research Task Force (IRTF) Das Ziel der Internet Research Task Force ist die Förderung der Forschung im Hinblick auf das Wachstum und die Zukunft des Internets. Um das zu erreichen ist die Zusammensetzung der IRTF so organisiert, das sie aus kleineren Forschungsgruppen zusammengesetzt ist. Folgende Forschungsgruppen sind derzeit gebildet: • End-to-End • Information Infrastructure Architecture • Privacy and Security 13 2 Organisationen im Internet • Internet Resource Discovery • Routing • Services Management • Reliable Multicast Internet Assigned Numbers Authority (IANA) http://www.iana.org Die Internet Assigned Numbers Authority war die zentrale Koordinationsstelle für InternetProtokolle. Diese wurde durch die Regierung der USA unterstützt. Die IANA war zuständig für die Vergabe von IP-Adressen und Domain-Namen. Die USA hatte dann keine weiteren Geldmittel bereitgestellt, da das Internet zu einem Forschungsnetz von Hochschulen und der Allgemeinheit geworden ist. Somit musste eine neue Form dieser Organisation gefunden werden. Demnach ist die IANA in der ICANN aufgegangen. Réseaux IP Européens (RIPE) http://www.ripe.net Die Reseaux IP Europeens ist ein Zusammenschluß europäischer Netze. Das RIPE Network Coordination Centre ist zuständig für Verwaltung und Registrierung von IP-Adressen. Deutsches Forschungsnetz (DFN) http://www.dfn.de Der DFN wurde 1984 vom Bundesministerium für Forschung und Technologie gegründet und ist Betreiber des Wissenschaftsnetzes WIN. Ziele des DFN sind wissenschaftliche Daten auszutauschenund deren Forschungsergebnisse im Internet zu publizieren. Der DFN will desweiteren Lösungen zu Sicherheits- oder allgemeinen Netzproblemen zu finden. Der Verein ist ein Zusammenschluß deutscher Hochschulen, Forschungseinrichtungen und privater Wirtschaftsunternehmen und wurde ins Leben gerufen, um zum einen wissenschaftliche Daten auszutauschen und Forschungsergebnisse im Internet zu publizieren und zum anderen, um Lösungen zu Sicherheits- oder allgemeinen Netzproblemen zu finden. 14 International Network Information Center (InterNIC) http://www.internic.net Die InterNIC ist eine internationale Vergabestelle für Domain-Namen und wurde 1993 gegründet. Die InterNIC Registration Service (NIC = Network Information Center) ist die ausführende Organisation, welche die Verwaltung der Internet-Adressen und Domainnamen im Auftrag der IANA organisiert. Die InterNIC beinhaltet drei Organisationen: • dem Information-Services (von General Atomics betrieben)- diese stellt Informationen zur Verfügung (z.B. alle RFCs, Materialien der ISOC und IETF) • Directory-Services (AT&T)- diese führt Listen von Hilfsquellen, wie z.B. FTPAdressen, Listen von Servern, Kataloge von Bibliotheken und Datenarchiven • Registry-Services (Network Solutions Inc.) - diese weist Domain-Namen und IPAdressen zu Um den Informationsdurst der Internet-Anwender zu stillen, wird von der NSF das Internet Network Information Center gegründet, welches eigentlich aus drei Organisationen besteht. Zum einen gibt es die Information-Services, die eine Vielzahl von Dokumenten, z.B. alle RFCs, Materialien der ISOC und IETF und andere Dokumente zur Verfügung stellt und von General Atomics betrieben wird. Der zweite Dienst sind die sogenannten DirectoryServices, welche Listen von Hilfsquellen, z.B. FTP-Adressen, Listen von Servern, Kataloge von Bibliotheken und Datenarchiven bereitgestellt. Die Aufgaben des Directory-Services die Domain-Namen und IP-Adressen des Internet zugewiesen. Diese Aufgabe wird von Network Solutions INc. ausgeführt. Im Januar 2001 wurden die Rechte der InterNIC an die ICANN übertragen. Internet Corporation for Assigned Names and Numbers (ICANN) http://www.icann.org Die Internet Corporation for Assigned Names and Numbers ist eine 1998 gegründete NonProfit-Organisation mit Sitz in Kalifornien. Sie hat Teilaufgaben der IANA übernommen. Die ICANN regelt die Vergabe und Verwaltung von Domain-Namen und sorgt für einheitliche technische Grundlagen und Standards im Netz. Weiter beschließt sie die Zulassung von Top-Level-Domains (7 neue im Nov. 2000) und betreibt den A-Root-Server. Die ICANN besteht aus einem internationalen Verwaltungsrat, dieser ist zusammengesetzt aus Repräsentanten einer Wählerschaft und weiteren internationalen Repräsentanten. 15 2 Organisationen im Internet Deutsches Network Information Center (DE-NIC) http://www.denic.de Die Denic ist der NIC untergeordnet. Sie wurde 1994 am Rechenzentrum der Universität Karlsruhe gegründet. Zu ihren Aufgaben gehört die Verwaltung der Vergabe der Namensräume innerhalb Deutschlands und Koorfination der Verteilung der Internetnummern. Desweitern betreibt die DE-NIC den Primary Nameserver für die Bundesrepublik. Die Verwaltung der deutschen Internet Funktionsweise des Internet basiert auf einer eindeutigen Vergabe von Rechnernummern. Dafür ist in jedem Land eine bestimmte Organisation, das Network Information Center, verantwortlich. Für Deutschladn wird diese Aufgabe vom DE-NIC übernommen. Die DE-NIC arbeitet eng mit den Internetanbietern zusammen, ist jedoch völlig unabhängig von ihnen. Der sogenannte Primary Nameserver hat die Aufgabe, dass über diese Maschine alle am Internet angeschlossenen Rechner Auskunft über die Adressen sämtlicher Rechner im deutschen Teil des Internet erhalten. W3-Konsortium http://www.w3.org 1994 gegründete Organisation, die speziell die Weiterentwicklung technischer Standards des World Wide Web koordiniert (z.B. HTML oder das HTTP-Protokoll). Drei Institute gehen im W3C auf: Das Massachusetts Institute of Technology Laboratory for Computer Science [MIT/LCS] in den USA, das Institut National de Recherche en Informatique et en Automatique [INRIA] in Europa und die Keio University Shonan Fujisawa Campus in Japan. Das W3C liefert Informationen über das WWW und Standards, entwickelt Referenzcode und -Implementationen und liefert verschiedene Prototypen und Beispiel-Anwendungen. Direktor des W3C ist Tim Berners-Lee, Erfinder des World Wide Web. Das W3C wird durch seine Mitgliedorganisationen unterstützt, ist aber unabhängig von ihnen. Mit der WebGemeinschaft zusammen werden Produktspezifikationen und Software erarbeitet, welche dann weltweit frei zur Verfügung gestellt werden. 16 KAPITEL 3 Request for Comments Sven Kanies, Stefan Vitz 3.1 Was RFCs sind RFCs (Request of Comments) sind technische Dokumente, auf denen das Internet aufbaut. Ihr Ziel ist es, eine bestimmte Position oder einen Vorschlag öffentlich zur Diskussion zu bringen, damit ihn andere Personen kommentieren können. Ohne diese Dokumente wäre ein funktionierender Betrieb des Internets praktisch unmöglich. RFCs werden meist als Standards für das Internet“ bezeichnet, was teilweise richtig, aber auch teilweise falsch ” ist. Alle sogenannten Internet Standards sind zwar als RFCs veröffentlicht, aber nur ein (kleiner) Teil von ihnen sind echte Standards, was in den meisten RFCs auch immer wieder gerne ausdrücklich betont wird. Neben ihrer Funktion als Standardisierungsmedium sind die RFCs noch der offizielle Veröffentlichungskanal solch wichtiger Organisationen wie der IESG, IAB und der Internet Society. Sie decken zusätzlich zu den Internet Standards einen weiten Bereich an Themen ab, von frühen Diskussionen neuer Forschungskonzepte bis hin zu Zustandsbeschreibungen des Internets. RFCs sind eine Reihe von durchnummerierten Dokumenten, die verschiedene Gewohnheiten (tatsächliche und vorgeschlagene) beschreiben, die einen Bezug zum Internet haben und von der IETF herausgegeben werden. Sie werden aber auch von anderen Institutionen wie Firmen, Universitäten und sogar von Privatleuten genutzt, um zum Beispiel Vorschläge für neue Standards oder Bewertungen bereits bestehender oder sich im Standardisierungsprozess befindender Protokolle der breiten Öffentlichkeit zugänglich zu machen. Grundsätzlich kann jeder ein Dokument einreichen, welches als RFC gedacht ist. 17 3 Request for Comments Es müssen nur einige grundsätzliche Regeln beachtet werden, die unter anderem ausführlich in RFC 2223 Instructions to RFC Authors“ erläutert werden. Die Dokumente werden ” von einer Arbeitsgruppe der IETF und/oder dem RFC-Editor geprüft. Dabei durchläuft das Dokument verschiedene Stufen, die Stufen der Entwicklung, Testung und Akzeptanz. Die Stufen bilden den sogenannten Standardisierungsprozess. Die Stufen werden formal als maturity levels“ (Reifestufen) bezeichnet. (Mehr dazu in Kapitel 3.4 - Der Internet ” ” Standard Track“ dieser Ausarbeitung). Der größte Teil der RFCs behandelt technische Festsetzungen und Übereinkommen, die sogenannten Protokolle. Protokolle sind für die Zusammenarbeit der Systeme unentbehrlich; Programme, die untereinander Daten austauschen, müssen auf einigen Übereinstimmungen hinsichtlich des Datenformates und verwandten Themen beruhen. Während einige RFCs Standards festlegen sind andere rein informativer Natur. Von diversen Scherz-RFCs, bevorzugt am 1.4. eines Jahres veröffentlicht, soll hier abgesehen werden, sie sollen auch im Folgenden wenig Beachtung finden. Als Herausgeber der RFCs kann man den RFC-Editor ansehen. Dieser kann durch eine Person oder auch durch eine Gruppe verkörpert werden und ist Teil des IAB. Früher hatte Jon Postel diese Stellung inne, doch inzwischen ging das Amt an die Networking Division des USC Information Sciences Institute (ISI) in Marina del Rey (CA.) über, deren Direktor Jon Postel lange Zeit war. Eine Besonderheit der RFCs ist, dass sie, einmal veröffentlicht, nie verändert oder aktualisiert werden können. Man kann nur ein neues RFC herausbringen, welches das alte ersetzt. Bei einer Ersetzung wird das alte RFC mit der Bezeichnung Obsoleted by ” RFC xxx“ gekennzeichnet, das neue RFC beinhaltet einen Hinweis Obsolets RFC xxx“ ” auf das alte RFC. Korrekturen an einem RFC werden durch Updates RFC xxx“ und ” Updated by RFC xxx“ gekennzeichnet. ” Auf der Homepage des RFC-Editors (http://www.rfc-editor.org) findet man kostenlos zugänglich alle bisher veröffentlichten RFCs und hat die Möglichkeit, die einzelnen RFCs einzusehen und herunterzuladen. So dienen RFCs z.B. Systembetreuern und Programmierern als qualitativ hochwertige Informationsquelle. 3.2 Entstehungsgeschichte Am 7.4.1969 verfasste der Student Steve Crocker einen Artikel Host Software“. Am UCLA ” (University of California, Los Angeles) sollte der erste IMP des ARPANET aufgestellt werden und eine kleine Gruppe von Informatikern hatte sich zur Aufgabe gemacht, die notwendigen Protokolle zu entwerfen, die für die Kommunikation der Groß-Rechner untereinander und mit dem IMP notwendig waren. Steve Crocker war damals Mitarbeiter an der UCLA und Teil dieser Gruppe. Sein Artikel war die Zusammenfassung eines Treffens der NWG (Network Working Group). Steve Crocker hatte erkannt, dass viele der Mitarbeiter noch Studenten waren und eine übergeordnete Autorität fehlte. Er suchte einen Weg, den Fortgang der Arbeiten zu dokumentieren und machte mit seinem Artikel den Anfang. Um keinen offiziellen Anspruch zu erheben und um zur öffentlichen Diskussion seines Vorschlages aufzurufen, nannte 18 3.2 Entstehungsgeschichte er die Dokumentation einfach Request for Comments“ (zu Deutsch etwa sinngemäß: ” Kommentare erwünscht“). Er schuf damit eine bis dahin nicht gekannte Plattform ” wissenschaftlichen Meinungsaustausches. Seinem Beitrag folgten Diskussionen verschiedenster Protokollvorschläge für Netzwerke, die anfangs gemäß ihres Erscheinungsdatums nummeriert wurden. Abbildung 3.1: RFC-Veröffentlichungen pro Jahr seit 1969 Die Bedeutung, die die RFCs in den Folgejahren erlangt haben, sei nur am Beispiel des im ARPANET verwendeten Protokolls aufgezeigt werden: Im Februar des Jahres 1970 wurde im RFC 33 New HOST-HOST Protocol“ erstmals über ein neues Protokoll berichtet, ” welches von den Knotenrechnern im ARPANET benutzt werden sollte. Die Diskussion über das neue Network Control Protocol“ (NCP) zog sich über 6 Monate hin und wurde ” noch in etlichen anderen RFCs (36, 39, 44, 45, 46, 47, 53, 54, 55 und 57) diskutiert. Letztendlich ging aus dieser Diskussion im Juli das Simplified NCP“ hervor und wurde als ” Standardprotokoll für das ARPANET übernommen. Dieses Beispiel soll verdeutlichen, welche Wichtigkeit die RFCs auch in den ersten Jahren des Entstehens des ARPANET hatten. Erst 1983 schuf man im Internet Activities Board (IAB) die Stelle eines RFC Editors“, ” die die eingehenden Diskussionsbeiträge erst nach einer eingehenden Begutachtung zur Veröffentlichung als RFC freigab. Diese Stelle nahm in den Anfangsjahren bis zu seinem Tod Jon Postel ein. So beugte er viele Jahre der wachsenden Flut an halbherzigen“ ” Ausarbeitungen vor. Die Bedeutung der RFCs wird durch die Fülle der standardisierten Protokolle verdeutlicht, die im Laufe der Zeit aus ihnen hervor gegangen sind. Im Oktober 1994 wurde das erste Internet Standard RFC (STD 1) veröffentlicht. Im August 1995 folgte das erste Best Current Practices RFC (BCP 1). Diese Nebenserien werden im nächsten Kapitel das Ausarbeitung ausführlich vorgestellt. 19 3 Request for Comments Abbildung 3.2: Die sogenannten Internetpioniere“ Jon Postel, Steve Crocker und Vint ” Cerf bei ihrer Arbeit am ARPAnet. 3.3 RFC-Nebensereien 3.3.1 STD-Serie Hier sind alle RFCs enthalten, die einen gültigen Standard beschreiben. Wird ein neuer Standard angenommen, bekommt er zusätzlich zu seiner RFC-Nummer noch eine Nummer der Nebenserie in der Form STD xxx. Wenn einmal einem Standard eine STD-Nummer zugewiesen wurde, so bleibt diese gleich. Allerdings kann das Referenz-RFC, in dem der Standard beschrieben ist, durch ein neues ersetzt werden. Technical Standart (TS) In solchen Dokumenten werden u. a. Protokolle, Services und Prozeduren beschrieben. Es wird nur auf die technische Seite wie z.B. Befehle und Aufbau des Protokolls Wert gelegt. Allerdings wird meistens noch eine Bemerkung über den Einsatzbereich und den Zweck der Spezifikation angefügt. Appliciability Statement (AS) Beinhaltet ein oder mehrere TS und legt fest, wie sie angewendet werden (u. a. auch die Bedingungen der Implementierung) · Anmerkung: Ein AS darf keinen höheren MaturityLevel haben als die TS, auf die es sich bezieht. Außerdem weist das AS den bezogenen TS einen Requirement Level“ zu: ” 20 3.3 RFC-Nebensereien required Das TS ist unbedingt erforderlich (IP ICMP in TCP/IP) recommened Es empfiehlt sich, das TS zu implementieren, da die Erfahrung es zeigt und/oder allgemein akzeptiertes technische Wissen es Nahe legt. Herstellern wird es stark empfohlen die Protokolle der empfohlenen TSs in ihre Produkte zu integrieren. Ausnahmen sollten durch einen speziellen Umstand gerechtfertigt sein. (z.B. sollte das telnet Protokoll durch alle Systeme eingeführt werden, die vom Remote access“ ” profitieren würden) elective Die Implementierung des entsprechenden TS ist, innerhalb des Gebietes der Anwendbarkeit des AS, optional. Es liegt im Ermessen des Herstellers sie einzuführen bzw. des Benutzers sie als notwendig, für die eigenen Zwecke einzustufen. Für TS, die aus dem Standardisierungsprozess ausgeschieden sind, gibt es zusätzlich 2 Requirement Level: Limited Use Es rät sich an, das Benutzungsumfeld genau zu definieren und die Benutzung darauf zu zu beschränken. Not Recommened Betrifft TS, die nicht für nützlich genug befunden wurden, oder deren Benutzung zwecklos ist, weil sie z.B. historischer Natur sind Zwar sind TS und AS getrennt voneinander definiert, dennoch sind häufig ein AS sowie ein oder mehrere TS in einem Dokument vereinigt. Dies ist vor allem dann sinnvoll, wenn sich das AS auf die TS bezieht und die TS keinen Bezug von außerhalb“ haben. Sollte dies der ” Fall sein, werden sie dann häufig einzeln veröffentlicht. 3.3.2 Best Current Practice (BCP) In den BCPs werden die Vorgehensweisen, Praktiken und Strukturen der IETF festgelegt. Sie durchlaufen meist einen verkürzten Standardisierungsprozess. Alle Dokumente werden in der übergeordneten Serie RFC veröffentlicht. Sie werden von der IESG vor der Veröffentlichung geprüft. 3.3.3 For Your Information (FYI) Diese RFCs beschreiben keinen Standard, sie dienen einfach nur zur genaueren Information über einen Standard oder stellen einen Entwurf vor, der noch weiterer Entwicklung und Ausarbeitung bedarf. Sie werden dann mit dem Zusatz Experimental“ versehen. ” 21 3 Request for Comments 3.4 Der Internet Standard Track Ein Protokoll, eine Policy oder etwas vergleichbares, was ein im ganzen Internet anerkannter Standard werden soll, muss den sog. Internet Standard Track“ durchlaufen. In diesem ” Prozess wird der Vorschlag auf mehreren Stufen , den sog. Maturity Level“, diskutiert ” und praktisch erprobt, bevor er schlussendlich zum Internet Standard wird oder ob er nochmal überarbeitet oder gar abgelehnt wird. Die Entscheidungen, ob ein Vorschlag in den Internet Standard Track aufgenommen wird, wann er hoch- oder umgestuft wird, werden zwar von der IESG getroffen, allerdings hat die gesamte Internet Community Möglichkeiten zur Einflussnahme durch Kommentieren. 3.4.1 Maturity Levels Es gibt insgesamt 3 Maturity Levels, die zum Internet Standard Track gehören: Proposed Standard Ist der Einstiegslevel in den Internet Standard Track. Um in den Internet Standard Track aufgenommen zu werden, muss eine Spezifikation als technisch ausgereift und stabil, als sinnvoll und nützlich angesehen und auch von der Community akzeptiert werden. Erst dann trifft die IESG die Entscheidung, sie zum Proposed Standard zu machen und sie auf den Standard Track zu setzen. Draft Standard Um zum Draft Standard zu werden, muss die Spezifikation mindestens zweimal erfolgreich interoperable (zwischen zwei verschiedenen Codebasen) implementiert worden sein. Dazu kommt die Notwendigkeit ausreichend praktischer Erfahrung. Dabei ist bei der Implementierung darauf zu achten, dass man alle Features und Optionen der Spezifikation eingebaut hat. Ansonsten müssen solche Optionen und Features, auf die dies nicht zutrifft, aus dem Standard entfernt werden. Eine der Entscheidungshilfen, um ein Proposed Standard zum Draft Standard gemacht wird, ist die Dokumentation des verantwortlichen Working Group Chair. Er muss die Implementierungen und die Beobachtungen und Erfahrungen mit der Spezifikation beschreiben. Internet Standard Hat man sie dann mehrmals implementiert und dadurch praktische Erfahrung gewonnen, kann die Spezifikation dann zum Internet Standard werden. Auf diesem Level ist sie technisch ausgereift, fehlerfrei und stabil. Sie bekommt nun eine Nummer in der STD-Reihe zugewiesen. Zu diesen 3 Standard Track Maturity Levels kommen dann noch 3 andere sog. Off-Track ” Maturity Levels“ hinzu. Diese Levels kennzeichnen z.B. veraltete Spezifikationen oder welche, die technisch noch nicht ausgereift sind. Experimental Typischerweise trifft dies auf Spezifikationen zu, die Teil von Forschungen oder Entwicklungen sind. Sie dienen als allgemeine Information für die technische 22 3.4 Der Internet Standard Track Internetgemeinschaft und als Beweis von geleisteter Forschungsarbeit (z.B. einer Arbeitsgruppe der IETF oder einer IRTF Forschungsgruppe) Informational RFCs mit diesem Level dienen nur der allgemeinen Information der Internet Community und sonst nichts. Sie haben keinerlei Platz im Standardisierungsprozess. Spezifikationen, die in solchen Dokumenten beschrieben werden, sind rein informativer Natur. Dies ist wichtig, da häufiger versucht wurde, den Internet Standards Track auf diesem Wege zu umgehen. Auch werden Spezifikationen, die nicht von einer Working Group erarbeitet wurden, sondern Entwicklungen einer Firma sind, häufig als Informational RFCs veröffentlicht, solange der Entwickler und der RFC-Editor zustimmen. Da es einige Versuche gab, den Internet Standard Track über die Ausnutzung des Experimental/Informational Status auszuhebeln, hat man den Weg, wie ein RFC diesen Status erhält, angepasst. Generell ist es so, dass alle Dokumente, die nicht Ergebnis einer Arbeit einer Working Group sind, direkt beim RFC Editor eingereicht werden müssen. Dieser veröffentlicht sie dann für 2 Wochen als Internet Drafts und wartet auf Kommentare der Internet Community. Nach Ablauf der Zeit wird das Dokument dann als RFC mit dem entsprechenden Status veröffentlicht, wenn der RFC die Anforderungen an die RFCs bezüglich editorieller und informativer Gesichtspunkte für erfüllt hält (sprich: Das Ding liest sich gut und das Thema hat etwas mit dem Internet zu tun). Der Schutzmechanismus besteht jetzt einfach darin, dass der RFC-Editor jedes Dokument, das seiner Meinung nach den Arbeitsbereich der IETF berührt, der IESG anzeigt. Nun setzt sich die IESG mit dem Dokument auseinander und entscheidet, ob es wie vorgesehen mit dem beantragten Status veröffentlicht wird, oder ob es in den Internet Standard Track eingehen soll. Nun kann es auch sein, dass der Autor nicht will dass es in den Internet Standard Track eingeht, dass das Thema mit der Arbeit des IETF in Konflikt steht oder bereits Forschungsobjekt einer bestehenden Working Group ist. In einem solchen Falle ist eine Veröffentlichung als Informational/Experimental RFC dennoch möglich. Allerdings wird dann im Disclaimer oder im Status of this Memo“ des RFCs auf die Umstände der Veröffentlichung hingewiesen. ” Historic Als letzten Off-Track Maturiy Level erfüllt dieser genau das, was der Name bereits andeutet: Er kennzeichnet RFCs, die veraltet sind, entweder weil eine neue Version vom Standard bereits veröffentlicht wurde und den Internet Standard Track durchlaufen hat oder weil die technische Entwicklung den Standard überflüssig gemacht hat. 3.4.2 Internet Standards Process Der Prozess ist in mehrere Actions“ unterteilt, wie das Aufnehmen einer Spezifikation in ” den Internet Standard Track, das Hochstufen oder das Auschliessen von z.B. veralteten Standards. Jede der Actions wird durch einer Empfehlung des Working Group Verantwortlichen gegenüber seines Area Direktors veranlasst und muss durch die IESG bestätigt 23 3 Request for Comments werden. Falls die Spezifikation nicht durch eine Workgroup ausgearbeitet wurde, wird die Action durch eine Empfehlung eines Einzelnen gegenüber der IESG ausgelöst. Initiation of Action Damit eine Spezifikation in den Internet Standard Track aufgenommen wird oder eine Stufe aufsteigt, wird zunächst ein Internet Draft veröffentlicht, es sei denn, die Spezifikation wurde seit ihrer Veröffentlichung als RFC nicht mehr verändert. Sie bleibt für mindestens 2 Wochen Internet Draft, bevor eine Empfehlung abgegeben werden kann. Die IESG entscheidet, nun ob eine Action bestätigt wird, indem sie einmal feststellt, ob alle Kriterien für die vorgesehene neue Stufe zufriedenstellend erfüllt sind, und ob die Spezifikation den erforderlichen Standard für technische Dokumente einhält. Wenn zu erwarten ist, dass die Spezifikation eine sehr grosse Wirkung auf das Internet haben wird, kann die IESG eine unabhängige Kommission beauftragen, ein Gutachten über die möglichen Auswirkungen zu erstellen. Sobald eine Entscheidung ansteht, wird die IETF von der IESG benachrichtigt und löst einen sog. Last Call“ aus. Dies geschieht, um der Internet Community die Möglichkeit zu ” geben, auf die Entscheidung der IESG durch Kommentare Einfluss zu nehmen. Für gewöhnlich dauert die Last-Call Phase 2 Wochen, bei Spezifikationen, die nicht durch eine Workgroup der IETF entwickelt wurden, sogar 4 Wochen. Für beide: Ist es nach Meinung der IESG für das Interesse der Internet Community wichtig, kann sie auch auf eine längere Zeitdauer beschließen, oder eine bestehende verlängern. Wichtig ist auch, dass die IESG nicht daran gebunden ist, welche Action empfohlen wurde. Je nach ihrer Entscheidung und der Antwort auf einen Last Call, kann die IESG der Spezifikation eine andere Kategorie zuordnen. Sollte sie aber die Absicht haben, der Spezifikation eine andere Stufe als beantragt zu geben noch bevor der Last Call veröffentlicht wurde, muss es im Last Call angemerkt sein. Einige Zeit nach Ablauf des Last Call wird die IESG dann die Entscheidung treffen und sie über die IETF Mailing Liste bekannt geben. Weiterhin wichtig ist, dass die IESG die Bildung einer neuen Workinggroup vorschlagen kann wenn ein Last Call grosse Kontroversen ausgelöst hat. Sobald die Action von der IESG bestätigt worden ist, wird der RFC Editor benachrichtigt. Dieser bringt dann ein neues RFC heraus, das alte Internet Draft wird dann gelöscht. Advancing in the Standard Tracks Die zuvor beschriebene Prozedur wird jedes mal neu durchlaufen, wenn eine Spezifikation in den Internet Standards Track aufgenommen oder eine Stufe aufsteigen soll. Die erste Stufe ist der Proposed Standard. Dieser Status wird für mindestens 6 Monate beibehalten, bevor der Draft Standard erreicht werden kann. Auf dieser Stufe verbleibt die Spezifkation mindestens 4 Monate oder bis zum nächsten IESG Treffen, je nachdem welche Frist später 24 3.4 Der Internet Standard Track abläuft. Generell beginnen die Fristen jeweils ab der Veröffentlichung als RFC oder der Bekanntgabe einer IESG Entscheidung. Da eine Spezifikation sehr wahrscheinlich geändert wird, um erkannte Fehler und Probleme zu beseitigen, kann es bei größeren Modifikationen möglich sein, dass die Zeiträume, die eine Spezifikation im aktuellen Standard verbringt, ausgedehnt werden. Bei noch größeren Änderungen wird eventuell nach einer Empfehlung der IESG eine neue Spezifikation erstellt, die den ganzen Weg nochmal von vorne durchlaufen muss. Ändert sich der Status einer Spezifikation, wird für gewöhnlich auch ein neues RFC veröffentlicht. Dies trifft nur dann nicht zu, wenn es zu keinerlei Änderung seit dem letzten RFC kam. Es wird jedoch nicht bei jedem kleinen Fehler ein neues RFC erstellt. Stattdessen werden die Änderungen gesammelt und fließen dann ins neue RFC ein. Sollte es aber einen wesentlichen Fehler geben, so geht ein Antrag an den RFC-Editor oder die IESG, das RFC neu zu veröffentlichen (mit neuer Nummer), wobei die Zeitrechnung für das aktuelle Stadium nicht neu beginnt. Wenn eine Spezifikation 24 Monate auf dem gleichen Level (außer dem Internet Standard Level) verbleibt, so soll die IESG darüber befinden, ob es sich lohnt, die Spezifikation weiter auf dem Standard Track zu behalten. Gesichtspunkte dabei sind einmal der technische Aufwand und der Sinn bzw. die Nützlichkeit der Spezifikation. Wenn die IESG sich dazu entschließt, die Spezifikation zu verwerfen, bekommt sie einen historischen Status. Sonst wird sie weiter entwickelt (ggf. auf einem anderen Maturity Level). Revising a Standard Eine neue Version eines neuen Standards muss den ganzen Internet Standard Track erneut durchlaufen. Sobald sie zum Internet Standard erhoben wurde, ersetzt sie den alten Standard, der von nun an als Historic gekennzeichnet wird. Die STD-Nummer bleibt gleich. In einige Fällen kann es dazu kommen, dass beide Standards nebeneinander existieren, aufgrund der Verbreitung des alten Standards. Dabei muss die Beziehung beider Versionen zueinander in einem passendem Dokument geregelt werden (evtl. in einem Applicability Statement). Retiring a Standard Sobald ein Standard durch die Weiterentwicklung der Technologie überflüssig geworden ist, oder er einfach durch einen neuen, besseren Standard ersetzt wurde, kann z.B. eine Working Group oder ein Area Direktor eine Anfrage an die IESG stellen, dem alten Standard den Status Historic zu verpassen. Auch hier finden die Regeln für Standard Actions (u.a. Last Call) ihre Anwendung. 25 3 Request for Comments 3.5 RFC-Formate Grundsätzlich werden RFCs in Englisch geschrieben. Sie dürfen zwar in andere Sprachen übersetzt werden, aber im Zweifelsfalle gilt immer die englische Version (z. B. bei Übersetzungsfehlern). Das offizielle Format von RFCs ist das normale Textformat (ASCII-Textformat). Einige RFCs, nicht alle, sind jedoch auch in anderen Formaten wie z.B. HTML oder Postscript verfügbar. Die Verfügbarkeit in anderen Formaten wie Postscript bedeutet gleichzeitig, dass die Dateien mehrere Megabyte groß sein können, wobei jedoch auch eine bessere Qualität erreicht werden kann. Beispielsweise wurden in einigen älteren RFCs Bilder und Skizzen nur mit dem reinen ASCII-Zeichensatz kreiert“. ” Das Layout eines RFC Dokumentes ist generell sehr streng festgelegt (Kopfzeile auf jeder Seite, Anzahl der maximalen Zeichen pro Zeile und Zeilen pro Seite). Das RFC 2223 behandelt ausführlich die Struktur von RFCs 3.5.1 Keywords Im Zusammenhang mit den RFCs gibt es nun mehrere Keywords. Diese Keywords wurden festgelegt, um sicher zu wissen, was der Autor der Spezifikation fordert und was nicht. Sie sind genauer im RFC 2119 beschrieben. • MUST (Required, Shall): Diese Option muss unbedingt eingebaut werden. • MUST NOT (Shall Not): Diese Eigenschaft darf unter keine Umständen enthalten sein. • SHOULD (Recommended): Unter bestimmten Umständen kann es sinnvoll sein, die Option (Beispiel) zu vernachlässigen, man muss sich aber um die Konsequenzen bewusst sein und sie abwägen. • SHOULD NOT : Da es einige Umstände und Situationen geben kann wo eine Option sinnvoll ist, kann sie eingesetzt werden. Im allgemeinen aber ist davon abzuraten. • MAY (Optional): Hier ist es abhängig vom jeweiligen Programmierer, ob er eine Option nutzt oder nicht. Es muss aber sichergestellt sein, dass die Implementierung mit anderen zusammenarbeiten, die die Option nicht unterstützen (bzw. unterstützen). 3.6 Interessante RFCs Aufgrund der vielen bislang veröffentlichten RFCs (Stand März 2002: ungefähr 3200) kann hier nur eine sehr kleine Auswahl von wichtigen und interessanten RFCs gegeben werden. Für eine Liste, die sämtliche Internet Standards, Draft Standards, Proposed 26 3.7 Jon Postel Standards sowie Experimental, Historical und Informational RFCs enthält, ist das STD 1 zu empfehlen. Viele RFCs, deren Nummer durch 100 teilbar sind, sind das STD 1, wobei ein neu erscheinendes RFC jeweils die vorhergehende obsolete macht. Ähnlich dazu enthalten viele 99er RFCs eine Auflistung aller veröffentlichten RFCs seit dem vorhergehenden 00er RFC. Einige Standards und das zugehörige RFC: Standard IP ICMP TCP TELNET SMTP Bezeichnung Internet Protocol Internet Control Message Protocol Transmission Control Protocol Telnet Protocol Specification Simple Mail Transfer Protocol STD 5 5 7 8 10 RFC 791 792 793 854 821 Daneben sind noch folgende RFCs interessant: RFC 1 2026 2028 2223 2360 2468 2555 Thema Host Software The Internet Standards Process – Revision The Organizations Involved in the IETF Standards Process Instructions to Authors Guide for Internet Standards Writers I remember IANA 30 Years of RFCs 3.7 Jon Postel Jon Postel (6. August 1943 - 16. Oktober 1998) wird als einer der Internet-Pioniere bezeichnet. Zusammen mit Stephen Crocker arbeitete er an den Grundlagen des ARPANET. Er entwickelte das Internet Adress Sytem und war 30 Jahre lang IANA Direktor. Daneben war er knapp 30 Jahre lang RFC-Editor. Knapp 2500 RFCs gingen durch seine Hände, wobei er nicht auf staubtrockene und todernste RFCs bestand (1. April RFCs). Er hat (in RFC 1122) den Fundamentalsatz im Bereich Protokoll-Design und -Implementierung geprägt: Be liberal in what you accept, and conservative in what you send“ ” 27 3 Request for Comments 28 KAPITEL 4 Link-Layer, Ethernet Dennis Sinder, Marc Kammer 4.1 Zeitliche Einordnung des Link-Layers Der Link-Layer ist zeitlich nicht ganz so leicht einzuzordnen, da er kein in sich eigener Standard ist. Er ist Teil des ISO-OSI-Modells dessen Entwicklung im Jahre 1974 begann und im Jahre 1978 erstmals der Öffentlichkeit vorgestellt wurde. Die heutige Version des ISO-OSI-Modells, wurde jedoch erst im Jahre 1984 veröffentlicht, nachdem sich die ISO und das CCITT in einigen Streitfragen des Modells geeinigt hatten. 4.2 Gremien die interessant sind Internationale Normen werden von der ISO (International Standards Organization) ausgegeben, einer freiwilligen, nicht per Staatsvertrag geregelten Organisazion, die 1946 gegründet wurde. Ihre Mitglieder sind die nationalen Normungsinstitute der 89 beteiligten Staaten. Dazu gehören ANSI (USA), BSI (Großbritanien), AFNOR (Frankreich), DIN (Deutschland), und 85 weitere. IEEE Das IEEE (Institute of Electrical and Electronics Engineers) oder auch eye - triple ” 29 4 Link-Layer, Ethernet E“ genannt wurde ebnfalls im Jahre 1946 gegründet. Es ist ein amerikanischer Zusammenschluß von Ingenieure und Techniker, das u.a. Standards inbesondere im Bereich der Datenkommunikation bearbeitet und veröffentlich. DIX Das DIX ist eine Unternehmensgruppe bestehend aus DEC, Intel und Xerox 4.3 Das ISO-OSI-Modell Um den Data Link Layer einordnen zu können, nehmen wir als Beispiel das wohl bekannteste Modell, das bereits angesprochene OSI-Modell. Das OSI-Modell besteht aus sieben Schichten, für die jeweils bestimmte Aufgaben definiert sind. Diese Aufgaben können dann individuell durch die passenden Protokolle erledigt werden. Die unterste Schicht des OSI-Models ist die Bitübertragungsschicht (Physical Layer), die sich um die Übertragung der rohen Bits über einen Kommunikationskanal kümmert. Die zweite Schicht, auf die wir nachher noch genauer eingehen werden, ist die Sicherungsschicht (Data Link Layer). Ihre Aufgabe besteht darin die Übertragungseinrichtung in eine Leitung zu verwandeln, die sich der dritten Schicht frei von unerkannten Übertragungsfehlern darstellt. Die dritte Schicht, die sogenannte Vermittlungsschicht (Network Layer), hat die Aufgaben das Routing von Ursprungs- zum Besimmungsort durchzuführen, Paketmassen im Netz zu steuern, so dass es zu keinen Staus kommt, Bits für die Kostenberechnung zu zählen und sich an verschiedene andere Teilnetze anzupassen. Die vierte Schicht, die Transportschicht (Transport Layer) hat die Aufgabe, die Daten die ihr von der über ihr liegenden Schicht übergeben werden, bei Bedarf in kleinere Einheiten zu zerkleinern und danach an die Vermittlungsschicht weiterzugeben. Sie sorgt dafür, dass die so enstandenen Teile richtig beim Empfänger ankommen. Die fünfte Schicht, die Sitzungsschicht (Session Layer) ermöglicht es, Benutzern an verschieden Maschinen, Sitzungen untereinander aufzubauen. Eine Sitzung emöglicht den gewöhnlichen Datentransport, wie die Transportschicht auch, bietet aber zusätzlich erweiterte Dinste, die für bestimmte Anwendungen nützlich sind.Ein Benutzer kann sich z.B. in einer Sitzung an einem entfernten System anmelden oder Dateien zwischen zwei Maschinen übertragen. 30 4.4 Der Link-Layer Die sechste Schicht ist die Darstellungschicht (Presentation Layer). Sie führt bestimmte Funktionen aus, die durch ihre häufige Verwendung eine allgemeine Lösung rechtfertigen, anstatt es jedem Benutzer zu überlassen, die damit verbundenen Aufgaben zu lösen. Anders als die anderen Schichten, die nur daran interessiert sind, Bits zuverlassig von hier nach da zu befördern, hat die Darstellungsschicht die Besonderheit, dass sie sich auch um Syntax und Semantik der übertragen Informationen kümmert. Die siebte und letzte Schicht ist die Verarbeitungsschicht (Application Layer), die letztendlich eine Menge anderer Aufgaben hat. Wie z.B. E-Mail, Remote Job spezielle Einrichtungen. 4.4 Der Link-Layer Wie schon erwähnt nutzt der Link Layer, auch Verbindungssicherungsschicht genannt, die Übertragungsleistung der Bitübertragungsschicht, um die Dateien fehlerüberprüft von einer Station auf einer Leitung zu einer anderen Station zu übertragen. Er unterteilt sich hierbei in zwei Bereiche, den LLC (Logical Link Control) und die MAC-Teilschicht (Media Access Control), wobei jeweils folgende Spezialfunktionen auszuführen sind. Der LLC stellt eine genau festgelegte Dienstschnittstelle zur Vermittlungsschicht dar. Die MAC-Teilschicht dagegen legt fest, wie die Bits der Bitübertragungsschicht zu Rahmen zusammengestellt werden. Sie kümmert sich um Fehler bei der Datenübertragung. Sie regelt den Rahmenfluß, so dass langsame Empfänger nicht von schnellen Sendern mit Daten überschüttet werden und Sie verwaltet Verbindungen Die Aufgabe des LLC, welches unabhängig von den Zugriffsmethoden ist, liegt darin, die Daten aus der Vermittlungsschicht der Senders sicher zur Vermittlungsschicht des Empfängers zu transportieren. Dabei werden drei verschiedene Dienste angeboten. Unbestätigte verbindungslose Dienste laufen so ab, dass der Quellrechner unabhängige Rahmen (Data Frames) an den Empfänger schickt, ohne dass dieser den Empfang bestätigen muß. Weder vorher noch nachher wird eine Verbindung aufgebaut. Wenn aufgrund von Störungen ein Rahmen in der Leitung verlorengeht, wird in der Sicherungsschicht nicht versucht, die Daten wiederherzustellen. Bestätigte verbindungslose Dienste sind hinsichtlich der Zuverlässigkeit der nächste Schritt. Kommt dieser Dienst zum Einsatz, werden zwar immer noch keine Verbindungen benutzt, aber der Empfang jedes abgeschickten Rahmens wird einzeln durch einen Bestätigungsrahmen (Acknowlege Frame) bestätigt. So weiß jeder Sender, ob sein Rahmen sicher angekommen ist. Kommt der Rahmen nicht innerhalb eines festgelegten Zeitraums an, kann er noch einmal abgeschickt werden. Verbindungsorientierte Dienste sind die hochwertigsten Dienste, die der Vermittlungsschicht von der Sicherungsschicht geboten werden können. Kommen verbindungsorientierte Dienste zum Einsatz, bauen Quell- und Zielrechner vor jeder Datenübertragung eine Verbindung zueinander auf. Jeder über diese Verbindung geschickter Rahmen ist numeriert, 31 4 Link-Layer, Ethernet und die Sicherungsschicht sorgt dafür, dass jeder abgeschickte Rahmen auch ankommt. Die MAC-Teilschicht ist im Gegensatz zum LLC abhängig vom LAN-Typ definiert. In der MAC-Schicht wird der Zugriff auf das Übertragungsmedium geregelt und die Netzadressen der einzelnen Stationen ausgewertet. Durch die Dienste der MAC-Schicht stellt sich das gesamte LAN für zwei Partnerinstanzen der LLC-Schicht wie ein Draht zwischen den beiden Stationen dar. Desweiteren wird dort auch die schon genannte Rahmenerstellung, Fehlerüberwachung und Flusssteuerung behandelt. Zur Vorbeugung von Fehlern unterteilt die Sicherungsschicht einen Bitstrom in diskrete Rahmen und rechnet eine Prüfsumme für jeden Rahmen aus. Sobald ein Rahmen seinen Bestimmungsort erreicht, wird die Prüfsumme neu errechnet. Wenn die neu berrechnete Prüfsumme nicht mit der im Rahmen angegebenen übereinstimmt, weiss die Sicherungsschicht, dass ein Fehler aufgetreten sein muß, und unternimmt die zur Behebung nötigen Schritte (z.B. Verwerfen des fehlerhaften Rahmens und Zurücksenden einer Fehlermeldung). Eine Unterteilung des Bitstroms in Rahmen ist schwierig, daher wurden einige Methoden entwickelt wobei sich eine Kombination aus Zeichenzählung, der Prüfsumme und dem Bitstopfen durchgesetzt hat. Bei der ersten Methode zur Rahmenerstellung wird ein Feld im Header des Rahmens eingefügt, das die Anzahl der Zeichen im Rahmen angibt. Sobald die Sicherungsschicht auf der Empfängerseite dieses Feld liest, weiß sie, wie viele Zeichen ankommen und wo folglich das Ende des Rahmens sein wird. Beim Bitstopfen wird am Anfang und am Ende ein Bitmuster (Flag) gesetz, damit man den Anfang und das Ende eines Rahmens identifizieren kann. Kommt jedoch dieses Bitmuster in den zu versendenden Daten vor, wird es gekennzeichnet indem ein Bitmuster in die Daten einfügt, dass von der Sicherungsschicht des Empfängers wieder enfernt wird. Die Fehlerüberwachung geschieht, wenn möglich, über die schon angesprochen Bestätigungsrahmen, so das der Empfänger eine positive oder negative Nachricht zurück schickt. Um dem Verlust von Daten zu erkennen setzt der Sender einen Timer, so dass er wenn er nach abgelaufener Zeit keine Nachricht erhält den Rahmen nochmal schickt. Um Duplikaten vorzubeugen werden die Rahmen Nummeriert, so dass Originale von Wiederholungen unterschieden werden können. Es ist auch eine Flußsteuerung (Flow Control) vorhanden, damit der Sender die Rahmen nicht schneller abschickt als der Empfänger sie verarbeiten kann. Das Protokoll enthält genau definierte Regeln, wann ein Sender den nächsten Rahmen abschicken darf. Diese Regeln verbieten es dem Sender, Rahmen ohne ausdrückliche oder allgemeine Erlaubnis des Empfängers abzuschicken. Es gibt ein Verfahren namens Huckepacktransport (Piggybacking) welches zur Netzentlastung führen soll. Wenn ein Datenrahmen ankommt, verzögert der Empfänger die Übertagung der Bestätigungsrahmens so lange, bis die Vermittlungsschicht das nächste Packet übermittelt. Die Betätigung wird an den ausgehenden Datenrahmen angehängt. 32 4.5 Ethernet 4.5 Ethernet 4.5.1 Die zeitliche Entwicklung des Ethernet 1972 wurde bei Xerox an einer Netzwerktechnologie gearbeitet. Dies waren die ersten experimentellen Schritte in Richtung Ethernet. Das erste funktionstüchtige Local Area Network, kurz LAN, auf Ethernet-Basis wurde unter der Schirmherrschaft von Robert Metcalfe von der Firma Xerox entwickelt und 1975 im Xerox-Palo Alto Research Center (PARC), implementiert. Es verband auf einer Kabellänge von 1 km 100 Stationen mit einer Übertragungsrate von 2,94 Mbps. Das Xerox Ethernet war so erfolgreich, das Xerox, DEC, und Intel einen Standard für ein 10-Mbps-Ethernet ausarbeiteten. Dieser, und nicht die ursprüngliche Version des Ethernets, ist die Basis für das Regelwerk 802.3 vom IEEE. Der ursprüngliche Standard definiert die Parameter für 10-Mbps-Basisband, wofür ein Koaxiakabel mit 50 Ohm benutzt wird. Aufbauend auf die 1979 festgelegte 10 Mbps Technik des DIX-Ethernets, verabschiedete das IEEE 1983 den Standard 802.3. Als Weiterentwicklung wurde 1995 mit dem Standard 802.3u das Fast-Ethernet vorgestellt. Die letze Entwicklung auf Ethernetbasis dürfte der Standard 802.3z (Gigabit-Ethernet) sein. Noch etwas kurioses zur Namensgebung.Das System Ethernet, erhielt seinen Namen durch den sogenannten Lichtäther“, von dem einmal angenommen wurde, daß sich in ihm ” elektromagnetische Strahlung fortpflanzt. Dies lässt sich auf James Clerk Maxwell im 19. Jahrhundert zurückführen, welcher entdeckte das sich elektromagnetische Strahlung durch eine Wellengleichung beschreiben läßt. Fortan nahmen die Wissenschaftler allgemein an, dass der Weltraum mit einer ätherischen Substanz“ gefüllt sein muss in dem sich die ” Strahlung fortpflanzen kann. Erst nach dem berühmten Experiment von Michelson-Morley 1887 entdeckten die Physiker, dass sich elektromagnetische Strahlung im Vakuum fortpflanzen kann, der Äther also nicht existiert. 4.5.2 Erfolg mal anders. Es sollte erwähnt werden dass das Ethernet eine unglaubliche Erfolgsgeschichte“ be” schrieben hat. So gab man der Entwicklung des Ethernets zu seiner Entstehungszeit nur kurz- bis mittelfristige Überlebenschancen. Oft wurde auf den Branchenriesen Big ” Blue“ IBM verwiesen welcher damals eigenbrötlerisch ein eigenes Netzwerkverfahren entwickelte. Auch gab es noch andere Standards, welche sich praxistauglicher und in vielen 33 4 Link-Layer, Ethernet Situationen als besser erwiesen als das Ethernet. Trotz dieser Schwierigkeiten und nicht zu verleugnender technischer Mängel (gerade bei hoher Netzlast), sollte sich das Ethernet zu der Netzwerktechnologie schlechthin entwicklen. Der Erfolg hat jedoch mehrere Gründe. Einer ist sicherlich dass Xerox die Lizenzen zum Bau von Ethernetprodukten sehr günstig verkaufte. So war es für andere Unternehmen attraktiv Hardware für dieses System zu bauen. Auch dass Ethernet später von dem IEEE als Standard anerkannt wurde trug zum Erfolg bei. Durch die günstige Lizenzvergabe und den anerkannten Standard des Ethernets entwickelte sich schnell eine hohe Produktvielfalt, welche in Relation gesehen auch noch günstig angeboten werden konnte. Eine letzte Tatsache, welche bei der erfolgreichen Verbreitung des Ethernets weiterhin eine tragende Rolle gespielt hat, war mit Sicherheit, dass die Unternehmen, welche hinter Ethernet standen, eine nicht zu unterschätzende Marktmacht hatten. Ethernet ist also der Namensgeber für eine Reihe verschiedener Netzwerkübertragungsstandards, welche sich primär durch die Datenübertragungsgeschwindigkeit unterscheiden. Wobei wir uns hauptsächlich mit dem Ethernet befassen, welches später unter der IEEE Norm 802.3 bekannt wurde. 4.5.3 Arbeitsweise des CSMA/CD Was alle Versionen des Ethernets gemeinsam haben ist das Carrier Sense Multiple Acess with Collision Detection, kurz CSMA/CD, Zugangs- bzw. Übertragungsverfahren. CSMA/CD ist der Name für die Art und Weise, wie Ethernet funktioniert bzw. kommuniziert. Im Ethernet werden die Daten über einen gemeinsamen Übertragungskanal transportiert. Den Zugriff auf diesen Übetragungskanal regelt CSMA/CD. Jede Station (Rechner) die Daten zu senden hat, versucht, auf den gemeinsamen Übertragungskanal zuzugreifen, wenn sie ihn zuvor als frei erkannt hat. Greifen zwei Stationen gleichzeitig auf das Medium zu, kommt es zu einer Kollision. Das CSMA/CD-Verfahren regelt diese Kollisionen. Durch das Verfahren wird die Buskollision erkannt, beide Stationen beenden die Übertragung und senden ein spezielles Kollisionssignal (Jam-Signal). Jede Station versucht die Aussendung ihrer Daten nach einer vorgegebenen Zeit wieder (siehe: 4.5.4). Die Zeit ist für jede Station unterschiedlich. Hat sich eine Station durchgesetzt, kann sie ein vollständiges Datenpaket senden. 34 4.5 Ethernet 4.5.4 Der Backoff-Algortihmus Bei einer einer Kollision des CSMA/CD Verfahrens werden bestimmte Zeitintervall abgewartet bevor eine erneute Datenübertragung versucht wird. Nach der ersten Kollision wird entweder 0 oder 1 Zeitintervall abgewartet. Nach der zweiten Kollision wird zwischen 0 und 22−1 Zeitintervallen entschieden und nach der n-ten Kollision wird zwischen 0 und 2 n−1 Zeitintervallen entschieden. Somit veringert sich die Warscheinlichkeit exponentiell, dass eine weitere Kollision entsteht. Nach 10 Kollisionen ist das Maximum an Zeitintervallen bei 0 bis 1023 erreicht und nach der sechzehnten Kollision wird ein Fehler angezeigt. Die Daten welche von Ethernet versendet werden, werden in sogennannte Frames“ un” terteilt. Das grösste Datenpaket in Ethernet die sogenannte Maximum Transmission Unit, kurz MTU, beträgt 1500 bytes, der Frame an sich kann aber maximal 1526 bytes Grösse annehmen. Die Grösse des Datenpaketes ist von unterschiedlichen Faktoren abhängig. Die elementarste ist natürlich der Anteil von Daten im Frame an sich, hinzu kommen noch 26 andere mögliche Bytes welche sich, wie in der nächsten Abbildung dargestellt, wie folgt: Abbildung 4.1: Frame Format nach dem IEEE 802.3 Standard. Wobei man darauf hinweisen muss, dass es sich um das Frameformat vom IEEE Standard 802.3 handelt. Ein interessantes Feld ist die Zieladresse“ (destination address) sowie die Quelladresse“ ” ” (source address). Dort wird die Hardwareadresse jeder einzelnen Netzwerkkarte angegeben. Und bei 48-2=46 verfügbaren Bits gibt es etwa 7 x 1013 globale Adressen. Damit wird beabsichtigt, dass jede Station genau durch die richtige 48-Bit-Nummer adressiert werden kann. Ziel des ganzen war es, eine weltweit eindeutige Zuordnung vorzunehmen. In der Praxis kommt es leider vor, dass die Idealvorstellung einer weltweit einzigartigen Addresse nicht eingehalten wird. Die Vermittlungsschicht muss feststellen, wo sich das Ziel befindet. Weiterhin wichtig ist, dass die Norm 802.3 eine minimale Grösse jedes Frames festlegt. Dies dient dazu, Datenmüll“ von tatsächlichen Paketen zu unterscheiden. Die Länge muss ” von der Zieladresse bis zur Prfüsumme mindestens 64 Byte betragen. Falls der Datenteil des Frames kleiner als 46 Byte ist, füllt das Pad-Feld den Frame bis zum Minimum auf. 35 4 Link-Layer, Ethernet Die Festlegung einer minimalen Frame-Länge hat noch einen wichtigeren Grund. Damit soll verhindert werden, dass eine Station die Übertragung eines kurzen Frames beendet, bevor sein erstes Bit überhaupt das andere Ende des Kabels erreicht hat, wo er dann eventuell mit einem anderen Frame kollidiert. 4.6 Versionsunterschiede Wie bereits erwähnt gibt es unterschiedliche Versionen von Ethernet. So die ursprüngliche von Xerox und die IEEE-Norm 802.3. Die entscheidenden Unterschiede sind dann auch mehr im Detail zu finden, dies kommt unter anderem auch daher, weil beide Versionen weiterhin auf dem CSMA/CD Zugangsverfahren als Übetragungsmethode beruhen. Jedoch sind die Unterschiede nicht zu vernachlässigen. Ein Unterschied ist zum Beispiel im Frame-Format zu finden. So weist der Frame vom Standard-Ethernet“ kein Länge des ” ” Datenfeldes“ (length) Feld auf wie dies beim IEEE 802.3 der Fall ist und aus Abbildung 4.1 hervorgeht. Stattdessen ist dort ein type“ Feld angegeben, welches die Art von Daten ” welche folgen beschreiben soll. Weitere Unterschiede sind, dass beide Ethernetspezifikationen unterschiedliche Signalpegel definieren und für einige Baugruppen andere Verzögerungsanforderungen. Ethernet- und IEEE 802.3-Systeme können auf dem selben Koiaxkabel arbeiten. Ein Datenaustausch zwischen Ethernet- und IEEE 802.3-Stationen ist aber nicht möglich. 4.7 Andere Protokollarten kurz angeschnitten SLIP: SLIP (Serial Line IP) ist ein sehr einfaches Protokoll, um IP-Datagramme über serielle Point-to-Point Verbindungen zu schicken. Es packt die Daten einfach in einen Umschlag“ ” (Frame) und verschickt sie. Im Unterschied zu PPP kann SLIP IP-Pakete n solche Frames einkapseln, enthält aber keine Fehlererkennung oder Fehlerkorrektur. PPP: Die Verbesserung des SLIP, das PPP (Point-to-Point Protokoll) wurde als offizieller Internet-Standard übernommen. Es unterstüzt Fehlererkennung, mehrere Protokolle, die Vergabe von IP-Adressen zum Zeitpunkt des Verbindungsaufbaus, Authentifikation und viele andere Verbesserungen gegenüber SLIP. Die drei wichtigsten Merkmale von PPP sind: Erstens die übliche Rahmenerstellungsmethode mit Fehlerekennung. Zweitens ein Verbin- 36 4.7 Andere Protokollarten kurz angeschnitten dungsprotokoll zum Testen von Leitungen, Anschalten und Beenden von Verbindungen, welches sich Link Control Protokoll nennt. Und drittens das Network Control Protokoll, was die Optionen auf der Vermittlungsschicht aushandelt. Bei Verbindungsaufbau verden LCP Rahmen versendet, nach eingegangener Antwort folgen NCP-Pakete und daraufhin wird die IP-Adresse zugewiesen. Bei Verbindungsabbau wird NCP benutzt, um die Verbindung zur Vermittlungsschicht abzubauen, die IP-Adresse wird freigegeben und zum Schluß wird das LCP benutzt, um die Verbindung auf der Sicherungsschicht zu beenden. Folgende Internetquellen wurden benutzt: • http://www.heise.de • http://www.cavebear.com/CaveBear/Ethernet/ • http://www.yale.edu/pclt/COMM/ETHER.HTM • http://www.webopedia.com/TERM/E/Ethernet.html 37 4 Link-Layer, Ethernet 38 KAPITEL 5 Internet Protocol (IP) Corina Fietz Das Internet kann man als eine Sammlung von Teilnetzen oder autonomen Systemen ” betrachten, die miteinander verbunden sind“[39]. Ein Netz aus Leitungen mit hoher Band” breite und schnellen Routern“[39] bezeichnet man als Backbone. An die Backbones werden ” regionale Netze und an diese LANs von Universitäten, Unternehmen und Internet-ServiceProvidern angeschlossen“[39]. Ein Protokoll legt die Form einer Kommunikation fest, d.h. es müssen bestimmte Regeln bzw. einheitliche Codes festgelegt werden, damit jeder weiß, was gemeint ist. Beim Internet Protocol wird dies durch den IP-Header erreicht. Das IP wird spezifiziert im RFC 791 vom September 1981. Es stellt einen Datenübertragungsservice zur Verfügung. Seine Aufgabe ist es, nach bestem Bemühen“ (best effort) Daten von ” ” der Quelle zum Ziel zu befördern, unabhängig davon, ob sich diese Maschinen im gleichen Netz befinden oder ob andere Netze dazwischenliegen“[39]. IP enthält allerdings keinen Mechanismus, der Garantie dafür bietet, daß die gesendeten Daten ihren Bestimmungsort erreichen. Schlägt die Übertragung fehl, d.h. werden bei der Übertragung Fehler im Header festgestellt, verwirft IP die zu versendenden Daten und versucht, eine diesbezügliche Nachricht an den Absender zu schicken. Jegliche erforderliche Zuverlässigkeit muß durch die Protokolle der höheren Schichten, wie z.B. TCP gewährleistet werden. Datenfragmente können verloren gehen, dupliziert werden oder in falscher Reihenfolge ankommen. IP ist ein verbindungsloses Protokoll. Das bedeutet, es besteht keine direkte Verbindung zum Kommunikationspartner. IP vermittelt zwischen dem TransportLayer und dem Link-Layer. 39 5 Internet Protocol (IP) 5.1 IP Header Bytes Bits 1 1 2 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 32 Version Length Type of service Prec. 2 3 TOS Total Length 0 Flags Identification Fragment Offset 0 DFMF 3 Time to live Protocol Header Checksum 4 Source Address 5 Destination Address Options Words 1-5 Padding Data hhhh hhhhhhhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh h hhh hhhh hh h hhhh hhhh hhhh h hhh Prec.: Precedence Zur Datenübertragung erstellt IP ein sogenanntes Datengramm. Als Synonyme für Datengramm werden in der Literatur auch die Begriffe Datenpaket oder einfach Paket, datagram oder packet verwendet. Ein IP-Datengramm besteht aus einem Header und den zu versendenden Daten“[13]. Der ” ” 40 5.1 IP Header IP-Header hat einen festen 20 Byte großen Teil“, d.h. 5 mal 32-Bit-Wörter, und einen op” tionalen Teil mit variabler Länge“[39] (max. 40 Byte). Der IP-Header besteht aus folgenden Feldern: Version: Das Feld Version besteht aus 4 Bits. Die derzeitige Version ist Nr. 4 beichnet mit IPv4. Length: Das Feld Length besteht aus 4 Bits. Es gibt die Anzahl der 32-Bit-Wörter einschließlich dem optionalen Teil an. Der Mindestwert ist 5 Wörter, wenn keine Optionen vorhanden sind. Da dieses Feld aus 4 Bits besteht (1111=15), d.h. maximal der Wert 15 angegebenwerden kann, wird die Länge des Headers auf maximal 60 Bytes (15 × 4 Bytes pro Wort) beschränkt. Das bedeutet, für das Optionenfeld verbleiben maximal 40 Bytes (abzüglich 20 Bytes für die ersten 5 Wörter). Diese Länge ist für manche Optionen viel zu klein, z.B. wenn die Route eines Pakets aufgezeichnet werden soll. Type of service: Das Feld Type of service besteht aus 8 Bits. Es enthält zunächst das Feld Precedence, das aus 3 Bits besteht. Hier kann eine Priorität von 0 bis 7 (111=7) angegegeben werden. Es folgen 4 TOS-Bits und ein nicht genutztes Bit, das 0 sein muß. Bei den 4 TOS-Bits wird durch eine 1 angegeben, auf welche Funktion Wert gelegt wird und zwar bedeutet eine 1 bei dem 1. TOS-Bit: Verzögerungsminimierung 2. TOS-Bit: Durchsatzmaximierung 3. TOS-Bit: Zuverlässigkeitsmaximierung 4. TOS-Bit: Kostenminimierung Sind alle 4 TOS-Bits auf 0, bedeutet das normalen Service. In der Praxis wird das ” Feld Type of Service von den heute eingesetzten Routern gänzlich ignoriert“[39]. Type-of-Service-Belegungen Anwendungsbeispiele Telnet, FTP control FTP data any IGP, SNMP NNTP BOOTP, ICMP Minimierung der Verzögerung (delay) 1 0 0 0 0 Maximierung des Durchsatzes (throughout) 0 1 0 0 0 Maximierung der Zuverlässigkeit (reliability) 0 0 1 0 0 Minimierung der Kosten (monetary cost) 0 0 0 1 0 Belegung: 1: auf diese Funktion wird besonderen Wert gelegt 41 5 Internet Protocol (IP) 0: normale Funktion Begriffe: IGP: Interior Gateway Protocol SNMP: Simple Network Management Protocol NNTP: Network News Transfer Protocol BOOTP: Bootstrap Protocol Total Length: Das Feld Total Length besteht aus 16 Bits. Es gibt die Länge des IPDatengramms, also Header und Daten in Bytes an (maximal 1111 1111 1111 1111 = 65 535 Bytes). Auch wenn es möglich ist, ein 65535Byte großes IP-Datengramm zu senden, wird es von den meisten Linklayern aufgeteilt. Davon abgesehen gibt es ein deutlich geringeres Mindestmaß für die Größe von Datenpaketen, die ein Host in der Lage sein muß zu empfangen: nur 576 Bytes. Identification: Das Feld Identification besteht aus 16 Bits. Es identifiziert jedes Datengramm eindeutig. Das ist erforderlich, wenn ein größeres Datenpaket in mehrere Datengramme aufgeteilt wird. So kann der Zielhost feststellen (...), zu welchem Daten” gramm ein neu ankommendes Fragment gehört. Alle Fragmente eines Datengramms enthalten den gleichen Identification-Wert.“[39] Flags: Das Feld Flags besteht aus 3 Bits. Die Flags geben an, ob es erlaubt ist, ein größeres Datenpaket in mehrere kleinere zu zerlegen und wenn ja, ob noch mehr Fragmente folgen. Ist ein Datenpaket zu groß, um es als Ganzes zu übertragen, aber Fragmentieren nicht erlaubt, so wird es nicht übertragen. Aus jedem Fragment wird ein Datengramm mit eigenem Header erstellt. Die Belegung sieht folgendermaßen aus: das erste Bit muß 0 sein, beim zweiten Bit bedeutet: 0: Fragmentieren möglich 1: nicht Fragmentieren (DF=Don’t fragment) beim dritten Bit bedeutet: 0: letztes Fragment 1: es kommen noch mehr Fragmente (MF=More fragments) (vgl. [27]) Fragment Offset: Das Feld Fragment Offset besteht aus 13 Bits. Es teilt dem Empfänger die Position eines Fragments im ursprünglichen Datengramm mit. Beim ersten Fragment, oder wenn überhaupt nicht fragmentiert wurde, stehen alle Bits auf 0. Time to live = TTL = Hop Count: Das Feld Time to live besteht aus 8 Bits. Es legt eine Zeitgrenze fest, bis zu der ein Datengramm auf dem Weg zum Empfänger im Internet verbleiben darf. Dabei wird der Wert, in der Regel auf 32 oder 64 Sekunden voreingestellt. Bei jedem durchlaufenen Router verringert sich der Wert um mindestens 42 5.1 IP Header 1, auch wenn der Router schneller durchlaufen wird. Steht der Wert auf 0, so wird das Datengramm vernichtet und der Absender benachrichtigt, daß die Übertragung fehlgeschlagen ist. Das Feld Time to Live verhindert folglich, daß sich durch falsch konfigurierte Router Endlosschleifen bilden. (vgl. [33, 27]) Protocol: Das Feld Protocol besteht aus 8 Bits. Es gibt an, welches Transportprotokoll (z.B. TCP, UDP u.a.) verwendet werden soll. Die Transportprotokolle werden durch eine einheitliche Nummerierung identifiziert, die durch die Organisation IANA festgelegt wird. Header checksum: Das Feld Header checksum besteht aus 16 Bits. Es ist eine Prüfsumme zur Erkennung von Fehlern, die bei der Übertragung von Router zu Router auftreten können. Es wird nur der Header geprüft, nicht die Daten. Die Header-Prüfsumme ” muß bei jeder Teilstrecke“, d.h. bei jedem Durchlauf eines Routers neu berechnet ” werden, da sich mindestens ein Feld immer ändert (Time to live)“[39]. Sie wird durch einen Algorithmus berechnet, bei der der Header in 16-Bit-Halbworte aufgeteilt und deren Summe ermittelt wird. Wenn das Datengramm empfangen wird, wird erneut die Summe berechnet und mit dem Wert im checksum field verglichen. Stimmen die Werte nicht überein, wird das Datengramm vernichtet (checksum error). Durch die Kontrollfunktion der Header checksum bietet IP ein hohes Maß an Korrektheit, Fehler sind unwahrscheinlich, aber möglich, wenn z.B. eine Vertauschung von 2 gleichen Bits zwischen zwei 16-Bit-Halbworten auftritt. Source Address: Das Feld Source Address besteht aus 32 Bits. Es ist die IP-Adresse des Senders. Destination Address: Das Feld Destination Address besteht aus 32 Bits. Es ist die IPAdresse des Empfängers. Options: Das Feld Options besteht aus maximal 40 Bytes. In diesem Feld können bei Bedarf zusätzliche Informationen definiert werden. Dabei ist es erforderlich, eine im RFC 791 festgelegte Form einzuhalten. Um zu funktionieren, müssen diese Optionen von jedem Router unterstützt werden bzw. freigegeben sein. Es ist auch möglich, bestimmte Optionen abzuschalten, um Mißbrauch zu vermeiden. So ist z.B. an der Universität Bielefeld die Option Strict Source Routing (Erklärung unten) abgeschaltet. Ansonsten wäre die Authenzität des Absenders in Frage gestellt. Beispiele definierter Optionen: • Sicherheit (Security): Die Option Sicherheit bezeichnet, wie geheim das Datengramm ist, z.B. war es ursprünglich gedacht, daß ein Router in einer militärischen Anwendung diese ” Option benutzt, um festzulegen, daß die Übertragung nicht durch bestimmte Länder fließen soll“[39]. In der Praxis wird diese Option von den meisten Routern nicht unterstützt und wahrscheinlich nicht mehr benutzt. Durch Nutzung dieser Option würde man ja gerade brisante Daten markieren und es so möglichen Gegnern erleichtern, an geheime Informationen zu kommen. 43 5 Internet Protocol (IP) • Striktes Source-Routing (Strict Source Routing): Hier wird durch Angabe jeder einzelnen IP-Adresse der zu durchlaufenden Router von der Quelle bis zum Ziel der komplette Pfad des Datengramms festgelegt. Diese Option ist in der Universität Bielefeld abgeschaltet, um Mißbrauch zu vermeiden. Es könnte beispielsweise sonst geschehen, daß Datengramme mit entsprechendem Inhalt über andere Adressen geroutet werden und so den Anschein erwecken, einen anderen Absender zu haben, als in der Realität. • Loses Source-Routing (Loose Source Routing): Hier wird eine Liste von Routern festgehalten, die in der angegebenen Reihenfolge durchlaufen werden müssen. Anders als beim strikten Source-Routing können zusätzlich auch andere Router gewählt werden. • Routenaufzeichnung (Record Route): Bei der Routenaufzeichnung hängt jeder durchlaufene Router seine IP-Adresse an das Optionenfeld an. Dadurch können Systemmanager Fehler in den ” Routing-Algorithmen verfolgen“[39]. • Zeitstempel (Time Stamp): Die Option Zeitstempel entspricht der Option Routenaufzeichnung mit zusätzlicher Zeiterfassung. Padding: Padding heißt übersetzt Polsterung/Füllmaterial. Da Optionen auch aus weniger als 32 Bit bestehen können, wird Padding benutzt, um sicherzustellen, daß der Header auf einer 32-Bit -Grenze endet, d.h. es wird mit Null-Bits aufgefüllt (vgl. [27]). 5.2 Der Befehl ifconfig Der Befehl ifconfig dient der Konfiguration der Netzwerkschnittstellen für die Benutzung von TCP/IP. Der Befehl wird normalerweise beim Booten gestartet, um jede Schnittstelle eines Hosts zu konfigurieren. Die MTU (Maximum Transmission Unit) zeigt den maximalen Durchsatzwert der Schnittstelle in Bytes an, d.h. wie groß ein Datengramm maximal sein darf, um die Schnittstelle passieren zu können. Es gibt zahlreiche Optionen für ifconfig, auf die hier nicht näher eingegangen wird. Um den Befehl an der Universität Bielefeld auf den studentischen Rechnern in der Technischen Fakultät auszuprobieren, muß beim Prompt /usr/sbin/ifconfig -a eingegeben werden. Dabei werden durch die Eingabe von -a alle Schnittstellen angezeigt. Beispiel: cfietz@antipasto /usr/sbin/ifconfig -a lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 ge0: flags=1000863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 192.168.133.3 netmask ffffff00 broadcast 192.168.133.255 hme0: flags=1000863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,IPv4> mtu 1500 index 3 inet 129.70.133.113 netmask ffffff00 broadcast 129.70.133.255 44 5.3 Der Befehl netstat lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1 inet6 ::1/128 hme0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 3 inet6 fe80::a00:20ff:fefc:c670/10 5.3 Der Befehl netstat Der Befehl netstat stellt Informationen über die Schnittstellen eines Systems, die MTU jeder einzelnen Schnittstelle die Anzahl ein-und ausgehender Datenpakete, ein- und ausgehender Errormeldungen und Kollisionen und die übliche Größe der ausgehenden Schlange zur Verfügung. Bei einer Eingabe von netstat -n werden IP-Adressen anstelle von Namen, wie z.B. antipasto.TechFak.Uni-Bielefeld.DE angegeben. Eine Eingabe von -i liefert Schnittstelleninformationen. Beispiel: cfietz@antipasto netstat Name Mtu Net/Dest lo0 8232 127.0.0.0 ge0 1500 192.168.133.0 hme0 1500 129.70.133.0 Name lo0 hme0 Ipkts Ierrs Opkts Oerrs Collis Queue 24724619 0 24724619 0 0 0 507268466 0 1502855215 0 0 0 240730951 0 246679105 0 0 0 Mtu Net/Dest Address 8252 ::1 ::1 1500 fe80::a00:20ff:fefc:c670/10 fe80::a00:20ff:fefc:c670 cfietz@antipasto netstat Name Mtu Net/Dest lo0 8232 loopback ge0 1500 SunRay-ge0 hme0 1500 cip-ether Name lo0 hme0 -ni Address 127.0.0.1 192.168.133.3 129.70.133.113 Ipkts Ierrs Opkts Oerrs Collis 24724619 0 24724619 0 0 240730951 0 246679105 0 0 -i Address Ipkts Ierrs Opkts Oerrs Collis Queue localhost 24724640 0 24724640 0 0 0 3.133.168.192.in-addr.arpa 507282117 0 1502904778 0 0 antipasto.TechFak.Uni-Bielefeld.DE 240735054 0 246683474 0 Mtu Net/Dest Address 8252 localhost localhost 1500 fe80::a00:20ff:fefc:c670/10 fe80::a00:20ff:fefc:c670 0 0 0 Ipkts Ierrs Opkts Oerrs Collis 24724640 0 24724640 0 0 240735055 0 246683475 0 0 5.4 Die Zukunft des IP Aufgrund des phenomenalen Wachstums des Internets in den letzten Jahren und der ineffizienten Ausnutzung der vorhandenen Adressen, werden die IP-Adressen knapp. Deshalb werden die 32-Bit-Adressen zukünftig zu klein sein. Es steigt aber nicht nur die Anzahl der Benutzer, sondern auch die Datenmenge. Das Internet dient zunehmend als Unterhaltungs- und Kommunikationsmedium. Den höheren Anforderungen, die Grafiken, ganze Videos und Telekommunikationsprogramme stellen, ist IPv4 zunehmend nicht mehr gewachsen. 45 5 Internet Protocol (IP) Nachfolger von IPv4 ist IPv6. Dabei handelt es sich nicht um ein grundsätzlich anderes Protokoll, sondern es basiert auf IPv4 mit einigen Veränderungen. IPv6 begegnet dem Problem der Adressenknappheit mit größeren Adressen. Statt 32-BitAdressen, werden 128-Bit-Adressen verwendet, die zweckmäßigerweise im Hexadezimalsystem notiert werden. Das entspricht umgerechnet der gigantischen Zahl von 1024 IPAdressen pro m2 Erdoberfläche. Außerdem wird die anzuhängende Kontrollinformation effizienter gestaltet. Statt einem Header gibt es einen Basisheader mit weniger Feldern und Zusatzheader nach Bedarf. Das Time-to-Live-Feld wird durch das Hop-Limit-Feld abgelöst, das nur noch die tatsächlichen Routerdurchläufe mißt, statt eine Mischung aus Routerdurchläufen und Zeit. IPv6 bietet End-To-End Fragmentation, das bedeutet, in Routern findet keine Fragmentation mehr statt. Ist das Datenpaket zu groß, wird es nicht übertragen. Es ist Aufgabe des Quellrechners, große Datenpakete ggf. zu fragmentieren. In diesem Fall wird ein Fragment Extension Header angefügt. Auch der Optionenteil ist verbessert worden. So gibt es z.B. eine Option zur ” Echtzeitübertragung“[13], die u.a. für Telekommunikationsprogramme erforderlich ist. Alles in allem wird ein schnelleres Routing erreicht. IPv6 beinhaltet nun im Protokoll selbst Mechanismen zur sicheren Datenübertragung“[13], ” wie z.B. authentification (Echtheit des Absenders bzw. Empfängers) und data integrity (Datenintegrität, unveränderter Inhalt der Daten). Für isolierte Netzwerke stellt IPv6 die Möglichkeit zur Verfügung, eigene Adressen festzulegen und miteinander zu kommunizieren, ohne von einem Router abhängig zu sein. IPv6 ist außerdem erweiterungsfähig für zukünftige Verbesserungen. Statt wie IPv4 alle Details festzulegen, erlaubt IPv6 zusätzliche Merkmale für zukünftige Anwendungen aufzunehmen. 46 KAPITEL 6 Address Resolution Protocol (ARP) Sabrina Kögler 6.1 ARP (Address Resolution Protocol) Von jedem Übertragungsnetz (z.B. Ethernet, Token Ring) wird eine eigene Übertragungsmethode benutzt. Die hierbei benutzen Adressen werden Hardware-Adressen genannt. Für jedes Netz muß ein Verfahren gefunden werden, das zum Beispiel die Internet-Adressen in passende Hardware-Adressen umsetzt. Diese Umsetzung wird Adressenauflösung (address resolution) genannt. Hierfür existiert ein spezifisches Protokoll, das Address Resolution Protocol (ARP) 6.1.1 Funktionsprinzip des ARPs Ein Rechner, der die Hardware-Adresse seines Zielrechners nicht kennt, schickt eine sogenannte ARP-Anforderung als Broadcast-Datagramm ab. Diese ARP-Anforderung enthält die Internet- und die Hardware-Adresse des Senders und die Internet-Adresse des Zielrechners. Wenn die Netzwerkschicht die Anforderung erhält, ein Datagramm an eine andere IPAdresse zu senden, sucht es zuerst im ARP-Cache nach der korrespondierenden HardwareAdresse. Falls im ARP-Cache kein Eintrag gefunden wird, wird vom Initiator mit Hilfe von ARP die Hardware-Adresse der fraglichen IP-Adresse zu ermitteln versucht. In der Hoffnung, diese Frage wenigstens temporär aus der Welt zu schaffen, sendet ARP in diesem 47 6 Address Resolution Protocol (ARP) Fall, die sogenannte ARP-Anforderung an alle Rechner mittels der Hardware-BroadcastAdresse. In dieser Anforderung setzte ARP seinen eigenen Ethernet-Typ (0X08086) ein. Jetzt überprüfen alle Rechner, ob sie mit der Anfrage gemeint sind. Nur der Rechner, der das Ziel der Anforderung war beantwortet das Paket mit einer ARP-Bestätigung. Der Zielrechner schickt die ARP-Bestätigung dann direkt an den anfragenden Rechner. Diese Bestätigung enthält seine Hardware-Adresse, die der anfragende Rechner zur Übertragung der Nutzerdaten verwenden kann . Dieses Verfahren wäre jedoch sehr kostenintensiv, in Hinsicht auf hohe Netzlast und hohe Belastung nicht beteiligter Rechner, wenn die ARP-Anforderung jeden Datenaustausch einleiten würde. Aus diesem Grund wurde der ARP-Cache eingeführt. 6.1.2 ARP-Cache Das ARP-Cache ist eine Tabelle von IP-Adressen und dazugehörigen Hardware-Adressen, die jeder Rechner führt. Hier werden die eingehende Antwort vermerkt und stehen für eine weitere und vor allem schnellere bzw. effizientere Nutzung bereit. Wenn innerhalb eines definierten Timeouts keine Antwort auf die Broadcast-Anfrage eingeht, wird die Anforderung erneut gestellt. Der Cache wird aktualisiert, sobald eine ARP-Anfrage oder ARP-Bestätigung eintrifft. Alle Rechner die sich im LAN befinden, können die Broadcast versandten ARP-Anfragen nutzen, um ihren eigenen ARP-Cache auf dem aktuellen Stand zu halten. Das ARP-Cache wird meistens für ihre Informationen solange gehalten, bis die Geräteeinheit zurückgesetzt oder ausgeschaltet wird. Jedoch gibt es in einigen TCP/IPImplementierungen ein zeitliches Limit. Dieses Limit beträgt zwischen 10 und 20 Minuten. Wird ein Eintrag innerhalb dieses Zeitraums nicht verwendet, erfolgt die Löschung dieser Einträge. Ansonsten wäre eine einmal getroffene Zuordnung von IP-Adressen zu der Hardware-Adresse von unbeschränkter Dauer. Der Austausch einer defekten Netzwerkkarte würde in diesem Fall dazu führen, daß der Rechner nicht mehr im Netz erreichbar ist. Ein Standby-Server könnte die Arbeit des ausgefallenen Hauptservers nicht mit der gleichen IP-Adresse fortsetzen und eine doppelt vergebene IP-Adresse brächte das Netz durcheinander. Demnach dürfen in einem gut verwalteten Netzwerk keine Duplikate von IP-Adressen entstehen. Jedoch wie oben schon erwähnt, existiert nicht immer ein zeitliches Limit. Andere Systeme arbeiten mit einer zeitgesteuerten Aktualisierungsfunktion. Hierbei wird etwa alle 15 Minuten eine ARP-Anforderung abgesetzt, um sicherzustellen, daß die vorhandenen Einträge noch immer in den Eigenschaften der aktuellen Umgebung entsprechen. Der Befehl “arp” gibt den Inhalt der ARP-Tabelle aus. Um sich der Einsicht in die gesamte ARP-Tabelle zu verschaffen, benutzt man die Option -a. Beispiel einer ARP-Tabelle: Net to Device -----hme0 hme0 ge0 hme0 ge0 ge0 48 Media Table: IPv4 IP Address Mask Flags Phys Addr -------------------- --------------- ----- --------------pasta.TechFak.Uni-Bielefeld.DE 255.255.255.255 08:00:20:86:57:0f V01Router.TechFak.Uni-Bielefeld.DE 255.255.255.255 00:d0:d3:a5:5c:d9 224.101.101.101 255.255.255.255 01:00:5e:65:65:65 224.101.101.101 255.255.255.255 01:00:5e:65:65:65 73.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:03:91 72.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f7:fc:6f 6.1 ARP (Address Resolution Protocol) ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 ge0 hme0 ge0 hme0 ge0 75.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f7:f8:c1 74.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:31:5b 69.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:33:91 68.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:a4:89 71.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:86:99 70.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f8:ed:dd 65.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:95:46 64.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:7d:8c 44.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:98:d4 46.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:70:13 43.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:8b:ef 37.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f2:86:64 32.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:94:40 61.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:fb:00 57.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:98:bb 59.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:8f:f6 58.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:7d:92 52.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:fa:ed 51.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:fa:ec 50.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:93:af 3.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:fc:c6:70 29.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:89:22 28.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f5:34:9c 31.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f2:84:a0 25.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:9c:41 27.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:8f:fd 20.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:9a:da 16.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f0:fa:b4 18.133.168.192.in-addr.arpa 255.255.255.255 08:00:20:f5:1e:3e vino.TechFak.Uni-Bielefeld.DE 255.255.255.255 SP 08:00:20:e6:f8:f4 2.133.168.192.in-addr.arpa 255.255.255.255 SP 08:00:20:e6:f8:f4 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00 6.1.3 ARP-Format Die Struktur eines ARP-Datagramms wurde als einfaches Standardformat für den Einsatz beliebiger Netzwerktypen entworfen. ARP operiert direkt in der Datensicherungsschicht und wird daher in deren Rahmen codiert. Die ARP-Datagramme erhalten folgende Felder: Hardware: In diesem Feld werden Netzwerktypen definiert. Zuläßig sind nur folgende Typen: 1. Ethernet 2. Experimentelles Ethernet 3. Amateurfunk AX.25 4. Proteon ProNET Token-Ring 5. Chaos 49 6 Address Resolution Protocol (ARP) 6. IEEE.802 7. ARCNET 8. Hyperchannel 9. Lanstar 10. Autonet short adress 11. LocalTalk 12. LocalNet (IBM PCNet oder Syntec Inc.LocalNet) Protokoll: Hier wird angegeben, von welchem Protokoll die Operation angefordert wurde. Es werden die gleichen Werte wie im Ethernet-Typenfeld eines Rahmens verwendet. Beispiel:Dem Internet Protocol wird der Wert 0x0800 zugeschrieben. vHLEN: Hier wird die Länge der Hardware-Adresse in Oktetten angegeben Beispiel: Die IEEE-LAN-Hardware-Adresse hat den HLEN-Wert 6 PLEN: Hier wird die Länge der Vermittlungsschicht-Adresse in Oktetten dokumentiert. Beispiel:Ipv4 hat den PLEN-Wert 4 Operation: Hier stehen für das ARP zwei Operationen zur Verfügung und noch zwei weitere für das RARP. 1. Der Wert 1 wird für die ARP-Anforderung benutzt. 2. Der Wert 2 wird für die ARP-Antwort genommen. 3. Der Wert 3 wird für die RARP-Anforderung benutzt. 4. Der Wert 4 wird für die RARP-Anwort benutzt. Adressen: Hier werden die Hardware-Adressen sowie die IP-Adressen des Absenders und das gleichnamige Paar des Empfängers vermerkt. 0 7 8 15 16 HARDWARE TYPE HLEN PLEN 31 PROTOCOL TYPE OPERATION SENDER HA(octets 0-3) SENDER HA(octets 4-5) SENDER IP(octets 0-1) SENDER IP(octets 2-3) TARGET HA(octets 0-1) TARGET HA(octets 2-5) TARGET IP(octets 0-3) 50 6.2 RARP (Reverse Address Resolution Protocol) 6.2 RARP (Reverse Address Resolution Protocol) Geräte ohne eigenen Massenspeicher, die am Netz angeschlossen werden, wissen nach dem Einschalten noch nicht ihre Internetadresse. Aus diesem Grund gibt es ein umgekehrtes ARP, das Reverse Address Resolution Protocol. Das RARP ist dem ARP sehr ähnlich. Der Unterschied besteht lediglich darin, daß in diesem Fall die physikalische Adresse (Hardware-Adresse) bekannt ist und die logische Adresse (IP-Adresse) unbekannt ist. Soll ein Rechner ohne eigene IP-Adresse eine TCP/IP Verbindung herstellen, ist die Zuweisung einer IP-Adresse durch einen RARP-Server notwendig. Der Rechner sendet eine RARPAnfrage als Broadcast-Datagramm an das Netz. Diese RARP-Anfrage beinhaltet nur die eigene Hardware-Adresse Der RARP-Server wandelt die Hardware-Adresse mit Hilfe seiner Referenz-Tabelle in eine IP-Adresse um und sendet daraufhin diese Information mit einer RARP-Bestätigung zurück. Das Paket-Format von RARP ist mit dem Paket-Format von ARP identisch, nur werden im Operationsfeld die Werte 3 für Anforderung und 4 für Antwort verwendet. Die Zuverlässigkeit dieses Verfahrens kann gesteigert werden, indem man mehrere RARP-Server einsetzt. Einer wird dazu als Hauptserver (Primary RARP Server) eingerichtet, der seine Antwort sofort nach Eintreffen der Anfrage schickt. Die übrigen Server antworten entweder erst nach einer zufällig gewählten Pause oder nur dann, wenn eine RARP-Anfrage gleichen Inhalts kurz hintereinander zweimal verschickt wurde. Da das RARP für weitere Einstellungen wie zum Beispiel Subnetz-Adressen nicht geeignet ist, sind aus diesem Grund zwei weitere Protokolle entstanden, die leistungsstärker sind. Zum einen das BOOTP (Bootstrap Protocol), das mit Brücken und Routern kompatibel ist und mehr Informationen übermitteln kann. Und das zweite Protokoll ist das DHCP (Dynamic Host Configuration Protocol). 51 6 Address Resolution Protocol (ARP) 52 KAPITEL 7 Prüfsummen im Internet Protocol – Internet Checksum Jessica Butz 7.1 Prüfsummen Viele Netzwerkprotokolle bilden bei der Erstellung ihrer Datenframes eine Prüfsumme. Bei manchen Protokollen wird sie über ein ganzes Datenpaket gebildet, bei anderen nur über einen Teil davon. Das Internet Protocol (IP) bildet seine Prüfsumme nur über die Daten im Header des Datenpaketes. Die eigentlich verschickten Daten werden nicht in die Berechnung einbezogen und können daher von IP auch nicht auf Korrektheit überprüft werden. Dies übernehmen Protokolle höherer Schichten wie zum Beispiel TCP oder UDP. Bei diesen Protokollen beinhaltet die Prüfsummenberechnung auch die Nutzdaten, so daß dadurch eine fehlerfreie Transmission gewährleistet ist. Welcher Algorithmus in IP implementiert ist und wie eine Prüfsummenberechnung und -überprüfung durchgeführt wird, wird in den nachfolgenden Abschnitten erklärt. 7.2 Prüfsummen im IP (Internet Protocol) Die Berechnung der Prüfsumme im IP, oft auch als “Internet Checksum” bezeichnet, wird in den RFCs 1071, 1141 und 1624 beschrieben. Hier werden bestimmte Eigenschaften genannt, die der zur Berechnung verwendete Operator haben sollte, sowie ausgeführt, wie die Berechnung abläuft. 53 7 Prüfsummen im Internet Protocol – Internet Checksum Die im Internet Protocol implementierte Art der Prüfsummenberechnung verwendet das 1er-Komplement, eine Art der binären Addition (siehe Abschnitt 7.5). Diese Rechenoperation erfüllt alle vorgegebenen Anforderungen. Wie damit die Prüfsumme für ein Datenpaket ermittelt wird, erläutert der folgende Abschnitt. 7.3 Ermittlung und Kontrolle der Prüfsumme 7.3.1 Prüfsummenberechnung beim Sender eines Datenpaketes Wenn ein IP-Datenpaket erstellt wird, werden den eigentlich zu versendenden Daten bestimmte protokollspezifische Daten, der sogenannte Header, hinzugefügt. Dieser beinhaltet unter anderem auch ein Feld, in dem die Prüfsumme abgelegt wird. Um diese zu berechnen und einzufügen sind mehrere Schritte nötig. Zuerst setzt der Sender das Prüfsummenfeld auf 0. Dann wird der Header, der aus 5 Worten à 32 Bit besteht, in 16-Bit-Stücke zerteilt. Diese werden zusammenaddiert. Über die gesamte Summe wird nach der im Folgenden beschriebenen Methode das Komplement gebildet. Das Komplement wird in das dafür vorgesehene Feld im Header geschrieben. Dann wird das Datenpaket verschickt. 7.3.2 Kontrolle der Prüfsumme beim Empfänger eines Datenpaketes Der Empfänger des Datenpaketes bildet die Summe über den gesamten Header des Datenpaketes. Da das Prüfsummenfeld im Header das Komplement der Summe der Headerfelder beinhaltet, ist das Ergebnis der Addition bei einem gültigen Datenpaket immer 0. Ist das Ergebnis der Addition allerdings verschieden von 0, so ist ein Übertragungsfehler aufgetreten. Das Paket ist ungültig, und es wird vernichtet. IP kümmert sich nicht darum, daß das Datenpaket erneut angefordert wird, wenn es defekt war. Dies wird durch Protokolle höherer Schichten, wie z.B. TCP, übernommen. 7.4 Eigenschaften des Prüfsummen-Operators • Der Operator sollte kommutativ sein. Dadurch ist die Reihenfolge, in der addiert wird, beliebig. Die binäre Addition ist (wie die normale Addition auch) kommutativ, da 1+0 = 0+1 = 1 ist. • Ein neutrales Element muß vorhanden sein. Das neutrale Element wird vom Datensender ins Püfsummenfeld eingetragen, bevor die Summer errechnet wird. Es darf sozusagen nicht mitgezählt werden. In der 1er- 54 7.5 1er-Komplement-Addition Komplement-Addition, wie auch in der normalen Addition, ist das neutrale Element die 0. • Es muß ein inverses Element geben. Das inverse Element ist hier das Komplement einer Bitfolge; addiert man Inverses und Original-Bitfolge, so ist das Ergebnis gleich dem neutralen Element, also 0. • Der Operator sollte assoziativ sein. • Die Operation soll auf verschiedensten Maschinen schnell auszuführen sein. Diese Eigenschaft ist sehr wichtig, da das Berechnen der Prüfsumme neben dem Kopieren der Daten zu den zeitaufwendigsten Prozessen bei der Erstellung von Datenpaketen gehört. Der zur Zeit verwendete Algorithmus erfüllt diese Voraussetzung, da er lediglich Negation und Addition verwendet. Beide Berechnungen sind schnell durchführbar. • Der Operator sollte systematisch sein. Der Begriff “systematisch” bedeutet hier, daß durch das Hinzufügen der Prüfsumme zum Header die Information der Datenbytes nicht verändert wird. • Die Prüfsumme sollte inkrementell veränderbar sein. Da beim Routing bestimmte Felder im Header, so zum Beispiel der TTL-Wert (time to live) verändert werden, muß die Prüfsumme, die dieses Feld ja beinhaltet, dementsprechend angepaßt werden. Würde man sie bei jedem Routerdurchlauf komplett neu berechnen, so würde die Datenübertragung viel zu lange dauern. Daher wird sie inkrementell verändert. Wird der TTL-Wert bei einem Routerdurchlauf um 1 erniedrigt, so muß man den Wert im Prüfsummenfeld lediglich um 1 erhöhen, damit er wieder dem Komplement der Gesamtsumme entspricht. Um die Prüfsumme zu aktualisieren, addiert man also die Differenz aus dem alten und dem neuen Wert eines Header-Feldes. Daß man die Differenz addieren muß und nicht abziehen darf, wird an folgendem Beispiel mit Dezimalzahlen deutlich: Angenommen, der Wert des TTL beträgt vor dem Routerdurchlauf 6, danach also 5. Das Komplement der Prüfsumme betrage -214. Die Differenz zwischen 6 und 5 beträgt 1, also addiert man 1 zum Komplement hinzu. Im Prüfsummenfeld steht demnach jetzt -213. Wird diese Zahl rekomplementiert, so ergibt sich 213, das heißt, die Gesamtsumme der Headerfelder wurde um 1 vermindert, was der Verminderung des TTL-Wertes entspricht. 7.5 1er-Komplement-Addition Die 1er-Komplement-Addition ist eine Art des binären Rechnens. Sie wird zum Beispiel bei der binären Subtraktion verwendet, die auf eine Addition zurückgeführt wird. Vom Subtrahenden wird hierzu das Komplement gebildet und dann zum Minuenden hinzuaddiert. Dies 55 7 Prüfsummen im Internet Protocol – Internet Checksum entpricht dem Abziehen der Zahl. Entsteht bei der Addition ein Übertrag, so wird dieser zum niedrigstwertigen Bit hinzuaddiert (engl. “add with end-around carry”). Es gibt zwei Darstellungen der Zahl 0, nämlich die positive Null (+0), repräsentiert durch die Bitfolge 000...0, und die negative Null (-0), welche durch 111...1 dargestellt wird. Ansonsten gelten die üblichen Regeln für die binäre Addition, welche wie folgt lauten: A 0 0 1 1 B 0 1 0 1 A+B 0 1 1 0 Übertrag 1 Um eine Binärzahl zu komplementieren, werden die Bits invertiert, d.h. aus 1 wird 0 und umgekehrt. Dies ist einfach und schnell zu berechnen, da die Bitfolge nur durch einen Inverter geschickt werden muß. 7.5.1 Addition mit Übertrag Entsteht bei der Addition nach den oben genannten Regeln ein Übertrag, so bedeutet dies, daß das Ergebnis eine positive Zahl ist. Der Übertrag wird zum niedrigstwertigen Bit hinzuaddiert; die dann entstehende Zahl ist das Gesamtergebnis. - 12 7 = 5 1 0 1 1 0 1 0 1 → Komplement + 1 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 7.5.2 Addition ohne Übertrag Wenn bei der Addition kein Übertrag entsteht, dieser also 0 ist, so bedeutet dies, daß das Ergebnis eine negative Zahl ist. Die Bitfolge muß nun noch rekomplementiert und negiert werden, um das Endergebnis zu erhalten. 56 - 5 7 = -2 0 0 1 1 0 1 1 1 → Komplement → rekomplementieren/negieren + 0 1 1 0 1 0 1 0 0 0 0 1 1 0 1 0 7.5 1er-Komplement-Addition 7.5.3 Komplement-Addition Addiert man zu einer Zahl ihr Komplement (also das inverse Element), so beträgt das Ergebnis immer 111...1. Da es keinen Übertrag gibt, muß das Ergebnis rekomplementiert und negiert werden; es wird also zu -000...0. Genau diese Berechnung wird beim Empfänger eines Datenpaketes mit dem durch den Sender mitgeschickten Komplement und der errechneten Prüfsumme durchgeführt. - 12 12 = -0 1 1 1 1 0 0 0 0 → Komplement → rekomplementieren/negieren + 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 57 7 Prüfsummen im Internet Protocol – Internet Checksum 58 KAPITEL 8 Internet Control Message Proctocol (ICMP) René D. Obermüller, Daniel Kleinehagenbrock 8.1 Internet Control Message Protocol 8.1.1 Einleitung Das ICMP (Internet Control Message Protocol ) ist ein Hilfsprotokoll, welches zusammen mit dem Internet-Protokoll (IP ) auf der Netzwerkschicht implementiert ist. Da ICMP das IP -Protokoll als Basis verwendet, macht es den Anschein, als wäre ICMP zusammen mit TCP und UDP auf der Transportebene angesiedelt. Dem ist jedoch nicht so. ICMP muss neben dem Internet-Protokoll in TCP/IP implementiert werden. Erstmalig taucht ICMP als Standard April 1981 im RFC 777 auf. Im September 1981 gab es dann ein Update durch RFC 792, welche zusätzlich zu den bisherigen ICMP Typen noch eine Netzwerkinformationsnachricht enthält. Dieser RFC enthält alle auch heute noch gültigen Spezifikationen. Stark erweitert wurde das Protokoll dann 1991 im RFC 1256. Hier wurde ICMP um einen Aspekt erweitert, nämlich um spezielle Routernachrichten (ICMP Typ 9 und 10), die vorher nicht vorhanden waren. Der Hintergrund für die Entwicklung von ICMP ist die weitgehend fehlende Kontrolle 59 8 Internet Control Message Proctocol (ICMP) darüber, was mit via Internet-Protokoll verschickten Paketen passiert. Wie bereits aus der Veranstaltungsübersicht bekannt, können Pakete abgesehen davon, dass sie ordnungsgemäß ankommen, auch verloren gehen, dupliziert werden oder in falscher Reihenfolge am Ziel ankommen. Darüberhinaus kann es passieren, dass ihre Lebensdauer“ (Time-To-Live) ” abläuft. Wenn man sich die Verbindungsschicht (Link Layer ) ansieht, können noch weitere Fehler einer ordnungsgemäßen Kommunikation im Wege stehen. So kann es zum Beispiel vorkommen, dass ein routendes System (also ein Rechner, der zwei oder mehrere Netzwerke miteinander verbindet) ausgefallen, überlastet, oder eventuell falsch konfiguriert ist. An dieser Stelle setzt das Internet Control Message Protocol an. Mit ICMP lassen sich Fehlermeldungen und auch Routinginformationen versenden. Fehler allerdings können auch mit ICMP nicht behoben werden, im besten Falle lediglich aufgedeckt. ICMP -Fehlermeldungen können nur an den Sender des Paketes, welches die Fehlermeldung ausgelöst hat, gesendet werden, nicht jedoch zwangsläufig an das routende System, welches den Fehler verursacht hat. Sinnvoll ist es jedoch trotzdem, da im Internet-Protokoll an sich die Möglichkeit, solche Fehlermeldungen zu senden, nicht vorhanden sind. So kann immerhin ein Teil der Fehler aufgeklärt werden, wenn auch nicht alle - beispielsweise wenn der Empfänger oder Router eines fehlerhaften Paketes den Absender nicht mehr erreicht, kommt selbstverständlich auch keine Fehlermeldung an. Ursprünglich war ICMP nur für die Kommunikation zwischen routenden Systemen gedacht, das hat sich jedoch geändert: Alle Rechner im Netzwerk können ICMP -Anfragen, ICMP -Informationen und ICMP -Fehlermeldungen versenden bzw. verwerten. 8.1.2 ICMP-Prinzipien Um die Netzwerke nicht mit zu vielen ICMP -Nachrichten zu belasten, folgt ICMP gewissen Prinzipien. • ICMP -Fehlermeldungen werden höchstens einmal pro Fehler verschickt • Es gibt nie ICMP -Fehlermeldungen als Antwort auf ICMP -Fehlermeldungen, damit sich die ICMP -Nachrichten nicht aufschaukeln – ICMP -Fehlermeldungen auf ICMP Informationsmeldungen oder ICMP -Anforderungen sind allerdings möglich • ICMP -Nachrichten werden nicht versandt, wenn das Bezugspaket keinen eindeutigen Empfänger hatte – also zum Beispiel, wenn das Bezugspaket an eine Multicast- oder Broadcastadresse ging • ICMP -Fehlermeldungen werden nur als Antwort auf das erste Fragment eines Datagrams, nie auf die folgenden Fragmente versandt. 60 8.1 Internet Control Message Protocol 8.1.3 ICMP-Spezifikationen - Nachrichtenformat ICMP nutzt – wie bereits erwähnt – das Internet-Protokoll als Basis. Somit besteht ein ICMP -Paket komplett betrachtet aus einem Ethernet-Rahmen-Header, einem EthernetRahmen-Datenteil, der einen IP -Header und einen IP -Datenteil beinhaltet; in den letzteren bettet sich dann der ICMP -Header zusammen mit dem ICMP -Datenteil ein. Frame-Daten Frame-Header IP-Daten IP-Header ICMP -Header ICMP -Daten Das ICMP -Paket selbst sieht folgendermassen aus: 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme o Header Je nach Typ verschiedene Inhalte hhhh h hhhhhhhhh hhhh hhhh hhhh hhhh hhhh hhhh hhh h hhhh hhhh hh hh h hhhh h hh 61 8 Internet Control Message Proctocol (ICMP) 8.1.4 ICMP-Spezifikationen - Typen Destination Unreachable - Ziel nicht erreichbar (Typ 3) Kann aus irgendeinem Grund ein Router ein Ziel nicht erreichen, oder ein Dienst oder Port auf dem Zielrechner ist nicht erreichbar, wird diese Nachricht verwendet. Die einzelnen Möglichkeiten werden in Zusammenhang mit den Codes deutlich. 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme unbenutzt IP-Datagram-Header und die ersten 64 Bits des Originalpaketes Typ: 3 Code: 0 = net unreachable – Zielnetzwerk nicht erreichbar (z.B. fehlerhafte Routingtabellen, oder Entfernung“ laut Routingtabelle unendlich groß) ” 1 = host unreachable – Zielrechner nicht erreichbar (der Router im Zielnetzwerk kann den Zielrechner nicht erreichen) 2 = protocol unreachable – Der angegebene Dienst auf diesem Rechner kann nicht erreicht werden. 3 = port unreachable – Der Port für dieses Paket kann nicht erreicht werden (z.B. wenn der Port vom Zielrechner ignoriert oder blockiert wird) 4 = fragmentation needed and DF set – Das Paket ist für den Router zu groß, er darf es jedoch nicht in Fragmente zerlegen, da DF (Don’t Fragment – nicht fragmentieren) im IP-Datagram-Header gesetzt ist 5 = source route failed – Source Routes sind im Paket gesetzt, aber die Durchführung scheitert an Routereinstellungen Code 0,1,4 und 5 werden normalerweise von routenden Systemen versendet, 2 und 3 vom Zielrechner. Time Exceeded Message - Zeitüberschreitung (Typ 11) Jedes IP-Paket erhält eine sogenannte Lebensdauer (Time-To-Live). Diese wird pro routendem System, über das das Paket verläuft mindestens um eine Sekunde (falls die Verweil“dauer auf dem Router kleiner oder gleich einer Sekunde ist) oder um die ” 62 8.1 Internet Control Message Protocol tatsächlich auf dem Router gewartete“ Zeit verringert. Sollte es passieren, dass der Wert ” unter 0 fällt, muss das Paket vernichtet werden. Das System, welches das Paket vernichtet, schickt gleichzeitig an den Sender eine ICMP Code 11 Nachricht, um zu signalisieren, dass genau dieser Fall eingetreten ist. Aufbau des Paketes: 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme unbenutzt IP-Datagram-Header und die ersten 64 Bits des Originalpaketes Typ: 11 Code: 0 = time to live exceeded in transit – Lebenszeit des Paketes beim Transport überschritten 1 = fragment reassembly time exceeded – Die Zeit ist beim Zusammensetzen der Fragmente am Zielsystem überschritten worden Code 0 wird im Regelfall von einem routenden System gesendet, Code 1 im Regelfall vom Zielsystem. Parameter Problem Message (Typ 12) Wenn ein Router oder das Zielsystem ein IP-Datagram verwerfen muss, weil sich die Einstellungen des Datagrams nicht mit den lokalen IP-Einstellungen vereinbaren lassen, so kann das System, an dem das Datagram verworfen wird, an den Absender eine ICMP Typ 12 Nachricht senden, um dieses Problem mitzuteilen. Aufbau des Typ 12 ICMP Paketes: 63 8 Internet Control Message Proctocol (ICMP) 0 7 8 ICMP Typ 15 16 31 Prüfsumme ICMP Code Pointer unbenutzt IP-Datagram-Header und die ersten 64 Bits des Originalpaketes Typ: 12 Code: 0 – Das Feld “Pointer“ im ICMP -Header ist aktiv. Im Feld Pointer“ ist ein Zeiger enthalten, der angibt welches Byte (Oktett) des IP” Datagram-Headers zum Parameterproblem geführt hat. Kann sowohl von Routern als auch von Zielsystemen verschickt werden. Source Quench - Quelle dämpfen (Typ 4) Dieser ICMP Typ wird verwendet, um die Rate der Pakete pro Zeit je nach Auslastung des routenden Systems zu optimieren. 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme unbenutzt IP-Datagram-Header und die ersten 64 Bits des Originalpaketes Typ: 4 Code: 0 Wenn ein routendes System (z.B. aufgrund mangelnder Ausgangsbandbreite oder temporärer Überlastung) keinen Platz mehr für weitere Pakete hat, kann das System an den Absender eine sogenannte Source Quench Nachricht verschicken. Diese soll dem Sender signalisieren, dass die Rate der Pakete, die in einer gewissen Zeit verschickt werden, verringert werden soll, da Pakete bereits verworfen wurden aufgrund übergelaufenem Zwischenspeicher oder da der Speicher überzulaufen droht. Der Router wird dann für jedes Paket das verworfen wird, oder aber für jedes Paket, das eingeht, sobald der Speicher eine gewisse Auslastung erreicht hat, eine solche Nachricht an den Absender schicken. Der 64 8.1 Internet Control Message Protocol Absender kann dann die Rate verringern, so lange bis er keine Source Quench Nachricht mehr erhält. Dann kann die Rate wieder langsam angehoben werden, und gedrosselt, falls wieder Source Quench Nachrichten gesendet werden. Dies ist in gewisser Weise sinnvoll, da die Paketrate - sofern der Sender die Bandbreite besitzt - immer an der oberen Grenze gehalten werden kann. Ausserdem hilft diese Nachricht, übermässige Netzbelastung zu vermeiden, denn die Anzahl der durch Überlauf verlorenen bzw. verworfenen Pakete wird so möglichst gering gehalten. Letztendlich muss man aber sagen, dass diese Idee sich nicht durchsetzen konnte, da die Angelegenheit doch etwas komplizierter ist. Wenn das Netzwerk bzw. die Verbindung tatsächlich schon überlastet ist, dann ist es fraglich, ob es sinnvoll ist, zusätzliche Nachrichten – wie diese ICMP-Nachricht – zu verschicken. TCP bietet für diese Problematik weitaus bessere Möglichkeiten. Diese Nachricht kann von Routern wie von Zielsystemen verschickt werden. Redirect Message - Umleitung (Typ 5) Entdeckt ein routendes System eine kürzere Verbindung vom Absender zu sich selbst oder zum designierten Empfänger, so kann diese Nachricht versendet werden, damit der Sender künftig die andere, kürzere Route benutzt. Dies spielt z.B. eine Rolle, wenn Rechner Standardgateways benutzen - in dem Fall kann vielleicht ein anderer Gateway günstiger in der Topologie angeordnet sein. Aufbau: 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme Gateway Internet Address IP-Datagram-Header und die ersten 64 Bits des Originalpaketes Typ: 5 Code: 0 = Redirect datagrams for the Network – Alle Pakete für das Zielnetzwerk sollen die angegebene Routeradresse nutzen 1 = Redirect datagrams for the Host – Alle Pakete für dieses Zielsystem sollen die angegebene Routeradresse nutzen 65 8 Internet Control Message Proctocol (ICMP) 2 = Redirect datagrams for the Type of Service and Network – Alle Pakete für dieses Zielnetzwerk, die diese Anwendung verwenden, sollen die angegebene Routeradresse nutzen 3 = Redirect datagrams for the Type of Service and Host – Alle Pakete für dieses Zielsystem, die diese Anwendung verwenden, sollen die angegebene Routeradresse nutzen Gateway Internet Address: Dieses Feld liefert die neue Gatewayadresse, über die die Pakete, die im Code eingegrenzt sind, laufen sollen Diese Nachricht wird nur von routenden Systemen verschickt. Echo Request / Echo Reply (Typ 0 und Typ 8) Dieses Nachrichtenpaar ist dazu da, um die Geschwindigkeit, Zuverlässigkeit und das Bestehen einer Verbindung zu prüfen. Das System, welches eine Verbindung prüfen möchte, sendet eine bestimmte Datensequenz, und wartet darauf, ob diese Sequenz wieder zurückkommt. Falls das passiert, lässt sich die Verzögerung messen mittels der Zeit, bis das Paket wieder zurückkommt sowie die Zuverlässigkeit zum einen durch Prüfen, ob das Antwortpaket die gleiche Datensequenz enthält wie das Anfragepaket, zum anderen durch die Anzahl der verschickten Pakete, die dann auch wirklich zurückkommen. Aufbau: 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme Sequence Number Identifier Data hhhh h hhhhhhhhh h hhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh h hhhh h hh Typ: 0 für Echo Reply (Antwort) 8 für Echo Request (Anfrage) 66 8.1 Internet Control Message Protocol Code: 0 Identifier und Sequence Number sind für die Identifizierung des jeweiligen Paketes gedacht, da meist mehrere Pakete auf einmal versendet werden. Diese beiden Nachrichten werden sowohl von routenden Systemen als auch von Hosts verwendet. Timestamp Request / Timestamp Reply (Typ 13 und 14) Typ 13 und 14 können verwendet werden, um Zeiten zu vergleichen (und evtl. Uhren zu stellen.). Aufbau: 0 7 8 ICMP Typ 15 16 31 Prüfsumme ICMP Code Identifier Sequence Number Originate Timestamp Recieve Timestamp Transmit Timestamp Typ: 13 für Timestamp Request 14 für Timestamp Reply Code: 0 Identifier und Sequence Number sind für die Identifizierung des jeweiligen Paketes gedacht, da meist mehrere dieser Pakete versendet werden, um einen Abweichungsdurchschnitt zu ermitteln. Der Absender der Timestamp Anfrage trägt im Feld Originate Timestamp“ den ” 67 8 Internet Control Message Proctocol (ICMP) Zeitpunkt der Absendung ein. Das Zielsystem trägt dann, bevor das Paket als Typ 14 wieder zurückgeschickt wird, im Feld Recieve Timestamp“ den Empfangszeitpunkt ein, ” und im Feld Transmit Timestamp“ den Zeitpunkt, an dem das Paket wieder zurückgesen” det wird. Die Darstellung des Timestamps sind Sekunden seit Mitternacht nach Universal Time (London). Diese beiden Typen können von routenden Systemen wie von Hosts verwendet werden. Information Request / Reply (Typ 15 und 16) Diese Nachricht kann verwendet werden, um die Adresse des eigenen Netzwerkes herauszufinden. Aufbau: 0 7 8 ICMP Typ 15 16 ICMP Code Identifier 31 Prüfsumme Sequence Number Typ: 13 für Information Request 14 für Information Reply Code: 0 Das sendende System sendet diese Nachricht mit der eigenen Adresse an die Zieladresse 0.0.0.0, was so viel bedeutet wie: eigenes Netzwerk. Ein antwortendes System setzt dann in der Antwort die Adresse des Anfragesenders in das Zielfeld und seine eigene Adresse in das Absenderfeld. Somit kann der Anfragesender bei Erhalten des Antwortspaketes die richtige Netzwerk-id erhalten. Verwendet von Routern wie Hosts. 68 8.1 Internet Control Message Protocol Routernachrichten - Router Discovery Messages (Typ 9 und 10) Dieser ICMP -Typ ist dafür gedacht, um den Datenverkehr zu automatisieren. Wie man sich sicherlich vorstellen kann, ist das manuelle Administrieren von Routinglisten mit Eintragen von Gateways auf allen Rechnern in großen Netzwerken recht aufwändig. Mittels der Router Advertisement Message verkünden“ die Routenden Systeme von Zeit zu Zeit ihre ” eigenen zum jeweiligen Netzwerk-Interface gehörenden Adressen in das Netzwerk, damit die Rechner, ohne dass ein manueller Eingriff nötig wird, die Gateway-Adressen verwenden können. Die Router Discovery Messages werden in der RFC 1256 erwähnt. Eine Router Advertisement Message sieht folgendermassen aus: 0 7 8 15 16 31 ICMP Typ ICMP Code Prüfsumme Num Addrs A. Entry Size Lifetime Router Address 1 Preference Level 1 .. . Router Address N Preference Level N Typ: 9 Code: 0 Num Addrs: Anzahl der mitgelieferten Adressen Lifetime: Gültigkeitsdauer Addr Entry Size: Anzahl der 32-Bit-Wörter, die für jeweils eine Adressinformation dienen Router Address x ist die x-te mitgelieferte Routeradresse und das zugehörige Preference Level x beschreibt seinen Rang, oder seine Wertigkeit. Systeme die diese Nachricht erhalten, verwenden den Router mit dem höchsten Rang als erstes, ist dieser nicht erreichbar, wird der Router mit der zweithöchsten Wertigkeit verwendet. Wenn man einen Rechner mit dem Netzwerk verbindet, sind diesem Rechner möglicherweise keine Router bekannt. Zu diesem Zweck kann dieser Rechner eine Router Advertisement Message anfordern, indem der Rechner eine Router Solicitation Message abschickt. Die Router Solicitation Message hat folgenden Aufbau: 0 7 8 ICMP Typ 15 16 ICMP Code 31 Prüfsumme Reserved 69 8 Internet Control Message Proctocol (ICMP) Typ: 10 Code: 0 Reserved: enthält den Wert 0 - dieses Feld wird bei Empfang des Paketes ignoriert. Diese beiden ICMP Typen sind übrigens Beispiele für sogenannte Multicast Messages, Nachrichten, die an das gesamte Netzwerk gesendet werden. Für das Versenden von Router Advertisement Messages gibt es auf routen Systemen Einstellungen, die vorhanden sein müssen. Im einzelnen sind das: • Einstellungen pro Netzwerkinterface: – AdvertisementAddress – Zieladresse für Advertisements. Entweder Multicast an alle Systeme im Netzwerk, oder eine (begrenzte) Broadcast-Adresse. – MaxAdvertisementInterval – Die maximal erlaubte Zeit zwischen zwei MulticastAdvertisements an diesem Netzwerkinterface. Der Wert muss zwischen 4 und 1800 Sekunden liegen, Standardeinstellung: 600 Sekunden. – MinAdvertisementInterval – Die minimal erforderliche Zeit zwischen zwei Multicast-Advertisements an diesem Netzwerkinterface. Der Wert muss zwischen 3 und MaxAdvertisementInterval liegen, Standardeinstellung: 0.75 * MaxAdvertisementInterval – Advertisementlifetime – Enthält die Lebensdauer, die im IP-Header bei Advertisement eingetragen wird. Darf nicht unter MaxAdvertisementInterval und nicht über 9000 Sekunden liegen. Standardwert ist 3 * MaxAdvertisementInterval • Einstellungen für jede IP -Adresse: – Advertise – Legt fest, ob die jeweilige Adresse in der Advertisement Message angekündigt wird. Standard: TRUE – PreferenceLevel – Legt die Wertigkeit dieser Adresse als Standardrouteradresse fest wie in der Advertisement Nachricht verwendet. Ein 32-Bit-Wert wird dazu gebildet in Relation zur Wertigkeit anderer Router. 70 8.1 Internet Control Message Protocol 8.1.5 Typenbetrachtung rdo@Corvus:~$ netstat --statistics [...] Icmp: 31 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 29 echo requests: 2 6 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 4 echo replies: 2 [...] rdo@Corvus:~$ ping 141.1.1.1 [...] rdo@Corvus:~$ netstat --statistics Icmp: 35 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 30 echo requests: 2 echo replies: 3 6 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 4 echo replies: 2 Es handelt sich hierbei um zwei ICMP-Statistiken, einmal vor und einmal nach einem ping-Befehl. Der Rechner ist ein Router nach etwa 3 Stunden Betrieb. Wie man deutlich sehen kann, spielt in erster Linie der ICMP-Typ 3, destination unreachable, eine Rolle. Die anderen Typen tauchen praktisch gar nicht auf. 8.1.6 Zusammenfassung Es lässt sich abschliessend nach Betrachtung der Spezifikationen sagen, dass ICMP ein Mechanismus ist, der unter Umständen zur Fehlerermittlung beitragen kann, aber auch informativen Zwecken dienlich ist. 71 8 Internet Control Message Proctocol (ICMP) 8.2 ICMP auf Anwendungsebene: ping Das Programm ping bedient sich des ICMP -Protokolls auf Anwendungsebene. Dazu werden ICMP Messages Typ 8 und Typ 0 verwendet. Mit Typ 8 (Echo Request) können Anfragen gestellt werden, und mit der Ankunft von Typ 0 Nachrichten (Echo Replies) kann ping Auswertungen vornehmen. ping gibt es für jedes System, auf dem es auch eine Portierung von TCP/IP gibt. ping wird in erster Linie verwendet, um zu prüfen, ob eine Netzwerkverbindung überhaupt besteht, bzw. ob ein bestimmter oder beliebiger Zielrechner erreicht werden kann. Früher galt die Aussage, dass wenn ein Rechner nicht angepingt werden kann, auch anderer TCP/IP-Netzwerkverkehr zu dem Rechner nicht möglich ist. Dies hat ein wenig an Gültigkeit verloren, da es heutzutage nicht ganz unüblich ist, ICMP-Datagramme, die nicht mit einer bestehenden Verbindung korrespondieren, aus Sicherheitsgründen zu ignorieren. So kann es also sehr wohl sein, dass das anpingen“ eines Rechners nicht möglich ” ist, aber z.B. durchaus der Webserver auf dem Rechner erreicht werden kann. Desweiteren liefert ping Informationen darüber, wie lange es gedauert hat, bis die Antwort eingegangen ist. Diese Zeit nennt man beispielsweise Ping Reply Time, Lag oder Verzögerung. Es folgen einige typische ping-Ausgaben. 72 8.2 ICMP auf Anwendungsebene: ping robermue@vino /usr/sbin/ping -s -R -v barbaresco.TechFak.Uni-Bielefeld.DE 56 5 64 bytes from barbaresco.TechFak.Uni-Bielefeld.DE (129.70.133.60): icmp_seq=0. time=0. ms IP options: <record route> barbaresco.TechFak.Uni-Bielefeld.DE (129.70.133.60), vino.TechFak.Uni-Bielefeld.DE (129.70.133.112), (End of record) robermue@vino /usr/sbin/ping -s -R -v www.Uni-Bielefeld.DE 56 7 64 bytes from pan1.hrz.uni-bielefeld.de (129.70.4.66): icmp_seq=7. time=1. ms IP options: <record route> V01Router.TechFak.Uni-Bielefeld.DE (129.70.188.18), v01-cat6500-1-msfc.hrz.uni-bielefeld.de (129.70.188.34), v0-cat6500-1-msfc.hrz.uni-bielefeld.de (129.70.4.251), pan1.hrz.uni-bielefeld.de (129.70.4.66), v0-cat6500-1-msfc.hrz.uni-bielefeld.de (129.70.188.33), v01-cat6500-1-msfc.hrz.uni-bielefeld.de (129.70.188.17), V01Router.TechFak.Uni-Bielefeld.DE (129.70.133.1), vino.TechFak.Uni-Bielefeld.DE (129.70.133.112), (End of record) rdo@Colossus:~$ ping www.linux.org PING www.linux.org (198.182.196.56): 56 data bytes 64 bytes from 198.182.196.56: icmp_seq=0 ttl=234 time=233.0 64 bytes from 198.182.196.56: icmp_seq=1 ttl=234 time=334.0 64 bytes from 198.182.196.56: icmp_seq=2 ttl=234 time=265.6 64 bytes from 198.182.196.56: icmp_seq=3 ttl=234 time=244.5 64 bytes from 198.182.196.56: icmp_seq=4 ttl=234 time=221.0 ms ms ms ms ms --- www.linux.org ping statistics --5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 221.0/259.6/334.0 ms PING wird ausgefuehrt fuer www.techfak.uni-bielefeld.de [129.70.136.200] mit 32 Bytes Daten: Antwort von 129.70.136.200: Bytes=32 Zeit=102ms TTL=245 Zeitueberschreitung der Anforderung. Antwort von 129.70.136.200: Bytes=32 Zeit=98ms TTL=245 Antwort von 129.70.136.200: Bytes=32 Zeit=99ms TTL=245 Ping-Statistik fuer 129.70.136.200: Pakete: Gesendet = 4, Empfangen = 3, Verloren = 1 (25% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 98ms, Maximum = 102ms, Mittelwert = 74ms 73 8 Internet Control Message Proctocol (ICMP) Sehr interessant ist der letzte ping, vollzogen mit ping aus einer Microsoft-Implementierung. Man beachte den Mittelwert im Verhältnis zum Minimum und Maximum. 74 8.3 ICMP-Schwachstellen 8.3 ICMP-Schwachstellen 8.3.1 Denial of Service Da ICMP -Nachrichten einen erheblichen Einfluss haben auf die Art und weise, ob und wie zwischen verschiedenen Rechnern kommuniziert wird, erscheint es logisch, dass man damit auch eine Menge Schaden anrichten kann. Einige TCP/IP -Implementierungen nutzen ICMP nicht ganz aus. Fehlermeldungen beinhalten zwar laut RFC -Spezifikation den IP-Header sowie die ersten 64 Bit des Paketes, welches den Fehler ausgelöst hat, jedoch wird diese Zusatzinformation bei einigen Implementationen nicht beachtet. So kann im Grunde jeder, der von einem Rechner eine Verbindung kennt, mittels einer Fehlermeldung die Verbindung unterbrechen. Eine lange Tradition“ hat diese Methode im IRC, um Leute einfach aus dem Chat ” zu entfernen. Die Leichtigkeit in diesem Fall besteht darin, dass man per IRC whois nachschauen kann, welchen Server der IRC Client verwendet, und welche Adresse der Chatter verwendet. Man kann dann einfach, entweder mit gefälschter IP des Clients eine Fehlermeldung an den Server - was aber geringere Aussichten hat, da die meisten IRC-Server auf Unix-kompatiblen Systemen laufen und somit die besseren TCP/IPImplementierungen haben -, oder mit gefälschter IP des Servers eine Fehlermeldung an den Client senden. Dabei braucht man lediglich den Verbindungsport des Clients zu raten - im Regelfall liegt dieser zwischen 1024 und 4000, und der des Servers ist im Regelfall bekannt. 8.3.2 Ping of Death Diese Schwachstelle nutzt einen Fehler in manchen Versionen des Internet-Protokolls. Es werden ICMP -Pakete verschickt, die eine Übergröße besitzen. Manche Rechner werden dann beim Wiederzusammensetzen der Pakete abstürzen. Das Problem beim Zusammensetzen übergroßer Pakete betrifft allerdings TCP/IP generell. Ähnlich wie beim ferngesteuerten Auflegen des Modems – eine recht beliebte Angriffsmethode, auf die aber nicht weiter eingegangen wird, weil sie mit ICMP an sich nicht viel zu tun hat – wird ICMP bzw. ping auf der Anwendungsebene eingesetzt, weil es einfacher ist, als würde man ein neues Programm zu diesem Zweck schreiben. 8.3.3 Redirect - Umleiten von Daten Diese Methode bedient sich der ICMP Redirect Message, mit der dem Sender signalisiert wird, eine andere Route zu verwenden. Somit kann man unter bestimmten Gegebenheiten den Netzwerkverkehr eines Systems auf das eigene System umleiten. Glücklicherweise 75 8 Internet Control Message Proctocol (ICMP) funktioniert dies aber nur, wenn Angreifer und Angegriffener sich im gleichen Netzwerk befinden. Dieser Angriff wird häufig kombiniert mit gefälschten Ethernet-Hardware-Adressen, was auch wiederum nur lokal funktioniert. 8.3.4 Abhilfe Da alle drei hier erwähnten Schwachstellen darauf beruhen, dass die TCP/IP Implementationen Fehler beeinhalten, nämlich dass • in manchen Implementationen das ICMP Paket nicht vollständig ausgewertet wird, • übergroße Pakete nicht als solche erkannt werden, bietet eigentlich nur eine sichere TCP/IP -Implementation Abhilfe. 76 KAPITEL 9 IP Routing Jan-Gerrit Drexhage, Garvin Gripp 9.1 IP-Routing Wo immer 2 oder mehr logische Netze miteinander kommunizieren müssen kommt IPRouting ins Spiel. IP-Routing ist ein Mechanismus der auf Layer 3 des OSI-Schichtenmodells arbeitet. Ohne Routing wäre das Internet in seiner heutigen Form nicht vorstellbar, schliesslich ist die Dezentralität ein vielzitiertes Merkmal des Internets. Dies wird nur durch die dynamische Konfiguration der Internet-Router möglich. Ein Router ist ein Gerät mit mindestens 2 Interfaces. Interfaces können sowohl physikalisch als auch logisch sein, physikalische Interfaces sind z.B. Ethernet-Karten, ISDN-Karten, ein IPSec-Tunnel ist hingegen ein logisches Interface, da der IPSec-Datenverkehr letztendlich wieder über die Netzwerkkarte geht. Um entscheiden zu können an welche Interfaces der eingehende Datenverkehr weitergeleitet werden soll verwaltet jeder Router eine Routingtabelle, in der verschiedene Routen bereitgehalten werden. Anhand der Zieladresse in den IP-Headern der Datenpackete werden diese an das entsprechende Interface geleitet. 9.1.1 Statisches Routing Für kleine Netzwerke, die unter einer zentralen Administration stehen bietet sich die grundlegendste Form von Routing an, das statische Routing. Hierbei werden Routen jeweils 77 9 IP Routing Internet 192.168.6.2 192.168.5.1 192.168.6.1 eth0 eth1 212.15.194.33 ippp0 eth0 eth1 Router1 192.168.7.1 Router2 192.168.7.0/24 192.168.5.0/24 Abbildung 9.1: Beispielnetz manuell festgelegt. Sollte es zu Umstrukturierungen im Netzwerk kommen, muss für die betroffenen Segmente ein neues Routing implementiert werden. Im Gegensatz zum dynamischen Routing wird auf einen Ausfall einer Leitung oder eines Routers nicht reagiert, in einem solchen Fall ist der Zielrechner oder das Zielnetz dann nicht erreichbar. Bedeutung von statischen Routen In Abbildung 9.1 ist ein Netzwerk schematisiert, welches sich aufgrund der geringen Grösse nicht für den Einsatz eines dynamischen Routings eignet. Es sind 2 Rechnerpools und 2 Router im Einsatz, wobei “Router2” eine ISDN-Einwahl ins Internet hat. Auch wenn man Workstations mit nur einer Netzwerkkarte normalerweise nicht als Router bezeichnet, wird auch hier eine Art Routing betrieben. Jeder Rechner muss entscheiden, ob ein Packet was über die Netzwerkkarte hereinkommt für ihn bestimmt ist. Das gleiche passiert mit ausgehenden Paketen, wenn diese nicht für den Rechner selber bestimmt sind werden sie anhand einer “Default Route” an einen Gateway-Rechner weitergeleitet, in diesem Fall ist das “Router1”. Die Routingtabelle eines Client-Rechners könnte so aussehen: Destination 192.168.5.0 0.0.0.0 78 Gateway 0.0.0.0 192.168.5.1 Genmask 255.255.255.0 0.0.0.0 Flags Metric Ref U 0 0 UG 0 0 Use Iface 0 eth0 0 eth0 9.1 IP-Routing Die erste Route bezeichnet das lokale Pool-Netz. Ein Paket was für einen Rechner aus dem Netz 192.168.5.0/255.255.255.0 bestimmt ist wird direkt an das Interface eth0 weitergeleitet, also an die erste und einzige Netzwerkkarte. Die zweite Route ist eine “Default Route”, existiert keine andere spezifischere Route für ein gegebenen IP-Packet wird das Packet an das Gateway “192.168.5.1” weitergeleitet. In diesem Fall bedeutet das dass alles, was nicht an einen benachbarten Poolrechner adressiert ist an das Gateway weitergeleitet wird. Interessant ist noch das Feld “Flags”. Die wichtigsten 3 sind folgende: • U Die Route ist aktiv (Up) • H Das Ziel ist ein Host und kein Netzwerk . • G Das Ziel ist über einen Gateway zu erreichen und ist nicht direkt Angebunden. Die Routingtabelle von Router1 besteht nur aus einer Route mehr: router1:/home/juser$ route -n Kernel IP routing table Destination Gateway Genmask 192.168.5.0 0.0.0.0 255.255.255.0 192.168.6.0 0.0.0.0 255.255.255.0 0.0.0.0 192.168.6.2 0.0.0.0 Flags U U UG Metric 0 0 0 Ref 0 0 0 Use 0 0 0 Iface eth0 eth1 eth1 Die erste Route ist die Netzroute ins linke Poolnetz und zeigt wieder auf die erste Netzwerkkarte. Die zweite Route beschreibt das Netz zwischen “Router1” und “Router2”. Die dritte Route ist wieder eine Defaultroute, diesmal zu “Router2” Schliesslich noch die Routingtabelle auf “Router2”: router2:/home/juser$ route -n Kernel IP routing table Destination Gateway Genmask 192.168.5.0 192.168.6.1 255.255.255.0 192.168.6.0 0.0.0.0 255.255.255.0 192.168.7.0 0.0.0.0 255.255.255.0 0.0.0.0 0.0.0.0 0.0.0.0 Flags UG U U U Metric 0 0 0 0 Ref 0 0 0 0 Use 0 0 0 0 Iface eth0 eth0 eth1 ippp0 Hier beschreibt die erste Route eine Gateway-Route zu dem linken Poolnetz, die zweite ist für das Transfernetz zwischen den Routern zuständig. Die dritte Route zeigt auf das rechte Poolnetz, während die vierte Route eine Defaultroute für das ISDN Interface ist. Jeglicher Traffic der nicht an eins der drei lokalen Netze gerichtet ist wird als “extern” betrachtet und wird über die ISDN-Leitung nach draussen geroutet. 79 9 IP Routing IP-Packet Ja Packet entgegennehmen Router ist das Ziel? Nein Ja Packet auf das Interface leiten Connected Route? Nein Ja Sonstige Route? An Gateway schicken Nein Ja Defaultroute? An Defaultgateway schicken Nein Packet verwerfen Abbildung 9.2: Funktionsdiagramm eines Routers Funktionsweise eines Routers Die Arbeitsweise eines Routers ist in Abbildung 9.2 skizziert. Diese Funktionsweise trifft grundlegend für jeden Rechner zu, jedes TCP/IP-fähiges Betriebssystem sieht die Konfiguration eines Lokalen Netzwerks und eines Default-Gateways vor, was in den oben beschriebenen zwei Routen für einen Poolrechner resultiert. Normalerweise bezeichnet man jedoch Clients nicht als Router, erst wenn ein Rechner tatsächlich als Gateway fungiert ist hiervon die Rede. Je nach Anwendungsgebiet gibt es Router in den unterschiedlichsten Grössen, Ausstattungen und Preislagen. Mit einer zweiten Netzwerkkarte, einem Modem oder einer ISDN-Karte kann jeder PC als Router eingesetzt werden, man spricht hier meistens von Software-Routern, da die Hardware nicht speziell für die Routertätigkeit entwickelt wurde. Hardware-Router sind in ihren kleinsten Ausführungen kaum grösser als ihre zugehörigen Handbücher und sind nur für ein eng begrenztes Aufgabengebiet geeignet, z.B. als ISDN-Router. In den grossen Versionen stehen manche Router den aktuellen PCs weder in Prozessortakt noch in der Grösse des RAM-Speichers nach. Solche Geräte bringen neben hochspezialisierter Hardware auch eine umfangreiche Software mit, die den Einsatz als Backbone-Router noch um viele weitere Funktionen ergänzen. 80 9.1 IP-Routing 9.1.2 Traceroute traceroute ist ein Programm, welches benutzt wird um Probleme beim Routen festzustellen, die zwischen Quelle und Ziel auftreten. traceroute dient als eine Art Ersatz für das “record-route” Flag im TCP-Header, da “record-route” vorraussetzt, das es vom Router unterstützt wird. Das “record-route” Flag benutzt den TCP-Header um die IPs, durch die das Packet geroutet wird, aufzuzeichnen. Da ein TCP-Header aber nur eine festgelegte maximale Größe hat, kann record-route maximal 8 IPs aufzeichnen. Für damalige Verhältnisse war dies ausreichend. Im rasant wachsendem Internet heutzutage sind 8 Hops, die maximal “record-routed” werden können, nicht ausreichend um an das gewünschte Ziel zu kommen. traceroute hingegen funktioniert anders, und basiert auf den Protokollen ICMP und UDP. traceroute ist weitaus flexibler als das Flag “record-route”, da traceroute erst bei mehr als 255 Hops die Grenze erreicht. Gleichzeitig ist die Grenze von traceroute die Grenze der Internetprotokolle, die es heutzutage gibt (IPv6 eingeschlossen). Da das heutige Internet engmaschig geroutet wird, ist ein Hopcount von über 255 sehr unwahrscheinlich. Prinzip traceroute benutzt das TTL-Field (time to live) des UDP-Protokolls um die Route “sichtbar” zu machen. traceroute schickt UDP-Packets die mit einer TTL von 1 beginnen und mit einer zufällig gewählten ungewöhnlich hohen Portadresse beginnt, die mit jedem Packet inkrementiert wird, bei jedem dritten Packet wird dann das TTL-field inkrementiert, da für jeden Hop drei Probes gemacht werden. Damit wird erreicht, das jeder Router eine ICMP Message “Time exceeded.” für das jeweilige Packet an den Sender zurückschickt. Diese fängt traceroute wieder auf und stellt sie dar mit Routernamen und latency-Zeiten der drei Packets pro Router. Dies wird solange fortgeführt bis das Ziel erreicht wird. Das letzte Stück der Route (zwischen letzten Router und Zielrechner) kann man nicht mit dem ICMP-Error “Time exceeded” visualisieren, da ja die Packets nun das Ziel erreicht haben. Hier werden die hohen Portadressen ausgenutzt um die ICMP-Errormessage “Port unreachable” zu provozieren, welcher dann durch traceroute wieder ausgegeben wird wie bei den anderen Routern in Form von Rechnername und latency-Zeiten. Damit wäre dann der Arbeitsablauf von traceroute abgeschlossen. Funktionsweise im Detail Ein Beispielnetz sei mit Abbildung 9.1 gegeben. Der Quellrechner sei der Rechner mit der IP 192.168.5.0/24, und der Zielrechner hat die IP 192.168.7.0/24. Der Benutzer am Quellrechner führt traceroute aus und gibt die IP des Zielrechners als Parameter an. traceroute schickt drei UDP-Packets mit hoher Portnummer und einer TTL von 1 los und wartet bis die erwarteten ICMP Errormessages von router1 wieder ankommen. Die Portnummer wird pro gesendetes Packet inkrementiert um den Ablauf unstörbar durch gleichzeitiges Ausführen von traceroute zu machen. Dies läßt sich nur mit Hilfe von tcpdump visualisieren und wird durch traceroute nicht dargestellt. Die ICMP Errormessages werden dann 81 9 IP Routing wie im Beispiel ausgegeben. Danach werden wieder drei Packets geschickt, diesmal mit inkrementierter TTL, also mit einer TTL von 2. Nun wartet traceroute wieder maximal 15 Sekunden (das ist die Timeoutzeit von 5 Sekunden * 3 Packets) auf die ICMP Errormessages von router2. Diese werden dann wieder wie im Beispiel von traceroute dargestellt. Nun schickt traceroute wieder 3 Packets, welche ihr Ziel erreichen. Nun bekommt traceroute anstelle vom ICMP-Errormessage “Time exceeded” die ICMP-Errormessage “Port unreachable”, da das Programm während des ganzen Verlaufs mit einer sehr hohen Portadresse anfängt Packets zu versenden und diese mit jedem gesendetem Packet inkrementiert. Und damit hat traceroute seine Ausführung beendet. Die folgende Ausgabe eines traceroute Aufrufes zeigt den Weg den der Traffic zwischen zwei Punkten zurücklegt, die physikalisch nur durch wenige hundert Meter Luftlinie getrennt werden. Wie man sieht werden hier bereits mehr als 10 Hops benötigt, also mehr als man mit dem “record-route” Flag aufzeichnen könnte. Auf der anderen Seite benötigt man zu weit entfernten Rechnern z.B. in Australien selten mehr als 20-25 Hops, auf den interkontinentalen Leitungen liegen mehrere tausend Kilometer zwischen zwei Routern. stoffel@voyager:~$ /usr/sbin/traceroute www.devcon.net traceroute to www.devcon.net (212.15.193.33), 30 hops max, 38 byte packets 1 enterprise (192.168.42.1) 0 ms 0 ms 3 ms 2 access4.bitel.net (212.100.40.37) 20 ms 19 ms 19 ms 3 eth1.router1.bitel.net (212.100.40.46) 24 ms 25 ms 24 ms 4 bb-gw.bicos.net (212.100.32.85) 20 ms 20 ms 20 ms 5 Bielefeld.de.alter.net (139.4.31.49) 21 ms 21 ms 21 ms 6 POS8-0-0.gw1.Bielefeld2.de.alter.net (149.227.30.165) 64 ms 55 ms 89 ms 7 BiCIX.Bielefeld2.de.alter.net (139.4.244.186) 22 ms 21 ms 26 ms 8 fxp0.aragon.bi-cix.de (193.41.212.253) 21 ms 22 ms 21 ms 9 devconsult.bi-cix.de (193.41.212.27) 22 ms 21 ms 21 ms 10 sec-01.bi.devcon.net (212.15.192.30) 25 ms 22 ms 22 ms 11 vhost.devcon.net (212.15.193.33) 24 ms 23 ms 23 ms Schwächen von traceroute Neben den Stärken und Nutzen von traceroute gibt es auch einige Nachteile. Die wiedergegebene Route ist nicht verbindlich, da während des traceroute-Vorgangs Veränderungen der Routen vorkommen können. Somit können zum Beispiel die latency-Zeiten verfälscht werden, wenn die ICMP-Errormessages einen anderen Weg zurück nehmen als die UDPPackets hin. Es kann auch vorkommen, das man eine “flappende” Route hat, die ihren Weg ständig schnell ändert. Dies führt dazu das die gesendeten Packets voneinander getrennt werden und dadurch traceroute eine Route darstellt die in Wirklichkeit gar nicht existieren kann, wenn zum Beispiel zwei von traceroute benachbart dargestellte Router physikalisch gar nicht miteinander verbunden sind. Es gibt noch zwei weitere Modi von Routern, die die effektive Benutzung von traceroute erschweren. Ein Modus ist das nicht-dekrementieren von 82 9.1 IP-Routing IP-Packets. Demzufolge wird auch keine TTL-Überprüfung vorgenommen, und somit auch keine ICMP-Messages erstellt, die traceroute zum Darstellen der Route benötigt. (“Stealth”Mode) Auch sind implementierte Packetfilter, die ICMP-Packets filtern, ein Problem für traceroute, da traceroute anhand der ICMP-Packets die Route darstellt. 9.1.3 Dynamisches Routing Wie bereits erwähnt eignet sich das manuelle eintragen von Routen für kleine Netzwerke, wenn alle beteiligten Netze unter einer Administration stehen. Doch bereits wenn das eigene Firmennetz eine bestimmte Grösse erreicht und spätestens wenn man als Internet Provider auftreten will ist der Einsatz von dynamischen Routing Protokollen unabdingbar. Das Prinzip das dahinter steht ist immer das gleiche, auf dem betreffenden Router läuft ein Programm was mittels eines Routing Protokolls mit anderen Routern kommuniziert und bei bedarf Einträge in der Routingtabelle einträgt, ändert oder entfernt. Es wird zwischen verschiedenen Routing Protokollen unterschieden. • Interior Gateway Protocols (IGP) sind für den Einsatz unterhalb einer einheitlichen Routing Policy gedacht, also z.B. für den Einsatz innerhalb eines Firmennetzes. • Exterior Gateway Protocols (EGP)sind für die Kommunikation zwischen Routern verschiedener Systeme gedacht. Im Zusammenhang mit BGP spricht man hier auch von “Autonomen Systemen”, kurz “AS”. • Distance Vector Protocols bezeichnen Protokolle, bei denen durch regelmässig stattfindende “Announcements” jeder beteiligte Router seinem jeweiligen Nachbarn mitteilt, welche Netze er erreichen kann. Announct ein Router eine Route, die er von einem anderen bereits gelernt hat, vermerkt er dies durch die Erhöhung eines Hopcounters. So kann jeder Router für jedes Ziel errechnen, welche Route günstiger ist. Distance Vector Protocols zeichnen sich durch eine niedrige Ressourcenbelastung der Router aus, dafür dauert es etwas länger bis der Ausfall einer Leitung bei allen Routern zu einer entsprechenden Anpassung der Routingtabellen führt. • Link State Protocols propagieren nicht die Netze, die sie erreichen könne, sondern die Verbindungen (Links). Jeder Router errechnet dann für sich wie das Netz aussieht und wie der optimale Weg für ein gegebenes Packet lautet. Ändert ein Link seinen Status (z.B. von “Up” nach “Down”) wird diese Information sofort an alle beteiligten Router verteilt und alle berrechnen eine neue Map ihrer Umgebung. Die Resourcenbelastung ist bei Link State Protokollen deutlich höher, da der Router für jede Leitungsänderung wieder neue optimale Routen errechnen muss. Dafür sorgt das “flooding” von LinkÄnderungen zu einer schnellen Reaktion aller Router auf den Ausfall, so dass das gesamte Netzwerk besser vo Ausfällen geschützt ist. OSPF (Open shortest path first) und BGP (Border Gateway Protocol) haben sich als die wichtigsten Routingprotokolle herausgestellt. OSPF ist ein Interior Gateway Protocol was nach dem “Link State” Prinzip arbeitet, BGP in der aktuellen Version 4 ist der de 83 9 IP Routing facto Standard für das Routing zwischen Internet-Providern weltweit. BGP ist ein Distance Vector Protokoll, bei ca. 30.000 Routen momentan ist die Resourcenbelastung für die Router schon so gross genug, ein Link State Protocol wäre hier sicherlich fehl am Platz. 84 KAPITEL 10 User Datagram Protocol (UDP) Matthias Donner Das UDP-Protokoll wird, genauso wie TCP, in die Transport-Schicht des Schichtenmodells eingeordnet. UDP ist die Abkürzung für User Datagram Protocol“ und wie man aus ” Datagram bereits schließen kann, handelt es sich um ein paketorientiertes Protokoll. 10.1 Ein kurzer Überblick UDP ist im RFC 768 vom August 1980 spezifiziert. Es ist ein sogenanntes verbindungsloses Protokoll. Dies bedeutet, dass kein expliziter Verbindungskanal zwischen Sender und Empfänger aufgebaut wird. Es hat den Nachteil, dass abgeschickte Datenpakete verloren gehen, dupliziert werden oder in einer anderen Reihenfolge beim Empfänger ankommen, als sie vom Sender abgeschickt wurden. Um all diese Probleme“ muss sich die auf UDP aufbau” ende Applikation kümmern. Auf der anderen Seite ist UDP ein recht schlankes Protokoll, dass über einen geringen Protokoll-Overhead verfügt und somit auch wenig Verwaltungsaufwand fordert. Bei ankommenden Paketen kann die Integrität durch eine Prüfsumme gewährleistet werde. UDP wird zum Beispiel für Broadcast Dienste verwendet, bei denen Nachrichten von einem Rechner aus an mehrere Empfänger verteilt werden. Zudem wird es auch für gewisse Echtzeitanwendungen, wie die Übertragung vom Sprache oder Video genutzt. Hierbei wird die Priorität auf einen hohen Datendurchsatz gelegt und der mögliche Verlust von Daten in Kauf genommen. UDP wird auch von DNS und SNMP benutzt. 85 10 User Datagram Protocol (UDP) 10.2 Aufbau UDP Header: 0 15 16 31 Source Port Destination Port Length Checksum UDP-Pakete werden mit Hilfe von IP verschickt, somit befinden sich diese Pakete im Datenbereich des IP-Pakets. Jedes UDP-Paket beginnt mit dem Header. Er besteht aus vier 16 Bit großen Feldern. Source Port, Destination Port, Length und Checksum. Das Feld Source Port ist optional und sollte Null enthalten, sofern diese Funktion nicht benötigt wird (siehe Ports). Das Feld Length gibt die Länge des UDP Pakets inklusive Header an. Im Feld Checksum steht diese, die wie folgt berechnet wird. 10.3 Checksum UDP Pseudo Header: 0 15 16 31 Source Address Destination Address Zero Protocol UDP Length Zur Berechnung der Prüfsumme wird zunächst ein sogenannter Pseudo-Header“ erzeugt. Er ” besteht aus der 32 Bit langen IP-Adresse des Senders, der ebenfalls 32 Bit langen IP-Adresse des Empfängers, gefolgt von einem Nullbyte (für spätere Erweiterungen) dann ein Byte, dass das Protokoll identifiziert (17 bei UDP) und schließlich noch die Länge des gesamten UDP Pakets in einem 16 Bit großen Feld. Teile dieser Informationen werden aus dem IP-Header bezogen. Somit lässt sich nicht nur die Integrität der Daten überprüfen, sondern es kann auch festgestellt werden ob das Paket bei der richtigen IP-Adresse angekommen ist. Nun wird die Prüfsumme über diesen Pseudo-Header, den UDP-Header und auch über die UDP Daten – im Gegensatz zu IP – berechnet. Dazu werden die Daten in 16 Bit Wörter unterteilt. Falls dies nicht glatt aufgeht wird der Rest mit Nullen aufgefüllt (“Padding“). Dann werden diese Wörter aufaddiert und von der Summe das Einerkomplement gebildet. Dieser Wert wird nun in dem Header Feld Checksum eingetragen, in dem während der Berechnung Null stand. Der Pseudo-Header wird, genauso wie die zum Auffüllen verwendeten Nullen, nicht mit versand und fließt auch nicht in den Wert der Länge des Pakets mit ein. Wird nun ein Paket empfangen das fehlerhaft ist, so wird dieses verworfen und es wird keine ICMPNachricht verschickt. Es ist zudem möglich, die Checksum zu deaktivieren, indem man alle 86 10.4 Ports Bits auf Null setzt. Falls die Berechnung der Checksum Null ergeben sollte, werden alle Bits auf Eins gesetzt. Dies ist möglich, da es im Einerkomplement zwei Darstellungen der Null gibt. Jedoch wird vom Deaktivieren der Checksum abgeraten, da es auch in vermeintlich sicheren lokalen Netzwerken versteckte Fehlerquellen geben kann und so die Gefahr entsteht, unbemerkt mit falschen Daten zu arbeiten. 10.4 Ports Die Verwendung von Ports ist der wichtigste Unterschied zu IP. Somit ist es möglich, dass mehrere Prozesse gleichzeitig über UDP kommunizieren. Dies wird Multiplexing genannt. Jedem Prozess wird ein Port zugewiesen, an dem für ihn eintreffende Daten weitergeleitet werden. Einige Portnummern sind für bestimmte Anwendungen reserviert. Die von UDP verwendeten Portnummern sind unabhängig von den TCP-Portnummern, wobei es meistens so ist, dass eine Applikation immer die gleiche Portnummer benutzt, egal ob über UDP oder TCP. 10.5 UDP & ICMP Folgende ICMP Nachrichten können in Zusammenhang mit UDP verschickt werden: • Destination Unreachable (= Network, Host, Protokol oder Port nicht errreichbar) • Time Exceeded (= Time To Live abgelaufen) • Parameter Problem (= IP Parameter ungültig) • Source Quench Letzteres bedeutet, dass der Sender Daten zu schnell sendet und der Empfänger oder ein Router diese nicht so schnell verarbeiten oder zwischenspeichern kann. Der Sender wird durch diese Nachricht aufgefordert, die Daten langsamer zu senden. Jedoch wird von der Versendung dieser Nachricht abgeraten, da Router diese nicht unbedingt weiterleiten müssen und da der sendende Prozess schon terminiert sein kann bevor die Source Quench“ ” Nachricht eintrifft. Ausserdem erhöhen diese Nachrichten zusätzlich die Netzlast, was in diesem Fall kontraproduktiv ist. 10.6 Zusammenfassung UDP ist ein schlankes verbindungsloses Protokoll, dass die Integrität der Daten durch eine Prüfsumme gewährleistet. Es bietet einen im Vergleich zu TCP hohen Datendurchsatz 87 10 User Datagram Protocol (UDP) und durch die Verwendung von Ports können mehrere Prozesse gleichzeitig über UDP kommunizieren. 88 KAPITEL 11 IP Fragmentation Christian Biere 11.1 Überblick Das Internet Protocol (IP) erlaubt die sogenannte Fragmentation. Dies bedeutet, dass ein IP-Paket in mehrere kleine IP-Pakete zerteilt – fragmentiert“ – wird. Fragmentation wird ” dann benötigt, wenn in einem Netzwerk ein IP-Paket gesendet werden soll, das größer ist, als die maximale Paketgröße in diesem Netzwerk. Beispielsweise darf ein Ethernet-Paket nicht größer als 1500 Bytes sein, ein IP-Paket kann aber bis zu 64 Kilobyte groß sein. 11.2 Der IP-Header Abbildung 11.1 zeigt ein Beispiel für zwei Fragmente. Welche Fragmente zusammengehören erkennt der Empfänger an den Feldern Version, Identification, Protocol, Source Address und Destination Address, da diese bei allen Fragmenten eines Pakets übereinstimmen müssen. Das erste Fragment nennt man auch Fragment Zero. Der Name erklärt sich so, dass hier der Fragment Offset auf Null, also Zero, gesetzt ist. Bei allen Fragmenten ausser dem letzten ist das More Fragment-Flag gesetzt (MF). Daran sieht der Empfänger, dass das Paket fragmentiert ist. Erhält der Empfänger das letzte Fragment, dann kann er die Fragmente zu dem kompletten Paket zusammenfügen. Total Length gibt die Größe des jeweiligen Fragments 89 11 IP Fragmentation Erstes Fragment 0 15 16 Version IHL=5 Total Length = 568 ToS Fragment Offset = 0 Flags Identification = 111 TTL = 64 31 Protocol = 17 Header Checksum Source Address Destination Address UDP Header UDP Data Zweites Fragment 0 15 16 Version IHL=5 Total Length = 472 ToS Fragment Offset = 69 Flags Identification = 111 TTL = 64 31 Protocol = 17 Header Checksum Source Address Destination Address UDP Data Abbildung 11.1: Ein Beispiel für zwei Fragmente. 90 11.3 Aufteilung in Fragmente an. Fragment Offset gibt an, an welche Stelle das Fragment in das gesamte Paket gehört. Allerdings muss Fragment Offset mit acht multipliziert werden. Dies ergibt sich einfach dadurch, dass Fragment Offset nur 13 Bits lang ist, während ein IP Paket 65536 Bytes groß sein darf, also 2 hoch 16. Die Differenz von 3 Bits ergibt 2 hoch 3, also 8. Der IP-Header ist allerdings mindestens 20 Bytes groß, also muss jedes Fragment minimal 28 Bytes groß sein. Ein Restfragment darf 21 Bytes nicht unterschreiten. Die Größe des gesamten Pakets weiss der Empfänger erst, wenn er das letzte Fragment ohne MF-Flag erhalten hat, indem zum Fragment Offset multipliziert mit acht die Total Length hinzuaddiert wird. Die IP Header Checksum muss natürlich für jedes Fragment angepasst werden. Die restlichen Felder bleiben unverändert. Die Type-Of-Service-Flags (ToS) und das Don’t FragmentFlag (DF) können zwar für jedes Fragment unterschiedlich gesetzt sein. Dies wird man aber vermeiden wollen, damit alle Fragmente unter den gleichen (guten) Bedingungen ihr Ziel erreichen. Man sieht auch, dass sich ein Protokoll, das auf IP aufbaut, wie UDP in diesem Beispiel, nicht um die Fragmentation kümmern muss. So wird der UDP-Header weiterhin nur einmal und im Anschluss die UDP-Daten geschickt. 11.3 Aufteilung in Fragmente Es gibt grundsätzlich vier Methoden, um ein Paket in einzelne Fragmente zu zerlegen. Bei der ersten Methode geht man so vor, dass man für die Größe des ersten Fragments die PathMTU wählt. Für die restlichen Pakete ermittelt man dann eine durchschnittliche Größe. So erreicht man, dass das wichtige erste Fragment den Zielhost erreicht, ohne dass es Probleme mit der Fragmentation an sich gibt. Ausserdem benötigt der Transfer der restlichen Pakete jeweils in etwa die gleiche Zeit, da sie ungefähr die gleiche Größe haben, so dass sich ein gleichmäßigerer Fluss ergibt. Bei der zweiten Methode wählt man für die Größe jedes Fragment die Path-MTU und schickt eventuell ein Restfragment hinterher. Dadurch erreicht man, dass alle Fragmente ihr Ziel erreichen können, ohne weiter fragmentiert werden zu müssen, solange sich die Route und die Path-MTU nicht zwischenzeitlich ändern. Das letzte Fragment benötigt jedoch weniger Zeit, da es kleiner ist als die voherigen Fragmente. Dies ist eventuell bei bestimmten Anwendungen nicht erwünscht. Die nächste Methode macht sich zunutze, dass jeder Router eine MTU von mindestens 576 Bytes hat und wählt daher für jedes Fragment eine durchschnittliche Größe, die 576 Bytes nicht überschreitet. Im letzten Fall macht man nur noch den Unterschied, dass man für jedes Fragment, ausser einem letzten Restfragment, genau 576 Bytes wählt. Die beiden letzten Methoden haben jedoch den Nachteil, dass sie die Path-MTU nicht opti- 91 11 IP Fragmentation mal ausnutzen, wenn diese 576 Bytes überschreitet. Sie werden standardmäßig verwendet, wenn man die Path-MTU nicht ermitteln kann oder möchte. 11.4 Fragmentation und ICMP ICMP-Meldungen werden nur für das Fragment Zero generiert. Für die restlichen Fragmente wird keine Fehlermeldung per ICMP verschickt. Erreicht das Fragment Zero den Zielhost nicht, so ist unklar, woran der Transfer gescheitert ist. Es gibt zwei ICMP-Codes, die für Fragmentation genutzt werden: 11.4.1 Type 3, Code 4 - Fragmentation needed, but DF set. Dies bedeutet, dass ein Router ein Paket erhalten hat, das zu groß ist, um es weiterleiten zu können. Da das DF-Flag gesetzt ist, darf es aber nicht fragmentiert werden und der Router sendet diese Fehlermeldung an den Sender zurück. 11.4.2 Type 11, Code 1 - Reassembly time exceeded. Der Empfänger hat nicht alle Fragmente erhalten, um das Paket zusammenfügen zu können. Nach einer gewissen Zeit verwirft er deshalb alle Fragmente die zu diesem Paket gehören und schickt dem Sender diese ICMP-Meldung. 11.5 RFC 1812: Anforderungen an Router Router sollten die Anzahl der Fragmente so minimal wie möglich halten, da kleine Fragmente zu ineffizienter Nutzung des Netzwerks führen. Zum einen benötigt jedes Fragment zusätzlich mindestens 20 Bytes für den Header, wodurch zusätzliche Bandbreite verbraucht wird. Zum anderen müssen die Header auch erzeugt und vom Empfänger überprüft werden, was zu erhöhtem Rechen- und Verwaltungsaufwand führt. Weiterhin dürfen Router die Fragmente nicht zusammenfügen, sondern müssen sie einzeln weiterleiten. Da die Fragmente über unterschiedliche Routen verschickt werden können, wäre es möglich, dass der Router vergeblich auf die restlichen Fragmente wartet und so die Zustellung des Pakets verhindert wird, obwohl kein Fragment verloren gegangen ist. Ausserdem würde es auch die Speicherressourcen des Routers unnötig belasten, weil er alle Fragmente im Speicher halten müsste, bevor er sie weiterleiten kann. Eine Ausnahme ergibt sich, wenn das Paket für das Netzwerk des Routers bestimmt ist. Dann darf er, muss aber nicht, die Fragmente zusammenfügen. Ein Beispiel hierfür wäre ein Router, 92 11.6 MTU Path Discovery der ressourcenschwache Hosts, wie z.B. Handies oder PDAs, bedient, denen man diesen Aufwand nicht zumuten kann oder möchte. Ein Router darf Fragmente gesondert behandeln, indem er davon ausgeht, dass, falls er ein Fragment verwirft, das gesamte Paket noch einmal geschickt wird. Dies würde also zu zusätzlicher Netzlast führen. Allerdings könnte man dieses Verhalten auch ausnutzen, indem man viele Fragmente schickt, so dass der Router alle anderen Pakete verwirft. Bei dieser Implementierung muss man also vorsichtig vorgehen. Letztlich wird noch gefordert, dass Router eine Maximum Transfer Unit (MTU), von 576 Bytes unterstützen müssen. Das heisst, erhält ein Router ein Paket dieser Größe muss er es unfragmentiert an einen anderen Router weiterleiten können. Für Hosts gilt dies übrigens nicht, diese müssen nur eine minimale MTU von 68 Bytes unterstützen. 11.6 MTU Path Discovery Um die Path-MTU zu ermitteln, gibt es ebenfalls vier gängige Methoden. Die ersten drei machen sich ICMP zu nutze; die Letzte nutzt IP Options. Im ersten Fall schickt der Sender nur ein Fragment Zero und wartet auf die ICMP-Meldung Reassembly time exceed“. Da die ICMP-Meldung den IP-Header enthält, kann der Sender ” an dem Total Length-Field ablesen, ob das Paket zwischendurch fragmentiert wurde und Total Length als Path-MTU annehmen. Im zweiten Fall setzt der Sender das DF-Flag, wählt eine für ihn optimale Paketgröße und wartet auf die ICMP-Meldung Fragmentation needed, but DF set“. Der Sender verringert ” dann die Größe, indem er sich mittels binärer Suche an die Path-MTU herantastet, oder gebräuchliche Werte wie z.B. 1492 (Ethernet), 576 (Analog-Modems) ausprobiert. Die ersten beiden Methoden haben den Nachteil, dass man irgendein Paket schicken muss, dadurch aber weitere Fehler provoziert, wie z.B. dass ein Protokoll nicht unterstützt wird oder irrtümlich einem laufenden Prozess zugeordnet wird. Die nächste Methode ist relativ neu und führt einen neuen ICMP-Typ Probe Path“ ein. ” Hierbei schickt der Sender ein solches ICMP-Paket, die Router und der Host passen dann die Werte in diesem an und schicken das Paket mit den korrigierten Werten zurück. Da diese Methode relativ neu ist, wird sie jedoch nur von wenigen Hosts und Routern unterstützt. Die letzte Methode hat den Vorteil, dass sie sowohl auf ICMP verzichtet als auch während des Transfers durchgeführt werden kann, auch piggy-backing genannt. Zunächst setzt der Sender die IP Option Probe MTU“. Die Router passen den Wert für die Path-MTU an und ” der Empfänger antwortet schliesslich, indem er in einem Paket die IP Option MTU Reply“ ” setzt. Es sind also keine zusätzlichen Pakete nötig, wenn der Transfer sowieso bi-direktional abläuft, wie z.B. bei TCP. Leider ist auch diese Methode nicht von Anfang an spezifiziert 93 11 IP Fragmentation und wird nicht von allen Routern und Hosts unterstützt. Schlagen alle Methoden fehl, wird eine Path-MTU von 576 angenommen. 11.7 Probleme durch Fragmentation Wie schon erwähnt, leidet die Performance eines Netzwerks durch Fragmentation und belastet die Ressourcen der beteiligten Router und Hosts zusätzlich. Zudem wird Fragmentation in einigen Netzwerken nicht unterstützt, da Fragmente beispielsweise durch einen Paketfilter verworfen werden, wenn der Administrator dies für sinnvoll hält. Leider haben manche TCP/IP-Implementierungen und sogar Firewalls Probleme mit ungewöhnlichen Fragmenten, was zu Sicherheitsproblemen führen kann. Auch ICMP wird des öfteren von Administratoren deaktiviert, da einige ICMP-Typen gewissen Sicherheitsprobleme mit sich bringen. Anstatt nur diese Typen zu filtern, wird ICMP oft komplett deaktiviert, so dass die für Fragmentation spezifischen ICMP-Meldungen nicht zum Sender gelangen. Dies wiederum führt dazu, dass der Sender erst nach einem Timeout die Pakete erneut sendet und nicht erfährt, woran der Transfer gescheitert ist. Dadurch ergeben sich unnötige zeitliche Verzögerungen. 11.8 Fragmentation und Angriffe Wie schon erwähnt, haben manche Implementierungen Probleme mit Fragmentation. So gab es z.B. Probleme mit Firewalls, die unter bestimmten Umständen Fragmente fälschlicherweise weitergeleitet haben, die sie hätten filtern sollen. Dies ergibt sich dadurch, dass sich Fragmente überlappen können. Ein schlechter Paketfilter prüft eventuell nur einmal das Fragment Zero, da dieses z.B. den Header und somit die genutzen Ports enthält. Wird das Fragment nun nochmal mit anderen Ports geschickt, überschreibt es das erste Fragment. So erreicht es letztlich auch einen gesperrten Port. Ebenfalls Probleme mit sich überlappenden Offsets haben die TCP/IP-Stacks von Windows 95 und Windows NT 4.0, die sogar zu einem Absturz oder dem berühmten Blue-Screen-Of-Death führen können. Teilweise wird auch nur das lokale Netzwerk lahmgelegt. Auch FreeBSD 3.0 hatte Probleme mit ungültigen UDP Fragmenten, was zu einer Kernel Panic, also einem Systemabsturz führte. Es muss beispielweise geprüft werden, dass das IP Paket nicht größer als 64 Kilobyte ist, da Fragment Offset multipliziert mit acht plus Total Length 65536 um fast das doppelte überschreiten kann. Schreibt der TCP/IP-Stack beim Zusammenfügen der Pakete diese ohne Prüfung in einen zu kleinen Puffer, führt dies unweigerlich zu Problemen. Die genannten Probleme zeigen, dass es sich um keinen Fehler der Spezifikation sondern der Implementierung handelt. Es zeigt aber auch, dass Fragmentation mit Vorsicht zu genießen ist. 94 KAPITEL 12 Domain Name System (DNS) Alexander Hosfeld, Carsten Herkenhoff 12.1 Einleitung Ohne das Domain Name System hätte das Internet vermutlich nicht die Bedeutung erlangt, die es jetzt hat. Denn auch wenn es wohl vielen Internetbenutzern nicht bewusst ist, dass sie die Dienste des Domain Name Systems in Anspruch nehmen, so könnte ohne DNS keine email verschickt, keine Seite angesurft werden (jedenfalls nicht im üblichen Sinne) und auch ein netzbasierter Zugriff wäre nur unter Schwierigkeiten möglich. Denn erst das DNS verbindet die IP-Adressen, die von den Rechnern verstanden werden, mit den Domainnamen, die man sich besser einprägen kann. Unter Zuhilfenahme einer riesigen verteilten Datenbank, in der sämtliche Domainnamen und IP–Adressen hinterlegt sind, können einzelne DNS-Server miteinander kommunizieren, um eine nicht bekannte IP-Adresse anzufragen. Inwieweit diese Kommunikation abläuft, soll die vorliegende Hausarbeit, die im Rahmen des Seminars Internetprotokolle“ an der Universität Bielefeld verfasst wurde, klären. ” 12.2 Die Theorie des DNS Das vorliegende Kapitel will die Entwicklung des DNS aufzeigen. Anhand einer Alternative zu einem DNS-System möchte ich dessen Nachteile aufzeigen und darstellen, wie es überhaupt zu der Notwendigkeit kam, DNS zu entwickeln. 95 12 Domain Name System (DNS) 12.2.1 Alternative zu DNS: die host-Datei Um zu einer funktionierenden Namensauflösung zu kommen, muss man nicht zwingend das DNS bemühen. Es existieren durchaus Alternativen, die unter Umständen einfacher einzurichten und zu administrieren sind als ein komplettes DNS-System. Gerade in kleineren Netzwerken ist der Einsatz einer host-Datei und deren netzwerkweite Verteilung einfacher zu bewerkstelligen als das Aufsetzen zweier DNS-Server. Die host-Datei ist eine reine textbasierte Datei und könnte für ein kleineres Netzwerk folgendermaßen aufgebaut sein: # /etc/hosts # loopback: 127.0.0.1 localhost # IP #------------192.168.1.1 192.168.1.2 192.168.1.3 129.70.136.200 FQDN --------------------------gateway.foo.bar user.foo.bar joe.foo.bar www.TechFak.Uni-Bielefeld.DE host -----gw user joe techfak Diese host-Datei wird — wie man sich leicht vorstellen kann — mit zunehmender Netzwerkgröße schnell unübersichtlich. Und wenn man bedenkt, dass diese Datei auf jeden host im Netzwerk verteilt werden muss, so darf man den damit verbundenen Traffic nicht unterschätzen. Zudem kann man nicht gewährleisten, dass die Hostdaten konsistent sind: Wenn sich während der Verteilung der host-Datei ein Hostname geändert hat, kann dieser nicht gleich angesprochen werden, weil die host-Datei eventuell noch nicht auf allen Rechnern aktuell ist. Außerdem muss man die Möglichkeit in Betracht ziehen, dass ein hostname mehrfach vergeben wird, wenn es keine zentrale Instanz gibt, die die Namensvergabe überwacht. 12.2.2 Die Geschichte des DNS Die oben beschriebene host-Datei kam in der frühen Geschichte des Internets, dem sog. ARPAnet tatsächlich zur Anwendung. Da das ARPAnet damals aus nur rund 100 Knoten bestand, war die HOSTS.TXT eine einfache Möglichkeit, die Namensauflösung zu realisieren. Als aber mit der Umstellung des Netzwerkprotokolls auf TCP/IP die Anzahl der Rechner im ARPAnet förmlich explodierte, wurde diese Art der Namensauflösung ineffizient, so dass man nach einer Alternative suchte, die die gerade beschriebenen Nachteile der host-Datei beseitigt. Paul Mockapetris veröffentlichte 1984 zwei RFCs (882 und 883), in denen er eine Alternative zu der HOSTS.TXT vorstellte. Die Grundlagen für das uns heute bekannte DNS wurden gelegt[1]. 96 12.2 Die Theorie des DNS 12.2.3 Die Organisation des DNS Das Domain Name System ist in einer weltweit verteilten, umgekehrt baumstrukturierten Datenbank organisiert: Ausgehend von der root-Domain, zweigen die einzelnen sog. TopLevel -Domains (TLDs) ab, die dann in bis zu 126 Ebenen weiter unterteilt werden können. Die einzelnen Ebenen werden durch Punkte abgetrennt. Ein Name wie porta.TechFak.Uni-Bielefeld.DE. ist also wie folgt zu lesen: der Rechner mit dem Namen porta“ ist der Top-Level-Domain DE zugehörig, ist also wahrscheinlich in ” Deutschland zu finden. Er gehört der Universität Bielefeld, genauer gesagt: der Technischen Fakultät, an[21]. Neben den internationalen Top-Level-Domains, wie z.B. de für Deutschland, fr für Frankreich oder auch das eher unbekannte us für United States1 , gibt es eine Handvoll Domains, die keiner geographischen Zugehörigkeit zuzuordnen sind[21]: • com: Kommerzielle Organisation • net: Organisationen, die mit Netzwerken zu tun haben • org: (nichtkommerzielle) Organisationen • mil: Militärische Einrichtungen • edu: (vornehmlich US-amerikanische) Universitäten und Bildungseinrichtungen • int: Internationale Organisationen • gov: US-amerikanische Regierungsinstitutionen Aufgrund der Verknappung aussagekräftiger Domainnamen wurde gegen Ende 2000 von der ICANN sieben neue Top Level Domains eingeführt: • biz: Businesses • info: Allgemeine Informationen • name: Private Personen • pro: Buchhalter, Juristen, Ärzte, (...) • museum: Museen • aero: Fluggesellschaften, Flughäfen und Reiseveranstalter • coop: Genossenschaftliche Unternehmen und Organisationen 1 Eine vollständige Auflistung nach ISO 3166 kann man unter ftp://ftp.ripe.net beziehen. 97 12 Domain Name System (DNS) Die Domain in-addr.arpa Der Domain in-addr.arpa kommt eine besondere Bedeutung zu: sie wurde zur Auflösung von IP-Adressen auf Domainnamen eingeführt. in-addr.arpa enthält insgesamt vier Ebenen mit jeweils 255 Subdomains, so dass jede IP-Adresse in die Domain aufgenommen werden kann. porta.TechFak.Uni-Bielefeld.DE ist mit der IP-Adresse 129.70.136.108 also mit 108.136.70.129.in-addr.arpa“ in der in-addr.arpa-Domain zu finden. Dass die IP-Adresse ” im Domainname rückwärts erscheint, ist plausibel wenn man bedenkt, dass einzelne Bereiche der in-addr.arpa-Domain delegiert werden: die Zone 70.129.in-addr.arpa ist an die Universität Bielefeld delegiert, da für sie das Klasse B-Netz 129.70.0.0/16 reserviert wurde. Würde man die IP-Adresse nicht umdrehen“, so würde die Domain 70.129.in-addr.arpa ” alle Hosts beinhalten, deren IP-Adresse auf .70.129 endet. Eine solche Domain wäre fast unmöglich zu administrieren[1]. Die in-addr.arpa-Domain spielt auch bei der Authentifizierung eine Rolle. Bei den r-Utilities z.B. werden die IP-Adressen mit den Host-Namen, die in .rhosts oder hosts.equiv stehen, verglichen, um den Zugang zu erlauben oder abzulehnen[19]. Die Hesiod-Klasse Der Aufbau des DNS bietet die Möglichkeit, statische Informationen aufeinander abzubilden. Hesiod ist eine Erweiterung des DNS, die diese Möglichkeit ausnutzt, um ein verteiltes Datenbanksystem zu erschaffen. Hierzu wurde bind dahingehend gepatcht, eine neue Klasse verwalten zu können: die Hesiod-Klasse. Informationen der Hesiod-Klasse liegen tabellarisch vor und werden durch bind organisiert. Die Hesiod-Klasse wurde offiziell in bind integriert, so dass dieser eine Hesiodanfrage eines Resolvers ohne weiteres durchführen kann. Obwohl es prinzipiell möglich wäre, allgemeine statische Daten unter Hesiod zu mappen, so findet Hesiod vor allem in der Benutzerverwaltung in Verbindung mit NIS Verwendung. Die TechFak z.B. setzt Hesiod für den Automounter und in Verbindung mit dem rcinfo-System ein. Mit hesinfo HesiodName HesiodNameType steht ein benutzerfreundliches Frontend zur Verfügung, mit dem man die Hesioddatenbank abfragen kann. 12.2.4 Der Begriff der Zone Neben dem Begriff der Domain (oder auch Domäne), existiert der Begriff der Zone. Eine Zone bezeichnet einen Teil einer Domain, für den ein Nameserver die Verantwortung (Authorität, oder auch authority) trägt. Rechner, die von einem Nameserver einer untergeordneten Domain (Subdomain) verwaltet werden, gehören nicht zu der Zone des übergeordneten Nameservers, obwohl die Subdomain zur Domain gehört. Es ist leicht ersichtlicht, dass nicht nur ein Nameserver alle Domains der Welt verwalten kann. Von daher muss eine Möglichkeit existieren, einen Teil einer Domain an andere Nameserver zu delegieren. Den delegierten Teil der Domain nennt man Zone. Eine delegierte Zone hat die Freiheit, diese Zone in weitere Subdomains oder weitere Zonen zu unterteilen[31]. Im Falle der Top-Level-Domain DE, sieht das folgendermaßen aus: alle Rechner, deren 98 12.2 Die Theorie des DNS hostname auf .DE endet, gehören zur Domain DE. Aber zur Zone DE gehören nur diejenigen Rechner an, die vom DENIC, der zentralen Registrierungsstelle für die DE-Domain, selbst verwaltet werden, also wahrscheinlich nur eine Handvoll von Rechnern. Die Domain Uni-Bielefeld.de wurde vom DENIC an die Universität Bielefeld delegiert, die damit die Authorität über die Zone Uni-Bielefeld.de erhält, und damit die Möglichkeit hat, weitere Subdomains (wie z.B. TechFak.Uni-Bielefeld) einzurichten und eventuell auch zu delegieren. Da eine Domain u.U. wesentlich mehr Information enthält als ein Nameserver benötigt (man denke nur an die root-Domain), arbeiten diese grundsätzlich mit Zonen und nicht mit Domains[1]. 12.2.5 Verschiedene Arten von Nameservern Aus administrativen Gründen ist es ratsam mehrere Nameserver zu haben. Zum einen verteilt man den DNS-Traffic auf mehrere Nameserver und sorgt gleichzeitig für eine Redundanz. Aus administrativen Gründen ist aber auch davon abzuraten, mehrere Nameserver für eine Zone zu authorisieren, da man Änderungen im DNS dann auf mehreren Nameservern gleichzeitig durchführen müsste. Aus diesem Grund existieren mehrere Arten von Nameservern: 1. Master oder primäre Nameserver 2. Slave oder sekundäre Nameserver 3. Forwarder 4. Caching-only Nameserver Master Nameserver (auch primäre Nameserver gennant) sind die Nameserver, die die Authorität über eine Zone haben. Die Konfiguration der authorisierten Zone erfolgt über Datenbankdateien. Diese Dateien liegen in einem textorientierten Format vor und folgen den Resource Records, die in Kapitel 12.4 erläutert werden. Slave Nameserver (oder auch sekundäre Nameserver) besitzen zwar auch die Authorität über die Zone, beziehen die Zonendaten aber in regelmäßigen Abständen2 vom Master Nameserver. Diesen Vorgang nennt man Zonentransfer. Der Zonentransfer kann auch manuell durch named-xfer angestoßen werden. Forwarder sind Nameserver, die von anderen Nameservern rekursive Anfragen erhalten. Sie dienen sozusagen als DNS-Proxy für andere Nameserver. Forwarder können in Netzen eingesetzt werden, in denen die Nameserver selbst über keinen Netzanschluss verfügen. Sie laufen also vorzugsweise auf Gateways. Caching-only Nameserver haben keine Authorität über eine Zone, sondern dienen lediglich dazu einen DNS-Cache aufzubauen, um lokale Anfragen möglichst schnell und ohne WAN-Traffic beantworten zu können. Sie greifen ausschließlich auf Forwarder zu[31]. 2 Die Zeitspanne kann durch die Refresh-Direktive beeinflusst werden 99 12 Domain Name System (DNS) 12.3 Die Namensauflösung Nachdem geklärt wurde, wie der DNS-Namensraum aufgebaut ist, möchte ich auf die Namensauflösung zu Sprechen kommen. Wie läuft eine Namensauflösung im Detail ab, wenn man z.B. mit telnet (ssh ist ja leider nicht möglich) auf porta.TechFak.Uni-Bielefeld.DE zugreift? 12.3.1 Der Resolver Dasjenige Programm, das die Namensauflösung anfordert (im obigen Fall also telnet), greift auf den Resolver zu. Der Resolver ist eine in den Nameserver integrierte Bibliothek, die die Kommunikation mit dem Nameserver übernimmt und dessen Antwort wieder an das aufrufende Programm zurückgibt. Er bildet sozusagen den clientbasierenden Teil des DNS und wird über die Datei /etc/resolv.conf konfiguriert. Auf porta.TechFak könnte sie folgendermaßen aussehen: Die /etc/resolv.conf domain TechFak.Uni-Bielefeld.DE nameserver 129.70.5.16 Die Defaultdomain wird normalerweise über den FQDN3 selbst ermittelt: es ist der Teil des FQDN, der hinter dem ersten Punkt steht. Wenn im FQDN kein Punkt auftaucht, ist die Defaultdomain die root“-Domain, was aber zwangsläufig falsch sein muss, da die ” root“-Domain keine hosts hat, sondern nur delegiert. ” Der Resolver geht standardmäßig davon aus, dass auf dem lokalen Rechner ein Nameserver läuft. Wenn dem nicht so ist, kann bzw. können über die nameserver -Direktive ein oder mehrere alternative Nameserver angegeben werden. Da die Seitenanzahl dieser Hausarbeit leider beschränkt ist, muss ich die weiteren Konfigurationsmöglichkeiten des Resolvers außer Acht lassen. Auch eine weitere Resolver-Konfigurationsdatei, die /etc/host.conf bleibt nichtbeachtet.4 12.3.2 Rekursive DNS-Queries Wenn ein Programm auf die Funktionen des Resolvers zugreift5, so richtet der Resolver eine rekursive DNS-Abfrage an den spezifizierten Nameserver. Rekursiv bedeutet in diesem Zusammenhang, dass alle Arbeit dem DNS-Server überlassen wird: Alle Schritte, die zur 3 FQDN steht für Full Qualified Domain Name und stellt den vollen Domainnamen dar, der auf UnixBetriebssystemen mit hostname -f oder uname -n ermittelt werden kann. 4 Bei Interesse können die jeweiligen man-pages weiterhelfen: host.conf(5), resolv+(8), resolver(3), resolver(5) 5 C-Programme includen /usr/include/netdb.h und für Perl existiert hier das Net::DNS-Modul, das aus dem CPAN bezogen werden kann. 100 12.4 Die Resource Records Namensauflösung notwendig sind, werden von dem angefragten Nameserver durchgeführt und bei Beendigung des Prozesses wird die Antwort an den Resolver (und damit an das aufrufende Programm) zurückgegeben[22]. 12.3.3 Iterative DNS-Queries Die Arbeit des Nameservers gestaltet sich folgendermaßen: Erreicht ihn eine rekursive Anfrage des Resolvers nach einem Host, z.B. foo.bar.domain.org“, so fragt er iterativ ” (auch als nichtrekursiv bezeichnet) bei dem nächstliegenden Nameserver nach. Erhält ein Nameserver iterative Anfragen, gibt er die ihm bestmögliche Antwort zurück, d.h. er überprüft, ob er für den angefragten Host die Zonenauthorität besitzt oder ob in seinem Cache bereits Informationen über den Host vorliegen. Ist beides nicht der Fall, gibt er die Adresse desjenigen Nameservers zurück, der am nächsten beim angeforderten Hostnamen liegt. Bei der Anfrage nach foo.bar.domain.org“, wird der angesprochene Nameserver also ” bei dem root“-Nameserver anfragen (wenn er selbst keine genaueren Informationen ” über foo.bar.domain.org“ hat), worauf dieser ihn wahrscheinlich an den Nameserver der ” ORG-Domain verweisen wird. Wenn diesem der host foo.bar.domain.org“ auch nicht ” bekannt ist, gibt er ebenfalls den nächstliegenden Nameserver zurück, also wahrscheinlich den von domain.ORG. Diese Art der Abfrage wird so lange fortgesetzt, bis ein Nameserver gefragt wird, der für foo.bar.domain.org“ die Authorität besitzt (dies sollte der Name” server von bar.domain.org sein) und letztendlich die IP-Adresse von foo.bar.domain.org“ ” zurückgibt[22]. 12.4 Die Resource Records Aufgrund der hierachischen und dezentralisierten Struktur des DNS sind für eine Zone verschiedene Angaben notwendig. So muss z.B. spezifiziert werden, • welcher Rechner für die Namensauflösung der Zone zuständig ist. item unter welcher IP-Adresse ein Rechner innerhalb der Zone zu finden ist. • zu welchem Rechner die Mail für die Domain zugestellt werden soll. Diese Konfiguration erfolgt über Resources, die — sowie die host-Datei — in einem textorientieren Format beim Nameserver vorliegen. Jeder Zone lassen sich unbegrenzt viele Resources zuordnen. Eine Resource-Information bezeichnet man auch als Resource Record oder kurz RR. 101 12 Domain Name System (DNS) Kürzel SOA Resource Record Start of Authority NS A NameServer Address MX CNAME Mail Exchanger Canonical hostname PTR Pointer Bedeutung Einleitung für die RRs der spezifizierten Zone Nameserver der Zone Zuordnung des FQDN zu einer IPAdresse Angabe zum Mailserver der Zone Setzt einen Link auf einen bestehenden A-Record Ordnet in der in-addr.arpa-Domain den hostname auf eine IP-Adresse zu weniger gebräuchliche RRs: TXT HINFO Text Host Info Kommentar zum host Nähere Angaben zur Hardware und Betriebssystem Eine auf die TechFak bezogene db-Datei könnte also so aussehen6 ; db.techfak: TechFak.Uni-Bielefeld.DE. IN SOA dns.TechFak.Uni-Bielefeld.DE pk.TechFak.Uni-Bielefeld.DE. ( ; mailto 1810200001 ; Serial-Nr. 10800 ; Refresh (3 Std.) 3600 ; Retry (1. Std.) 604800 ; Expire (1 Woche) 86400 ) ; TTL (1 Tag) IN IN IN IN spaghetti IN (...) popocatepetl IN porta IN 6 NS NS MX MX techfac.TechFak.Uni-Bielefeld.DE noc.HRZ.Uni-Bielefeld.DE 100 gemma.techfak.uni-bielefeld.de 300 mail1.RRZ.Uni-Koeln.DE A 129.70.133.49 A 129.70.136.108 CNAME popocatepetl.TechFak.Uni-Bielefeld.DE Das Format der einzelnen Resource Records ist programmabhängig, also nicht DNS-spezifisch. Die nachfolgenden Beispiele beziehen sich auf BIND. 102 12.5 Das DNS-Protokoll 12.5 Das DNS-Protokoll Aufgrund des geringeren Overheads und der höhren Geschwindigkeit basieren DNSAbfragen auf UDP. Lediglich bei einem Zonentransfer zwischen zwei Nameservern wird auf TCP zurückgegriffen, um die Konsistenz der Daten zu gewährleisten. Zur Kommunikation dient sowohl bei UDP als auch bei TCP der Port 53[33]. Die DNS-Kommunikation erfolgt über 16bit-Messages, deren Aufbau immer gleich ist: 0 7 8 15 Header o Der Header mit einer Größe von 12 Byte Question o Die an den Nameserver gerichtete Frage Answer o RRs, die die Frage beantworten Authority o auf authoritative Server zeigende NS-RRs Additional o Zusätzliche Resource Records Bis auf den Header sind alle Felder optional. Im Header wird angegeben, welche der vier möglichen Felder vorhanden sind[22]. 12.5.1 Codierung des Domainnamens In einer DNS-Message werden die Domainnamen nicht durch Strings repräsentiert, sondern folgen einem bestimmten Codierungsverfahren: Die Länge der Abschnitte (Labels), die normalerweise durch einen Punkt im Domainnamen abgetrennt sind, werden jeweils vor die betreffenden Labels - also an die Stelle des Punktes - gestellt. Den Abschluss bildet der Zero-String. Für porta.TechFak.Uni-Bielefeld.DE sähe das z.B. folgendermaßen aus: 0 1 5 porta 5 6 7 13 14 15 7 1 3 TechFak 27 28 29 30 31 Uni-Bielefeld 2 DE \ 0 Da in einer DNS-Message häufig die abschließenden Labels – also der Domainname – mehrfach auftreten, besteht die Möglichkeit diese Redundanz zu beseitigen, indem man beim erneuten Auftreten des Labels einen Zeiger auf das bereits vorhanden Label setzt. Da ein Label maximal 63 Bytes groß sein darf, reichen für die Längenangabe 6 Bit aus, um die Länge des nachfolgenden Labels zu codieren. Die ersten beiden MSBs sind demzufolge 103 12 Domain Name System (DNS) immer 0. Folgt allerdings ein Zeiger auf ein bestehendes Label werden diese MSBs auf 1 gesetzt. Die verbleibenden 6 Bit des Bytes und die 8 Bit des nächsten Bytes bestimmen den Offset des Labels vom Beginn der DNS-Message[1]. 0 1 9 9 10 spaghetti 17 18 25 6 0xC0 12.5.2 DNS-Header Der DNS-Header ist folgendermaßen aufgebaut: 0 15 ID Q R Opcode A T R R A C D A Z RCODE QDCOUNT ANCOUNT NSCOUNT ARCOUNT ID QR OPCODE AA TC RD RA Z 104 Eine 16-bit Zahl, die bei einer Anfrage und deren Antwort gleich ist, um die Zusammengehörigkeit sicherzustellen. Bei einer Anfrage auf 0 und bei einer Antwort auf 1 gesetzt. Spezifiziert die Art der Anfrage: 0 Standard-Query 1 Inverse Query 2 Abfrage des Serverstatus 3-15 Reserviert für zukünftige Nutzung Authoritative Answer – bei einer authoritativen Antwort gesetzt. Trunctation – Wird die bei UDP maximale Paketgröße von 512Byte überschritten und die DNS-Nachricht gekürzt, ist dieses bit gesetzt. Recursion Desired – weist in einer Query zu einer rekursiven Anfrage an. Recursion Available – wird vom angefragten Server gesetzt oder gelöscht - je nachdem ob dieser rekursive Anfragen zulässt. Reserviert für zukünftige Nutzung und muss auf 0 gesetzt sein. 12.5 Das DNS-Protokoll RCODE QDCOUNT ANCOUNT NSCOUNT ARCOUNT Response Code – Der Rückgabecode wird bei einer Antwort gesetzt: 0 Keine Fehler 1 Format error : die Anfrage konnte nicht interpretiert werden. 2 Server error : die Anfrage konnte aufgrund eines Serverfehlers nicht beantwortet werden. 3 Name error : Der abgefragte Domainname existiert nicht. 4 Not implemented – Diese Art der Abfrage wird vom Nameserver nicht unterstützt (z.B. bei einer Hesiod-Abfrage bei einer früher Version von bind). 5 Refused : Anfrage wurde aus Sicherheitsgründen abgelehnt. 6-15 Reserviert für zukünftige Nutzung. Anzahl der Queries im Questionteil. Anzahl der Resource Records im Answer-Teil Anzahl der Resource Records im Authority-Teil Anzahl der Resource Records im Additional-Teil 12.5.3 DNS-Question Die Question-Section enthält die anzufragenden Informationen. Obwohl im Header durch den QDCOUNT-Eintrag die Möglichkeit besteht, innerhalb einer DNS-Message mehrere Queries zu haben, wird dies von den meisten Nameservern nicht unterstützt. Die Question-Section besteht im einzelnen aus folgenden Teilabschnitten[22]: 0 7 8 15 QNAME hhhh h hhhhhhhhh hhhh hhhh hhhh hh h hhh QTYPE QCLASS 105 12 Domain Name System (DNS) QNAME QTYPE QCLASS Der abzufragende Domainname. Die Codierung erfolgt wie in Kapitel 12.5.1 beschrieben. Die Binärrepräsentation des Resource Record. Z.B.: 1 A-RR 2 NS-RR 5 CNAME 6 SOA 12 PTR-RR 15 MX-RR 252 Zonentransfer 255 ANY Die abzufragende Klasse: 1 IN – Internet class 2 CS – CSNET class 3 CH – CHAOS class 4 HS – Hesiod class 255 ANY – beliebige Klasse 12.5.4 DNS-Answer, DNS-Authority, DNS-Additional Die Answer-, Authority und Additionalsection folgenden dem gleichen Aufbau: 0 15 NAME TYPE CLASS TTL RDLENGTH RDATA hhhh h hhhhhhhhh h hhh hhhh hhhh hh h hhh 106 12.6 nslookup NAME TYPE CLASS TTL RDLENGTH RDATA Der Domainname des spezifizierten Resource Records. Die Art des im RDATA spezifizierten Resource Records (s.o.). Die Klasse des Resource Records (s.o.). Der Time-to-live-Wert, nach dem der Resource Record aus dem Cache gelöscht werden sollte. Die Anzahl der Bytes im RDATA-Feld. Die Resource Records. 12.6 nslookup Zur Interaktion zwischen Nameserver und Benutzer stehen zahlreiche Kommandos zur Verfügung. Utilities wie nslookup, host oder auch dig dienen der Formulierung von NameserverQueries, sind also sozusagen Frontends für den Resolver. nslookup kann in einem interaktiven Modus oder per Kommandozeilenargumente betrieben werden. Eine Sitzung in der Daten über die TechFak abgefragt werden, könnte beispielsweise folgendermaßen aussehen: rechner:~\$ nslookup > server 129.70.5.16 Default server: 129.70.5.16 Address: 129.70.5.16#53 > set type=NS > TechFak.Uni-Bielefeld.DE Server: 129.70.5.16 Address: 129.70.5.16#53 TechFak.Uni-Bielefeld.DE TechFak.Uni-Bielefeld.DE TechFak.Uni-Bielefeld.DE TechFak.Uni-Bielefeld.DE TechFak.Uni-Bielefeld.DE nameserver=techfac.TechFak.Uni-Bielefeld.DE. nameserver=noc.rrz.Uni-Koeln.DE. nameserver=waldorf.Informatik.Uni-Dortmund.DE. nameserver=noc.BelWue.DE. nameserver=noc.HRZ.Uni-Bielefeld.DE. Durch den set type“-Befehl kann die Abfrage auf die in Kapitel 12.5.3 beschriebenen QTY” PEs gesetzt werden[32]. host lässt sich ausschließlich durch Kommandozeilenparameter steuern. Ein interaktiver Modus existiert hier nicht[32]. rechner:~\$ host -t NS TechFak.Uni-Bielefeld.DE 129.70.5.16 TechFak.Uni-Bielefeld.DE NS techfac.TechFak.Uni-Bielefeld.DE TechFak.Uni-Bielefeld.DE NS noc.rrz.Uni-Koeln.DE TechFak.Uni-Bielefeld.DE NS waldorf.Informatik.Uni-Dortmund.DE TechFak.Uni-Bielefeld.DE NS noc.BelWue.DE TechFak.Uni-Bielefeld.DE NS noc.HRZ.Uni-Bielefeld.DE 107 12 Domain Name System (DNS) 108 KAPITEL 13 Transmission Control Protocol (TCP) Ronny Gärtner, Sonja Hunscha, Jörg Sprügel Der Vortrag Transmission Control Protocol“ wurde von Ronny Gärtner gehalten. Anstatt ” einer herkömmlichen Ausarbeitung hat er gemeinsam mit mit Sonja Hunscha und Jörg Sprügel, Studenten des Faches Mediengestaltung, eine Web-Seite erstellt, die u.a. eine animierte Darstellung der Funktionsweise von TCP enthält. Das Ergebnis ihrer Arbeit ist unter der Adresse http://tcp.joerg-spruegel.de zu finden. Zur anzeige der Animation wird ein Web-Browser mit Flash-Plugin benötigt. 109 13 Transmission Control Protocol (TCP) 110 KAPITEL 14 TCP Flow Control und Congestion Avoidance Jonas Rosenfeldt, Florian Schäfer 14.1 Silly Windows Syndrome Eine Erscheinung, die bei fensterbasierten Kontrollmechanismen auftreten kann, stellt das silly window syndrome (Syndrom unsinniger Fenster) dar. Es handelt sich hierbei um ein Performance Problem, das auftreten würde, wenn die sendende und die empfangende Applikation mit unterschiedlichen Geschwindigkeiten arbeiten. TCP buffert (speichert) die eingehenden Daten und die Empfänger Applikation verarbeitet sie dann. Wenn nun diese Applikation nur ein Oktet (das kleinst mögliche Datensegment) zur Zeit verarbeitet und die sendende Applikation die Daten schnell genug generiert, wird der Buffer(Speicher) des Empfängers unter Umständen aufgefüllt und der Sender wird ein Acknoledgement (Bestätigung) bekommen, das spezifiziert, das das Fenster (Window → sliding Window) gefüllt wurde. Da die Applikation im weiteren Verlauf Daten verarbeitet, wird in diesem Fall ein Oktet des Buffers frei. Das TCP der Empfängerseite generiert nun eine Bestätigung und teilt mit, das ein Oktet des Speichers (Buffers) frei ist. Der Sender würde nun ein einzelnes Oktet Window an Daten schicken, was zu einer Serie von schmalen Datensegmenten führen würde, die die Bandbreite des Netzwerkes unnötig belasten würden. Außerdem würde jedes einzelne Datensegment mit Header zusätzliche Verarbeitungszeit kosten. Auf dem sendenden Computer müsste die IP Software das Segment in ein Datagramm einbauen, die Header Checksum müsste generiert werden, das Datagramm müsste geroutet werden und zum zuständigen Network Interface übertragen werden. Auf dem empfangenen Computer würde die IP Software die IP Checksum verifizieren und das Segment zu TCP übermitteln. TCP 111 14 TCP Flow Control und Congestion Avoidance müsste die Segment Checksum abgleichen, die Sequenz Nummer untersuchen, die Daten extrahieren und sie im Buffer platzieren. 14.1.1 Heuristiken gegen das Silly Window Syndrome Empfänger Seite: Wenn sich der Buffer gefüllt hat, sendet der Receiver ein Acknoledgement, das eine zero Window Anweisung beinhaltet. Anstatt jedoch gleich eine Window Anweisung zuschicken, wenn im Buffer Platz freigeworden ist, wartet TCP und sendet erst wenn der Buffer zur Hälfte seiner totalen Größe frei ist. Sender Seite: Wenn auf der Sender Seite schmale Pakete durch die Applikation generiert werden ( Beispiel Oktet ) schickt TCP das erste Oktet. Während TCP auf das Acknoledgement wartet wird TCP aber zusätzliche Oktets in den Buffer laden und diese zusammen verschicken, wenn das Acknoledgement eintrifft. Diese relativ einfachen Maßnahmen verhindern eine Verminderung der Bandbreite und die Verschwendung an Rechenleistung. 14.2 Timer 14.2.1 Retransmission Timer Da TCP für die Internet Umgebung bestimmt ist, muß es die zeitlichen Unterschiede verschiedene Ziele (Destinations) zu erreichen und durch Conguestion(Netzlast) resultierende Verzögerungen ausgleichen können. Segmente müssen bei der Annahme ihres Verlustes neu versendet werden, deshalb braucht TCP bestimmte Regeln, um möglichst schnell festzustellen, das ein Verlust vorliegt. Eine Frist muß festgesetzt werden, bei deren Überschreitung TCP einen Verlust annimmt. Diese bezieht sich auf das älteste unbestätigte Segment, das in diesem Fall wiederholt gesendet wird. Round Trip Timer(RTT) Da der Datendurchsatz und damit die Übertragungszeit im Internet stark schwanken kann muß die Frist im Lauf der Verbindung angepaßt werden. Dieses geschieht mit Hilfe der Round Trip Time (Umlaufzeit). Einerseits muß die RTT groß genug sein um eventuell verzögert eintreffende Segmente zu berücksichtigen, andererseits muß sie hinreichend klein sein um einen Verlust möglichst schnell festzustellen. 112 14.2 Timer Abbildung 14.1: ambiguous Acknoledgements Dabei wurden im Laufe der Zeit verschiedene Berechnungsmethoden der RTT in TCP integriert, um den Datendurchsatz optimal zuhalten. • Beispiel : 1.(0 ≤ α < 1) RT T = α ∗ OldRT T ) + ((1 − α) ∗ (N ewRoundT ripSample) • Beispiel2 : 1 : α = 0.9, OldRT T = 1500ms, N ewRoundT ripSample = 1700(0.9 ∗ 1500ms) + (0.1 ∗ 1700ms) = 1520ms • Beispiel2 : α = 0.1, OldRT T = 1500ms, N ewRoundT ripSample = 1700(0.1 ∗ 1500ms) + (0.9 ∗ 1700ms) = 1680ms Je näher α an 1 liegt, desto unempfindlicher wird die RTT gegenüber Änderungen innerhalb einer kurzen Zeitspanne ( z.B. ein einzelnes Segment, das länger braucht ). Je näher α an 0 liegt, desto eher reagiert die RTT mit einer entsprechenden Veränderung. Timeout Wenn ein Packet gesendet wird, generiert TCP den Timeout als eine Funktion von der aktuellen RTT. Frühere Implementationen benutzten β(β > 1) als einen konstanten Faktor und machten den Timeout größer als die RTT. • T imeout = β ∗ RT T β wurde dabei als 2 gesetzt. 113 14 TCP Flow Control und Congestion Avoidance Karn‘s Algorithmus und Timer Backof Karn‘s Algorithmus verhindert das Problem der ambiguous Acknoledgements (nicht eindeutige Bestätigungen). Da TCP bei einem nochmals gesendeten Segment keine neue Numerierung durchführt, könnte es passieren, daß für ein verloren gegangenes Segment ein Acknoledgement doch noch eintrifft und TCP annimmt es würde sich hierbei um das Acknoledgement für das soeben übermittelte handeln. In diesem Falle würde eine sehr viel niedrigere RTT angesetzt werden. Um dieses zu verhindern wurde TCP mit einem zusätzlichen Algorithmus versehn. Dabei lässt der Algorithmus die Zeiten der Retransmissions außer acht und verbindet die Timeouts mit einer Timer Backoff Strategie. Jedesmal wenn TCP ein Retransmit losschicken muß, wird der Timeout erhöht. • N ewT imeout = γ ∗ T imeout Typischerweise wird γ = 2 gesetzt Dieses läuft solange, bis erfolgreich ein Segment ohne Retransmission gesandt werden konnte. Responding to High Variance in Delay Da die Netzlast sehr stark schwanken kann, muß TCP schnell darauf reagieren können, um den Durchsatz möglichst optimal zuhalten. Da das vorgestellte Timeout Modell nur bei einer Belastung von 30% des Internets einen guten Durchsatz erzielt, wurden 1989 weitergehende Implementationen vorgenommen. Dadurch konnte TCP größere zeitliche Verzögerungen ( RTT Differenzen ) besser managen und so den Durchsatz verbessern. • DIF F = SAM P LE − OldRT T • SmoothedRT T = OldRT T + δ ∗ DIF F • DEV = OldDEV + ρ(| DIF F | −OldDEV ) • T imeout = SmoothedRT T + η ∗ DEV DEV = estimated mean deviation ( veranschlagte mittlere Abweichung ) Smoothed RTT = gerundete RTT δ = Bruch zwischen 0 und 1 der bestimmt wie schnell die neue Sample den Durchschnitt (RTT) beeinflusst. 114 14.2 Timer Abbildung 14.2: 200 zufällig generierte RTTs als Punkte dargestellt und der Retransmission Timer als Linie ρ = Bruch zwischen 0 und 1 der bestimmt wie schnell die neue Sample die mittlere Abweichung beeinflusst. η = ist ein Factor, der kontrolliert wie stark die Abweichung in den neuen Timeout einfließt. Erfahrungen haben gute Ergebnisse mit den Werten δ = undη = 3 gezeigt. 1 23 , ρ = 1 22 • OldD EV = 0.2sgesetzt • SAM P LE − OldRT T = DIF F → 3.2682s − 2.8012s = 0.4670s • OldR T T + δ ∗ DIF F = SmoothedRT T → 2.8012s + 0.058375s = 2.8596s • OldDEV + ρ → 0.2s + 1 22 (0.4670 − 1 23 ∗ 0.4670s =→ 2.8012s + 0.2s) =→ 0.2s + 0.06675s = 0.26675s • SmoothedRT T + η ∗ DEV = T imeout → 2.8596s + 3 ∗ 0.26675s = 3.65985s Im Vergleich: Nach den vorherigen Methoden würden der Timout zwischen 5.5978s und 6.5364s liegen. 115 14 TCP Flow Control und Congestion Avoidance 14.2.2 TCP Persist Timer Segmente 1-13 zeigen den normalen Daten Transfer vom Client zum Server. In Segment 13 acknolegded der Server die vorangegangenen Datensegmente, setzt aber das Window auf 0. Das hält den Client davon ab noch mehr Daten zuschicken und dieser setzt seinen Persist Timer. Wenn der Client kein Window Update bekommt und der Timer abläuft, versucht er mit einem zero Window herauszufinden, ob das Update verlorenging (→Zeiten der Anfrage: 1,5s, 3s, 6, 12s, 24s, 48s, 60s, 60s,...). 14.2.3 Keepalive Timer Ablauf: • Eine Verbindung wurde aufgebaut. • Ein Datenaustausch erfolgte, es werden keine weiteren Daten gesendet, die Verbindung bleibt bestehen. • Jede zwei Stunden wird ein Keepalive Packet gesendet, wird es von der anderen Seite acknoledged, wird der Keepalive Timer wieder auf zwei Stunden gesetzt. • Ist die Verbindung unterbrochen, werden 10 Keepalive Proben im Abstand von 75s gesendet. Wird eine davon acknoledged, wird der keepalive Timer wieder auf zwei Stunden gesetzt. • Wird nicht acknoledged, wird die Verbindung für tot erklärt. 116 14.3 Congestion Abbildung 14.3: Persist Timer 14.3 Congestion In Netzwerken kann bei hoher Belastung an bestimmten Knotenpunkten (Routern) die sogenannte congestion (deutsch: Stau, Verstopfung) auftreten. Bei diesem Phänomen füllt sich der Puffer eines Routers schneller als dieser die Daten verarbeiten und weiterreichen kann, und neu ankommende Datenpakete müssen verworfen werden. Eine solche Überlastung eines Routers entsteht wenn Daten von einem schnelleren (z.B. Ethernet LAN) in ein langsameres Netzwerk (z.B. WAN) übertragen werden, oder wenn ein Router weniger Output-Kapazität hat als die Summe seiner Inputs. 117 14 TCP Flow Control und Congestion Avoidance 14.3.1 Congestion Collapse Der Sender der jeweiligen Verbindung, von der ein oder mehrere Pakete verworfen werden mussten, schickt nun die verlorenen Pakete erneut (retransmission) und erhöht damit wiederum die Belastung für das Netzwerk. Dadurch können auch andere Verbindungen zur retransmission gezwungen werden, was die Belastung weiter steigert. Dadurch kann es passieren, dass ein stabiler Status (der sog. congestion collapse) erreicht wird, in dem jedes Paket erst nach mehrmaliger retransmission beim Empfänger ankommt, die Durchsatzrate also extrem schlecht ist. Dies kann auch ohne ’echte’ Congestion - also den Verlust von Paketen - entstehen, wenn die Belastung plötzlich auftritt (z.B. durch Datei-Transfers). Da viele Daten in den Puffern der Router zwischengespeichert werden müssen, dauert es länger bis sie weitergeleitet werden können. Dadurch steigt die Round-Trip-Time (RTT) schneller an als der Sender berechnet hat und der RTT-Timer läuft ab (sog. Timeout) bevor das Paket bestätigt werden kann. Dann werden unnötige Retransmissions gesendet, was wieder eine Erhöhung der Belastung zur Folge hat. Um dem entgegenzuwirken wurden verschiedene Algorithmen zur Congestion Control entwickelt. 14.4 End-to-End Congestion Control Bei der end-to-end congestion control sind nur die beiden Endpunkte der Verbindung, also Sender und Empfänger, beteiligt. Da die Wahrscheinlichkeit eines Paketverlustes durch Beschädigung (o.ä.) weit unter 1 % liegt, wird hier der Paketverlust als Anzeichen für einen Stau angesehen. 14.4.1 Slow-Start Der slow-start Algorithmus führt zunächst eine neue Variable ein. Zu dem vom slidingwindow Prinzip bekannten receiver window kommt ein weiteres, das congestion window (CongWin). Dabei wird jeweils das Minimum dieser beiden Fenster, das sog. allowed window, gesendet. Beim Start wird • CongW in = 1 · M SS also auf eine maximale Segmentgröße (oder Paketgröße) gesetzt, daher der Name slowstart. Damit wird die Wahrscheinlichkeit von unnötigen retransmissions durch zu plötzlich einsetzende Datenströme verringert. 118 14.4 End-to-End Congestion Control Für jedes bestätigte Segment wird dann das congestion window um eine MSS erhöht, also nach einer RTT um 1 MSS, nach 2 RTT’s um 2 MSS, nach 3 RTT’s um 4 MSS, usw. Das bedeutet das congestion window wächst exponentiell bis entweder ein bestimmter Schwellwert (siehe Abschnitt 14.4.2 und Abbildung 14.4) oder die Größe des receiver windows überschritten wird. 14.4.2 Congestion Avoidance Bei Überschreiten des Schwellwertes (Threshold) tritt der congestion avoidance Algorithmus in Kraft. Das congestion window wird jetzt nur noch um höchstens 1 MSS pro RTT erhöht. Die genaue Formel für die Berechnung des neuen Werts für CongWin lautet: • CongW in = CongW in + (Segmentgröße)2 CongW in + Segmentgröße 8 In Abbildung 14.4 sieht man wie das congestion window nach Erreichen des Schwellwertes nur noch additiv vergrößert wird. Wenn in der congestion avoidance oder slow-start Phase ein Timeout (RTT-Timer läuft ab) auftritt, also ein Paket verloren gegangen ist, wird der • Schwellwert = CongW in 2 , und dann das • CongW in = 1 · M SS gesetzt. Dann setzt der slow-start Algorithmus ein, da das congestion window wieder unterhalb des Schwellwertes liegt. Zu Beginn einer TCP-Verbindung wird der Schwellwert = 64kbytes gesetzt. Dieser Wert ist so groß, daß bei den meisten Verbindungen die Größe des receiver windows kleiner als der Schwellwert ist. Wenn kein Timeout auftritt vergrößert sich das congestion window dann sehr schnell (exponentiell) bis zur maximalen Größe. 14.4.3 Fast Retransmit/Fast Recovery Algorithmus Damit ein Paketverlust schon vor Ablaufen des RTT-Timers erkannt werden kann und nicht nach jedem Paketverlust die slow-start Phase von Anfang an durchlaufen werden muss, wurde 1990 dieser Algorithmus von Van Jacobson entwickelt. 119 14 TCP Flow Control und Congestion Avoidance Abbildung 14.4: Entwicklung der Größe des congestion windows 120 14.4 End-to-End Congestion Control Er macht sich zunutze, daß TCP nach Erhalt eines (Daten-) Segments außerhalb der Reihenfolge sofort ein acknowledgement (ACK) mit der Sequenznummer des letzten in Reihenfolge erhaltenen Segments schickt. Sobald ein ACK beim Sender doppelt ankommt verändert dieser die Variablen CongWin und Schwellwert nicht mehr. Nachdem drei solcher Duplikat-ACKs beim Sender angekommen sind, geht dieser davon aus, daß ein Paket nicht nur verspätet beim Empfänger eintrifft, sondern tatsächlich verlorengegangen ist. Das ist meist vor dem Ablaufen des RTT-Timers der Fall, trotzdem wird sofort eine retransmission geschickt (darum: fast retransmit). Die Variablen werden nun wie folgt geändert: • Schwellwert = allowed window 2 • CongW in = Schwellwert + 3 · M SS Wenn weiterhin Duplikate ankommen wird jedes mal das congestion window um 1 MSS erhöht und ein neues Segment verschickt, sofern die neue window Größe dies zulässt. Es ist zulässig neue Segmente trotz des verlorenen Pakets zu schicken, weil das Ankommen neuer Duplikat-ACKs beim Sender bedeutet, daß Segmente, die nach dem verlorenen geschickt wurden, beim Empfänger angekommen sind. Darum wird auch nach Erhalt der 3 Duplikat ACKs das congestion window halbiert (zur Stauvermeidung), um dann wieder um 3 MSS vergrößert zu werden (weil nach dem verlorenen wieder drei Segmente angekommen sind). Sobald das erste ACK beim Sender ankommt, daß neue Daten bestätigt (eine höhere Sequenznummer hat als die Duplikate) wird • CongW in = Schwellwert gesetzt und normal mit congestion avoidance weitergesendet (darum: fast recovery). 14.4.4 Beispiel Am Beispiel in Abbildung 14.5 kann man die Funktionsweise der oben beschriebenen Algorithmen nachvollziehen. Alle Angaben in diesem Abschnitt sind in bytes (Abbildung und Text). Das Segment 45 geht verloren. Der Empfänger merkt das daran, daß zwischen den Segmenten 43 und 46 eine Lücke in den Sequenznummern vorhanden ist. Nach dem Empfang von Segment 46 schickt der Empfänger sofort ein Duplikat-ACK (Segment 60) zurück. Genauso verfährt er immer wenn ein Segment ankommt, daß die Lücke nicht schließt. Der Sender verändert die Variablen (CongWin und Schwellwert) nicht mehr, nachdem er Segment 60 empfangen hat (siehe Tabelle unten in Abbildung 14.5). Erst nachdem er Seg- 121 14 TCP Flow Control und Congestion Avoidance Abbildung 14.5: Congestion Avoidance - Beispielgrafik 122 14.5 Network-Assisted Congestion Control ment 62, das dritte Duplikat-ACK, empfangen hat, setzt er Schwellwert = 1024 und CongW in = 1792; wegen: • Schwellwert = allowed2window = von MSS (hier 256) 2426 2 = 1024 (Abgerundet auf das nächste Vielfache • CongW in = Schwellwert + 3 · M SS = 1024 + 3 · 256 = 1792 und sendet eine retransmission des Segments, das auf die Sequenznummer der DuplikatACKs folgt. Die nächsten empfangenen Duplikat-ACKs (Segmente 64-66, 68, 70) bewirken jeweils eine Erhöhung des congestion windows um eine MSS (256). Mit Segment 72 wird das erste ACK empfangen, das neue Daten bestätigt (Sequenznummer höher als Duplikat-ACKs). Jetzt wird CongW in = Schwellwert gesetzt und weil CongW in ≤ Schwellwert nach dem slow-start Algorithmus eine MSS addiert, was einen Wert von 1280 ergibt. Nach Empfang des nächsten ACKs (nicht mehr in Abbildung 14.5 enthalten) wird der congestion avoidance Algorithmus benutzt, also bleibt der Schwellwert auf 1024 und das congestion window berechnet sich wie folgt: • CongW in = CongW in + • CongW in = 1280 + (256)2 1280 (Segmentgröße)2 CongW in + 256 8 + Segmentgröße 8 = 1363 (gerundet) 14.5 Network-Assisted Congestion Control Bei der network-assisted congestion control sind nur die Router des Netzwerkes zwischen Sender und Empfänger beteiligt. Hier gibt es verschiedene Möglichkeiten congestion zu vermeiden. 1. Router können eine ICMP Source Quench Message direkt an den Sender schicken, wenn ein Paket wegen überlaufen der Queue (=Puffer des Routers) verworfen werden musste. Der Sender einer TCP-Verbindung reagiert auf eine solche ICMP Message indem er • CongW in = 1 · M SS setzt und • mit unverändertem Schwellwert in die slow-start Phase übergeht 2. Mit Hilfe von Active Queue Management (AQM) können Staus erkannt werden, bevor die Queue wirklich voll ist und Pakete nach dem tail-drop Verfahren verworfen werden müssen. AQM berechnet dazu die durchschnittliche Queue-Länge, lässt also kurzzeitige Fluktuationen zu. Füllt sich die Queue jedoch längerfristig und droht 123 14 TCP Flow Control und Congestion Avoidance überzulaufen, gibt es verschiedene Methoden den Empfänger (im Gegensatz zur ICMP Source Quench Message, wo der Sender benachrichtigt wird) einer TCP-Verbindung davon in Kenntnis zu setzen: RED, ECN. Router, die AQM nicht unterstützen und nur das tail-drop Verfahren anwenden (also immer die letzten, nicht mehr in die Queue passenden Pakete verwerfen), haben den Nachteil verschiedene TCP-Verbindungen zu synchronisieren. Das passiert wenn mehrere Pakete verschiedener Verbindungen nicht mehr in die Queue passen, also gleichzeitig verworfen werden. Dann werden auch die retransmissions für diese Pakete fast gleichzeitig geschickt. Daraus ergibt sich dann, daß verschiedene Verbindungen immer zur gleichen Zeit senden und sich im Leerlauf befinden, was eine schlechte Ausnutzung der vorhandenen Kapazität des Netzwerkes bedeutet. 14.5.1 Random Early Discard (RED) Bei diesem Verfahren werden zwei Schwellwerte für die Länge der Queue eines Routers eingeführt: Tmin und Tmax . Ist die Queue Länge • unterhalb von Tmin , werden keine Pakete verworfen • oberhalb von Tmax , werden alle neu ankommenden Pakete verworfen (die beiden Werte werden so gewählt, daß dieser Zustand möglichst nie eintritt, da er wieder dem Tail-Drop Verfahren entspricht) • zwischen Tmin und Tmax , werden neu ankommende Pakete mit einer bestimmten Wahrscheinlichkeit verworfen, die höher wird je näher die Queue-Länge an Tmax herankommt und je größer das Paket ist. 14.5.2 Explicit Congestion Notification (ECN) Das ECN Verfahren nutzt die bisher nicht benötigten Bits 6 und 7 im IP ToS(Type of Service)-Feld. Am Anfang einer Verbindung handeln Sender und Empfänger ihre ECNFähigkeit aus. Sind beide ECN-fähig, setzt der Sender jeweils das Bit 6 um den Routern die ECN-Fähigkeit der Verbindung anzuzeigen. Sobald eine Queue droht überzulaufen, setzt der Router das sog. congestion experienced (CE) Bit 7 um dem Empfänger den Stau anzuzeigen. Dieser kann dann sein congestion window entsprechend verkleinern. Dieses Verfahren ist besonders effektiv, da nicht auf Paketverlust und damit auf Ablaufen eines Timers oder 3 Duplikat-ACKs gewartet werden muss. 124 KAPITEL 15 Telnet und rlogin Thomas Bekel 15.1 Einleitung Applikationen, die dem Benutzer die Möglichkeit bieten, sich über eine TCP/IP-Verbindung auf Rechnern einzuloggen, werden allgemein als remote login applications bezeichnet.[33] Die beiden am häufigsten verwendeten sollen hier vorgestellt werden: telnet und rlogin. Telnet ist eine der ältesten Internet Applikationen überhaupt, erste Implementierungen fanden sich bereits 1969 (im ARPANET). Inzwischen ist telnet als Standardapplikation in nahezu jeder TCP/IP-Implementierung zu finden. Der Name ist eine Abkürzung für telecommunications network protocol“. ” Rlogin stammt aus dem Berkeley Unix. Es war ursprünglich nur für die Verwendung auf Unix-Systemen vorgesehen, ist aber inzwischen auch auf andere Betriebssysteme portiert worden. 15.2 Telnet-Protokoll Das Telnet-Protokoll entspricht in seinem Aufbau dem typischen TCI/IP-Client-ServerModell. Der Telnet Client baut eine (einzige) TCP-Verbindung zum Server auf. Die Tasta- 125 15 Telnet und rlogin Telnet client Telnet server login shell pseudo− terminal TCP/IP driver TCP/IP terminal driver kernel kernel TCP connection user at a terminal Abbildung 15.1: Client-Server-Modell tureingaben am Client werden direkt an den Server übertragen.[7] Die resultierende Bildschirmausgabe wird über die selbe TCP-Verbindung zum Client übermittelt. Mittels eines einfachen Terminal Standards, dem NVT ASCII, geschieht die Datenübertragung zwischen Client und Server. Hierbei können vier verschiedene Übertragungsmodi verwendet werden, die mittels option negotiation eingestellt werden und verschiedene Telnet-Kommandos verwenden. 15.2.1 Client-Server-Modell Das in Abbildung 15.1 schematisch dargestellte Client-Server-Modell besteht aus mehreren Komponenten: Der Telnet-Client auf der linken Seite der Abbildung ist ein Programm, das über zwei Verbindungen mit Elementen des Kernels im Client-System verbunden ist. Eine Verbindung besteht über den Terminal-Treiber des Betriebssystems hin zum Benutzer. Die andere Verbindung wird über den TCP/IP Stack des Kernels und eine TCPVerbindung zum Server-System aufgebaut. Dort wird der Telnet-Server über den TCP/IPTreiber im Kernel angesprochen. Der Telnet-Server bietet die Benutzer-Schnittstelle zum Server-System – die login shell – über einen Pseudo-Terminal-Treiber an. Deutlich sieht man in der Abbildung, daß sowohl der Telnet-Client als auch der Telnet-Server Programme außerhalb des System Kernels sind, also auf Applikationsebene (im sogenannten user space) laufen. Aufgrund dieses modularen Aufbaus können einzelne Komponenten leicht dynamisch ausgetauscht werden. Der Server kann z. B. andere Programme anstelle von telnet und login shell starten. Telnet Verbindungen auf verschiedene Ports des Server-Systems entsprechen verschiedenen Programmen auf dem Telnet-Server, sogenannten Systemdiensten oder services 1. Die Plazierung des Telnet-Servers auf Applikationsebene hat auch Nachteile: So ist es z. B. offensichtlich ineffizient, daß jede Tastatureingabe des Benutzers zwischen den einzelnen Elementen des Modells übertragen werden muss. Insbesondere bei den Über1 Die entsprechenden Zuordnungen zwischen Ports und Diensten werden bei Unix-Systemen in der Regel in der Datei /etc/services festgelegt. 126 15.2 Telnet-Protokoll gängen zwischen kernel- und user-space sind zahlreiche process context switches notwendig. Diese sind unter anderem für die begrenzte Geschwindigkeit von Telnet-Applikationen verantwortlich. 15.2.2 NVT ASCII Beim Telnet Protokoll kommunizieren Client und Server mit Hilfe eines einfachen Standards, dem Network Virtual Terminal, oder NVT ASCII. Dieser besteht aus einem 7-Bit U.S.-Zeichensatz, wobei jedes 7-Bit Zeichen 8-bittig übertragen wird. Das high-order Bit ist – sofern keine protokollspezifischen Kommandos eingeleitet werden sollen – auf Null gesetzt. Das Telnet Programm auf der Clientseite sollte die 7-Bit Zeichen entsprechend des (lokal) verwendeten Zeichensatzes umsetzen, um sie auf dem Bildschirm darzustellen. Außerdem sind die Tastatureingaben auf den NVT ASCII Standard umzusetzen. Ein Zeilenende wird als carriage return gefolgt von linefeed übertragen, ein normaler Wagenrücklauf“ als car” riage return und einem anschließenden Null-Byte. NVT ASCII wird auch bei vielen anderen Protokollen und Applikationen verwendet, z. B. FTP, SMTP, Finger oder Whois. 15.2.3 Telnet-Kommandos Protokollspezifische Kommandos werden – da nur eine TCP-Verbindung vorhanden ist – innerhalb der normalen Kommunikation übertragen. Jedes Kommando wird durch ein 0xFFByte eingeleitet. Das zu übertragende Kommando wird anschließend (als Byte kodiert) übermittelt. Dieses Verfahren wird als in-band signaling bezeichnet, das 0xFF-Byte wird IAC (interpret as command) genannt. Eine Übersicht der Komanndos zeigt Tabelle 15.1. 15.2.4 Option Negotiation Das Telnet-Protokoll bietet Client und Server die Möglichkeit der option negotiation, also die Möglichkeit, Optionen auszuhandeln. Beide Seiten dürfen hierbei gleichermaßen – symmetrisch – einzelne Parameter anbieten, fordern, akzeptieren oder ablehnen. Hierzu werden die Kommandos 240 und 250-254 verwendet. Tabelle 15.2 soll den Prozeß des Aushandelns verdeutlichen. Wie man in Tabelle 15.2 sieht, existieren insgesamt sechs Szenarien der option negotiation: Die Aktivierung einer Option kann sowohl positiv als auch negativ beantwortet werden, so daß hierbei vier Möglichkeiten entstehen. Das Deaktivieren einer Option muß immer bestätigt werden, woraus die beiden letzten Szenarien in der Tabelle resultieren. Inzwischen sieht das Telnet-Protokoll mehr als 40 Optionen vor, die mittels option negotiation ausgehandelt werden können. Einige, wie z. B. der Terminal Typ, die Terminal Geschwindigkeit, die Fenstergröße oder Umgebungsvariablen, benötigen mehr Parameter als das reine Ein- oder Ausschalten. Diese sogenannten suboptions werden nach positiver 127 15 Telnet und rlogin Aushandlung mittels begin suboption (Kommando 240) und end suboption (Kommando 250) eingeleitet bzw. beendet. 15.2.5 Übertragungsmodi Für die Datenübertragung zwischen Telnet-Client und -Server gibt es vier verschiedene Modi. Diese unterscheiden sich in der Kombination verschiedener protokollspezifischer Optionen, die mittels option negotiation eingestellt werden. Half-duplex Dieser Übertragungsmodus ist der einfachst mögliche und somit in jedem Telnet Programm implementiert. Charakteristisch ist, daß Tastatureingaben vom Client nur nach Aufforderung durch den Server möglich sind. Hierzu wird das Telnet-Kommando GO AHEAD verwendet. Zeichenweise Übertragung – character at a time“ ” Code dez. hex. Name EOF SUSP ABORT EOR SE NOP DM BRK IP AO AYT EC EL GA SB WILL WONT DO DONT IAC 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 0xEC 0xED 0xEE 0xEF 0xF0 0xF1 0xF2 0xF3 0xF4 0xF5 0xF6 0xF7 0xF8 0xF9 0xFA 0xFB 0xFC 0xFD 0xFE 0xFF Beschreibung end-of-file suspent current process abort process end of record suboption end no operation data mark break interrupt process abort output are you there? escape character erase line go ahead suboption begin option negotiation option negotiation option negotiation option negotiation interpret as command Tabelle 15.1: Telnet-Kommandos 128 15.2 Telnet-Protokoll Die zeichenweise Datenübertragung wird durch Aktivierung der Optionen SUPPRESS GO AHEAD und ECHO erreicht. Jedes Zeichen, das vom Client zum Server übertragen wird, wird mittels echo quittiert. Obwohl hierbei offensichtlich Überschneidungen zwischen Daten beider Richtungen auftreten, ist dies der Standardübertragungsmodus. ‘Improvisierte’ zeilenweise Übertragung – line at a time“ ” Dieser Modus, auch kludge line mode genannt, wird verwendet, wenn keine der beiden für den zeichenweisen Übertragungsmodus notwendigen Optionen aktiviert wurde. ‘Echte’ zeilenweise Übertragung – linemode“ ” Neuere Telnet-Implementierungen unterstützen diesen Modus, der als solcher mittels option negotiation ausgehandelt wird. Alle Mängel der anderen zeilenweisen Übertragung treten hier nicht auf. 15.2.6 Beispiel-Session Abbildung 15.2 auf Seite 130 zeigt das Protokoll einer Telnet-Session. Zur besseren Übersicht sind die Zeilen numeriert worden. Die Befehle, sowie (Tastatur-)Ein- und (Bildschirm)Ausgaben werden im folgenden ausführlich erläutert: Sender WILL WILL DO DO WONT DONT Empfänger Beschreibung → ← DO Sender will eine Option aktivieren Empfänger stimmt zu → ← DONT Sender will eine Option aktivieren Empfänger lehnt ab → ← WILL Sender bittet Empfänger, eine Option zu aktivieren Empfänger stimmt zu → ← WONT Sender bittet Empfänger, eine Option zu aktivieren Empfänger lehnt ab → ← DONT Sender will eine Option deaktivieren Empfänger muß zustimmen → ← WONT Sender bittet Empfänger, eine Option zu deaktivieren Empfänger muß zustimmen Tabelle 15.2: Sechs Szenarien der Option Negotiation 129 15 Telnet und rlogin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 jake:~>telnet telnet> toggle options Will show option processing. telnet> open localhost echo Trying 127.0.0.1... Connected to localhost. Escape character is ’^]’. abcdef abcdef ^] telnet> mode character SENT DO SUPPRESS GO AHEAD SENT DO ECHO RCVD DO SUPPRESS GO AHEAD SENT WILL SUPPRESS GO AHEAD RCVD DO ECHO SENT WONT ECHO RCVD WILL SUPPRESS GO AHEAD RCVD WONT ECHO aabbccddeeff^] telnet> mode line SENT DONT SUPPRESS GO AHEAD SENT WILL LINEMODE RCVD DONT SUPPRESS GO AHEAD SENT WONT SUPPRESS GO AHEAD RCVD WILL LINEMODE SENT DONT LINEMODE RCVD WONT SUPPRESS GO AHEAD RCVD DONT LINEMODE abcdef abcdef ^] telnet> close Connection closed. telnet> quit jake:~> Abbildung 15.2: Protokoll einer Telnet-Session 130 15.2 Telnet-Protokoll Zeile 1: Der Aufruf des Telnet-Programms erfolgt am Unix-Prompt (jake:~>) mit dem Befehl telnet. Zeile 2: An der Eingabe-Aufforderung, dem Telnet-Prompt (telnet>) wird der Befehl toggle options eingegeben. Dies bewirkt, daß die Befehle und Antworten der option negotiation ausführlich ausgegeben werden. Zeile 3: Hier wird der letzte Befehl bestätigt. Zeile 4: Am folgenden Prompt wird der Befehl open localhost echo eingegeben. Damit wird eine Verbindung zum Systemdienst echo auf dem Rechner localhost initiiert. Der Systemdienst (oder service) echo beantwortet jegliche Eingabe mit der selben Ausgabe, also mit einem exakten Echo. Zeilen 5–7: Die Ausgaben des Verbindungsaufbaus werden angezeigt. Wichtig ist hier die Angabe des escape characters (^]), der zum Erreichen des Telnet-Prompts in der laufenden Session eingegeben werden muss. Zeile 8: Die Zeichenkette abcdef (gefolgt von carriage return) wird eingegeben. Zeile 9: Der service echo des Telnet-Servers beantwortet diese Eingabe durch Ausgabe der selben Zeichenkette. Zeile 10: Als nächstes wird der escape character ^] eingegeben. Zeile 11: Am Telnet-Prompt wird der Befehl mode character eingegeben, um vom zeilenweisen in den zeichenweisen Übertragungsmodus zu wechseln. Dies geschieht mittels option negotiation, wie man in den folgenden Zeilen der Ausgabe sehen kann. Zeilen 12+13: Der Telnet-Server wurde aufgefordert, die Optionen SUPPRESS GO AHEAD und ECHO zu aktivieren. Zeilen 14+15: Der Telnet-Server hat den Client ebenfalls aufgefordert, die Option SUPPRESS GO AHEAD zu aktivieren. Dies wird vom Client sofort positiv beantwortet. Zeilen 16+17: Der Client wird aufgefordert, die Option ECHO zu aktivieren. Der Client lehnt dies jedoch ab. Zeilen 18+19: Der Telnet-Server beantwortet die Optionen (der Zeilen 12+13): SUPPRESS GO AHEAD wird bestätigt, ECHO jedoch abgelehnt. Zeile 20: Erneut wird die Zeichenkette abcdef eingegeben. Aufgrund des zeichenweisen Übertragungsmodus wird nun jedes einzelne Zeichen direkt nach der Eingabe (von echo) wiederholt. Die Eingabe wird mit dem escape character ^] beendet, um erneut zum Telnet-Prompt zu gelangen. Zeile 21: Mittels mode line soll zurück zur zeilenweisen Übertragung gewechselt werden. Der resultierende Vorgang der option negotiation kann in den folgenden 8 Zeilen beobachtet werden. Zeile 22+23: Der Telnet-Server wird vom Client aufgefordert, SUPPRESS GO AHEAD aus- und LINEMODE einzuschalten. 131 15 Telnet und rlogin Zeilen 24+25: Der Telnet-Client wird vom Server aufgefordert, die Option SUPPRESS GO AHEAD auszuschalten. Der Client bestätigt dies. Zeilen 26+27: Der Telnet-Server fordert vom Client, LINEMODE zu aktivieren. Dies wird abgelehnt, obwohl der Client seinerseits in Zeile 23 diese Option angeboten hat. Zeilen 28+29: Hier werden die beiden Optionen beantwortet, die der Client in den Zeilen 22+23 gefordert hat: beide (SUPPRESS GO AHEAD und LINEMODE ) werden negativ beantwortet. Die erstgenannte sollte deaktiviert werden, was der Server bestätigt hat. Die Forderung, LINEMODE zu aktivieren wurde vom Server abgelehnt. Auch hier fällt der oben genannte Widerspruch auf: Die Option LINEMODE wird abgelehnt, obwohl die Gegenseite die Aktivierung dieser Option selbst gefordert hat. Zeilen 30+31: Die Eingabe der Zeichenkette abcdef wird erneut zeilenweise mittels echo wiedergegeben. Also erfolgte eine Umschaltung zurück zum ersten (zeilenweisen) Übertragungsmodus. Zeilen 32-36: Mit Hilfe des escape characters wird zum Telnet-Prompt gewechselt. An diesem wird der Befehl close eingegeben, so daß die Verbindung beendet wird. Der folgende quit-Befehl beendet schließlich die Telnet-Session, und man gelangt zurück zum Unix-Prompt. Zusammenfassung der Beispiel-Session Am oben erläuterten Beispiel einer Telnet-Session lassen sich unterschiedliche Übertragungsmodi und deren Aushandlung per option negotiation beobachten. Der zeichenweise Übertragungsmodus, der in der Session mittels mode character eingestellt wird, entspricht dem bereits erläuterten character at a time Modus. Die Optionen SUPPRESS GO AHEAD und ECHO werden hierzu verwendet. Mittels mode line wird der kludge line Modus ausgehandelt, der auf Seite 129 erklärt wird. Warum kein echter“ Linemode ausgehandelt wird, ” ist unklar. Client und Server bieten sich die entsprechende Option gegenseitig an, lehnen sie jedoch anschließend wieder ab. Wie bereits gesagt, unterstützen nur neuere TelnetImplementierungen linemode, so daß der mode line Befehl auf anderen (neueren) UnixSystemen zu einem anderen Modus führen kann als in der oben protokollierten Session. 15.3 Rlogin-Protokoll Rlogin wurde zuerst mit 4.2 BSD Unix vorgestellt und war zunächst nur als remote login application zwischen Unix Systemen vorgesehen. Deshalb kommt es mit einem einfacheren Protokoll als telnet aus, da z. B. keine option negotiation notwendig ist, wenn die Betriebssysteme auf Client- und Serverseite im voraus bekannt sind. Inzwischen sind auch rlogin Implementierungen für nicht-Unix Systeme vorhanden. 132 15.3 Rlogin-Protokoll 15.3.1 Aufbau der Verbindung Rlogin benutzt eine einzige TCP-Verbindung zwischen Client und Server. Nachdem die normale TCP-Verbindung aufgebaut ist, findet gemäß Rlogin Protokoll folgende Kommunikation statt: 1. Der Client sendet vier Zeichen(folgen) zum Server: ein zero-Byte, den Benutzernamen auf dem Clientsystem gefolgt von einem zero-Byte, den Benutzernamen auf dem Serversystem gefolgt von einem zero-Byte, sowie den Namen des Terminaltyps gefolgt von einem /“, der Terminalgeschwindigkeit und schließlich noch einem zero-Byte. ” 2. Der Server antwortet mit einem zero-Byte. 3. Der Server kann bei Bedarf nach dem Passwort des Benutzers fragen. Dieses wird anschließend innerhalb der normalen Datenübertragung – also im Klartext – gesendet. Inzwischen gibt es rlogin Implementierungen, die die Passwortübertragung mittels Kerberos ermöglichen. 4. Der Server sendet normalerweise noch eine Anfrage bzgl. der Fenstergröße des ClientTerminals. 15.3.2 Rlogin-Kommandos Wie bei telnet existieren auch hier protokollspezifische Kommandos, die innerhalb der normalen Datenübertragung gesendet werden. Man unterscheidet server to client und client to server Kommandos. Aufgrund des recht einfachen Protokolls existieren nur wenige Kommandos. Diese werden mittels urgent mode übertragen, einem TCP-spezifischen Übertragungsmodus. Server to client“ Kommandos ” Sobald der Server ein Kommando zum Client schickt, wird dieses als letztes Byte der urgent data gesendet. Der Client reagiert entsprechend des Protokolls auf das Kommando. Tabelle 15.3 zeigt eine Liste dieser Kommandos. Client to server“ Kommandos ” Derzeit ist nur ein einziges client to server Kommando definiert, die Übertragung der aktuellen Fenstergröße. Dies geschieht, wie bereits erwähnt, nach Aufforderung durch den Server oder bei Änderung der Fenstergröße. Sendet der Client ein Kommando zum Server, wird dies mittels in-band signaling angekündigt. Dabei wird das Kommando durch 0xFF eingeleitet. Serverseitig muß daher das gesamte Datenaufkommen nach diesen Bytes untersucht werden. Clientseitig ist eine derartige Kontrolle nicht notwendig, da Komman- 133 15 Telnet und rlogin Byte Beschreibung 0x02 flush output“, der Client wird aufgefordert, alle Daten bis zum ” Kommando-Byte zu verwerfen. Außerdem verwirft der Client alle noch gepufferten Terminal Ausgabe Daten. Dieses Kommando sendet der Server, wenn der interrupt key vom Client empfangen wird. 0x10 stop flow control“, der Client unterbricht die Steuerung der Da” tenübertragung (flow control ). 0x20 resume flow control“, der Client nimmt die Steuerung der Daten” übertragung wieder auf. 0x80 send window size“, der Client wird aufgefordert, die aktuelle Fen” stergröße anzugeben. Außerdem sollen zukünftige Änderungen der Fenstergröße dem Server mitgeteilt werden. Dieses Kommando wird normalerweise immer nach erfolgreichem Verbindungsaufbau und erfolgter Anmeldung des Benutzers gesendet. Tabelle 15.3: Server to client“ Kommandos ” dos vom Server mittels out-of-band signaling angekündigt werden, also mit Hilfe des TCP urgent modes. 134 KAPITEL 16 File Transfer Protocol (FTP) Zaruhi Aydinyan 16.1 Einführung Der Transport von Daten aller Art erfolgt im Internet mit dem Programm FTP. Während Telnet nach dem Aufbau der Verbindung zwischen Client und Server lediglich das interactive Ausführen von Programmen auf dem Zielsystem ermöglicht, können mit dem FTP Dateien zwischen den Systemen kopiert werden. Der komplette Vorgang der Dateiübertragung wird dabei von der Client-Seite gesteuert. Voraussetzung für eine erfolgreiche Übertragung ist eine Zugangsberechtigung für das Zielsystem, die im Rahmen des Verbindungsaufbaues mit FTP mittels User-Identifikation und Passwort überprüft wird. 16.2 FTP Protocol FTP unterscheidet sich von den anderen Applikationen, weil es dabei zwei TCP Verbindungen benutzt, um Dateien zu übertragen: control connection und data connection: 135 16 File Transfer Protocol (FTP) Abbildung 16.1: client user at a terminal user interface server user control connection protocol interpreter (FTP commands) (FTP replies) user file system data transfer function data connection server protocol interpreter server data transfer file system function 16.2.1 The control connection Server macht ein ”passive open” auf dem Port für FTP (21) und erwartet die Verbindung von der Client-Seite. Client macht ein ”active open” für TCP vom Port (21) um control connection zu bestätigen. Die control connection bleibt offen für die Zeit der Kommunikation zwischen Client und Server. Dieser Typ der Verbindung wird für die Übertragung von den Befehlen vom Client zum Server und für die Replies vom Server benutzt. 16.2.2 The data connection Eine data connection wird jedes mal aufgebaut, wenn eine Dateiübertragung zwischen Client und Server stattfindet. Die Figure 16.1 stellt Aufbau von Client und Server und die beiden obengenannten Verbindungen dar. Diese Zeichnung zeigt, dass interaktiver User normalerweise sich nicht mit den Befehlen und Antworten beschäftigt, die über control connection ausgetauscht werden. Damit beschäftigen sich die beiden protocol interpreters. User interface präsentiert, welche Art von interface für den interaktiven User wünschenswert ist, und verwandelt es in FTP commands, die über control connection gesendet werden. Ebenso replies, die vom Server über control connection kommen, können in jedes gewünschte Format verwandelt werden. Also, 136 16.3 Data Representation es gibt zwei protocol interpreters, die zwei Dateiübertragungsfunktionen steuern. 16.3 Data Representation Um die Weise von der Dateiübertragung und Dateiaufbewahrung zu steuern gibt es in FTP verschiedene Optionen: 1. File Typ • ASCII File Typ (Default) • EBCDIC File Typ • Image File Typ oder Binär • Local File Typ 2. Format Control • Nonprint (Default) • Telnet Format Control • Fortran Carriage Control 3. Struktur • File Struktur (Default) • Record Struktur • Page Struktur 4. Transmission Mode • Stream Mode (Default) • Block Mode • Compressed Mode Aber zur Zeit sind viele Optionen schon veraltet und werden nicht mehr benutzt, deshalb kann man viele Optionen einfach ignorieren. Normalerweise benutzt man folgende Optionen: 1. File Typ - ASCII oder Binär. Im ersten Fall wird Textdatei über data connection in NVT ASCII gesendet. Im zweiten Fall wird Datei als einen kontinuerlichen Fluss von bits gesendet.(Diese Möglichkeit wird normalerweise verwendet um die binären Dateien zu übertragen). 2. Format Control - Nonprint (Default). 137 16 File Transfer Protocol (FTP) 3. Struktur - File Struktur. Die Datei wird als einen kontinuerlichen Fluss von bytes gesehen. Es gibt keine innere Struktur. 4. Transmission Mode - Stream Mode (Default). Die Datei wird als einen Fluss von bytes gesendet. Und wenn der Sender data connection beendet bedeutet es dann end-of-file. 16.4 FTP Commands Die Befehle und Antworten, die über control connection zwischen Client und Server gesendet werden, sind in NVT ASCII. Die Befehle sind alle 3 oder 4 bytes lang, und bestehen aus ASCII Grossbuchstabensymbolen, einige Befehle haben sogar Optionen. Es gibt mehr als 30 verschiedene FTP-Befehle, die vom Client zum Server gesendet werden können. Die folgende Tabelle stellt einige Befehle dar, die am häufigsten benutzt werden. Befehl Beschreibung ABOR Die Unterbrechung von dem vorhergehenden FTP Befehl und von der Dateiübertragung LIST filelist Listing files (directories) PASS password Passwort auf dem Server PORT n1, n2, n3, n4, n5, n6 Client IP Adresse (n1-n4) und Port (n5x256+n6) QUIT Logoff vom Server RETR filename Verschaffen von file STOR filename Speichern von file SYST Der Server gibt den Typ vom System zurück TYPE type Bestimmen vom Typ von file: A für ASCII, I für Image USER username Benutzername auf dem Server 16.5 FTP Replies FTP Replies sind 3-stellige Nummern in ASCII, mit einer Mitteilung danach. Software braucht hier nur diese Zahlen zu lesen, um Replies zu verstehen und User kann einfach die Mitteilung lesen und braucht nicht mehr sich an die Bedeutung jeder Zahl zu erinnern. Jede von den drei Positionen der Zahlen hat ihre eigene Bedeutung. Die nächste Tabelle zeigt die Bedeutungen der Zahlen von den ersten zwei Positionen. Die dritte Position gibt die Bedeutung für error message zurück. 138 16.6 Connection Management Reply 1yz 2yz 3yz 4yz 5yz x0z x1z x2z x3z x4z x5z Beschreibung Positive vorläufige Antwort (Positive preliminary reply). Die Handlung beginnt, aber es wird eine weitere Antwort erwartet vor dem Abschicken eines Befehles. Positive volle Antwort (Positive completion reply). Ein neuer Befehl kann gesendet werden. Positive zwischenzeitliche Antwort(Positive intermediate reply). Der Befehl wurde angenommen, aber es muss ein anderer Befehl gesendet werden. Vorübergehende negative volle Antwort (Transient negative completion reply). Die gefragte Handlung hat nicht stattgefunden, aber der Zustand des Fehlers ist vorübergehend, deshalb kann dieser Befehl später wiederholt werden. Ständige negative volle Antwort (Permanent negative completion reply) Der Befehl wurde nicht angenommen und soll nicht wiederholt werden. Syntax Fehler Information Verbindungen. Antworten bezogen auf Kontrolle von data connection. Authentifikation. Die Antworten für Login oder Account-Befehle. Nicht spezifiziert. Filesystem Status 16.6 Connection Management Es gibt 3 Möglichkeiten von data connection: 1. File wird vom Client zum Server gesendet 2. File wird vom Server zum Clientr gesendet 3. Liste von den Dateien wird vom Server zum Client gesendet Wir wissen schon, dass control connection bleibt offen für die Zeit der Kommunikation zwischen Client und Server, data connection dagegen findet nur statt, wenn es danach verlangt wird. Jetzt ist die Frage: Wie werden die Port-Nummern für die data connection gewählt und wer macht ”passive open” und wer macht ”active open”? Wir haben schon gesehen, dass gewöhnliche Transmission Mode ist Stream Mode (bei UNIX ist es sogar die einzige Möglichkeit), und in diesem Fall end-of-file bedeutet auch das Ende von data connection. Dies heisst, dass für jede Dateiübertragung soll eine neue Verbindung gebaut werden. Normalerweise wird das alles in 4 Schritten gemacht: 1. Der Aufbau von data connection ist unter Kontrolle vom Client, weil der kann Befehle senden, die nach data connection verlangen. 139 16 File Transfer Protocol (FTP) 2. Vom Client wird normalerweise ephemeral Port-Nummer für seine Seite von data connection gewählt. Client macht ”passive open” vom diesen Port. 3. Client sendet die Port-Nummer zum Server über control connection mit der Hilfe vom PORT-Befehl. 4. Server bekommt die Port-Nummer über control connection und macht ”active open” für diesen Port auf dem Clienthost. Die Seite vom Server benutzt für data connection immer Port 20. Die erste Zeichnung von Figure 16.2 zeigt die Zustände von connections während des dritten Schrittes. Ephemeral port vom Client für control connection ist 1173, und Ephemeral port vom Client für data connection ist 1174. Der Befehl, der vom Client gesendet wurde ist PORT Befehl und hat sechs dezimal Nummern in ASCII, die mit den Kommatan getrennt wurden. Die ersten vier Nummern spezifizieren IP Adresse vom Client, die Server benutzen soll für ”active open”, und die nächste zwei sind 16-bit Port-Nummern. Die zweite Zeichnung von Figure 16.2 zeigt die Zustände von connections, wenn Server ”active open” zur Client-Seite von data connection macht. Das Port vom Server ist Port 20. Server macht immer ”active open” für data connection. Normalerweise macht Server auch ”active close” von data connection. Ausnahme ist der Fall, wenn Client eine Datei zum Server in Stream Mode sendet. In diesem Fall wird connection von der Client-Seite beendet. 16.7 Anonymes FTP Wir wissen schon, dass um mittels FTP auf ein Fremdsystem zugreifen zu können, ist im Normalfall eine Zugangsberechtigung notwendig. Dies dient natürlich dem Schutz jener Daten, die nicht für den internetweiten Gebrauch vorgesehen sind. Für alle anderen Daten, die diesen Schutz nicht benötigen und die für alle Internetbenutzer zugängig sein sollen, gibt es eine besondere Form von FTP, die den Zugriff auf Daten ohne Passwort ermöglicht und zwar: anonymes FTP. Über das gesamte Internet verteilt gibt es FTP File Server, die anonymen Zugriff auf ihre Dateiarchive ermöglichen. Die dazu notwendige Benutzeridentifikation ist immer ”anonymous” und als Passwort genügt die Eingabe der eigenen e-mail Adresse. 16.8 Ephemeral Data Port Wir wissen schon, dass normalerweise vom Client für seine Seite von data connection ephemeral Port-Nummer gewählt wird, die danach mit dem PORT-Befehl bestätigt sein soll. Was passiert, wenn Client keinen PORT-Befehl zum Server sendet, um die Port-Nummer zu bestätigen? 16.9 Default Data Port In dem Fall, wenn Client keinen PORT Befehl zum Server sendet, um die PortNummer von der Client-Seite zu bestätigen, benutzt Server automatisch die gleiche 140 16.9 Default Data Port Abbildung 16.2: FTP server FTP client (control connection) port 1173 PORT 140,252,13,34,4,150\ r\ n -> port 21 port 1174 (passive open) IP addr 140.252.13.34 FTP client FTP server (control connection) port 1173 port 1174 (passive open) port 21 SYN to 140.252.13.34, port20 port 1174 (active open) IP addr 140.252.13.34 141 16 File Transfer Protocol (FTP) Port-Nummer für data connection, die für control connection früher benutzt wurde. Und dies kann viele Probleme verursachen für Client, der in Stream Mode arbeitet. 16.10 FTP Beispiel Wir werden jetzt eine FTP Session mit ftp.uni-bielefeld.de betrachten. Alle Zeilen, die mit ---> anfangen, sind die Befehle vom Client zum Server und die Zeilen, die mit 3 Ziffern beginnen, sind Replies vom Server. Normalerweise generiert jeder FTPBefehl one-line Reply, aber wenn es multiline Reply gebraucht wird, dann enthält die erste Zeile Strich anstatt Leerzeichen und die letzte Zeile enthält dann die gleichen 3-stellige Ziffern und danach Leerzeichen. cab:~>ftp ftp.uni-bielefeld.de Connected to share.hrz.uni-bielefeld.de. 220 share.hrz.uni-bielefeld.de FTP server (Version wu-2.6.1(1) Fri Jul 27 11:41:07 METDST 2001) ready. Name (ftp.uni-bielefeld.de:tbekel): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: 230-Welcome to 230FTP.Uni-Bielefeld.DE 230-------------------230230Local time: Fri Jan 18 14:09:43 2002 230Current working dir: / 230Remote Host Name: cab.Genetik.Uni-Bielefeld.DE 230Maximum Number of Users: 30 230Current Number of Users: 1 230Administrator’s Email Address: [email protected] 230230-This server supports on-the-fly tar and compression of directories and 230-files. To download a directory, simply request directoryname.tar.gz! 230-Be carefull with links, cause tar doesn’t follow links! 230230-ATTENTION: Due to the illegal distribution of stolen software, the 230incoming directory of this site is CLOSED for DOWNLOADS. 230If you want to UPLOAD something which should be downloadable, 230contact the administrator (see above for address)! 230230 Guest login ok, access restrictions apply. ftp> debug Debugging on (debug=1). ftp> dir ---> PORT 129,70,160,44,215,2 200 PORT command successful. ---> LIST 142 16.10 FTP Beispiel 150 Opening ASCII mode data connection for /bin/ls. total 167956 drwxr-xr-x 15 root root 1024 Dec 20 14:39 . drwxr-xr-x 15 root root 1024 Dec 20 14:39 .. drwxr-xr-x 11 root sys 1024 Jul 16 2001 .mnt0 drwxrwxr-x 9 root mathematik 8192 Jun 14 2000 .mnt1 drwxrwsr-x 12 root techfak 512 Jun 11 1997 .mnt2 drwxr-xr-x 2 root sys 96 Jul 12 1999 .mnt3 drwxr-xr-x 2 root sys 96 Jul 12 1999 .mnt4 drwxr-xr-x 2 root sys 96 Jul 12 1999 .mnt5 ---------1 root sys 0 Sep 1 1999 .notar d--x--x--x 2 root sys 96 Jul 12 1999 bin drwxr-xr-x 2 root sys 96 Dec 20 14:39 dev d--x--x--x 3 root sys 96 Jul 12 1999 etc lrwxr-xr-x 1 root sys 5 Aug 2 1999 ftp.hrz -> .mnt0 drwxrwxrwt 33 ftpincom rest 5120 Jan 17 22:01 incoming drwxr-xr-x 2 root root 96 Jun 28 1999 lost+found -rw-r--r-1 root sys 76446235 Jan 18 00:47 ls-lR -rw-r--r-1 root sys 9435207 Jan 18 00:50 ls-lR.gz dr-xr-xr-x 5 root sys 1024 Jul 16 2001 pub -rw-r--r-1 root sys 352256 Jan 12 23:26 quotas d--x--x--x 4 root sys 96 Aug 31 1999 usr 226 Transfer complete. 1322 bytes received in 0.037 seconds (34.53 Kbytes/s) ftp> cd pub ---> CWD pub 250 CWD command successful. ftp> dir ---> PORT 129,70,160,44,215,14 200 PORT command successful. ---> LIST 150 Opening ASCII mode data connection for /bin/ls. total 8 dr-xr-xr-x 5 root sys 1024 Jul 16 2001 . drwxr-xr-x 15 root root 1024 Dec 20 14:39 .. lrwxr-xr-x 1 root sys 13 Feb 21 2000 CPAN -> ../.mnt0/CPAN lrwxr-xr-x 1 root sys 12 Jul 30 1999 X11 -> ../.mnt2/X11 lrwxr-xr-x 1 root sys 19 Jul 30 1999 benchmarks -> ../.mnt0/benchma lrwxr-xr-x 1 root sys 15 Aug 16 1999 crypto -> ../.mnt0/crypto lrwxr-xr-x 1 root sys 15 Jul 30 1999 dialin -> ../.mnt0/dialin lrwxr-xr-x 1 root sys 13 Jul 16 2001 elsa -> ../.mnt0/elsa lrwxr-xr-x 1 root sys 12 Jul 30 1999 gnu -> ../.mnt2/gnu lrwxr-xr-x 1 root sys 17 Jul 30 1999 graphics -> ../.mnt2/graphics lrwxr-xr-x 1 root sys 20 Jul 30 1999 infosystems -> ../.mnt2/infosy lrwxr-xr-x 1 root sys 17 Jul 30 1999 math -> ../.mnt1/pub/math lrwxr-xr-x 1 root sys 17 Jul 30 1999 netscape -> ../.mnt0/netscape lrwxr-xr-x 1 root sys 19 Jul 30 1999 networking -> ../.mnt2/network 143 16 File Transfer Protocol (FTP) dr-xr-xr-x 2 root sys 1024 Jul 30 1999 papers lrwxr-xr-x 1 root sys 20 Jul 30 1999 programming -> ../.mnt2/p dr-xr-xr-x 2 root sys 96 Jul 30 1999 projects lrwxr-xr-x 1 root sys 15 Jul 30 1999 sysadm -> ../.mnt2/sysadm dr-xr-xr-x 2 root sys 1024 Feb 11 2000 systems lrwxr-xr-x 1 root sys 16 Jul 30 1999 tex -> ../.mnt1/pub/tex lrwxr-xr-x 1 root sys 19 Aug 4 1999 y2kpatches -> ../.mnt0/y2 226 Transfer complete. 1723 bytes received in 0.079 seconds (21.36 Kbytes/s) ftp> cd tex ---> CWD tex 250-Please read the file README.archive-features 250- it was last modified on Mon Oct 7 00:00:00 1996 - 1927 days ago 250-Please read the file README.mirrors 250- it was last modified on Thu Jan 3 16:16:00 2002 - 15 days ago 250-Please read the file README.site-commands 250- it was last modified on Fri Apr 8 00:00:00 1994 - 2840 days ago 250-Please read the file README.structure 250- it was last modified on Tue May 11 11:58:00 1999 - 982 days ago 250-Please read the file README.uploads 250- it was last modified on Thu Dec 30 11:00:00 1999 - 749 days ago 250 CWD command successful. ftp> dir ---> PORT 129,70,160,44,215,44 200 PORT command successful. ---> LIST 150 Opening ASCII mode data connection for /bin/ls. total 480 drwxrwxr-x 20 862 mathematik 8192 Jan 18 00:31 . drwxrwxr-x 7 root mathematik 8192 Oct 25 09:16 .. -rw-rw-r-1 862 mathematik 394 Oct 2 1998 .index.cgi -rw-rw-r-1 862 mathematik 356 Mar 9 1995 CTAN-search.html -rw-rw-r-1 862 mathematik 5552 Jan 3 16:16 CTAN.sites -rw-rw-r-1 862 mathematik 4574586 Jan 17 01:21 FILES.bydate -rw-rw-r-1 862 mathematik 4574586 Jan 17 01:21 FILES.byname -rw-rw-r-1 862 mathematik 4574586 Jan 17 01:21 FILES.bysize -rw-rw-r-1 862 mathematik 4953 Jan 17 01:21 FILES.last07days -rw-rw-r-1 862 mathematik 3372 Oct 7 1996 README.archive-features lrwxrwxrwx 1 862 mathematik 10 Jan 5 2000 README.mirrors -> CTAN.si -rw-rw-r-1 862 mathematik 1012 Apr 8 1994 README.site-commands -rw-rw-r-1 862 mathematik 3531 May 11 1999 README.structure -rw-rw-r-1 862 mathematik 4133 Dec 30 1999 README.uploads lrwxr-xr-x 1 root mathematik 5 Sep 22 1999 archive-tools -> tools drwxrwxr-x 4 862 mathematik 8192 Sep 22 1999 biblio lrwxr-xr-x 1 root mathematik 6 Sep 22 1999 bibliography -> biblio lrwxr-xr-x 1 root mathematik 14 Sep 22 1999 dante -> usergrps/dante drwxrwxr-x 14 862 mathematik 8192 Sep 24 1999 digests 144 16.10 FTP Beispiel lrwxr-xr-x 1 root mathematik 4 Sep 22 1999 documentation -> info drwxrwxr-x 57 862 mathematik 8192 May 30 2001 dviware drwxrwxr-x 147 862 mathematik 8192 Nov 3 00:20 fonts drwxrwxr-x 37 862 mathematik 8192 Aug 9 00:22 graphics drwxrwxr-x 9 862 mathematik 8192 Jan 14 00:32 help -rw-rw-r-1 862 mathematik 6868 Dec 15 20:22 index.html drwxrwxr-x 6 862 mathematik 8192 Sep 22 1999 indexing drwxrwxr-x 45 862 mathematik 8192 Nov 3 00:20 info drwxrwxr-x 50 862 mathematik 8192 Jan 9 00:32 language lrwxr-xr-x 1 root mathematik 8 Sep 22 1999 languages -> language drwxrwxr-x 33 862 mathematik 8192 May 17 2001 macros drwxrwxr-x 9 862 mathematik 8192 Sep 22 00:25 nonfree drwxrwxr-x 11 862 mathematik 8192 Nov 29 00:21 obsolete drwxrwxr-x 220 862 mathematik 8192 Jan 15 00:31 support drwxrwxr-x 21 862 mathematik 8192 Nov 13 00:24 systems drwxrwxr-x 5 862 mathematik 8192 Sep 24 1999 tds drwxrwxr-x 38 862 mathematik 8192 Apr 4 2001 tools -rw-rw-r-1 862 mathematik 5209 Nov 26 2000 upload.html drwxrwxr-x 10 862 mathematik 8192 Nov 10 00:19 usergrps drwxrwxr-x 32 862 mathematik 8192 Jun 16 2001 web 226 Transfer complete. 2786 bytes received in 0.15 seconds (18.05 Kbytes/s) ftp> type Using ascii mode to transfer files. ftp> type binary ---> TYPE I 200 Type set to I. ftp> get index.html ---> PORT 129,70,160,44,215,81 200 PORT command successful. ---> RETR index.html 150 Opening BINARY mode data connection for index.html (6868 bytes). 226 Transfer complete. local: index.html remote: index.html 6868 bytes received in 0.028 seconds (237.09 Kbytes/s) ftp> type ascii ---> TYPE A 200 Type set to A. ftp> get index.html ---> PORT 129,70,160,44,215,134 200 PORT command successful. ---> RETR index.html 150 Opening ASCII mode data connection for index.html (6868 bytes). 226 Transfer complete. local: index.html remote: index.html 7053 bytes received in 0.019 seconds (366.23 Kbytes/s) ftp> quit 145 16 File Transfer Protocol (FTP) ---> QUIT 221-You have transferred 13921 bytes in 2 files. 221-Total traffic for this session was 22955 bytes in 6 transfers. 221-Thank you for using the FTP service on share.hrz.uni-bielefeld.de. 221 Goodbye. cab:~> 16.11 Zusammenfassung FTP wird für die Dateiübertragungen benutzt. Der Unterschied zwischen FTP und anderen Applikationen besteht darin, dass FTP zwei TCP Verbindungen zwischen Client und Server benutzt: control connection für den Austausch von Befehlen und Antworten und data connection für die Dateiübertragungen. FTP benutzt NVT ASCII für alle Befehle und Antworten. Die Form von FTP, die am meisten benutzt wird, ist anonymes FTP. 146 KAPITEL 17 Simple Mail Transfer Protocol (SMTP) Christoph Liersch, Marc Eßmeier 17.1 Einleitung Das Simple Mail Transfer Protocol (SMTP) ist das verbreitetste und meistgenutzte Protokoll für den Versand von electronic mail ( E-Mail“) im Internet. Diese Ausarbeitung ” versucht zunächst einen allgemeinen Überblick über die Funktionen eines E-Mail-Systems zu geben, und geht im Anschluß darauf konkret auf SMTP ein. Dies beinhaltet einen kurzen Rückblick auf die Entstehung von SMTP in Form der für den Standard relevanten RFCs 821 und 822, welche auch anhand von einigen Beispielen erläutert werden. Der Hauptteil befaßt sich vor allem mit der Struktur und dem Ablauf des Protokolls sowie einigen technischen Besonderheiten, den Abschluß bildet ein Überblick über die seit der ursprünglichen Veröffentlichung entstandenen Weiterentwicklungen des SMTP. 17.2 E-Mail-Systeme E-Mail-Systeme bestehen prinzipiell aus zwei Subsystemen: den Benutzeragenten“, (User ” Agents, UA) sowie den Nachrichtentransferagenten“ (Message Transfer Agents, MTA). Bei ” den Benutzeragenten handelt es sich in der Regel um lokale Programme, die dem Benutzer das Empfangen, Bearbeiten und Versenden von Nachrichten ermöglichen, während die Nachrichtentransferagenten normalerweise als Systemdienste im Hintergrund laufen und für 147 17 Simple Mail Transfer Protocol (SMTP) den Transport der Nachricht zum Empfänger zuständig sind. Die Grundfunktionen eines E-Mail-Systems sind wie folgt definiert: • Composition steht generell für das Erstellen einer Nachricht, was je nach System auf der Kommandozeile, mit einem einfachen Texteditor oder innerhalb einer ausgewachsenen graphischen Oberfläche erfolgen kann. Das E-Mail-System kann auch die z.B. in den Header-Feldern vorhandenen Informationen zur Unterstützung des Benutzers verwenden, in dem es beispielsweise bei der Beantwortung einer E-Mail automatisch die Adresse des Absenders als neuen Empfänger übernimmt. • Transfer steht für den Transport der Nachricht vom Absender zum Empfänger. Dies soll automatisch und ohne Interaktion des Absenders geschehen, weshalb das E-MailSystem auch Vorgehensweisen für Sonderfälle wie z.B. einem Datenstau“ auf dem ” Datenhighway vorsehen muß, damit keine Nachrichten verloren gehen. Die E-Mail könnte dann einen anderen Weg nehmen oder in eine Warteschleife gesetzt werden. • Reporting hat die Aufgabe, den Absender über den Status seiner abgeschickten Nachricht zu informieren. Er könnte so z.B. vom E-Mail-System darüber informiert werden, ob seine Nachricht überhaupt beim Empfänger angekommen ist (Eingangsbestätigung) bzw. bereits gelesen wurde (Lesebestätigung), oder ob sie umgeleitet oder zwischengespeichert wurde. • Displaying zeigt dem Benutzer eingegangene Nachrichten an. Gegebenenfalls konvertiert es diese in ein anderes Format oder ruft externe Programme auf, die zur Darstellung des Nachrichteninhalts benötigt werden. • Disposition bestimmt, was mit der angekommenen Nachricht geschieht. Der Benutzer hat hier die Möglichkeit, die Nachrichten zu speichern, zu löschen oder auf andere Art und Weise weiterzuverarbeiten. Bereits vorhandene, gespeicherte Nachrichten sollen natürlich wieder aufruf- und auch beantwort- oder weiterleitbar sein. Die fünf Funktionen Composition, Transfer, Reporting, Displaying und Disposition stellen die absoluten Grundfunktionen eines E-Mail-Systems dar. Neben diesen gibt es natürlich bei verschiedenen Systemen eine große Anzahl weiterer Funktionen, um E-Mail vielseitiger verwendbar zu machen. Diese sind in der heutigen Zeit oft mit dem Ziel einfacher Bedienbarkeit in bunte Oberflächen“ eingebunden, so dass sich der Benutzer um die einzelnen ” Funktionen keine Gedanken mehr machen muss. Abbildung 17.1 enthält eine graphische Darstellung der grundliegenden Funktionsweise eines E-Mail-Systems. Der Benutzeragent stellt dem Benutzer über das user interface“ die ” Funktionen des Systems zur Verfügung, damit dieser z.B. Nachrichten empfangen, lesen und verschicken kann. Ausgehende E-Mails werden zunächst zwischengespeichert, bis sie erfolgreich an den Nachrichtentransferagenten (nachfolgend nur noch MTA genannt) übertragen worden sind. Dementsprechend werden eingehende Nachrichten von einem MTA in der Mailbox des Benutzers abgelegt, wo dieser auf sie (wieder mit Hilfe des Benutzeragenten) zugreifen kann. 148 17.3 Entwicklung Abbildung 17.1: Funktionsweise eines E-Mail-Systems 17.3 Entwicklung Mit der Einführung des Internets gab es die Möglichkeit, mit anderen zu kommunizieren, ohne dass man telefonieren oder sie besuchen mußte, denn beides ist ziemlich zeitaufwendig und kann sich, wenn die andere Person gerade nicht da ist, auch als ziemlich zwecklos erweisen. Da kam vielen Firmen als weitere Alternative zum Brief, der ja nicht gerade der schnellste Weg ist, die E-Mail gerade recht. Sie ist schnell, relativ zuverlässig und wenn die Person gerade unterwegs ist, kann sie die Mail unter gegebenen Umständen auch vom Urlaubsort abrufen. Der einzige Nachteil war, dass es keinen wirklichen Standard gab (aus der Sicht des gerade frisch eingeführten Internets) und so das Schreiben einer E-Mail sicherlich sehr umständlich gewesen sein muss. 1982 dachte sich deswegen eine Gruppe von Studenten, dass man das wohl ändern sollte und entwickelte das in RFC 821 beschriebene Simple Mail Transfer Protocol, welches einen Standard für den Austausch von Nachrichten zwischen verschiedenen Rechnersystemen festlegte. Das dazugehörige Nachrichtenformat wurde in RFC 822 festgelegt. Aber anscheinend dachten sich einige große Firmen, dass sie es besser könnten und veröffentlichten 1984 ein Protokoll, das nach ihren Plänen alles besser können sollte als die Entwicklung der Studenten. Was die CCITT bei ihrer X.400-Empfehlung nicht bedachte war, dass das Protokoll auch benutzerfreundlich implementiert werden muss, oder wenigstens nicht so umfangreich und kompliziert sein darf, dass man keinen Unterschied zu dem ursprünglichen, protokolllosen Zustand feststellen kann. In den Jahren darauf kämpften somit zwei unterschiedliche Möglichkeiten gegeneinander, um sich als Standard durchzusetzten. Das eine Protokoll, entwickelt und genutzt von großen Firmen und Regierungen, konnte sich aber letztendlich nicht gegen die von Studenten entwickelte Lösung durchsetzen. SMTP war zwar einfach, aber es funktionierte, während X.400 aufgrund seiner Komplexität kaum zufriedenstellend implementiert werden konnte. 149 17 Simple Mail Transfer Protocol (SMTP) 17.4 Simple Mail Transfer Protocol 17.4.1 Nachrichtenformat (RFC 822) RFC 822 legt fest, dass eine E-Mail aus zwei Teilen bestehen muss, um die angestrebte Automatisierung zu erreichen, nämlich aus den Header-Feldern und dem Body. Typische Header-Felder sind Date“ für das Absendedatum, From“ für die Absenderadres” ” se, Subject“ als moderne Betreffzeile und natürlich To“ als Empfängeradresse. Die Auto” ” matisierung wird erreicht, da der MTA aus diesen und anderen noch vorhandenen Informationen eine Verpackung, Envelope (mit einem Umschlag eines Briefes vergleichbar, definiert in RFC 821), erstellt und so alle relevanten Informationen den MTAs auf dem Weg zum Ziel zu präsentieren. Desweiteren schreiben die einzelnen MTAs, die die Mail weiterleiten, ihre Daten als jeweils neuen Header auf den Envelope“ bzw. hängen die Informationen an ” die ursprüngliche Mail an, ohne deren Inhalt zu verändern. Im Envelope ist der eigentliche Inhalt der E-Mail, der sogenannte Body, verpackt. RFC 822 legt desweiteren fest, dass die E-Mail nur NVT-ASCII-Zeichen enthalten darf, was zur heutigen Zeit eine Einschränkung darstellt (aber dazu später mehr). Abbildung 17.2: Vergleich des Aufbaus von Brief und E-Mail In dem Schaubild Vergleich des Aufbaus von Brief und E-Mail“ kann man die Gemeinsam” keiten einer E-Mail mit einem Brief erkennen. Wie man sieht sind es mehr als man auf den ersten Eindruck annehmen möchte. Das ist auch im folgenden Beispiel, der Klartextdarstellung einer empfangenen E-Mail mitsamt Headern, erkennbar. 150 17.4 Simple Mail Transfer Protocol Received: from [172.20.1.104] (helo=mailgate6.cinetic.de) by mx06.web.de with esmtp (Exim 4.11 #37) id 16Y7Jb-0005z9-00 for [email protected]; Tue, 05 Feb 2002 16:15:23 +0100 Received: from mail.uni-bielefeld.de (mail2.uni-bielefeld.de [129.70.4.90]) by mailgate6.cinetic.de (8.11.2/8.11.2/ WEBDE Linux 8.11.0-0.2) with ESMTP id g15FFNF23760 for <[email protected]>; Tue, 5 Feb 2002 16:15:23 +0100 Received: from uni-bielefeld.de (offhnwlu.uni-bielefeld.de [129.70.6.65]) by mail.uni-bielefeld.de (Sun Internet Mail Server sims.4.0.2000.10.12.16.25.p8) with ESMTP id <[email protected]> for [email protected]; Tue, 5 Feb 2002 16:14:40 +0100 (MET) Date: Tue, 05 Feb 2002 16:14:29 +0100 From: Christoph Liersch <[email protected]> Subject: Das ist die Betreffzeile To: [email protected] Message-id: <[email protected]> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT X-Mailer: Mozilla 4.77 [en] (Win98; U) Hier steht der eigentliche Nachrichtentext. 17.4.2 Das Protokoll (RFC 821) SMTP, ursprünglich festgelegt in RFC 821, definiert einen Standard für den Austausch von E-Mail zwischen zwei MTAs (Message Transfer Agents). Aufgrund zahlreicher Weiterentwicklungen stellt SMTP auch heute trotz seines Alters noch einen de-facto-Standard dar, in diesem Abschnitt soll aber zunächst nur die Funktionsweise der ursprünglichen Version erläutert werden. Der Versand von E-Mail erfolgt im Normalfall transparent für den Benutzer, d.h. dieser arbeitet mit einem Programm zum Empfangen, Lesen und Versenden von E-Mail (User Agent bzw. Benutzeragent), der eigentliche Transport der Nachricht zum Empfänger findet automatisch und ohne Zutun des Benutzers statt. Das Schaubild E-Mail mit SMTP“ zeigt eine schematische Darstellung des Nachrichten” transports. Die Nachricht wird mit einem User Agent erstellt und an einen Message Tranfer Agent übertragen. Dieser hat nun die Aufgabe, die Nachricht über das Internet an den MTA des Empfängers weiterzuleiten, was abhängig von den beteiligten Systemen auf mehr oder minder direktem Wege geschehen kann. Dieses Verfahren ist textbasiert, die Kommunikation zwischen zwei MTAs ist also auch für Menschen direkt lesbar“. Wie auch in der eigentlichen Nachricht wird NVT-ASCII ver” wendet. Zunächst wird vom MTA des Absenders (nachfolgend Client“ genannt) eine TCP” 151 17 Simple Mail Transfer Protocol (SMTP) Abbildung 17.3: E-Mail mit SMTP Verbindung zu Port 25 des Empfänger-MTAs ( Server“) aufgebaut. Der Client kann dann ” Befehle an den Server senden, worauf dieser jeweils mit einem dreistelligen Reply code“ ” und einem optionalen Textstring antwortet. Im Gegensatz zu anderen Internet-Protokollen ist die Menge der Befehle bei SMTP eher gering - RFC 821 fordert für eine gültige Implementation des Protokolls nur acht Befehle: HELO, MAIL, RCPT, DATA, QUIT, RSET, VRFY und NOOP. 17.4.3 SMTP-Befehle Der minimale SMTP-Befehlssatz enthält folgenden Kommandos: • HELO <Hostname> – Eine Art Begrüßung ( Hello“), in welcher der Client dem Server ” seine Identität in Form des FQDN (fully qualified domain name) mitteilt • MAIL FROM: <Adresse> – Einleitung der Übertragung einer Nachricht, enthält die Adresse des Absenders als Parameter • RCPT TO: <Adresse> – Festlegung der Empfänger-Adresse(n) • DATA – Einleitung der Übertragung des eigentlichen Nachrichteninhalts • RSET – Zurücksetzung der Verbindung, bereits eingegebene Daten werden verworfen (Reset) • VRFY <Adresse> – Überprüft ob eine bestimmte Adresse dem Server als gültiger Empfänger bekannt ist (Verify) • NOOP – Löst nur eine kurze Antwort des Servers aus, keine weitere Wirkung (No Operation) • QUIT – Beendet die Verbindung 152 17.4 Simple Mail Transfer Protocol Folgende Befehle sind optional und daher nicht zwingend in jeder SMTP-Implementation vorhanden: • EXPN <Adresse> – Auflösung einer Mailing-Liste • HELP <Befehl> – Ruft Informationen zu dem als Parameter angegebenen Befehl auf • TURN – Vertauschung der Client-Server-Rollen: Ermöglicht Versand von Nachrichten in die andere Richtung ohne erneuten Verbindungsaufbau • SEND FROM: <Adresse>, SOML FROM: <Adresse>, SAML FROM: <Adresse> – sind Relikte aus den Anfängen der E-Mail, wo es noch eine Rolle spielte, ob der Empfänger direkt am Terminal saß oder nicht 17.4.4 Reply codes Auf die vom Client gesendeten Befehle reagiert der Server mit einem sogenannten Reply code, einer dreistelligen Zahl, und einem für den Menschen lesbaren Textstring (optional). Die Reply codes sind in verschiedene Kategorien und Unterkategorien eingeteilt. Als Beipiel sei hier der Code 220“ angeführt: Die erste Zahl (2) signalisiert dem Client, dass der Befehl ” fehlerlos ausgeführt wurde, die zweite (2), dass die Verbindung hergestellt ist und die Null zeigt dem Client, dass alles in Ordnung ist und er weiter Befehle abschicken kann. Diese Codeklassen sind typisch und werden auch bei anderen Server-Client-Protokollen, wie z.B. FTP, eingesetzt. Übersetzungstabelle Reply codes 1yz 2yz 3yz 4yz 5yz x0z x1z x2z x3z x4z x5z xyz Positiver Beginn eines Befehls. Weitere Eingabe erforderlich Positive Beendigung eines Befehls. Weitere Befehle möglich Positiver Zwischenzustand. Weitere Eingaben müssen folgen Transientes Problem. Befehl nicht ausgeführt. Eingabe wiederholen Definitives Problem. Befehl nicht wiederholen Syntax eines Befehls Allgemeine Information Verbindungszustand Nicht spezifiziert Nicht spezifiziert Statusmeldung z = Weitere Unterteilung/Nummerierung der Meldung Einige Beispiele für Reply codes mit dem jeweils zugehörigen Textstring: • 501 Syntax error in parameters or arguments 153 17 Simple Mail Transfer Protocol (SMTP) • 502 Command not implemented • 503 Bad sequence of commands • 504 Command parameter not implemented • 211 System status, or system help reply • 214 Help message • 220 “domain” Service ready • 221 “domain” Service closing • 250 Requested mail action okay, completed • 251 User not local; will forward to “forward-path” • 450 Requested mail action not taken: mailbox unavailable • 550 Requested action not taken: mailbox unavailable • 451 Requested action aborted: error in processing • 551 User not local; please try “forward-path” • 452 Requested action not taken: insufficient system storage • 552 Requested mail action aborted: exceeded storage allocation • 553 Requested action not taken: mailbox name not allowed • 354 Start mail input; end with “CRLF”.“CRLF” • 554 Transaction failed Ein einfaches Beispiel eines Mail-Versands mit dem SMTP. Hinweis: Die den Zeilen vorgestellten Kürzel für Server bzw. Client und die zusätzlichen Leerzeilen zwischen den einzelnen Befehlen wurden nur zum besseren Verständnis des Vorgangs eingefügt. (S: Server, C: Client) S: 220 Beta.GOV Simple Mail Transfer Service Ready C: HELO Alpha.EDU S: 220 Beta.GOV C: MAIL FROM:<[email protected]> S: 250 OK C: RCPT TO:<[email protected]> S: 250 OK C: RCPT TO:<[email protected]> S: 550 No such user here C: RCPT TO:<[email protected]> S: 250 OK C: DATA S: 354 Start mail input; end with <CR><LF>.<CR><LF> 154 17.4 Simple Mail Transfer Protocol C: C: C: S: ...sends body of mail message... ...continues for as many lines as message contains... <CR><LF>.<CR><LF> 250 OK C: QUIT S: 221 Beta.GOV Service closing transmission channel Erläuterung: In diesem Beispiel sendet Benutzer Smith vom Host Alpha.EDU eine Mail an drei Empfänger Jones, Green und Brown am Host Beta.GOV. Dazu baut der SMTP-Client von Alpha.EDU zunächst eine TCP-Verbindung zu Port 25 von Beta.GOV auf. Der Server liefert zunächst eine Statusmeldung in der er sich identifiziert und seine Bereitschaft zur Annahme von E-Mails bestätigt, der Client identifiziert sich ebenfalls. Der Client leitet nun mit dem MAIL-Befehl die Übergabe der Nachricht ein, übermittelt Sender und Empfänger sowie den eigentlichen Nachrichteninhalt und beendet schließlich die Verbindung. Bei der Angabe des Empfängers [email protected] reagiert der Server mit einer Fehlermeldung, erkennbar an dem Reply code 550 und der Meldung No such user ” here“: Dem System ist kein Benutzer mit diesem Namen bekannt, dementsprechend wird die Annahme verweigert. Das Protokoll legt nicht fest, wie der Client auf solche Fehlermeldungen zu reagieren hat. Die sinnvollste und auch übliche Methode ist es aber, wie hier im Beispiel den Vorgang nicht vollständig abzubrechen sondern mit den anderen gültigen Empfängern fortzufahren. Nun ein echtes“, unverändertes Beispiel für eine SMTP-Session: ” >telnet gemma.techfak.uni-bielefeld.de 25 220 gemma.TechFak.Uni-Bielefeld.DE ESMTP Sendmail 8.9.1/8.9.1 /TechFak/pk+ro20010720; Wed, 23 Jan 2002 11:05:54 +0100 (MET) HELO localhost 250 gemma.TechFak.Uni-Bielefeld.DE Hello pD9E0437A.dip.t-dialin.net [217.224.67.122], pleased to meet you MAIL FROM:<[email protected]> 250 <[email protected]>... Sender ok RCPT TO:<[email protected]> 250 <[email protected]>... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Subject: Das ist die Betreffzeile Hier der eigentlich Text der Nachricht, beendet durch einen einzelnen Punkt in einer Zeile . 250 LAA11554 Message accepted for delivery QUIT 221 gemma.TechFak.Uni-Bielefeld.DE closing connection Zunächst wird wieder eine Verbindung zu dem SMTP-Server hergestellt. Dieser meldet sich mit dem Reply code 220 und identifiziert sich im dazugehörigen Textstring. Es folgt die Begrüßung“ bzw. ” 155 17 Simple Mail Transfer Protocol (SMTP) Identifizierung des Clients, woraufhin der Server erneut mit einer Statusmeldung antwort, und es wird analog zum vorherigen Beispiel eine E-Mail versandt. Die folgende Ausgabe verdeutlicht die Funktion einiger Befehl, die nicht direkt zum Versand einer Nachricht notwendig sind. Es wird mit zunächst mit VRFY ein Benutzername überprüft (welcher dem System auch bekannt ist), dann mit dem EXPN-Befehl eine Mailingliste aufgelöst und schließlich mittels HELP eine Liste der verfügbaren Hilfethemen angezeigt. >telnet gemma.techfak.uni-bielefeld.de 25 220 gemma.TechFak.Uni-Bielefeld.DE ESMTP Sendmail 8.9.1/8.9.1 /TechFak/pk+ro2001720; Wed, 23 Jan 2002 11:28:01 +0100 (MET) HELO localhost 250 gemma.TechFak.Uni-Bielefeld.DE Hello pD9E045BE.dip.t-dialin.net [217.224.69.190], pleased to meet you VRFY juser 250 Joe User <[email protected]> EXPN webmaster 250-Rainer Orth <[email protected]> 250-Peter Koch <[email protected]> 250-Jennifer Rinne <[email protected]> 250-Arne Hauenschild <[email protected]> 250 Anke Weinberger <[email protected]> HELP 214-This is Sendmail version 8.9.1 214-Topics: 214HELO EHLO MAIL RCPT DATA 214RSET NOOP QUIT HELP VRFY 214EXPN VERB ETRN DSN 214-For more info use "HELP <topic>". 214-To report bugs in the implementation send email to [email protected]. 214-For local information send email to Postmaster 214-at your site. 214 End of HELP info QUIT 221 gemma.TechFak.Uni-Bielefeld.DE closing connection 17.4.5 Relay Relay oder Relaying bezeichnet allgemein die Zwischenspeicherung von E-Mails auf einem Server, der nicht selbst der Empfänger-MTA ist, sondern die Nachricht an diesen weiterleitet. Dieses Konzept bietet einige Vorteile, wie z.B. eine erhöhte Ausfallsicherheit: so gehen Nachrichten nicht verloren, wenn der Empfangs-MTA nicht erreichbar ist. Auch läßt sich mit Relay-Systemen ein vor allem in Bezug auf Sicherheitsaspekte besserer Netzwerkaufbau verwirklichen, wenn z.B. private Netze mit dem Internet verbunden werden sollen. Ursprünglich galt im Internet ein gewisses Je” der hilft jedem“-Prinzip, MTAs nahmen also in der Regel auch E-Mails von ihnen unbekannten Absendern an ihnen unbekannte Empfänger an. Mit zunehmenden Nutzerzahlen des Internets entstanden aber immer öfter Probleme, wenn dieses Verhalten z.B. zum massenhaften Versand von 156 17.4 Simple Mail Transfer Protocol Abbildung 17.4: Schema eines Relay-Systems Werbe-Mails (Spam) mißbraucht wurde. Heutzutage ist das Relay in der Regel stark eingeschränkt, um solchen Mißbrauch zu verhindern. Viele Systeme nehmen nur E-Mails an, wenn der Empfänger ein lokaler, bekannter Benutzer ist. Oft wird auch der Mailversand auf bestimmte IP-Adressräume eingeschränkt und die Adressen bekannter Spammer gesperrt. 17.4.6 MX-Records Bisher sind wir davon ausgegangen, dass der Empfänger-MTA direkt mit dem Internet verbunden ist und sein Domainname mit dem Domainteil der E-Mail-Adressen übereinstimmmt. Der MX-Record (Mail Exchange Record) ist ein spezieller DNS-Eintrag, der die Konfiguration von E-Mail-Systemen vereinfacht, indem dem Domain-Teil einer E-Mail-Adresse ein bestimmter Mail-Server zugewiesen wird. Dies ermöglicht den Versand von Nachrichten an Systeme ohne direkte Internet-Anbindung, oder auch die Festlegung von alternativen Servern für den Fall, dass der normale Empfangs-MTA nicht zur Verfügung steht. Beispiel: Abfrage des MX-Records von techfak.uni-bielefeld.de %nslookup Default Server: router.domain.de Address: 192.168.100.100 > set q=mx 157 17 Simple Mail Transfer Protocol (SMTP) > techfak.uni-bielefeld.de Server: router.domain.de Address: 192.168.100.100 Non-authoritative answer: techfak.uni-bielefeld.de MX preference = 100, mail exchanger = gemma.techfak.uni-bielefeld.de techfak.uni-bielefeld.de MX preference = 300, mail exchanger = mail1.RRZ.Uni-Koeln.de techfak.uni-bielefeld.de nameserver = TECHFAC.techfak.uni-bielefeld.de techfak.uni-bielefeld.de nameserver = noc.RRZ.Uni-Koeln.de techfak.uni-bielefeld.de nameserver = waldorf.Informatik.Uni-Dortmund.de techfak.uni-bielefeld.de nameserver = noc.BelWue.de techfak.uni-bielefeld.de nameserver = noc.HRZ.uni-bielefeld.de gemma.techfak.uni-bielefeld.de internet address = 129.70.136.103 mail1.RRZ.Uni-Koeln.de internet address = 134.95.100.208 TECHFAC.techfak.uni-bielefeld.de internet address =129.70.132.100 noc.RRZ.Uni-Koeln.de internet address = 134.95.100.209 waldorf.Informatik.Uni-Dortmund.de internet address = 129.217.4.42 noc.BelWue.de internet address = 129.143.2.1 noc.HRZ.uni-bielefeld.de internet address = 129.70.5.16 Von Interesse sind hier die zwei Zeilen mit den MX preference“-Einträgen: Hier wird fest” gelegt, welche Rechner für die Annahme von E-Mails an Adressaten innerhalb der Domain techfak.uni-bielefeld.de zuständig sind. Die Einträge besitzen zwei Werte: Mail exchanger“ ” gibt den zu verwendenden Rechner an; Preference“ ist eine Prioritätsangabe: sendende MTAs ” versuchen zunächst immer die Nachrichten dem MTA mit dem niedrigsten Wert zu übergeben, erst wenn dieser nicht erreichbar ist wird der Rechner mit dem nächsthöheren Wert benutzt. Im Normalfall sollen E-Mails von gemma.techfak.uni-bielefeld.de entgegengenommen werden (preference = 100), bei Nichterreichbarkeit ist mail1.RRZ.Uni-Koeln.de zuständig (preference = 300). 17.5 Weiterentwicklung 17.5.1 ESMTP - SMTP Service Extensions Das Protokoll wurde in seiner ursprünglichen Form bereits 1982 veröffentlicht, und wurde seitdem ständig weiterentwickelt. Die Erweiterungen werden als SMTP Service Extensions“ bezeichnet, ” man spricht auch von ESMTP (Extended SMTP). Die jeweiligen Erweiterungen werden wie das ursprüngliche Protokoll selbst in RFCs beschrieben und bei der IANA (Internet Assigned Numbers Authority) registriert. Eine Besonderheit ist, dass alle Erweiterungen abwärtskompatibel sind und so bestehende Implementationen nicht beeinflußt werden. In der Praxis verhält sich ESMTP daher analog zu SMTP, es werden jedoch weitere Funktionen unterstützt. Wie im nachfolgenden Beispiel sichtbar, macht der Server die Unterstützung von ESMTP zu Anfang der Session bekannt. Der Client begrüßt den Server nun mit einem EHLO”(für Extended Hello“), woraufhin dieser eine mehrzeilige Antwort zur ” ” Bekanntmachung der verfügbaren Funktionen liefert. 220 gemma.TechFak.Uni-Bielefeld.DE ESMTP Sendmail 8.9.1/8.9.1/ TechFak/pk+ro20010720; Wed, 23 Jan 2002 12:23:45 +0100 (MET) EHLO localhost 250-gemma.TechFak.Uni-Bielefeld.DE Hello pD9E04337.dip.t-dialin.net [217.224.67.55], pleased to meet you 250-EXPN 158 17.5 Weiterentwicklung 250-VERB 250-8BITMIME 250-SIZE 8388608 250-DSN 250-ONEX 250-ETRN 250-XUSR 250 HELP Die einzelnen Zeilen beginnen mit dem Reply code 250, darauf folgt ein Keyword (mit optionalem Parameter) zur Beschreibung der Funktion. EXPN steht so z.B. für die Unterstützung des ExpandBefehls zur Auflösung von Mailing-Listen, DSN für Eingangsbestätigungen und SIZE 8388608 gibt die maximale erlaubte Größe anzunehmender E-Mails an (hier ist die Dateigröße in Byte der Parameter). Neben dem Protokoll selbst wurde aber auch das Nachrichtenformat weiterentwickelt, da es in seiner ursprünglichen Form wie in RFC 822 beschrieben einige Einschränkungen enthält. So werden nur Textnachrichten unterstützt, es ist nur ein Zeichensatz definiert (7-Bit US-ASCII) und die Zeilen sind auf maximal 1000 Zeichen beschränkt. 17.5.2 MIME Die grundliegenden Ziele der Weiterentwicklung des Nachrichtenformats waren die Unterstützung anderer Zeichensätze (sowohl in der Nachricht selbst als auch in den Header-Feldern), andere Formate für den Body der Nachricht (z.B. Audio-/Videodokumente) bzw. mehrere Formate innerhalb einer E-Mail. Realisiert wurden diese Eigenschaften durch den MIME-Standard (Multipurpose Internet Mail Extensions, RFCs 2045-2049). Eine detaillierte Beschreibung der Funktionsweise würde den Umfang dieser Ausarbeitung sprengen, allgemein werden zusätzliche Header-Felder für die Speicherung der benötigten MIME-Informationen benutzt, während die jeweiligen Inhalte in eine ASCIIDarstellung umgerechnet werden. Diese können dann vom Empfänger wieder in die ursprüngliche Form zurückgewandelt werden. Der Umweg über die ASCII-Darstellung vergrößert den Umfang der Nachricht zwar etwas, dafür wird die Kompatibilität mit älteren Implementationen des Protokolls gewahrt und nur die Benutzeragenten müssen an die Veränderungen angepasst werden. 159 17 Simple Mail Transfer Protocol (SMTP) 160 KAPITEL 18 Hypertext Transfer Protocol (HTTP) Florian Schäfer, Matthias Behnisch 18.1 HTTP HTTP – Hypertext Transfer Protokoll – dient zur Kommunikation zwischen Web-Clients und -Servern. Die erste Version wurde 1990 von Tim Berners Lee, dem “Vater” des WWW, am CERN geschrieben. Zusammen mit dem Adressierungsschema URI (Uniform Resource Identifier) und der Sprache für Web-Dokumente, HTML (Hypertext Markup Language), bildet HTTP sozusagen das Grundgerüst des WWW. Hiermit verwirklichte Tim Berners Lee seine Idee eines computerübergreifenden Systems von miteinander durch Hypertext verlinkten Objekten, ab 1990 wurde es “WWW” genannt. HTTP ist das Standardtransferprotokoll im WWW. Da TCP/IP im Internet benutzt wird, eignet es sich gut als Transportprotokoll für HTTP. Vom Standard wird dies allerdings nicht explizit gefordert. HTTP ist ein ASCII-Protokoll, d.h.eine einfache Telnet-Verbindung reicht aus, um direkt mit einem Web-Server zu kommunizieren. Hierbei werden eine Reihe von Befehlen, sog. Methoden, benutzt, die es ermöglichen, entweder Daten vom Server anzufordern oder zu ihm zu übertragen. Da HTTP “stateless” ist, werden alle Datenpakete voneinander unabhängig behandelt. Es muß keine feste Reihenfolge eingehalten werden und es gibt keine Information über vorherige Operationen. Alle HTTP-Versionen sind abwärtskompatibel. 161 18 Hypertext Transfer Protocol (HTTP) 18.1.1 Allgemeiner Aufbau HTTP läßt sich in zwei grundlegende Elemente aufteilen: Anfragen vom Client an den Server und Antworten vom Server an den Client. Alle neueren Versionen unterstützen zwei Arten von Anfragen, einfache und volle. Bei der einfachen Anfrage wird vom Client keine Protokollversion festgelegt. Dieses Feature ermöglicht eine weitgehende Abwärtskompatibilität, da die Antwort beispielsweise im Falle einer Web-Page die rohe Page ohne Header und andere versionsabhängige Eigenschaften wie MIME-Typisierung oder Kodierung wäre. Die volle Anfrage enthält die HTTP-Protokollversion, Informationen über die MIME-Version, den Content-Type etc. Auf jede Anfrage folgt eine Antwort, bestehend aus einer Statuszeile und möglicherweise weiteren Informationen (z.B eine Web-Page oder eine beliebige andere Datei, vollständig oder teilweise). In der Statuszeile stehen die Status-Codes. 18.2 URL URL – Uniform Resource Locator – stellt ein Adressierungsschema dar, welches es erlaubt, jedem Objekt im WWW eine weltweit eindeutige Adresse zuzuordnen. Eine solche Adresse besteht aus drei Teilen: • Das verwendete Schema • Der DNS-Name der Maschine, auf der sich das Zielobjekt befindet • Der lokale Name des Objektes (normalerweise der Dateiname) Aufbau: <Schema>:<DNS-Name><Objekt-Name> Beispiel einer URL: http://www.uni-bielefeld.de/index.html Mit Hilfe der URLs ist fast der gesamte Internet-Zugang über den anwenderfreundlichen Browser möglich. 18.3 Client Request Der Client Request wird vom Client zum Server gesendet. Ein Client ist z.B. ein Web-Browser und der Server ist ein HTTP-Server wie z.B. Apache. Im Request fordert der Client einen Bestandteil einer WWW-Seite an und macht Angaben über die angeforderten Daten und über sich selbst. 162 18.3 Client Request 18.3.1 Aufbau <Methode> <URI> <HTTP Version> Request Header leere Zeile (enthält nur CRLF) Daten In der ersten Zeile teilt der Client mit, welche Methode er benutzen möchte. Danach folgt die Adresse sowie die benutze HTTP Version. Sonstige Angaben folgen im Request Header, der mit einer leeren Zeile abgeschlossen wird. Falls im Request Daten an den Server gesendet werden, folgen sie dem Header. 18.3.2 Methoden Mit der Methode spezifiziert der Client, was er vom Server möchte. Er kann entweder Daten anfordern oder an den Server übertragen. GET HEAD POST PUT DELETE TRACE OPTIONS Daten einer Adresse anfordern wie GET, aber nur der Header der Antwort wird übermittelt Daten an den Server senden z.B. Eingaben in einem Formular wie POST, die Daten werden an der angegebenen URL gespeichert die angegebene URL wird gelöscht der Request wird unverändert vom Server zurückgesendet liefert zusätztliche Informationen über den Server Die am häufigsten benutzte Methode ist GET. Sie dient dazu, eine Datei vom Server zum Client zu übertragen. Dabei wird für jeden Bestandteil einer Seite ein eigener GET-Request mit dazugehöriger URL versendet. HEAD macht prinzipiell das gleiche, nur wird die angeforderte Datei nicht gesendet. Da nur der zu der Datei gehörende Header vom Server kommt, kann der Client durch die HEAD Methode genaueres über die Datei herausfinden und so entscheiden, ob er die Datei wirklich anfordern will. Die letzte Methode mit praktischer Bedeutung ist POST, die dann Verwendung finden kann, wenn der Server Daten vom Client benötigt. Dies ist z.B. der Fall bei Suchmaschinen, in denen der User Begriffe eingeben kann und diese dann durch POST zum Server gelangen. 163 18 Hypertext Transfer Protocol (HTTP) 18.4 Server Response Die Server Response ist die Antwort des Servers auf einen vorhergehenden Request des Clients. In ihr teilt der Server den Erfolg (oder Misserfolg) der gewünschten Operation mit und sendet gegebenenfalls die angeforderte Datei. 18.4.1 Aufbau <HTTP Ver.> <Status Code> <Beschreibung> Response Header leere Zeile (enthält nur CRLF) Daten In der ersten Zeile steht zunächst die benutzte Version von HTTP. Danach folgt der Status der geforderten Operation, zuerst durch eine Zahl, den sogenannten Status Code, ausgedrückt. Nach dem Code folgt noch eine nähere Beschreibung, die für den User verständlicher ist als eine nackte Zahl. Es folgen die verschiedenen Response-Header-Einträge, die wie beim Request durch eine leere Zeile abgeschlossen werden. Diese Header-Einträge liefern Informationen über den Server und die übermittelten Daten, die wie beim Request direkt nach dem Header folgen. 18.4.2 Status Codes Die Status Codes sind dreistellige Zahlen, deren erste Ziffer die Untergruppe des Codes angibt. Die folgende Liste enthält einige wichtige Codes. 164 18.5 Header Einträge 1xx 100 Informational Continue Request erhalten, Verarbeitung läuft 2xx 200 201 202 Successfull OK Created Accepted Operation konnte ausgeführt werden 3xx 301 304 Redirection Moved Not Modified besondere Funktionen 4xx 400 401 403 404 Client Error Bad Request Unauthorized Forbidden Not Found Request ist falsch oder nicht ausführbar 5xx 500 503 Server Error Internal Server Error Service Unavailable Server kann einen gültigen Request nicht ausführen Mit Hilfe der Codes erfährt der Client, ob sein Request ausgeführt werden konnte. So sendet der Server bei Erfolg einen Code der Gruppe 2xx, bei einem erfolgreichen GET lautet die Antwort 200, also OK. Falls der Client eine nicht mehr gültige URL anfordert, erhält er eine “404 Not Found” Nachricht. Die Codes der Gruppe 3xx ermöglichen zusätzliche Funktionen des Clients bzw. des Servers. Wenn z.B. eine URL nicht mehr aktuell ist, der Server aber die neue Adresse kennt, dann sendet er einen “301 Moved” Code und die neue URL im Response Header. Der Client kann dann eine Anfrage an die neue Adresse richten. 18.5 Header Einträge Die Einträge im Header lassen sich einteilen in Request, Response und solche, die in beiden vorkommen. Sie sind jedoch nicht unbedingt zwingend erforderlich und verschiedene Client- und Server-Software unterscheidet sich zum Teil erheblich in deren Verwendung. Hier nun einige Header-Felder: 165 18 Hypertext Transfer Protocol (HTTP) Request Header Accept: Accept-Language: Accept-Encoding: Host: If-Modified-Since: If-None-Match: Referer: User-Agent: aktzeptierte Medien-Typen bevorzugte Sprachen unterstützte Kodierungen (gzip usw.) an welche Domain Request gerichtet ist nur wenn Datei seit bestimmten Zeitpunkt verändert nur wenn der ETag nicht übereinstimmt Adresse, von der der Link ausgeht welche Client Applikation (Browser) Response Header Location: Server: neue URL, falls die Anfrage weitergeleitet wird welche Server-Software in beiden Connection: Date: Art der Verbindung Zeitpunkt des Sendens Einige dieser Einträge werde ich bei den folgenden Beispielen noch näher erläutern. Nach dem Request- bzw. Response-Header folgen die Daten. Auch wenn der Server mit einem Fehler-Code (siehe Status-Codes) antwortet, kann er zusätzliche Daten hinzufügen, die den Fehler für den User genauer erläutern. Falls Daten enthalten sind, beziehen sich folgende Header Einträge auf diese: ETag: Content-Type: Content-Encoding: Content-Language: Content-Length: Expires: Last-Modified: eindeutiger Code zur Identifizierung der Datei Art der Daten (text/html usw.) Kodierung der Daten (gzip usw.) Sprache Länge der Daten in Bytes wann die Daten ungültig werden wann die Daten das letzte Mal verändert wurden 18.6 Beispiele Zum besseren Verständnis jetzt erstmal zwei Beispiele. Der erste Block ist dabei der Request und der nachfolgende die zugehörige Response. GET / HTTP/1.1 User-Agent: Opera/5.0 (Linux 2.2.18 i686; U) [en] Host: www.techfak.uni-bielefeld.de Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */* Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 Connection: Keep-Alive ------------------------------------------------------------------------- 166 18.6 Beispiele HTTP/1.1 200 OK Date: Tue, 05 Feb 2002 16:41:19 GMT Server: Apache/1.3.12 (Unix) Last-Modified: Fri, 01 Feb 2002 07:25:55 GMT Content-Length: 8096 Keep-Alive: timeout=15 Connection: Keep-Alive Content-Type: text/html <!DOCTYPE ...................... Diesen Request erstellt Opera wenn man die Seite http://www.techfak.uni-bielefeld.de aufruft. In der ersten Zeile steht “GET /”, d.h. die Startseite wird angefordert. Wenn auf einem Server mehrere virtuelle Hosts existieren (Virtual Hosting) werden diese durch das “Host:” Feld unterschieden. Der Browser unterstützt mehrere Medien-Typen, die er im “Accept:” Feld angibt. “*/*” bedeutet, daß er notfalls auch alle anderen Typen bekommen möchte. Auch die unterstützten Datenkodierungen gibt er durch “Accept-Encoding:” an. Die Antwort des Servers beginnt mit dem Code “200 OK”, damit teilt er mit, daß der Request erfolgreich bearbeitet werden konnte. Er liefert auch noch Informationen über die gesendete Datei, und zwar deren Typ “Content-Type:”, Größe “Content-Length:” und das Datum, an dem die Datei das letzte Mal verändert wurde “Last-Modified:”. Nach der leeren Zeile ist der Response Header beendet und es folgt die Datei. HEAD http://www.techfak.uni-bielefeld.de If-Modified-Since: Sat, 02 Feb 2002 08:00:00 GMT User-Agent: lwp-request/1.39 -----------------------------------------------304 Not Modified Connection: close Date: Tue, 05 Feb 2002 17:29:48 GMT Server: Apache/1.3.12 (Unix) ETag: "5ffe8-1fa0-3c5a4303" Client-Date: Tue, 05 Feb 2002 17:28:16 GMT Client-Peer: 129.70.136.200:80 Dieses Beispiel demonstriert die Methode HEAD. Es wird wieder die gleiche Seite angefordert, nur diesmal gibt der Client durch “If-Modified-Since:” im Request Header an, daß er die Datei nur haben möchte, falls sie seit dem gegebenen Datum verändert wurde. So könnte ein Browser vorgehen, wenn die Seite schon besucht wurde und im lokalen Cache vorhanden ist. Die Antwort des Servers beginnt mit dem Code “304 Not Modified”, d.h. die Seite wurde nicht verändert. Zusätzlich gibt der Server noch einen Code zur Identifizierung der Datei durch “ETag:” an, mit dem der Client verifizieren kann, daß er die Datei wirklich schon hat. Da die Methode HEAD 167 18 Hypertext Transfer Protocol (HTTP) benutzt wurde, folgen dem Response Header keine Daten. Aber selbst wenn anstatt dessen GET benutzt würde folgten in diesem Fall keine, da durch den “If-Modified-Since” Eintrag die Datei nur bei einem späteren Datum übertragen worden wäre. 18.7 Keep-Alive Für jede Datei die übertragen werden soll, werden 4 Schritte ausgeführt: Aufbau der Verbindung, Request, Response, Ende der Verbindung. Jedoch wurden die WWW-Seiten mit der Zeit immer umfangreicher und die meisten Sites bestehen aus vielen Dateien (mehrere Frames, Bilder, Animationen usw.). Es ist eigentlich unnötig für jede Datei eine neue Verbindung aufzubauen und wieder zu schließen, da die Dateien ja sowieso vom gleichen Server kommen. Dieses Vorgehen führt nur zu einer stärkeren Netzwerkbelastung und verschlechtert die Übertragunsgeschwindigkeit durch das unnütze Öffnen und Schließen von Verbindungen. Darum wurde ab der Version HTTP/1.1 die Keep-Alive Verbindung eingeführt, die auch schon vorher experimentell Anwendung fand. Die Idee dahinter ist, daß die Verbindung zwischen Server und Client bestehen bleibt, bis alle Dateien übertragen wurden. Nach dem Verbindungsaufbau werden also Request und Response mehrfach durch die selbe Verbindung ausgeführt. Dieses Vorgehen ist ab HTTP/1.1 Standard, muß also nicht extra durch ein “Connection: keep-alive” Header Eintrag angegeben werden. Aber wie verständigen sich Client und Server über das Ende der Verbindung? Beide können jederzeit durch ein “Connection: close” die Verbindung beenden, wobei dies meistens durch den Server geschieht, nachdem alle Dateien übertragen wurden. Damit der Server die Verbindung nicht zu lange offen hält, falls der Client unerwartet abbricht, gibt es eine Timeout Zeit. Nach deren Ablauf trennt der Server die Verbindung, falls kein neuer Request eintrifft. Ein weiterer Vorteil dieses Verfahrens ist das sogenannte “Pipelining”. Das bedeutet, daß der Client nicht mit einem neuen Request warten muß bis die Response des Servers auf den vorhergehenden Request eintrifft. Er kann stattdessen viele Anfragen nacheinander abschicken und wartet dann auf die Antworten des Servers, die jedoch in der gleichen Reihenfolge eintreffen müssen. Wie man mit Hilfe der Abbildung erkennen kann, führt das zu einer höheren Übertragungsgeschwindigkeit von umfangreichen Web-Seiten. 168 18.8 Proxy 18.8 Proxy Über HTTP können beliebige Daten übermittelt werden. Viele Daten, die auf ftp- und gopherServern etc. liegen, können nicht direkt mit HTTP angefordert werden. Eine Lösung wäre, daß der Browser alle möglichen Protokolle unterstützt. Da diese Möglichkeit aber zusätzlichen Speicherplatz kostet und der Browser zu umfangreich werden würde, bedient man sich eines Proxy-Servers. Ein Proxy-Server ist eine Art Gateway, das HTTP mit dem Browser und verschiedene andere Protokolle mit den Servern spricht. So muß der Browser nur HTTP können, den Rest erledigt der Proxy. Gleichzeitig ist es möglich, die Daten, die über den Proxy laufen, zu cachen. Der nächste Abschnitt behandelt diese Möglichkeit. Der Proxy-Server kann auf einer beliebigen Maschine laufen, die Zugang zum internen und externen (Internet) Netz hat. Das heißt, es ist auch möglich, daß der Proxy auf derselben Maschine läuft wie der Browser. ftp HTTP WWW−Browser Proxy ftp−Server go ph er Cache ws ne gopher−Server news−Server 18.8.1 Proxy-Caching Der Proxy-Server leitet einfach jede Anfrage weiter, auch wenn die gleiche Anfrage erst kurz vorher gestellt wurde, was sehr ineffizient ist und unnötige Netzlast verursacht. Die Lösung für dieses Problem ist der Cache. Bei jeder Anfrage vom Browser befragt der Proxy erst den Cache, ob sich das angeforderte Objekt schon darin befindet. Ist das so, wird das Objekt aus dem Cache an den Browser übermittelt. Wenn das Objekt nicht im Cache ist, wird die Anfrage an den Server weitergeleitet. Die Daten, die der Server als Antwort schickt, werden in den Cache geladen und gleichzeitig an den Browser weitergeleitet. Von nun an ist das Objekt im Cache vorhanden und kann bei der nächsten Anfrage direkt aus dem Cache an den Browser übertragen werden. Natürlich ist Caching auch ohne Proxy möglich, in diesem Fall erledigt dies der Client selbst, was 169 18 Hypertext Transfer Protocol (HTTP) aber ein paar Nachteile hat, zumindest wenn mehrere Clients den Proxy-Server benutzen. Dann spart Proxy-Caching Plattenplatz, da nur eine Kopie des Objektes gecached wird. Ausserdem können “Look ahead” und andere vorausschauende Algorithmen effizienter genutzt werden, da die Anzahl der Clients und damit auch die Grundlage der Statistik, die für die Cache-Verwaltung benutzt wird, viel aussagekräftiger ist. Die Aktualität der Objekte wird unter anderem durch das Header-Feld “if modified since” gewährleistet, durch das der Client herausfinden kann, ob die Datei, die angefordert wird, seit einem bestimmten Zeitpunkt aktualisiert worden ist. Weitere allgemeine Vorteile des Caching sind: • Zugriff auf Daten, die auf dem ursprünglichen Server gerade nicht verfügbar sind • schnellere Erreichbarkeit der Daten von Orten aus, die keine oder eine nur sehr langsame Verbindung zu den Servern mit den Originaldaten haben Natürlich gibt es auch Nachteile: • wenn nur wenige Clients häufig auf wechselnde Dateien zugreifen, wird Caching nutzlos • wenn die Caching-Strategie fehlschlägt wird möglicherweise ein veraltetes Objekt an den Client zurückgeschickt 18.9 HTTP 1.1 Die Version 1.1 ist zum Draft Standard geworden (RFC 2616), das W3C hat die Arbeit an HTTP/1.1 fast komplett eingestellt, da es dabei um einen stabilen Standard handelt. Nur eine kleine Gruppe von Mitarbeitern verfolgt die weitere Entwicklung von HTTP, z.B. experimentelle Implementierungen von neuen Features. In Version 1.1 sind einige Eigenschaften verbessert worden. Beispielsweise ermöglicht HTTP/1.1 im Vergleich zu älteren Versionen ein efizientes Caching. In den älteren Versionen war oft nicht klar definiert, wann Objekte überhaupt gecached werden dürfen, oder wie lange diese im Cache bleiben sollen. 170 KAPITEL 19 Internet Relay Chat (IRC) Lars Molske, Damian Nowak 19.1 Einleitung 19.1.1 Was ist das IRC und was kann man damit anfangen? Der IRC, oder Internet Relay Chat, ist wohl einer der interaktivsten Dienste die das Internet bieten kann. Er stellt ein grosses Mehrbenutzer-Kommunikationssystem dar, das man sich grob als Internet-CB-Funk vorstellen kann. Ein Vorteil zum CB-Funk ist jedoch, dass nicht nur Menschen aus der eigenen Region, sondern Menschen aus der ganzen Welt kostenlos daran teilnehmen können. Tausenden Menschen wird so die Möglichkeit geboten sich via Internet in verschiedenen Chaträumen, den so genannten Channels, zu treffen und gleichzeitig in Echtzeit zu unterhalten. Diese Unterhaltungen laufen in Textzeilen auf dem Bildschirm ab. Channels gibt es deshalb, weil sonst mit Sicherheit ein heilloses Chaos entstehen würde, wenn Tausende Menschen aufeinander einreden/tippen würden. Die Themen der einzelnen Channels sind so verschieden wie die Benutzer. Man kann zu wirklich jedem Thema oder Interessengebiet den passenden Channel finden. Ist dem nicht so, hat jedermann die Möglichkeit, einen eigenen Channel zu eröffnen und Leute einzuladen oder zu warten, bis ihn jemand in der Channel-Liste findet und ihn betritt. So nutzen viele Menschen das IRC als regelmäßigen Treffpunkt mit Freunden und Bekannten um Spass zu haben, Informationen auszutauschen, Hilfe zu Softwareprogrammen zu bekommen o.ä.. So gesehen ist auch der oft gehörte Ruf des Internet Relay Chat als rein unseriöses Spass-Medium nicht begründet. Der Sinn und die Verwendung liegt allein beim jeweiligen Benutzer. Jarkko Oikarinen (der Ur-Vater des IRC) sagte einmal über das IRC: 171 19 Internet Relay Chat (IRC) People get to meet each other around the world, by first meeting each other on ” IRC, and then later in real life. I also know many people who met first through IRC and then got married and are living happily. I myself have met lots of nice people from many countries through IRC, people I definitely would not have had a chance of meeting otherwise. I have attended some IRC meetings, and have always found it very interesting to meet the people typing on the other terminals, and I have learned that the impression you get through the keyboard is often very different from the one in real life. Which one is the right one is, of course, a matter of opinion...“1 Ein ganz besonderer Aspekt sollte noch erwähnt werden: Immer dann wenn auf der Welt etwas interessantes passiert, bildet sich der Channel #report. Gerade in Krisenzeiten, zum Beispiel zur Zeit des Golf-Krieges, hat das IRC seine Vorteile unter Beweis stellen können und so stark an Popularität zugenommen. Brandaktuelle Neuigkeiten bekam man aus dem IRC: Als sich Anfang 1991 der Golfkrieg verschärfte, trafen sich hunderte von IRCern auf ” diesem Kanal und lauschten den Berichten. Schneller als CNN, aus erster Hand und zum Teil sehr dramatisch: Z. B. berichtete damals ein IRCer aus Israel, wie 100 Meter neben ihm eine Scud-Rakete eingeschlagen ist, und ihm durch die Erschütterung die Teetasse vom Tisch gefallen ist. Die Logfiles von damals sind heute noch auf FTP-Servern archiviert. Weitere Anlässe für einen #report-Kanal waren z. B. der Putschversuch in Moskau (1992) und das 94er Erdbeben in Kalifornien.“2 Wem das Internet zu anonym ist, oder wer sich fragt Wo sind all die Millionen Internet Nutzer ” eigentlich?“, sollte einmal in einem der IRC-Netze vorbeischauen. Dort kann man Tausende von ihnen treffen. 19.1.2 Die Entstehung des IRC Die Entstehung des IRCs kann man bis ins Jahr 1988 zurückverfolgen. Der Vater des IRC, ein Student namens Jarkko Oikarinen, arbeitete damals an der University of Oulu in Finnland als Administrator eines Sun-Serversystems. Auf diesem lief die OuluBox, ein öffentliches Bulletin Board System (BBS). Damals hatte er nicht viel zu tun, und so entwickelte er das Ur-System des IRC – jedoch nicht mit der Intention, ein weltumspannendes Chat-Netzwerk zu schaffen. Alles was er wollte, war ein “Mehr-Personen-Schwatz-Programm“.3 So I started doing a communications program, which was meant to make OuluBox ” (a Public Access BBS running on host tolsun.oulu.fi, administered by me) a little more usable.“4 Als das IRC zu wachsen begann, verabschiedete er sich langsam von seiner eigentlichen Idee, das BBS aufzuwerten, und steuerte auf ein eigenständiges Chat-System hin. Da Finnland zu diesem Zeitpunkt jedoch noch nicht an das Internet angeschlossen war, verbreitete sich das IRC zunächst nur langsam 1 aus: http://www.filetrading.net/html/irc/intro.htm aus der Veröffentlichungsreihe der Abteilung “ Organisation und Technikgenese“ des Forschungsschwerpunkts Technik-Arbeit-Umwelt am Wissenschaftszentrum Berlin für Sozialforschung GmbH 3 aus “Eine kurze Geschichte des IRCs“ http://oswald.pages.de/chat/rps/#109 4 aus einer persönlichen E-Mail Oikarinens an Kai Seidler 2 172 19.2 Die Technische Struktur des IRC und nur in Finnland. Seine eigentliche Verbreitung begann erst langsam mit der Internetverbindung Finnland-Amerika, der Siegeszug des IRC begann, und das ältere “Talk“-Protokoll (erlaubte direktes Messaging von 2 Usern nach dem Client-to-Client Prinzip) wurde vom IRC Protokoll verdrängt. Jedoch war die Netzstruktur noch lange Zeit schlecht, so dass internationale Verbindungen nur selten zustande kamen. Die IRCer der einzelnen Länder waren also einige Zeit noch meist unter sich. Heute hat sich das IRC jedoch in Dimensionen entwickelt, die nie geplant waren. Es war für maximal 100 User gedacht, heute gibt es mehrere unabhängige IRC Netze mit jeweiligen Benutzerzahlen im hohen zweistelligen Tausender-Bereich. So kann man sich auch leicht vorstellen, dass es heute zu mehr und mehr Problemen kommt. Doch dazu später mehr. 19.2 Die Technische Struktur des IRC 19.2.1 Netzaufbau Das IRC funktioniert nach dem Client-Server Prinzip. Das bedeutet im Klartext, dass sich ein User an einem zentralen Rechner, dem IRC-Server, anmeldet. Dazu benutzt er einen Client, welcher die Vermittlerfunktion zwischen Benutzer und Server einnimmt. Die eigentliche Arbeit wird vom Server erledigt, deshalb reicht zum IRCen auch schon ein relativ schwacher Rechner. Doch genau diese Struktur führt bei den heutigen Ausmassen der IRC Netze zu Problemen: If the existing networks have been able to keep growing at an incredible pace, we ” must thank hardware manufacturers for giving us ever more powerful systems.“ 5 Die IRC-Server der verschiedenen Netze sind im Normalfall azyklisch untereinander verbunden (siehe Abb. Baumstruktur, Seite 174). Das führt dazu, dass die Server sich ständig untereinander synchronisieren müssen, um immer die aktuellen Zustandsinformationen aller anderen Server zu haben. Diese Synchronisation funktioniert aufgrund des zu übertragenden Datenvolumens nicht immer wie sie soll, doch dazu mehr in 19.4.1. So kann Client 1 an Server 4 auch mit Client 4 an Server 2 kommunizieren, ohne dass sie am gleichen Server hängen. Dazu sollte man erwähnen, dass sich bis zum heutigen Tage mehrere unabhängige IRC-Netze entwickelt haben, die zwar weitgehend nach dem gleichen Prinzip funktionieren, aber untereinander nicht verbunden sind. Nur netzinterne Server sind miteinander verbunden, die Netze sind es nicht! 19.2.2 Das IRC-Protokoll Durch das IRC-Protokoll wird der generelle Austausch von Nachrichten und Daten im IRC beschrieben. Es ist aufgrund seiner finnischen Herkunft ein 8-bit Protokoll (da der finnische Zeichensatz nicht in 7 Bit passt), jedoch wurden die Schlüsselwörter und -zeichen so gewählt, dass es US-ASCII und Telnet kompatibel ist. Das Protokoll muss natürlich nicht nur die eigentlichen Daten der Nachrichten an sich beinhalten, sondern auch Daten, die zur Verwaltung der Kommunikation im IRC benötigt werden. Das IRC-Protokoll verwaltet nicht nur die Kommunikation zwischen Client und Server, sondern auch zwischen den Servern untereinander. Natürlich sind die Rechte der ClientVerbindungen im Gegensatz zu den Server-Verbindungen einschränkt. Das in RFC 2813 beschrie5 aus RFC2810 173 19 Internet Relay Chat (IRC) Abbildung 19.1: Beispiel: Dynamische Verbindungen des IRCNet in der BRD Abbildung 19.2: Client-Server Baumstruktur 174 19.2 Die Technische Struktur des IRC bene Server-Protokoll hat sich jedoch zugunsten der Skalierbarkeit weiter, vom Client Protokoll weg entwickelt. Grosse Netze wie sie heute vorkommen wären wohl sonst nur noch schwerer möglich. Als Transportprotokoll für das IRC wurde das Transmission Control Protocol (TCP) gewählt, das eine relativ verlässliche Kommunikation zwischen den Teilnehmern verspricht. TCP garantiert durch seine Struktur, dass die Daten fehlerfrei, ohne Verlust oder Duplizierung und in der richtigen Reihenfolge beim Empfänger eintreffen. Es wären auch andere Protokolle als Basis denkbar (z.B. Multicast-IP), jedoch sprechen die guten Eigenschaften von TCP natürlich für seine Verwendung um einen verlässlichen Kommunikationsdienst aufzubauen. Neben dem IRC-Protokoll kommt im IRC auch noch das DCC- und das CTCP-Protokoll zu Einsatz, auf die im Verlauf noch näher eingegangen wird. Sowohl das IRC-Protokoll, als auch DCC und CTCP werden im RFC 1459 6 beschrieben. In den RFCs 2810-28137 wurden notwendige Aktualisierungen und Erweiterungen definiert. 19.2.3 Nachrichtenformat Jede IRC-Nachricht besteht aus einem optionalen Präfix, dem eigentlichen Kommando und den Kommandoparametern. Diese drei Teile werden durch ASCII-Leerzeichen getrennt, das Ende einer Nachricht wird durch das so genannte <CR>-<LF> (Carriage-Return - Line Feed) codiert. Die Länge einer Nachricht darf 512 Zeichen nicht überschreiten. Das Präfix wird durch ein führendes ’:’ erkannt. Gesendete Elemente, die nicht diesen Aufbau haben oder deren Absender bei fehlendem Präfix nicht ermittelt werden können, werden vom Server schlicht ignoriert. Im Präfix wird der Absender angegeben. Also entweder ein Servername oder eine UserAbsenderadresse. Bei einem User namens Hans Meier mit dem Nickname Hansi würde das Präfix so aussehen: “[email protected]“ wenn sein Host Rechner1 an der Uni-Bielefeld wäre. Das Präfix ist jedoch optional, da der empfangene Server bei fehlendem Präfix den Absender durch die Herkunft der Nachricht ermittelt. Das Kommando beinhaltet entweder ein gültiges IRC-Kommando (wie z.B. join, msg, squit...) oder eine ASCII-Zahl (daher dreistellig). Im Präfix sind dann für das Kommando spezifische Angaben enthalten, bei join z.B. der ChannelName. Server haben darüber hinaus die Möglichkeit des “Numeric Replies“. Um den Datenverkehr zu verringern sendet der Server nur eine 3-stellige Zahl, die in bestimmten Liste (z.B Error-Replies oder Command-Responses) eine bestimmte Nachricht codiert. So zum Beispiel wenn beim JoinBefehl im Parameter ein ungültiger oder nicht existenter Channel angegeben ist. Dann wird der Fehlercode 403 (ERR NOSUCHCHANNEL) gesendet. 19.2.4 Sendemöglichkeiten Grundsätzlich kann man die IRC-Kommunikation in drei Kategorien Unterteilen: • One-To-One (Unicast): Es wird der direkteste Weg gewählt. Dies geschieht nicht zuletzt auch aus Sicherheitsgründen. Je weniger Knotenpunkte die Nachricht passiert, desto weniger Abhörmöglichkeiten bestehen. One-To-One Kommunikation erfolgt in den allermeisten Fällen nur durch Clients, da Server sich nur selten “etwas zu sagen haben“. 6 7 http://www.ietf.org/rfc/rfc1459.txt http://www.ietf.org/rfc/rfc2810.txt bzw. http://www.ietf.org/rfc/rfc2811.txt. . . 175 19 Internet Relay Chat (IRC) • One-To-Many: Um mehrere Ziele effizient anzusprechen, gibt es mehrere Möglichkeiten: – To-A-List: Vom Client wird eine Liste mit Empfängeradressen (Usern) angegeben. Da dies jedoch ganz offensichtlich relativ umständlich ist, kommt diese Möglichkeit zu senden nur selten zum Einsatz. – To-A-Group (Multicast): Häufigste Sendeart, so kommt sie z.B. beim Client-ToChannel-Messaging zum Einsatz. Ein Channel ist also eine dynamische Liste von Usern, an die eine Nachricht versendet wird. Die Nachricht wird nur an die Server weitergeleitet, an denen User aus dem betreffenden Channel angemeldet sind. Egal wie viele User aus einem Channel an einem Server angemeldet sind, die Nachricht wird vom sendenden Server (also dem Server an dem der Absender-Client angemeldet ist) nur einmal an den Empfänger-Server gesendet, dort dupliziert und anschliessend an die betreffenden User weitergeleitet. – To-A-Host (auch Local): Es wird nur an User oder Server mit einer bestimmten HostMask gesendet. Diese Sendemöglichkeit kann also z.B. von Operatoren verwendet werden, um eine Mitteilung an alle User zu schicken, die sich an einem bestimmten Server angemeldet haben oder die gleiche Host-Mask haben. Local-Nachrichten werden nur an den Server geschickt, an dem man selbst angemeldet ist. • One-To-All (Broadcast): Eine Nachricht wird an alle Server oder Clients des Netzes oder sogar beide geschickt. Dies kommt z.B. bei dem Informationsaustausch zwischen den Servern (Server-to-Server) zum Einsatz, damit alle Server die gleichen Informationen über bestehende Channels oder Nicknames o.ä. haben. Es gibt jedoch keinen Client-Befehl der durch eine einzige Nachricht an alle Clients gesendet wird. Wie man sich denken kann, wird durch eine Broadcast-Nachricht erheblicher Traffic erzeugt. 19.3 Verwendung 19.3.1 Netzübersicht Zu Beginn der Entwicklung des mittlerweile weltumspannenden Netzes gab es nur das EFNet 8 . 1996 änderte sich die Situation und das EFNet spaltete sich in das EFNet und das IRCNet9 auf. Während das EFNet seitdem vor allem die U.S. Amerikanischen Server umfasst, bot das IRCNet für die Europäischen Nutzer den IRC-Service. Das EFNet hat im Durchschnitt mehr User, jedoch umfasst das IRCNet mehr Länder. In den letzten Jahren haben sich noch eine handvoll alternative Netze entwickelt, zum Beispiel das bei Online-Gamer beliebte Quakenet10 oder das zur Zeit größte Alternativnetz Undernet11 . Die neuen Netze sind vor allem entstanden, weil die großen Netze zu groß, langsam und fehleranfällig geworden sind. Aktuell sind auf den Servern Benutzerzahlen von 50000 Usern oder mehr keine Seltenheit mehr. 8 http://www.efnet.net http://www.ircnet.net 10 http://www.quakenet.eu.org 11 http://www.undernet.org 9 176 19.3 Verwendung 19.3.2 Strukturen im IRC Der Nick Nachdem ein User sich mit einem IRC-Server verbunden hat, muss er einen eindeutigen Nickname auswählen. Es ist nicht möglich, dass innerhalb eines IRC-Netzes mehrerer User den gleichen Nickname haben. Dies hat Vorteile, aber auch Nachteile. Ein Vorteil ist, dass ein User immer eindeutig anhand seines Nicknames zu identifizieren ist, ein Nachteil besteht jedoch darin, dass es teilweise zu regelrechten “Nick Wars“ kommt, wenn sich zwei User um einen Nickname streiten. Zum Beispiel versucht die eine Person möglichst immer vor der anderen das IRC zu betreten, um so seinen Nick für sich zu belegen. Oder sie versucht möglichst immer im IRC zu bleiben, auch wenn sie in Wirklichkeit gar nicht anwesend ist. Ein weiteres Problem besteht auch darin, dass zwar jeder Nickname nur einmal im IRC existieren kann. Doch selbst durch einen auf den User ausgeführten Whois-Befehl kann nicht garantiert werden, dass man sich mit dem gleichen User wie am letzten Tag unterhält. Eine Zeit lang gab es Überlegungen, ob es sinnvoll und machbar wäre, Nicknames zu registrieren und zu schützen. Dabei sollte eine Ident-Abfrage beim Connect auf den Server den Benutzer identifizieren und somit sicherstellen, dass auch nur er den entsprechenden Nicknamen wählen kann. Dazu müsste aber auch jeder Server in dem entsprechenden IRC-Netz die Informationen über die Nutzer immer verfügbar haben, um den Ident-Lookup erfolgreich auszuführen und mit den Daten zu vergleichen. Da jedoch der Aufwand nicht dem Nutzen gerecht wird, bieten die meisten Netze diese Funktion nicht an. Client-to-Channel Messaging Wie oben schon kurz erwähnt, dienen innerhalb eines IRC-Netzes Chaträume, genannt Channels, zum Austausch der Nachrichten zwischen den IRC-Teilnehmern. Eine Nachricht, die ein User in einen Channel sendet ist für jeden anderen User, der sich auch gerade in dem betreffenden Channel aufhält, lesbar. Jeder User hat die Möglichkeit, einem Channel beizutreten12 oder auch einen neuen Channel zu formen13 . Natürlich ist es möglich (und durchaus üblich) sich in mehreren Channels gleichzeitig aufzuhalten. Das IRCNet hat zum Beispiel mehr als 40000 offene Channels im Durchschnitt. Es gibt fast zu jedem Thema einen oder meist mehrere Channels. Der Name eines Channels muss immer eine Zeichenkette sein. Er darf keine Leerzeichen oder manche Sonderzeichen enthalten. Vor dem Channel-Namen muss grundsätzlich entweder eine # oder ein & stehen. Mit # beginnende Channel sind von allen Servern erreichbar. Ein mit einem & beginnender Channel ist nur von dem Server aus erreichbar, auf dem er geöffnet wurde. 12 13 /join [<channel>] /join [<noch nicht existierender Channel>] 177 19 Internet Relay Chat (IRC) Beispiel: /server irc.fu-berlin.de Verbindet den Client mit dem Server /join #newTestChan Erstellt den Channel #newTestChan auf dem Server irc.fu-berlin.de. Jeder User im gesamten IRCNet kann jetzt mit dem gleichen Kommando dem Channel beitreten, somit auch User, die mit dem Server irc.freenet.de verbunden sind. /join &newTestChan Erstellt den Channel &newTestChan auf dem Server irc.fu-berlin.de. Nur User die auch direkt auf irc.fu-berlin.de angemeldet sind, können diesem Channel beitreten. Für andere ist er nicht erreichbar. Wenn sie das Kommando eingeben würden, würde der gleiche Channel auf ihrem Server geöffnet. Der Operator-Status Wenn jemand einen neuen Channel eröffnet, bekommt er den “OP-Status“, und ist damit “Owner“ des Channels. Damit ist dieser der Channel-Operator. Der Operator ist durch ein @ vor dem Nickname gekennzeichnet. Der Operator kann zum Beispiel mit dem mode-Befehl bestimmte Attribute für seinen Channel setzen oder anderen Clients in diesem Channel den OP-Status verleihen. Er kann den Channel auch mit einem Passwort versehen, ihn unsichtbar machen oder ihn moderieren – das bedeutet nur User, denen er Voice (ein + vor dem Nick) erteilt hat, können in diesem Channel Nachrichten senden. Zudem kann ein Channel-OP User aus dem Channel werfen oder sogar bannen. Der Channel-OP genießt in seinem Channel eine gewisse Allmacht. Missbraucht er diese, hat man die Möglichkeit, sich bei einem Server-Admin zu beschweren. Die Server-Admins sind die sogenannten IRC-OPs. Sie stellen die höchste Machtinstanz im IRC da und haben alle Rechte, so können sie auch Channel-OPs, die ihre “Macht“ missbrauchen, den Operator-Status entziehen. Bei manchen Usern hat sich mittlerweile eine Art Sport daraus entwickelt, in möglichst vielen Channels den OP-Status zu bekommen, sozusagen als IRC-Statussymbol. Dies führt oft zu Problemen. So zum Beispiel im Falle der Channel-takeover-Versuche oder zu ängstlich reagierenden Channel-OPs. Es kann durchaus vorkommen, dass diese beim geringsten Verdacht mit einem Kickban reagieren, um ihren Channel zu schützen. Das bedeutet, das ein User aus dem Channel geworfen wird, und unmittelbar aus diesem Channel für eine bestimmte Zeitspanne verbannt wird. Das bedeutet, dass er keine Möglichkeit mehr hat, den Channel nach dem kick zu betreten, bis der Ban aufgehoben wird. Client-to-Client Messaging Wie im Kapitel “Sendemöglichkeiten“ auf Seite 175 beschrieben, bietet das IRC neben der Möglichkeit eine Nachricht an alle User im Channel zu senden, auch die Möglichkeit, Nachrichten an nur 178 19.3 Verwendung einen oder oder mehrere User zu senden. Den gebräuchlichsten Weg stellen die Befehle /msg und /query dar. Der Befehl /msg sendet eine Nachricht zu dem angegebenen User, oder auch durch “,“ getrennt an eine Liste von Usern. Im Gegensatz zu dem Befehl /msg ist es mit /query nicht möglich, an eine Liste von User zu senden, sondern nur genau an einen anderen User. /query öffnet ein neues Message-Fenster, in welchem der gesamte Nachrichtenaustausch stattfindet. Normalerweise tauschen sich zwei User per /query aus, der Befehl /msg wird in der Regel zum Senden einer kurzen Nachricht oder eines Befehls an ein Script oder an einen Bot genutzt. DCC - Direct Client Connect Eine weitere Möglichkeit die das IRC bietet, ist der DCC (Direct Client Connect). Mit Hilfe des DCC-Protokolls können zwei User eine direkte Peer-to-Peer Verbindung zum “sicheren“ chatten oder Datentransfer ohne Einbindung des Servers öffnen. Sendet ein User eine DCC-Anfrage an einen anderen User, leitet der Server die Verbindung ein, indem er die IP-Adresse des anderen Users weitergibt und der DCC dann über eine direkte Peerto-Peer Verbindung aufgebaut wird. Der angefragte User bekommt in diesem Fall (bei den meisten Client-Programmen) eine Warnmeldung, dass eine direkte Verbindung aufgebaut wird, die nicht mehr über den IRC-Server verfolgt und kontrolliert werden kann. Somit ergibt sich die Gefahr, schädliche Daten zu empfangen. Ein User sollte sich immer genau vergewissern, wer ihm eine DCC-Anfrage sendet, um diese Gefahr zu minimieren, denn auf diesem Wege werden viele Viren, Trojaner und schädliche Scripte verteilt. Der DCC ist hauptsächlich sehr beliebt, weil er es ermöglicht Daten zu versenden, die kein bestimmtes Format haben müssen. Durch den DCC ist es im IRC also auch möglich nicht nur zu kommunizieren, sondern auch Dateien zwischen Usern zu transferieren. Der zweite große Vorteile des DCCs liegt darin, das er nicht über Server geroutet wird. Dadurch müssen weniger Stationen überbrückt werden – das “Lag“ wird minimiert und die Datenpakete können wesentlich schwerer verändert oder angezapft werden. CTCP - Client-To-Client Protocol Der DCC stand am Anfang seiner Entwicklung in direkter Konkurenz zu dem CTCP (Client-ToClient Protocol). Dieses Protokoll wurde ursprünglich entwickelt, um Dateien über das IRC zu übertragen, konnte sich aber nicht gegen den DCC durchsetzten. Heute wird das CTCP ausschließlich zum Senden einfacher Anfragen an einen anderen Client benutzt. CTCP wird z.B. eingesetzt, um bei einem anderen Client die lokale Zeit, die benutzte Version und Implementierung abzufragen. Eine der wohl bekanntesten CTCP Funktionen ist das Kommando /ping. Ein Pingliefert einem User eine Information darüber zurück, wie lange eine Message von einem Client zum anderen braucht. Der /ping-Befehl sendet einfach nur ein Signal, auf das ein Client automatisch mit einem Pong! antwortet. Genauso wie bei dem DCC läuft eine CTCP-Verbindung nicht über einen IRC-Server, sondern wird 179 19 Internet Relay Chat (IRC) nur durch ihn vermittelt. Alle weiteren Übertragungen erfolgen auf direktem Wege von Client zu Client. Deshalb sind seine Eigenschaften analog zu denen des DCC. Kommando und Funktionsübersicht Alle IRC-Clientprogramme benutzen dieselben Kommandos, die an den Server weitergegeben und nicht lokal verarbeitet werden. In diesem Abschnitt werden die wichtigsten Kommandos aufgelistet. • /server [<servername>] broadcast Mit diesem Befehl verbindet sich der Client mit dem angegebenen Server. • /list [-<options>] [<channel>] local Der list-Befehl gibt eine Liste sämtlicher Channels zurück, die im jeweiligen IRC-Netz existieren. Dabei besteht die Möglichkeit, die Liste zu filtern. Mögliche Optionen sind: – min <n> - listet alle Channels mit minimal n Benutzern. – max <n> - listet alle Channels mit maximal n Benutzern. – public - listet alle öffentliche Channels. – private - listet alle private Channels. – topic - listet Channels, die ein Topic gesetzt haben. – wide - stellt die Liste in einer kompakteren Form dar. Zusätzliche kann man die Channels mit weiteren Optionen (-name oder -users) nach Channelnamen oder Benutzerzahl sortieren lassen. • /lusers [<server>] local /lusers gibt an, wieviele User, Operatoren, Server und Channel es zur Zeit im IRC gibt. Dabei ist es möglich, diesen Befehl nur für einen bestimmten Server auszuführen oder alle Server anzufragen. • /motd [<server>] local oder unicast Dieser Befehl fragt die message of the day des angegebenen Servers ab. In dieser stehen wichtige Verhaltensregeln und wichtige Broadcast-Nachrichten. • /admin [<server>] local oder unicast Durch /admin wird die Liste aller momentan auf einem Server anwesenden IRC-Operatoren angezeigt. • /ping [<nick/channel>] unicast oder multicast Der Ping-Befehl misst die Antwortzeit eines Signals, das an einen anderen IRC-Clients oder Server gesendet wird. Er wird eingesetzt um zu überprüfen, ob überhaupt eine Verbindung zu einem anderen Client/Server besteht und wie lange die Nachrichtenübermittlung benötigt. Er funktioniert also genau so wie der vom Betriebssystem her bekannte Ping-Befehl. Wird ein Channelname angegeben, verhält sich der Befehl, als ob man jeden User in diesem Channel einzeln anpingt. • /join [<channel>] broadcast Dieser Befehl dient dazu, einem Channel beizutreten. • /part [<channel>] broadcast Mit /part verlässt man den Channel wieder. 180 19.4 Probleme und Risiken des IRC • /nick [<nick>] broadcast Der Befehl /nick dient dazu, seinen Usernamen zu ändern. Da viele User oft ihren Nick wechseln, wird dadurch eine hohe Netzlast erzeugt. Unter Umständen kann es somit durchaus einige Zeit dauern, bis der Befehl ausgeführt wird. • /msg [<nick>] [<Nachricht>] unicast Ein /msg schickt die betreffende Nachricht nur an den User, dessen Nick angegeben ist. • /query [<nick>] unicast Ein Query stellt eine Verbindung mit einem anderen User her – man könnte ihn also als eine Art privaten Chatraum beschreiben. Er ist die Erweiterung des /msg-Befehls. Der Query wird anders als der DCC-chat14 über einen oder mehrere Server verwaltet. • /whois [<nick>] local Der Whois-Befehl bietet Informationen über den betreffenden User. Er liefert den Namen des Users (falls angegeben), die Host-Mask (Einwahlmaske), in welchen Channels der User sich aufhält und wie lange der User inaktiv (idle) ist. Er ist die Erweiterung des /who-Befehls, der genauso funktioniert. Jedoch liefert /who nur den Namen. Ergänzend dazu gibt es auch noch den /whowas-Befehl, welcher für kurze Zeit nachdem ein User das IRC verlassen hat dieselben Informationen bereitstellt. • /dns [<nick>] unicast Mit /dns kann man sich die IP-Adresse des angegebenen Users anzeigen lassen. • /kick [<nick>] broadcast Dieser Befehl ist den Channel- oder IRC-Operatoren vorbehalten und entfernt den betreffenden User aus dem Channel oder von dem Server. Zumeist wird dieser Befehl aufgrund unangemessenen Verhaltens angewandt. Bei groben Vergehen auch gefolgt oder verbunden mit einem /ban. Dies bedeutet die Verbannung vom Server/Channel und die IP-Adresse des gebannten Users wird gesperrt bis der Ban aufgehoben wird. • /dcc [<command>] [<arguments>] unicast Der DCC-chat stellt eine Besonderheit im IRC-Netz dar, weil die Verbindung direkt zwischen den Clients (Peer-to-Peer) aufgebaut wird und ohne Server funktioniert. Sie ist somit am “sichersten“. Zudem gibt es wie schon erwähnt mit den Kommandos send und get die Möglichkeit, Dateien zu senden und zu empfangen. Es existieren noch wesentlich mehr Befehle, jeden hier aufzunehmen würde den Rahmen sprengen und ist nicht Ziel dieser Ausarbeitung. Beispielsweise kann man noch die Kommandos /topic, /mode, /lastlog, /ignore, etc. nennen. Die hier beschriebenen Befehle reichen aber vollkommen aus, um sich im IRC einigermaßen gut zurecht zu finden. 19.4 Probleme und Risiken des IRC 19.4.1 Aktuelle Probleme Das IRC hat mit einigen wesentlich Problemen unterschiedlicher Art zu kämpfen: 14 siehe DCC, Seite 179 181 19 Internet Relay Chat (IRC) Überlastung Das wohl größte Problem des IRC-Netzes besteht darin, dass sich das Protokoll mittlerweile als nicht leistungsfähig genug erweist, um den großen Benutzeransturm stand zu halten und es zu einer regelrechten Überlastung des Netzes kommt. 1991 waren im Durchschnitt nur 250 User im IRC gleichzeitig aktiv. Schon 1994 waren es dann um die 5000 und schließlich mittlerweile über 80000. So kann es in den wirklich großen Netzen passieren, dass eine Nachricht 20 Sekunden bis hin zu über einer Minute braucht, bis sie von einem Client bis zum anderen gelangt. Netsplit Bedingt durch die Überlastung einzelner Server kommt es immer wieder und besonders zu Spitzenzeiten vermehrt zu sogenannten Netsplits. Das bedeutet, dass ein Server ausfällt oder die Verbindung zu einem anderen Server verliert. Die Verbindung muss dann entweder neu geroutet werden oder die eine Seite ist solange von der anderen abgeschnitten, bis der Server wieder verfügbar ist. Daraus resultiert natürlich, dass ein User 1, der mit dem Server 1 verbunden ist, die Verbindung zu User 2 und 3 verliert, wenn diese sich auf einem anderen Server (Server 2) befinden und Server 1 und 2 die Verbindung verlieren. Jedoch können sich User 2 und 3 weiterhin verständigen.(Siehe Grafik 19.2) Hohe Netzlast Für den einzelnen User ist die vom IRC verursachte Netzlast (genannt Traffic) verschwindend gering, jedoch haben die Server, vor allem die hoch frequentierten und zentralen, ein sehr hohes TrafficAufkommen. Das liegt zum einen an der Tatsache, dass das IRC kostenlos ist und zum anderen an der Fehlkonzipierung des Protokolls für solche Benutzerzahlen. So manchen Netzbetreibern wurde der durch den IRC-Service erzeugte Traffic zu hoch, was unter anderem auch zur Abspaltung des IRCNets vom EFNets führte. Langsam entspannt sich die Lage wieder, da sich mittlerweile mehrere kleine Netze erfolgreich etablieren konnten und sich so die Last nicht auf ein Netz alleine stützt. Nach und nach implementieren die Netze auch Verbesserungen im Protokoll und führten strengere Regeln für das Aufhalten im IRC ein. So sind z.B. in manchen Netzen automatisierte Scripte und Bots nicht erlaubt oder User werden nach einer gewissen Zeit der Inaktivität vom Server getrennt. Ebenso ist auf fast allen Servern so genanntes Flooding verboten, oder zumindest nicht gern gesehen. Tausch von illegalen Materialien Ein weiteres Problem stellt sich für das IRC in rechtlicher Hinsicht, da es bekannterweise rege zum Tausch von illegalem Material eingesetzt wird. Viele große Warez-Groups 15 betreiben IRCChannel, in denen im großen Stil Daten gehandelt werden. Im IRC ist das Nachvollziehen solcher Datentransfere noch schwerer als es bei den bekannten Tauschbörsen á la Napster oder dem Gnutella15 Tauschringe für raubkopierte Software, Filme und Musik 182 19.4 Probleme und Risiken des IRC Netzwerk ist. Dies ist um so ärgerlicher, da durch die großen Dateien erheblich der Traffic damit die Probleme erhöht werden. 16 und Sicherheit Ein weiteres zentrales Problem der IRC-Netze ist die Sicherheit. Da dem IRC-Protokoll das TCP/IPProtokoll zu Grunde liegt, hat es fast die gleichen Probleme. Für Geübte stellt es kein Problem dar, Nachrichten mitzulesen, zu verändern oder über das IRC in einem Rechner einzubrechen, wenn auf diesem keine besonderen Vorsichtsmaßnahmen getroffen worden sind. Im folgenden Abschnitt sind die häufigsten Risiken aufgelistet. Für genauere Beschreibungen und Lösungsvorschläge (Schutzmaßnahmen und ähnliches) bietet sich die FAQ von IRChelp.org17 an. • Trojaner Trojaner/trojanische Pferde sind in soweit eine Gefahr, wenn der IRC-User nichts ahnend alle ihm zugesandten Dateien speichert und bestenfalls noch ausführt. Die schädigende Wirkung dürfte eigentlich allgemein bekannt sein. Doch sogar in beliebten Scriptsammlungen finden sich ab und zu Trojaner. • Denial of Service Attacks Solche sogenannten Nukes stellen in den seltensten Fällen eine wahre Gefahr für den User da, zumal es kaum vorkommt, dass ein solcher Angriff auf einen kleinen Heimcomputer verübt wird. • Backdoors In manchen Clients (jedoch vornehmlich in öffentlich verbreiteten Scripten) sind Backdoors eingebaut, die dem Angreifer ermöglichen, in den Client oder gar in das System seines Opfers einzubrechen. Auch hier gilt jedoch, dass ein vorsichtiger Umgang mit Scripten dieses Risiko minimiert – wenn nicht sogar ganz ausschließt. Auf allen guten Script-Seiten und auch auf IRChelp.org befinden sich Listen mit solchen “unsicheren“ Scripten und Clients. 16 17 siehe 19.4.1 http://www.irchelp.org/irchelp/security/ 183 19 Internet Relay Chat (IRC) 184 Literaturverzeichnis [1] Paul Albitz und Cricket Liu. DNS and BIND. O’Reilly & Associates, Inc., 4. Auflage (2001). [2] Fred Baker. Requirements for IP Version 4 Routers. Request for Comments 1812, Internet Engineering Task Force (1995). [3] R. Braden, D. Borman und C. Partridge. Computing the Internet checksum. Request for Comments 1071, Internet Engineering Task Force (1988). [4] Robert Braden. Requirements for Internet Hosts - Communication Layers. Request for Comments 1122, Internet Engineering Task Force (1989). [5] Scott Bradner. Key words for use in RFCs to Indicate Requirement Levels. Request for Comments 2119, Internet Engineering Task Force (1997). [6] Scott O. Bradner. The Internet Standards Process. Request for Comments 2026, Internet Engineering Task Force (1996). [7] Douglas Comer und David L. Stevens. Internetworking with TCP/IP, Band 1. Prentice Hall, 4. Auflage (2000). [8] Stephen E. Deering. ICMP Router Discovery Messages. Request for Comments 1256, Internet Engineering Task Force (1991). [9] Roy T. Fielding, James Gettys, Jeffrey C. Mogul, Henrik Frystyk Nielsen, Larry Masinter, Paul J. Leach und Tim Berners-Lee. Hypertext Transfer Protocol – HTTP/1.1. Request for Comments 2616, Internet Engineering Task Force (1999). [10] Ross Finlayson, Timothy Mann, Jeffrey Mogul und Marvin Theimer. A Reverse Address Resolution Protocol. Request for Comments 903, Internet Engineering Task Force (1984). [11] Ian S. Graham. The HTML Sourcebook. John Wiley & Sons (1996). [12] Katie Hafner und Matthew Lyons. Where Wizards Stay Up Late – The origins of the Internet. Simon & Schuster (1996). [13] Heiko Holtkamp. Einführung in TCP/IP (1997). URL http://www.rvs.uni-bielefeld.de/~heiko/tcpip/ 185 Literaturverzeichnis [14] Christophe Kalt. Internet Relay Chat: Architecture. Request for Comments 2810, Internet Engineering Task Force (2000). [15] Christophe Kalt. Internet Relay Chat: Channel Management. Request for Comments 2811, Internet Engineering Task Force (2000). [16] Christophe Kalt. Internet Relay Chat: Client Protocol. Request for Comments 2812, Internet Engineering Task Force (2000). [17] Christophe Kalt. Internet Relay Chat: Server Protocol. Request for Comments 2813, Internet Engineering Task Force (2000). [18] Christopher A. Kent und Jeffrey C. Mogul. Fragmentation Considered Harmful. In Proc. SIGCOMM ’87, Band 17. ACM (1987). [19] Tobias Klein. Linux Sicherheit. Security mit Open-Source-Software – Grundlagen und Praxis. dpunkt-Verlag, 1. Auflage (2001). [20] Tracy Mallory und A. Kullberg. Incremental updating of the Internet checksum. Request for Comments 1141, Internet Engineering Task Force (1990). [21] Paul Mockapetris. Domain Names – Concepts and Facilities. Request for Comments 1034, Internet Engineering Task Force (1987). [22] Paul Mockapetris. Domain Names – Implementation and Specification. Request for Comments 1035, Internet Engineering Task Force (1987). [23] U.S. Department of Energy. Domain Name Service Vulnerabilities (1996). URL http://ciac.llnl.gov/ciac/bulletins/g-14.shtml [24] David C. Plummer. An Ethernet Address Resolution Protocol. Request for Comments 826, Internet Engineering Task Force (1982). [25] Jon Postel. User Datagram Protocol. Request for Comments 768, Internet Engineering Task Force (1980). [26] Jon Postel. Internet Control Message Protocol. Request for Comments 792, Internet Engineering Task Force (1981). [27] Jon Postel. Internet Protocol. Request for Comments 791, Internet Engineering Task Force (1981). [28] Jon Postel, Yakov Rekhter und Tony Li. Best Current Practices. Request for Comments 1818, Internet Engineering Task Force (1995). [29] Jon Postel und Joyce K. Reynolds. Instructions to RFC Authors. Request for Comments 2223, Internet Engineering Task Force (1997). [30] Anil Rijsinghani. Computation of the Internet Checksum via Incremental Update. Request for Comments 1624, Internet Engineering Task Force (1994). [31] Bernhard Röhrig. Linux im Netz – Das Standardwerk zu LAN und WAN. C & L Computeru. Literaturverlag, 2. Auflage (1999). [32] Ellen Siever. Linux in a Nutshell. O’Reilly Verlag, 2. Auflage (1999). [33] Richard W. Stevens. TCP/IP Illustrated, Band 1. Addison-Wesley (2000). [34] Richard W. Stevens. TCP/IP Illustrated, Band 2. Addison-Wesley (2000). [35] Richard W. Stevens. TCP/IP Illustrated, Band 3. Addison-Wesley (2000). [36] Gerhard Stummer. Adaptionsmechanismen verteilter Multimedia-Internetanwendungen. Diplomarbeit, Johannes Kepler Universität Linz (2001). 186 Literaturverzeichnis [37] Jürgen Suppan-Borowka. Ethernet-Handbuch. DATACOM-Buchverlag (1987). [38] Andrew S. Tanenbaum. Computer Networks. Prentice Hall (1996). [39] Andrew S. Tanenbaum. Computernetzwerke. Pearson (2000). 187