Seminarband "TCP/IP" Illustrated - Fakultät für Mathematik und

Werbung
Berichte zur Rechnerarchitektur
Band 12
ISSN 0949-3042
Nr. 1 (2006)
$
'
Technischer Bericht
&
%
Seminarband
„TCP/IP Illustrated“
Friedrich-Schiller-Universität Jena
Institut für Informatik
Lehrstuhl für Rechnerarchitektur
und -kommunikation
Hrsg.:
Prof. Dr.-Ing. W. Erhard
Christian Kauhaus (Hrsg.)
Christian Kauhaus (Hrsg.)
Seminarband „TCP/IP Illustrated“
Berichte zur Rechnerarchitektur
Seminarband
TCP/IP Illustrated
Christian Kauhaus (Hrsg.)
Sommersemester 2006
Herausgeber der Reihe:
Prof. Dr.-Ing. Werner Erhard
Lehrstuhl für Rechnerarchitektur und -kommunikation
Institut für Informatik
Ernst-Abbe-Platz 1–2
07743 Jena, Deutschland
ISSN 0949-3042
23. Dezember 2006
c Friedrich-Schiller-Universität Jena
Inhaltsverzeichnis
0. Vorwort
1
I.
3
Internetschicht
1. Internet Protocol (IP)
1.1. Einleitung . . . . . . . . . . . . . . . .
1.1.1. Das TCP/IP-Referenzmodell . .
1.1.2. Einordnung des IP . . . . . . .
1.2. Aufgaben des IP . . . . . . . . . . . . .
1.3. Eigenschaften des IP . . . . . . . . . .
1.4. Das IP-Datagramm . . . . . . . . . . .
1.4.1. Aufbau . . . . . . . . . . . . .
1.4.2. Der IP-Header . . . . . . . . .
1.5. IP-Adressierung . . . . . . . . . . . . .
1.5.1. Die Transportprotokollnummer
1.5.2. Die Internet-Adresse . . . . . .
1.5.3. Classful Addressing . . . . . .
1.5.4. Subnet Addressing . . . . . . .
1.5.5. Classless Inter-Domain Routing
1.6. IP-Routing . . . . . . . . . . . . . . . .
1.7. IP Version 6 . . . . . . . . . . . . . . .
1.7.1. Adressierung . . . . . . . . . .
1.7.2. Der IPv6-Header . . . . . . . .
1.7.3. IPv6-Neuerungen . . . . . . . .
1.7.4. Ausblick . . . . . . . . . . . .
1.8. Fazit . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
5
5
6
7
7
7
9
10
10
11
11
12
13
14
14
14
15
16
16
2. Internet Control Message Protocol (ICMP)
2.1. Einführung . . . . . . . . . . . . . . . . .
2.2. Einordnung des ICMP . . . . . . . . . . .
2.3. Aufbau . . . . . . . . . . . . . . . . . . .
2.4. Aufgaben . . . . . . . . . . . . . . . . . .
2.4.1. Fehlermeldungen . . . . . . . . . .
2.4.2. Anfragen . . . . . . . . . . . . . .
2.5. Kleiner Exkurs: Mobile IP . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
18
18
18
23
27
3. IP – Routing und Traceroute
3.1. Einführung . . . . . . . . . . . . . . . . .
3.2. Grundlagen des IP-Routing . . . . . . . . .
3.2.1. Optimale Wege in Netzwerken . . .
3.3. Statisches (Next-Hop-)Routing . . . . . . .
3.3.1. Versenden von Daten im Netzwerk .
3.3.2. IP-Routing-Algorithmus . . . . . .
3.3.3. Routing-Tabelle . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
29
29
30
31
31
33
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
V
Inhaltsverzeichnis
3.3.4. Aufbau und Modifikation der Routing-Tabelle .
3.4. Traceroute . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1. Funktionsweise von Traceroute . . . . . . . .
3.4.2. Ausgabe von Traceroute . . . . . . . . . . . .
3.4.3. Anwendungsmöglichkeiten von Traceroute . .
3.5. Zusammenfassung . . . . . . . . . . . . . . . . . . .
4. Dynamic Routing: RIP, OSPF, BGP
4.1. Einführung . . . . . . . . . . . . . . . . . . . . . .
4.2. Dynamic Routing . . . . . . . . . . . . . . . . . . .
4.3. Routing Information Protocol (RIP) . . . . . . . . .
4.3.1. Nachrichtenformat . . . . . . . . . . . . . .
4.3.2. Standard-Operationen . . . . . . . . . . . .
4.3.3. Metrics . . . . . . . . . . . . . . . . . . . .
4.3.4. Nachteile . . . . . . . . . . . . . . . . . . .
4.4. Open Shortest Path First (OSPF) . . . . . . . . . . .
4.5. Autonome Systeme und das Border Gateway Protocol
4.6. Zusammenfassung . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
35
35
37
37
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
39
39
39
39
40
41
41
41
42
43
II. Transportschicht
5. User Datagram Protocol (UDP)
5.1. Einleitung . . . . . . . . . . . . . . . . . . . . . .
5.2. UDP im Detail . . . . . . . . . . . . . . . . . . .
5.2.1. Eigenschaften . . . . . . . . . . . . . . . .
5.2.2. Header . . . . . . . . . . . . . . . . . . .
5.3. Experimente . . . . . . . . . . . . . . . . . . . . .
5.3.1. Vorüberlegungen . . . . . . . . . . . . . .
5.3.2. Experiment: Input-Queue . . . . . . . . . .
5.3.3. Experiment: Restricting Local IP Address .
5.3.4. Experiment: Restricting Foreign IP Address
5.4. Zusammenfassung . . . . . . . . . . . . . . . . .
45
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
47
47
47
47
47
48
48
48
49
49
50
6. Transmission Control Protocol (TCP) – Interactive Data Flow
6.1. Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Eigenschaften von TCP . . . . . . . . . . . . . . . . . . . . . . .
6.3. TCP-Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.2. TCP-Pseudoheader . . . . . . . . . . . . . . . . . . . . .
6.4. Datentransfer mittels TCP . . . . . . . . . . . . . . . . . . . . .
6.4.1. Experiment: Interaktiver Datenaustausch . . . . . . . . .
6.4.2. Experiment: Delayed Acknowledgement . . . . . . . . .
6.4.3. Experimente: Nagle-Algorithmus . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
51
51
51
53
53
54
54
55
56
57
7. TCP – Verbindungsaufbau und -abbau
7.1. Verbindungsaufbau . . . . . . . . . . . . . . . . . . . .
7.1.1. Drei-Wege-Verbindungsaufbau . . . . . . . . . .
7.1.2. Wiederholte Übermittlung von SYN-Segmenten
7.2. Verbindungsabbau . . . . . . . . . . . . . . . . . . . . .
7.2.1. Allgemeiner Vier-Wege-Verbindungsabbau . . .
7.2.2. Half-Close . . . . . . . . . . . . . . . . . . . .
7.3. Zustandsdiagramm . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
59
59
59
61
62
62
63
64
VI
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
7.3.1. Der Zustand TIME_WAIT . . . . . . . . . . .
7.4. Resetsegmente . . . . . . . . . . . . . . . . . . . . .
7.4.1. Verbindungsaufbau zu einem unbesetzten Port
7.4.2. Verbindungsabbruch . . . . . . . . . . . . . .
7.5. Zusammenfassung . . . . . . . . . . . . . . . . . . .
8. TCP Bulk Data Flow
8.1. Einführung . . . . . . . . . . .
8.1.1. Grundlagen . . . . . . .
8.1.2. Sliding Window . . . .
8.1.3. Window Scaling . . . .
8.2. Congestion Control . . . . . . .
8.2.1. Slow Start . . . . . . . .
8.2.2. Congestion Avoidance .
8.3. Experiment . . . . . . . . . . .
8.3.1. Idee . . . . . . . . . . .
8.3.2. Durchführung . . . . . .
8.3.3. Beobachtungen . . . . .
8.4. Weitere Probleme . . . . . . . .
8.4.1. Long Fat Pipe Networks
8.4.2. Silly Window Syndrome
8.5. Abschließendes . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
66
67
67
67
68
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
69
70
71
72
72
73
73
73
73
73
77
77
77
78
9. TCP – Timeout und Retransmission
9.1. Einleitung . . . . . . . . . . . . . . . . . . . . . . .
9.2. TCP Timer . . . . . . . . . . . . . . . . . . . . . .
9.2.1. Connection Establishment Timer . . . . . . .
9.2.2. Delayed Acknowledgement Timer . . . . . .
9.2.3. Keep Alive Timer und Idle Timer . . . . . .
9.2.4. TCP Persist Timer . . . . . . . . . . . . . .
9.2.5. Maximum Segment Life Wait Timer . . . . .
9.2.6. Retransmission Timer . . . . . . . . . . . .
9.3. TCP Retransmission . . . . . . . . . . . . . . . . .
9.3.1. Retransmission via Timeout . . . . . . . . .
9.3.2. Fast Retransmit . . . . . . . . . . . . . . . .
9.4. Verbesserungen für WLAN-Netzwerke . . . . . . . .
9.4.1. NewReno-Modifikation des Fast Recovery .
9.4.2. Erweiterung der SACK-Option . . . . . . . .
9.4.3. SACK-basierter Loss-Recovery-Algorithmus
9.4.4. Forward RTO-Recovery (F-RTO) . . . . . .
9.5. SYN-Flood-Angriff . . . . . . . . . . . . . . . . . .
9.6. Zusammenfassung . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
79
79
79
79
79
80
80
80
80
81
81
82
84
84
84
84
84
84
85
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
III. Anwendungsschicht
10. Domain Name System (DNS)
10.1. Einführung . . . . . . . . . . . . . . . . .
10.1.1. Motivation . . . . . . . . . . . . .
10.1.2. Was ist das DNS? . . . . . . . . . .
10.1.3. Entstehung des DNS . . . . . . . .
10.2. Konzepte . . . . . . . . . . . . . . . . . .
10.2.1. Lexikalischer Aufbau eines Namens
87
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
89
89
89
89
90
90
VII
Inhaltsverzeichnis
10.2.2. Namensraum . . . . . . . . . . . . . . . .
10.2.3. Zonen . . . . . . . . . . . . . . . . . . . .
10.2.4. Resource Records . . . . . . . . . . . . . .
10.2.5. Inverssuche . . . . . . . . . . . . . . . . .
10.3. DNS-Protokoll . . . . . . . . . . . . . . . . . . .
10.3.1. Header . . . . . . . . . . . . . . . . . . .
10.3.2. Question Section . . . . . . . . . . . . . .
10.3.3. Answer, Authority und Additional Section .
10.3.4. Kompressionsschema . . . . . . . . . . . .
10.4. DNS-Software . . . . . . . . . . . . . . . . . . . .
10.4.1. Resolver . . . . . . . . . . . . . . . . . .
10.4.2. Nameserver . . . . . . . . . . . . . . . . .
10.4.3. Caching . . . . . . . . . . . . . . . . . . .
10.4.4. Beispiel für eine DNS-Anfrage . . . . . . .
10.5. Erweiterungen, Wirtschaft und Politik . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
90
90
92
93
93
93
94
94
95
95
95
95
96
96
97
11. File Transfer Protocol (FTP)
11.1. Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2. FTP-Verbindungen . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.1. Die Steuerverbindung . . . . . . . . . . . . . . . . . . .
11.2.2. Die Datenverbindung . . . . . . . . . . . . . . . . . . . .
11.3. Verbindungs-Management . . . . . . . . . . . . . . . . . . . . .
11.3.1. Verbindungsaufbau . . . . . . . . . . . . . . . . . . . . .
11.3.2. Datenübertragung und Übertragungsmodi . . . . . . . . .
11.3.3. Verbindungsabbau und Wiederaufnahme der Übertragung
11.4. Das File eXchange Protocol . . . . . . . . . . . . . . . . . . . .
11.5. Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
99
99
100
102
102
102
106
107
108
110
12. Simple Mail Transfer Protocol (SMTP)
12.1. Einleitung . . . . . . . . . . . . . . . . . . . . . . .
12.2. Funktionsweise . . . . . . . . . . . . . . . . . . . .
12.3. SMTP-Befehle und SMTP-Status-Code . . . . . . .
12.3.1. SMTP-Befehle . . . . . . . . . . . . . . . .
12.3.2. SMTP-Status-Code . . . . . . . . . . . . . .
12.4. Extended SMTP (ESMTP) . . . . . . . . . . . . . .
12.4.1. AUTH . . . . . . . . . . . . . . . . . . . . .
12.4.2. STARTTLS . . . . . . . . . . . . . . . . . .
12.4.3. ESMTP-Beispiel . . . . . . . . . . . . . . .
12.5. Mail-Relaying . . . . . . . . . . . . . . . . . . . . .
12.5.1. Offenes Mail-Relay . . . . . . . . . . . . . .
12.5.2. SMTP-Relay-Server . . . . . . . . . . . . .
12.5.3. Beispiele . . . . . . . . . . . . . . . . . . .
12.6. E-Mail-Routing über SMTP und DNS . . . . . . . .
12.6.1. Beispiel: MX-Record . . . . . . . . . . . . .
12.6.2. Beispiel: Zielhost nicht erreichbar . . . . . .
12.7. Aufbau einer E-Mail . . . . . . . . . . . . . . . . .
12.7.1. Header . . . . . . . . . . . . . . . . . . . .
12.7.2. Multimedia Internet Mail Extensions (MIME)
12.8. Zusammenfassung . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
111
111
112
112
112
112
114
114
114
115
115
115
115
116
116
117
118
118
119
120
VIII
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
13. Network File System (NFS)
13.1. Allgemeine Informationen zu NFS . . . . . . . . . . . . . . . . . . . .
13.2. Remote Procedure Call . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2.1. Funktionsweise von RPC . . . . . . . . . . . . . . . . . . . . .
13.2.2. Aufbau von SunRPC-Nachrichten . . . . . . . . . . . . . . . .
13.2.3. External Data Representation (XDR) . . . . . . . . . . . . . .
13.2.4. Portmapper und Daemons . . . . . . . . . . . . . . . . . . . .
13.3. Das NFS-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3.1. Ablauf eines NFS-Zugriffs . . . . . . . . . . . . . . . . . . . .
13.3.2. Dateizugriff via File Handles . . . . . . . . . . . . . . . . . . .
13.3.3. Einbinden von NFS auf dem Client . . . . . . . . . . . . . . .
13.3.4. Die NFS-Prozeduren . . . . . . . . . . . . . . . . . . . . . . .
13.3.5. Zustandslosigkeit und Idempotenz . . . . . . . . . . . . . . . .
13.4. Experimente rund um NFS . . . . . . . . . . . . . . . . . . . . . . . .
13.4.1. Experiment: Einfache NFS-Zugriffe . . . . . . . . . . . . . . .
13.4.2. Experiment: NFS-Zugriffe während eines Verbindungsabbruchs
13.5. Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Literaturverzeichnis
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
121
121
121
122
123
123
124
124
124
124
126
126
127
127
127
129
131
IX
Abbildungsverzeichnis
1.1.
1.2.
1.3.
1.4.
1.5.
Vergleich von ISO/OSI- und TCP/IP-Referenzmodell.
Header eines IP-Datagramms. . . . . . . . . . . . . .
Übersicht über die Netzklassen. . . . . . . . . . . . .
Klasse-B-Netz mit 32 Subnets. . . . . . . . . . . . .
Format des IPv6-Headers. . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 6
. 8
. 12
. 12
. 15
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
2.10.
2.11.
2.12.
2.13.
2.14.
ICMP im TCP/IP-Schichtenmodell. . . . . . . . . . . . . .
Aufbau des ICMP-Headers. . . . . . . . . . . . . . . . . .
Lebenszeit überschritten. . . . . . . . . . . . . . . . . . .
ICMP-Pakete von verschiedenen Fehlermeldungen. . . . .
Ungültige Parameter. . . . . . . . . . . . . . . . . . . . . .
Source Quench. . . . . . . . . . . . . . . . . . . . . . . .
Redirect. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Destination Unreachable. . . . . . . . . . . . . . . . . . .
Synchronisation zweier Uhren durch ICMP Timestamps. . .
ICMP-Pakete für verschiedene Anfragen. . . . . . . . . . .
Router Discovery. . . . . . . . . . . . . . . . . . . . . . .
Pfad-MTU. . . . . . . . . . . . . . . . . . . . . . . . . . .
Mobile IP mit Hilfe von ICMP. . . . . . . . . . . . . . . .
Erweiterter ICMP-Header mit Daten zum Erhalt der Router.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
19
20
20
22
22
22
24
24
25
26
26
27
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8.
3.9.
Schema des Internet. . . . . . . . . . . . . . . .
Graphenbeschreibung einer Netzwerktopologie.
Minimum Spanning Tree. . . . . . . . . . . . .
Direkte und indirekte Zustellung. . . . . . . . .
Beispielnetzwerk. . . . . . . . . . . . . . . . .
IP-Routing-Algorithmus. . . . . . . . . . . . .
Routing-Tabelle. . . . . . . . . . . . . . . . . .
Funktionsweise von Traceroute. . . . . . . . . .
Ausgabe von Traceroute. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
30
30
30
32
32
33
36
36
4.1.
4.2.
4.3.
4.4.
4.5.
Übersicht des Routing-Vorgangs.
RIP-Einkapselung. . . . . . . . .
RIP-Header. . . . . . . . . . . .
RIP-Metrics. . . . . . . . . . . .
OSPF-Header. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
40
41
42
5.1.
5.2.
UDP-Header. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
UDP-Pseudoheader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.1.
6.2.
6.3.
6.4.
6.5.
Verbindungsorientierte Kommunikation.
TCP-Header. . . . . . . . . . . . . . . .
TCP-Pseudoheader. . . . . . . . . . . .
TCP-Traffic-Analyse . . . . . . . . . . .
Aufbau Experiment 1. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
51
53
54
55
55
XI
Abbildungsverzeichnis
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.
Variante 1 der Übertragung eines Zeichens an ein Remote-System.
Variante 2 der Übertragung eines Zeichens an ein Remote-System.
Delayed Acknowledgement auf Client-Seite. . . . . . . . . . . . .
Aufbau Experiment 2. . . . . . . . . . . . . . . . . . . . . . . . .
Datenstrom Experiment 2. . . . . . . . . . . . . . . . . . . . . . .
Aufbau Experiment 3. . . . . . . . . . . . . . . . . . . . . . . . .
Betätigen einer Funktionstaste. . . . . . . . . . . . . . . . . . . .
Datenstrom Experiment 3. . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
56
56
56
57
57
58
58
58
7.1.
7.2.
7.3.
7.4.
Der Drei-Wege-Verbindungsaufbau. . . . . . . . . . . . . . .
(a) Der 500ms-Timer und (b) Vier-Wege-Verbindungsabbau. .
Half-Close. . . . . . . . . . . . . . . . . . . . . . . . . . . .
TCP-Zustandsüberführungsdiagramm. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
60
62
64
65
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.
8.7.
8.8.
8.9.
8.10.
Sliding Window. . . . . . . . . . . . . . . . . . . . . . . . . . .
Zyklisches Verhalten der Sequenznummern. . . . . . . . . . . .
Verlauf des Congestion Window. . . . . . . . . . . . . . . . . . .
Verlauf des CWND und Slow Start Threshold bei Paketverlusten.
Slow Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Start mit kleinem Receive Window. . . . . . . . . . . . . . . . .
Slow Start nach schwerem Paketverlust. . . . . . . . . . . . . .
Congestion Avoidance nach leichtem Paketverlust. . . . . . . . .
Überblick des Datenstroms vom ersten Rechner. . . . . . . . . .
Überblick des Datenstroms vom zweiten Rechner. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
70
71
72
73
74
74
75
75
76
76
9.1.
9.2.
Prinzipieller Ablauf des Retransmission via Timeout. . . . . . . . . . . . . . . . . . . . . . . . 81
Fast Retransmit in der Praxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
10.1.
10.2.
10.3.
10.4.
10.5.
10.6.
10.7.
DNS-Protokoll im TCP/IP-Protokollstapel.
Namensbaum und ein paar Begriffe. . . . .
Namensbaum mit Zonenmarkierungen. . .
DNS-Protokoll – allgemeines Paketformat.
DNS-Protokoll – Flags. . . . . . . . . . .
DNS-Protokoll – Question Section. . . . .
DNS-Protokoll – Nonquestion Section. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
91
91
93
93
94
94
11.1. FTP im TCP/IP-Schichtenmodell. . . . . . . . . . . . . . . . . . . . . . . . . .
11.2. Eine Client-Server-Architektur. . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3. Darstellung einer Client-Server-Verbindung des File Transfer Protocols. . . . .
11.4. Aufbau der Steuerverbindung. . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.5. Befehlsabfolge zur Anmeldung am Server. . . . . . . . . . . . . . . . . . . . .
11.6. Aufbau der Datenverbindung im Standard-Modus. . . . . . . . . . . . . . . . .
11.7. Aufbau der Datenverbindung im Port-Modus. . . . . . . . . . . . . . . . . . .
11.8. Aufbau der Datenverbindung im Passive-Modus. . . . . . . . . . . . . . . . . .
11.9. Übertragung der Daten beim File Transfer Protocol. . . . . . . . . . . . . . . .
11.10. Abbau der Steuerverbindung. . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.11. Befehlsabfolge bei der Wiederaufnahme der Datenübertragung. . . . . . . . . .
11.12. Darstellung einer FXP-Verbindung zwischen einem Client und zwei Servern. . .
11.13. Befehlsabfolge zum Aufbau der Datenverbindung beim File eXchange Protocol.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
99
101
103
103
104
105
105
106
107
108
109
109
12.1.
12.2.
12.3.
12.4.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
112
116
118
119
XII
.
.
.
.
.
.
.
SMTP-Kommunikationsmodell. . . . . . . .
Ein Relay-System von zwei Organisationen.
E-Mail-Routing über SMTP und DNS. . . .
Typischer E-Mail-Header. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Abbildungsverzeichnis
12.5. Eine einfache Multipart-Message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
13.1.
13.2.
13.3.
13.4.
13.5.
13.6.
13.7.
13.8.
NFS im OSI-Schichtenmodell. . . . . . . . . . . . . . . . . . . . . . . .
Aufruf eines RPC und Rückgabe eines RPC. . . . . . . . . . . . . . . . .
Aufbau eines aufrufenden RPC und Antwort unter Verwendung von UDP.
Aufbau eines NFS-Systems. . . . . . . . . . . . . . . . . . . . . . . . . .
Ablauf eines Aufruf des mount-Befehls. . . . . . . . . . . . . . . . . . .
Verzeichnisstruktur aus Sicht des Clients. . . . . . . . . . . . . . . . . . .
Struktureller Aufbau und Ablauf des 1. Experiments . . . . . . . . . . . .
Struktureller Aufbau und Ablauf des 2. Experiments. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
122
123
125
125
126
128
128
XIII
Tabellenverzeichnis
1.1. Ausgewählte Transportprotokollnummern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2. Netzmasken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1. Nachrichtentypen bei ICMP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
9.1. Typische Werte von TCP-Timern in der Praxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.1. Eine Auswahl verschiedener FTP-Befehle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.2. Bedeutung des 3-stelligen Antwortcodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12.1. SMTP im TCP/IP-Protokollstapel.
12.2. Grundlegende SMTP-Befehle. . .
12.3. Übersicht der SMTP-Status-Codes.
12.4. ESMTP-Befehle. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
113
113
114
XV
0. Vorwort
Christian Kauhaus
Der vorliegende Band ist entstanden aus den
Arbeiten zum Rechnerarchitektur-Hauptseminar
„TCP/IP Illustrated“ im Sommersemester 2006
an der Friedrich-Schiller-Universität Jena. In dem
Seminar ging es darum, sich auf die Spuren von
W. Richard Stevens’ gleichnamigem Netzwerkklassiker [Ste94] zu begeben. Obwohl das Werk für
Informatik-Verhältnisse schon sehr alt ist, besticht es
durch den bemerkenswerten didaktischen Ansatz, die
Grundlagen der Netzwerktechnik durch eine Reihe
von einfachen Versuchen dem Leser nahezubringen.
Das wollten wir im Seminar nachvollziehen.
Freilich hat sich in den vergangen 12 Jahren vieles
verändert, und nicht alles von dem, was Stevens vermittelt, ist noch aktuell. Daher war ein weiteres Anliegen des Seminars, die Inhalte des Werks mit dem
aktuellen Stand der Netzwerktechnik in Beziehung zu
setzen. Es ist interessant zu sehen, welche der damals angesprochenen „aktuellen Probleme“ auch heute noch Bestand haben und über welche man nur noch
schmunzeln kann. Die Beiträge im vorliegenden Band
beziehen aktuelle Entwicklungen so weit wie möglich
mit ein.
Da Stevens’ Werk dick und das Semester kurz ist,
musste eine Stoffauswahl getroffen werden. Das Seminar gliederte sich in drei Hauptteile, die den Ebenen 2 bis 4 des TCP/IP-Referenzmodells entsprechen: Internet-, Transport- und Anwendungsschicht.
Auch der vorliegende Band entspricht dieser Grobgliederung. Aus jeder dieser drei Ebenen wurden repräsentative Einzelthemen herausgegriffen. Dennoch
sind Lücken zu verzeichnen; beispielsweise fehlt auf
der Anwendungsschicht das wichtige HTTP. Auch die
unterste Ebene des Referenzmodells war im Seminar
nicht umfangreich vertreten und konnte im Band gar
nicht berücksichtigt werden. Weiterhin werden viele der Experimente, die wir im Seminar durchgeführt
haben, aus Platzgründen hier nur angedeutet oder gar
nicht erwähnt. Dennoch hoffe ich, dass die angebotene Stoffauswahl trotz ihrer Lücken einen guten Einstieg in die Welt der TCP/IP-Netzwerke bietet und
Lust aufs Weiterlesen weckt. Als umfassendere Einführungen bieten sich z. B. die Werke von Comer oder
Tanenbaum [Com00, Tan02] an.
Danken möchte ich allen, die zum Gelingen dieses Bandes beigetragen haben. An erster Stelle sind
hier die Seminarteilnehmer zu nennen, die bei der
Vorbereitung der Vorträge und Zusammenstellung der
Ausarbeitungen einen großen Einsatz gezeigt haben.
Weiterhin danke ich auch allen Kollegen am Lehrstuhl für Rechnerarchitektur und -kommunikation, die
mich unterstützt haben.
Jena, im Dezember 2006
Christian Kauhaus
1
Teil I.
Internetschicht
1. Internet Protocol (IP)
Pascal Lenzner
1.1. Einleitung
1.1.1. Das TCP/IP-Referenzmodell
Das TCP/IP-Referenzmodell ist ein aus vier Ebenen
bestehendes Schichtenmodell für die Kommunikation in Netzwerken. Jede Schicht besteht aus mehreren
Protokollen, welche das genaue Verhalten für den Informationsaustausch festlegen. Die Schichten werden
dabei nach ihren Kernaufgaben abstrahiert und es gilt
das Prinzip, dass eine Schicht einerseits ihrem übergeordneten Nachbarn Dienste anbietet und andererseits die bereitgestellten Dienste der darunter liegenden Schicht nutzt. Die oberste Ebene bildet die Anwendungsschicht und enthält alle anwendungsnahen
Protokolle, wie zum Beispiel das Hypertext Transfer
Protocol (HTTP), das File Transfer Protocol (FTP)
oder das Simple Mail Transfer Protocol (SMTP). Danach folgt die Transportschicht, welche für den Aufbau einer Ende-zu-Ende-Verbindung zwischen Quellund Zielhost verantwortlich ist. Die Internetschicht
bildet die nächste Ebene und diese steuert die Paketzustellung im Netzwerk. Auf der untersten Ebene
des Modells befindet sich die Netzwerkschicht, welche die physikalische Übertragung der Nachrichtensignale organisiert.
Beim Übergang zwischen den Schichten findet eine Kapselung statt, d. h. jede Schicht versieht die behandelten Daten mit spezifischen Kontrollinformationen, welche aufgrund ihrer vorangestellten Position
als Header bezeichnet werden, und gibt das Gesamtpaket an die nächste Ebene weiter.
Obwohl das TCP/IP-Referenzmodell eigenständig
entwickelt wurde, ist es vom Aufbau her eng mit dem
ISO/OSI-Referenzmodell verwandt. Abbildung 1.1
zeigt einen direkten Vergleich zwischen beiden.
(IP), welches als Herzstück der Internetschicht im
TCP/IP-Referenzmodell zwischen der darüberliegenden Transportschicht und der Netzwerkschicht liegt.
Es nimmt die Segmente des Transmission Control
Protocol (TCP) und die Pakete des User Datagram
Protocol (UDP) entgegen und sendet diese in Form
von IP-Datagrammen weiter an das zugehörige Protokoll in der Netzwerkschicht.
Stevens [Ste94] bezeichnet IP als das Arbeitspferd
des gesamten Protokollstapels und in den folgenden
Ausführungen wird erklärt, warum dies eine sehr treffende Formulierung ist.
1.2. Aufgaben des IP
Die Aufgaben des Internet-Protokolls werden im zugehörigen RFC 791 [Pos81b] wie folgt zusammengefasst:
The function or purpose of Internet Protocol is to move datagrams through an interconnected set of networks. This is done
by passing the datagrams from one internet
module to another until the destination is
reached.
Doch was hier als Paketvermittlung in Netzwerken beschrieben ist, besteht vielmehr aus einer Menge
von Funktionalitäten, welche das Internet-Protokoll
bereitstellt.
Als Erstes werden im Protokoll IP-Datagramme als
Basiseinheit für die Übermittlung von Daten definiert.
Jede zu übertragende Information wird in ein oder
mehrere Datagramme aufgeteilt und mit der entsprechenden Kontrollinformation durchs Netzwerk geschickt. Diese Fragmentierung, welche eine weitere
Aufgabe des IP darstellt, ist keineswegs trivial, denn
es muss garantiert werden, dass die ankommenden
Daten ohne Verlust auf die erforderliche Anzahl an
1.1.2. Einordnung des IP
Datagrammen aufgeteilt und später beim Empfänger
Einer der Namensgeber dieser Protokollfamilie ist im korrekter Weise wieder zusammengesetzt werden
das in diesem Kapitel betrachtete Internet Protocol können. Die Eigenschaften des IP werden im Detail
5
1. Internet Protocol (IP)
ISO/OSI-Referenzmodell
TCP/IP-Referenzmodell
Anwendungsschicht
Präsentationsschicht
Anwendungsschicht
Sitzungsschicht
Transportschicht
Transportschicht
Vermittlungsschicht
Internetschicht
Sicherungsschicht
Netzwerkschicht
Übertragungsschicht
Abbildung 1.1.: Vergleich von ISO/OSI- und TCP/IP-Referenzmodell.
im Abschnitt „Eigenschaften des IP“ (1.3) besprochen.
Weiterhin leitet das IP die nun korrekt „verpackten“ Daten (zum Aufbau des Header vgl. Abschnitt
„Das IP-Datagramm“, 1.4) an das entsprechende Protokoll aus der Netzwerkschicht, welches für die physikalische Übertragung auf dem jeweils vorhandenen
Transportmedium zuständig ist, weiter. Ein Beispiel
für eine solche Vorschrift wäre das Ethernet-Protokoll
nach IEEE-Standard 802.3.
Doch damit ist die Vermittlung der Daten zwischen
Quell- und Zielhost noch nicht vollzogen. Eine weitere wichtige Aufgabe ergibt sich durch die Frage, wie
denn der Zielhost überhaupt ausfindig gemacht werden soll. Auch hier bietet das Internet-Protokoll die
Lösung an: ein Addressierungsschema, mittels dessen
alle Hosts im Netzwerk eindeutig identifiziert werden
können. Genauere Ausführungen zur dieser Thematik
finden sich im Abschnitt „IP-Adressierung“ (1.5).
Eine letzte Kernaufgabe des Internet-Protokolls
stellt das Routing dar. Damit Daten vom sendenden zum empfangenden Host gelangen, müssen die
Datagramme im Netzwerk korrekt weitergeleitet werden. Auch dies ist eine schwierige Aufgabe, denn
die Topologie des Netzwerks ist dem sendenden Host
im Normalfall nicht bekannt. Die Lösung hierfür ist
ein Routingalgorithmus, der die Pakete „hop-by-hop“
weitersendet, bis diese das spezifizierte Ziel erreicht
haben. Nähere Erläuterungen liefert der Abschnitt
„IP-Routing“ (1.6).
6
1.3. Eigenschaften des IP
Obwohl das Internet-Protokoll für solch grundlegende Aufgaben bei der Datenübertragung zuständig ist,
zeichnet es sich durch zwei vielleicht überraschende
Eigenschaften aus: Es ist unzuverlässig und zusammenhangslos.
Die Unzuverlässigkeit bezieht sich darauf, dass es
keine Garantie gibt, dass ein Datagramm auch wirklich sein designiertes Ziel im Netzwerk erreicht. IP
bietet lediglich Routing „nach bestem Bemühen“ an
und überlässt es den höher liegenden Protokollen,
für eine sichere Übertragung zu sorgen. Weiterhin
wird für die Paketübertragung keine Ende-zu-EndeVerbindung etabliert.
Auch die Fehlerbehandlung, sofern man diese als
solche bezeichnen kann, trägt zu dieser Eigenschaft
bei. Tritt bei der Übertragung eines Datagramms ein
Problem auf, so ist die Vorgehensweise des InternetProtokolls die Folgende: Zuerst wird das Datagramm
verworfen, danach wird versucht, eine InternetControl-Message-Protocol-(ICMP)-Nachricht an den
Sender zu verschicken (zu ICMP siehe Kapitel 2). Allerdings gibt es dabei keine Überprüfung, ob diese
Fehlermeldung auch wirklich bei der Quelle des Datagramms ankommt.
Ein weiterer Fakt, der die Einstufung als unzuverlässig rechtfertigt, ist die nicht vorhandene Möglichkeit zur Entdeckung von Datenfehlern. Im Head-
1.4. Das IP-Datagramm
er wird lediglich eine Prüfsumme des Headerinhalts
mitgeschickt, die Daten an sich werden durch keinerlei Maßnahmen überprüft. Auch hier verlässt sich das
Internet-Protokoll auf die Vorarbeit der Protokolle aus
der Anwendungs- und Transportschicht.
Die Eigenschaft zusammenhangslos steht dafür,
dass das IP keine Informationen über aufeinander folgende Datagramme verarbeitet. Sind die ankommenden Daten erst einmal in IP-Datagramme aufgeteilt,
so wird jedes von ihnen als eigenständig angesehen
und unabhängig von allen anderen Paketen behandelt.
So ist es möglich, dass die einzelnen Datagramme auf
jeweils unterschiedlichen Routen zum Zielhost gelangen und dass diese dort in einer anderen Reihenfolge
ankommen.
Noch zu erwähnen ist hier die Unabhängigkeit von
der vorliegenden Netzwerkstruktur, welche man auch
als Robustheit bezeichnen könnte. Die Paketzustellung erfolgt immer auf die gleiche Weise, egal ob der
Zielhost direkt mit dem Sender verbunden ist oder ob
dieser weit entfernt liegt und nur durch mehrere andere Netzwerke erreichbar ist. Diese Tatsache und zusätzlich die einfache Spezifikation des Protokolls sowie die Konzentration auf die Kernaufgaben der Paketübermittlung haben wohl zum großen Erfolg des
IP und seiner bis heute zentralen Stellung geführt.
1.4. Das IP-Datagramm
1.4.1. Aufbau
Der Aufbau wird in Abbildung 1.2 verdeutlicht.
Dabei gilt, dass das höchstwertige Bit das Bit 0 ganz
links und das niederwertigste Bit das Bit 31 am rechten Rand ist. Die einzelnen Bytes werden hierbei im
Modus big endian1 übermittelt.
Die einzelnen Felder haben folgende Bedeutung:
Version Dieses Feld gibt an welche Version des
Internet-Protokolls verwendet wird. Dabei gibt es
heute nur zwei Möglichkeiten: Version 4, auch IPv4
genannt und Version 6, welches als IPv6 oder IP next
generation (IPnG) bezeichnet wird. Erstere ist zur
Zeit noch der Standard.
IHL Die Abkürzung IHL steht für Internet Header Length und bezeichnet die Länge des Headers in
32 bit-Worten. Dabei ist das Minimum 5, also 20 B
und das Maximum 15, was 60 B entspricht. Dieser
Maximalwert der Headerlänge schränkt somit den
Platz für das Optionsfeld auf 40 B ein.
Type Of Service Wird auch mit TOS bezeichnet
und legt die Behandlung des Datagramms fest.
Die 8 bit dieses Felds setzen sich wie folgt zusammen: Bits 1–3 haben keine Bedeutung und werden
ignoriert, die Bits 4–7 sind die eigentlichen TOS-Bits
und Bit 8 hat keine Funktion, muss allerdings auf 0
gesetzt sein. Die vier TOS-Bits stehen für minimize
delay, maximize throughput, maximize reliability und
minimize monetary cost. Bei der Nutzung gilt, dass
nur jeweils eines der Bits den Wert 1 haben kann. Falls
kein TOS-Bit geschalten ist, so steht dies für Normalbetrieb.
Für viele verschiedene Applikationen gibt es
empfohlene TOS-Werte. Zum Beispiel für Telnet, FTP/Control- und UDP-Anfragen des DNSProtokolls wird eine Behandlung mit minimize delay vorgeschlagen. FTP/Data sollte mit maximize
throughput betrieben werden.
Die TOS-Einstellungen werden von heutigen
TCP/IP-Implementierungen allerdings meist nicht
mehr unterstützt und es wird standardmäßig im Normalbetrieb gearbeitet.
Ein IP-Datagramm besteht aus den zu übertragenden
Daten und den zugehörigen Kontrollinformationen,
dem Header.
Der Header ist mindestens 20 B groß, kann aber
noch einen optionalen Teil mit variabler Länge besitzen. Enthalten sind alle wichtigen Informationen
um ein Datagramm im Netzwerk korrekt zustellen zu
können.
Insgesamt kann ein IP-Datagramm theoretisch bis
zu 64 KiB einnehmen, in der Praxis wird die Größe aber meist auf die maximale Kapazität der Frames (Übertragungseinheiten) der Protokolle aus der
Netzwerkschicht beschränkt. Ein gängiger Wert ist
eine Gesamtgröße von 1500 B, welche der Maximum Transfer Unit (MTU) des Ethernetprotokolls ent- Total Length Hier wird die Gesamtgröße des IPDatagramms in Bytes angegeben. In Kombination mit
spricht.
dem IHL-Feld kann genau bestimmt werden, wo die
eigentlichen Daten beginnen und wie groß diese sind.
1.4.2. Der IP-Header
Der Inhalt des Headers wird in RFC 791 [Pos81b] exakt vorgegeben und ist Thema dieses Abschnitts.
1 Hierbei werden bei einem 32-Bit-Wert zunächst die Bits 0-7,
dann 8-15, danach 16-23 und zuletzt die niederwertigsten Bits
24-31 übertragen.
7
1. Internet Protocol (IP)
8
0
Version
IHL
Type of service
Total length
D M
F F
Identification
Time to live
24
16
Protocol
Fragment offset
Header checksum
Source address
Destination address
Options
Abbildung 1.2.: Header eines IP-Datagramms.
Da hier 16 bit zur Verfügung stehen, beträgt der Maximalwert 64 KiB.
Doch nicht jeder Host ist gezwungen, so große
Datagramme zu akzeptieren: Im RFC 791 wird vorgeschrieben, dass nur Datagramme bis 576 B Länge
angenommen werden müssen.
Die Gesamtlängenangabe wird noch aus einem
weiteren Grund benötigt. Manche Protokolle der
Netzwerkschicht füllen die ankommenden Daten bis
zu einer gewissen Mindestgröße auf. Um nun in einem solchen Frame noch zu erkennen, welche Daten
eigentlich zum IP-Datagramm gehören, wird der Wert
des Total-Length-Felds abgefragt.
Identification Der hier übermittelte Wert wird einerseits für die eindeutige Identifizierung der Pakete
und andererseits für die korrekte Zusammensetzung
von Datenfragmenten gebraucht.
Teilt das Internet-Protokoll ankommende Daten in
mehrere IP-Datagramme auf, so erhalten diese alle die
gleiche Nummer im Identification-Feld. Der Empfänger der Fragmente weiß somit, welche Pakete wieder
zusammengesetzt werden müssen. Pakete, die nicht
fragmentiert wurden, bekommen beim Versenden eine fortlaufend inkrementierte Nummer, um diese eindeutig zu kennzeichnen.
Flags Die folgenden drei Bits im IP-Header sind
für Flags reserviert. Das erste Bit hat keinerlei Ver-
8
wendung, das DF-Flag steht für Don’t Fragment und
das MF-Flag bedeutet More Fragments Follow.
Die Auswirkungen dieser Bits sind schon am Namen erkennbar. Ist das DF-Flag gesetzt, so wird verhindert, dass ein Datenpaket fragmentiert wird. Sollte
dadurch ein Paket nicht mehr weitertransportiert werden können, so wird dieses verworfen. Ein geschaltetes MF-Flag steht dafür, dass das Paket fragmentiert
wurde und noch weitere Fragmente folgen.
Fragment Offset Für die Zusammensetzung
mehrerer Fragmente ist noch eine weitere Angabe
nötig: Die Position des Fragments im Gesamtpaket.
Der Fragment Offset liefert diesen Wert relativ zum
Beginn des Originalpakets. Aufgrund der Feldgröße
von 13 bit können somit insgesamt 8192 Fragmente
pro Datagramm erstellt werden. Die elementare
Fragmenteinheit ist dabei 8 B und deshalb müssen
alle Offset-Werte Vielfache von 8 B sein.
Time To Live Dieses Feld, welches auch abgekürzt als TTL bezeichnet wird, beinhaltet einen Zähler, der die Lebensdauer eines Datagramms begrenzt.
Dieser Wert wird einerseits jede Sekunde und andererseits bei jedem Host, den das Datagramm passiert,
um 1 herabgesetzt. Somit gilt als Obergrenze eine Lebensdauer von 255 s. Erreicht der Zähler den Wert 0,
so wird das Paket sofort verworfen und es wird versucht, eine ICMP-Warnmeldung an den Sender zurück zu schicken. Mit diesem Vorgehen wird verhin-
1.5. IP-Adressierung
dert, dass Datagramme endlos im Netzwerk unterwegs sind.
Protocol Dieses Feld gibt eine Nummer des Protokolls an, an welches das Datagramm beim Empfänger weitergeleitet werden muss. Die Protokollnummern sind weltweit eindeutig festgelegt und werden
von der Internet Assigned Numbers Authority (IANA)
verwaltet. Die Funktionsweise der Protokollnummer
wird genauer in Abschnitt 1.5.1 beschrieben.
Header Checksum Hier wird eine Prüfsumme
des Headerinhalts mitgeführt. Wie bereits erwähnt,
gibt es keine Prüfsumme der eigentlichen Nutzdaten
des Datagramms.
Wichtig ist hierbei, dass diese Prüfsumme von jedem durchlaufenen Host im Netzwerk neu berechnet werden muss, da sich der TTL-Wert ändert. Es
wird aus diesem Grund ein sehr effizientes Verfahren genutzt: Es wird das 1-er Komplement aller 16 bitHalbwörter der Headerdaten verwendet. Als Voraussetzung dafür wird angenommen, dass die Prüfsumme
zu Beginn der Berechnung Null war.
Source address Dieses Feld enthält die 32 bit
lange Internetadresse des Quellhosts.
Destination address Hier wird die 32 bitAddresse des Empfängers festgehalten.
das Datagramm durchlaufen soll. Hierfür gibt es
zwei Varianten: Zum einen das Loose Source and
Record Route und zum anderen Strict Source and
Record Route. In beiden Fällen sollen die angegeben Hosts passiert werden und die genommene Route wird aufgezeichnet, doch beim letzteren Fall müssen die Hosts genau in der Reihenfolge und ohne Zwischenstationen passiert werden.
Allerdings ist diese Option durch den geringen
verfügbaren Platz stark eingeschränkt und heute
im Normalfall unbrauchbar.
• Record Route – diese Option weist alle durchlaufenen Hosts an, ihre Adresse an das Optionsfeld anzuhängen um somit eine Aufzeichnung
der im Netzwerk zurückgelegten Route zu erhalten. Doch auch diese Option ist durch den
geringen Platz für derartige Einträge stark eingeschränkt. Ohne andere Optionen können lediglich neun 32 bit-Adressen aufgenommen werden, heute werden aber meistens deutlich mehr
Hosts von Quelle zu Ziel passiert. Eine bessere Alternative bietet heute das Traceroute (Abschnitt 3.4).
• Timestamp – ähnlich wie Record Route, nur dass
hierbei zusätzlich noch die Zeit beim Passieren
der Netzwerkknoten aufgezeichnet wird.
1.5. IP-Adressierung
Options Dieses Feld variabler Länge bietet Zusatzinformation über das Datagramm und wurde aus
Erweiterungsgründen mit in den Header aufgenommen. Jede Option beginnt mit einem ein Byte langem
Code zur Identifizierung, bei manchen folgt noch ein
weiteres Byte für Optionen und danach kommen ein
oder mehrere zur Option gehörige Datenbytes. Das
Feld wird am Ende immer auf ein Vielfaches von 4 B
aufgefüllt und maximal kann es 40 B groß sein.
Folgende Optionen können verwendet werden:
• End of Option List kennzeichnet das Ende der
Liste der Optionen.
Aufgrund des schon dargestellten Kapselungsprinzips
der TCP/IP-Familie sind vier unterschiedliche Adressen notwendig, um mit einer Applikation auf einem
anderen Host im Netzwerk kommunizieren zu können:
• Für die Netzwerkschicht die Netzwerkadresse, welche eine physikalische Verbindung zum
Ziel ermöglicht. Ein Beispiel für eine solche Adresse wäre die Media-Access-Control(MAC)-Adresse.
• Für die Internetschicht die Internet-Adresse.
• No Option kann zum Auffüllen verwendet werden.
• Für die Transportschicht die Transportprotokollnummer.
• Security bezeichnet, wie geheim das Datagramm
ist. Allerdings wird diese Option in der Praxis
vernachlässigt.
• Für die Anwendungsschicht die Portnummer.
Die Internet-Adresse und die Transportprotokollnummer befinden sich im Header eines IP• Source Routing – bei dieser Option ist eine Datagramms und stehen somit im Mittelpunkt der BeListe von Internet-Adressen vorgegeben, welche trachtung dieses Abschnitts.
9
1. Internet Protocol (IP)
#
Keyword
Protocol
0
1
2
3
4
5
6
7
8
HOPOPT
ICMP
IGMP
GGP
IP
ST
TCP
CBT
EGP
IPv6 Hop-by-Hop Option
Internet Control Message
Internet Group Management
Gateway-to-Gateway
IP in IP (encapsulation)
Stream
Transmission Control
CBT
Exterior Gateway Protocol
Tabelle 1.1.: Ausgewählte Transportprotokollnummern.
1.5.1. Die Transportprotokollnummer
Damit die Adressierung in der Transportschicht immer korrekt erfolgen kann, werden die Nummern der
Protokolle in dieser Schicht von einer zentralen Organisation, der Internet Assigned Numbers Authority
(IANA), verwaltet und aktualisiert.
Als Beispiel soll in Tabelle 1.1 ein Auszug aus der
Liste der zugewiesenen Protokollnummern [Int06d]
dienen. Soll nun zum Beispiel das TCP adressiert werden, so muss im Protocol-Feld im IP-Header der Wert
6 eingetragen sein und IP wird das ankommende Paket dorthin weiterleiten.
1.5.2. Die Internet-Adresse
Die Internet-Adresse besteht beim IP Version 4 (IPv4)
aus 32 bit und die Adressen von Quell- und Zielhost
stehen in jedem IP-Datagramm im Header.
Wichtig ist, dass eine solche Adresse, welche oft
auch als IP-Adresse bezeichnet wird, für eine Verbindung (Interface) eines Hosts mit einem Netzwerk
steht. Jeder Rechner in einem Netzwerk hat somit
mindestens eine Internet-Adresse, falls dieser aber
über mehrere Verbindungen mit diesem Netz kommuniziert, so hat der Host für jede dieser Verbindungen
zum Netzwerk eine eigene Adressnummer.
1.5.2.1. Zuständigkeit
Ähnlich wie bei anderen Adressen muss auch die
IP-Adresse im Netzwerk eindeutig sein, denn sie ist
dafür verantwortlich, Datenpakete zum richtigen Bestimmungsort gelangen zu lassen. Für das größte
Netzwerk der Welt, das Internet, bedeutet dies natürlich, dass jeder angeschlossene Host eine eigene eindeutige Adresse benötigt, was bei einer geschätzten
Zahl von einer Milliarde Hosts [Int06e] eine schwie-
10
rig zu bewältigende Aufgabe ist. Die Lösung basiert
auch hier auf einer zentralen Organisation, die die
Vergabe der IP-Adressen regelt: Die Internet Cooperation for Assigned Names and Numbers (ICANN).
Zuständig für den europäischen Raum ist die Résseaux IP Européens (RIPE).
Als Grundlage für die Vergabe der InternetAdressen dient das RFC 2050 [HKC+ 96], welches die
„Internet Registry IP Allocation Guidelines“ festlegt.
Die vergebenen Adressen unterscheidet man in
Provider-Aggregated (PA) und Provider-Independent
(PI). Die PA-Adressen sind Eigentum einer Einrichtung oder eines Unternehmens, wie zum Beispiel ein
Internet Service Provider (ISP), der die IP-Adressen
eigenständig verwaltet. Die unabhängigen Adressen
hingegen sind direkt an einen Endnutzer gebunden.
1.5.2.2. Aufbau
Üblicherweise wird der 32 bit-Wert nicht binär, sondern durch eine gepunktete Dezimalschreibweise dargestellt, z. B. als
141.35.12.1 .
Dabei ist die niedrigste mögliche Adresse die 0.0.0.0
und die höchste Adresse die 255.255.255.255.
Jede Adresse besteht aus einer Netzadresse und einer Hostadresse, am Beispiel könnte der Netzanteil
die ersten 16 bit umfassen und somit 141.35 lauten,
der Hostanteil würde dann aus den letzten 16 bit bestehen und hätte den Wert 12.1.
Weiterhin gibt es noch ein paar spezielle IPAdressen:
• Besteht die Netzadresse aus lauter Nullen, so bezeichnet diese Adresse einen Host im eigenen
Netz.
• Hat die Adresse die Form 127.x.y.z, so steht dies
für die Loopback-Adresse und das Datagramm
wird lediglich intern verarbeitet und nicht ins
Netzwerk geschickt.
• Sind alle Bits der Hostadresse Nullen, so bezeichnet dies die Adresse des gesamten Netzes.
• Sind hingegen alle Hostadress-Bits geschalten,
so handelt es sich hierbei um einen Broadcast
und das Datagramm wird an alle Hosts im Netzwerk weitergeleitet.
• Die Adresse 255.255.255.255 ist für den lokalen Broadcast reserviert: Hierbei wird das Datagramm an alle Hosts im Netz geschickt, darf jedoch nicht weitergeleitet werden.
1.5. IP-Adressierung
Ein Beispiel für diese Fehlverteilung stellt folgende Situation dar: Angenommen es liegt ein physikalisches Netzwerk mit etwa 1000 angeschlossenen Hosts vor und dieses soll adressiert werden. Als
„angemessene“ Netzklasse kommt hierfür nur Klasse B in Frage, da man mit einem Klasse-C-Netz lediglich 254 Hosts adressieren kann. Doch mit einer solchen Klasse-B-Netzadresse ist es möglich,
65534 Netzwerkknoten anzusteuern und somit werden circa 64534 mögliche IP-Adressen verschwendet
und können nicht mehr an andere Netzwerke vergeben werden.
• 10.0.0.0: Privates Klasse A Netzwerk
Dieser Trend wurde noch dadurch verstärkt, dass
sich
zu Beginn des Internets große und einflussreiche
• 172.16.0.0 bis 172.31.0.0: Hier können maximal
Institutionen
ganze Klasse-A-Netzadressen sicherten
16 private Klasse B Netzwerke adressiert werund
somit
seither
einen beträchtlichen Teil des IPden.
Adressraums belegen.
Als Lösung der Adressknappheit schwenkte man
• 192.168.0.0 bis 192.168.255.0: Dieser Bereich
auf
das so genannte Subnet Addressing um.
kann maximal 254 Klasse C Netzwerke umfassen.
Die Gesamtanzahl der im Internet zu vergebenden
Adressen beläuft sich somit auf 4 294 967 296 Stück.
Neben diesen beiden Varianten gibt es noch spezielle Adressen für private Netzwerke, d. h. Netzwerke,
die in sich abgeschlossen und nicht direkt mit dem Internet verbunden sind. Diese Adressen dürfen im Internet nicht weitergeleitet werden, es bedarf bei der
Nutzung allerdings auch keiner Erlaubnis von Seiten
der ICANN.
Die vordefinierten Bereiche für private Netzwerke
sind:
1.5.4. Subnet Addressing
1.5.3. Classful Addressing
Nun stellt sich die Frage, wie denn bei einer InternetAdresse die Netzadresse und die Hostadresse ermittelt
wird.
Ein grundlegender Ansatz dafür war das so genannte Classful Addressing, welches jedem Netz eine eigene Netzadresse zugewiesen hat. Dabei gab es je nach
der Größe des zu adressierenden Netzwerks unterschiedliche Klassen von Netzen, welche anhand der
führenden Bits der IP-Adresse unterschieden wurden.
In Abbildung 1.3 sind die Netzwerkklassen dargestellt. Ersichtlich ist auch, welcher Adressraum für
Netzadressen und Hostadressen jeweils in den entsprechenden Klassen zur Verfügung gestellt wird.
Sonderfälle sind die Klassen D und E. Die Adressen der Klasse D sind so genannte Multicast-Adressen
und sind dafür bestimmt, Datagramme an mehrere
Hostadressen gleichzeitig zu schicken. Erreicht ein
Datagramm eine solche Adresse, so wird versucht,
dieses Paket an alle Mitglieder der adressierten Gruppe unter Benutzung des Internet Group Messaging
Protocol (IGMP) zu senden. Die Klasse E wird normalerweise nicht verwendet und ist für experimentelle Zwecke reserviert.
Problematisch beim Classful Addressing ist jedoch
die verschwenderische Adressverteilung. Mit dem
Grundprinzip der Zuweisung von je einer Netzadresse
pro physikalischem Netzwerk wurde der zur Verfügung stehende Adressraum sehr ineffizient vergeben
und die ICANN stand bereits nach wenigen Jahren
vor dem Problem, dass der Adressraum knapp wurde.
Die Idee dieses Ansatzes steckt schon im Name: Netze werden in kleinere Netze, die so genannten Subnets, unterteilt.
Alle Subnets, die zu einer Netzadresse gehören,
werden von der zugehörigen Einrichtung zentral verwaltet und somit erscheinen die Netze nach Außen hin
weiterhin wie ein großes Netzwerk.
Die Umsetzung dieses Prinzips, welches im
RFC 950 [MP85] festgelegt wurde, erfolgt meist
durch die Verwendung der höherwertigen Bits der
Hostadresse als Subnet-Adresse. Abhängig von der
Anzahl der gewünschten Subnets werden die Bits reserviert und mit der Subnet-ID belegt. Die übrigen
Bits der Hostadresse dienen weiterhin zur Adressierung der Hosts.
Die für das Subnet genutzten Bits werden in der
Subnet-Maske markiert. Die Subnet-Maske ist bei
IPv4 ein weiterer 32 bit-Wert, bei dem die einzelnen
Bits für die entsprechenden Bits der IP-Adresse stehen. Alle Bits der Netzadresse sowie alle Bits der
Subnet-Adresse haben hier den Wert 1. Die Hostadressbits müssen den Wert 0 zugewiesen bekommen.
Mit diesem Verfahren ist es also möglich, die SubnetBits zu identifizieren und die Adressierung der Teilnetze korrekt durchzuführen.
In Abbildung 1.4 ist ein Beispiel für eine solche Unterteilung zu sehen. Hier wurde ein Klasse-BNetzwerk in 32 Subnets mit jeweils 2046 möglichen
Hosts unterteilt. Die Zahl der Subnets ergibt sich aus
der Länge der Subnet-Adresse, welche hier 5 bit beträgt. Die Subnet-Maske hat hier den binären Wert:
11
1. Internet Protocol (IP)
0
8
Klasse A
0
Klasse B
1 0
Klasse C
1 1 0
Klasse D
1 1 1 0
Klasse E
1 1 1 1
24
16
Hostadresse
Netzadresse
Netzadresse
Hostadresse
Netzadresse
Hostadresse
Multicast
reserviert
Abbildung 1.3.: Übersicht über die Netzklassen.
0
8
Klasse B
1 0
Netzadresse
Klasse B mit
Subnetz-ID
1 0
Netzadresse
Subnetzmaske
24
16
Hostadresse
Subnetz
Hostadresse
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Abbildung 1.4.: Klasse-B-Netz mit 32 Subnets.
11111111 11111111 11111000 00000000 .
fristigen Lösung zu gewinnen, hat man eine weitere
Verbesserung eingesetzt: das Classless Inter-Domain
Dies entspricht 255.255.248.0 in gepunkteter Dezi- Routing (CIDR), das im RFC 1519 [FLYV93] bemaldarstellung.
schrieben wird. Der Grundgedanke ist, dass die ZuNoch ein weiterer Vorteil ergibt sich durch das Sub- ordnung von IP-Adresse zur Netzklasse und den Unnetting: Da externe Router den internen Netzaufbau terklassen vollkommen entfällt. Die Aufteilung von
nicht kennen, wird für jeden Host in solch einem auf- Netz- und Hostadresse geschieht hierbei durch eine
geteiltem Netz nur eine Route, nämlich die zum ge- Netzmaske. Diese Netzmaske, die vom Prinzip her
meinsamen Gateway, in der Routingtabelle benötigt. genau wie die Subnetzmaske funktioniert, wird meist
Im Gegensatz dazu wären bei 32 eigenständigen Netz- als Suffix bezeichnet. Der Begriff stammt von der neuwerken für jedes Netzwerk ein solcher Eintrag not- artigen Schreibweise der CIDR-Adressen: Angenomwendig.
men, bei der IP-Adresse 141.35.12.1 sind die ersten
16 bit die Netzadresse, dann wird das wie folgt geschrieben:
1.5.5. Classless Inter-Domain
Routing
Mit Subnet Addressing wurde schon ein Schritt in
die richtige Richtung getan, doch auch diese Methode
stieß bald an ihre Grenzen, denn die Routingtabellen
wurden immer größer und es bestand die Gefahr, dass
die zur Verfügung stehende Hardware den Routingaufwand nicht mehr bewältigen kann. Weiterhin hat
das Subnetting nicht die Adressknappheit wie erwartet gelöst. Um Zeit für die Entwicklung einer lang-
12
141.35.12.1/16 .
Das Suffix „/16“ gibt also an, wie viele Bits der Netzmaske, angefangen vom höchstwertigen, den Wert 1
haben.
Vorteilhaft an diesem Vorgehen ist, dass man nun
IP-Adressen verstärkt hierarchisch vergeben kann,
d. h. dass man die Adressierung der vorhandenen Infrastruktur anpasst. Wird der Verkehr eines kleineren Netzwerks über die Infrastruktur eines größeren
1.6. IP-Routing
Suffix
/8
/9
/10
/11
/12
/13
/14
/15
/16
/17
/18
/19
/20
/21
/22
/23
/24
/25
/26
/27
/28
/29
/30
Hosts
16777216
128 x 65536
64 x 65536
32 x 65536
16 x 65536
8 x 65536
4 x 65536
2 x 65536
65536
128 x 256
64 x 256
32 x 256
16 x 256
8 x 256
4 x 256
2 x 256
256
128
64
32
16
8
4
Netzmaske
255.0.0.0
255.128.0.0
255.192.0.0
255.224.0.0
255.240.0.0
255.248.0.0
255.252.0.0
255.254.0.0
255.255.0.0
255.255.128.0
255.255.192.0
255.255.224.0
255.255.240.0
255.255.248.0
255.255.252.0
255.255.254.0
255.255.255.0
255.255.255.128
255.255.255.192
255.255.255.224
255.255.255.240
255.255.255.248
255.255.255.252
Tabelle 1.2.: Netzmasken.
ISPs abgewickelt, so bekommt dieses Netzwerk eine Adresse, die hierarchisch unter der des ISP liegt.
Zum Beispiel könnte der ISP ein /16-Netzwerk allokiert haben und das kleinere Netzwerk könnte ein
/28-Netzwerk im gleichen Adressbereich sein. Diese
Adressvergabe führt dazu, dass weniger Einträge in
den Routingtabellen benötigt werden.
Weiterhin trägt dieses Schema auch zu einer effektiveren Adressvergabe bei, da jetzt gezielt noch ungenutzte Adressbereiche allokiert werden können.
Allerdings kann man diese Adressvergabe nicht auf
alle Situationen anwenden. Ein Beispiel ist das Multihoming, d. h. dass es mehrere unabhängige Verbindungen eines Netzwerks mit dem Internet gibt, da hier
aufgrund der unterschiedlichen Routen die Routeneinträge in der Routingtabelle verbleiben müssen.
Eine Übersicht über die mögliche Anzahl von
Hosts pro Netzwerk gibt Tabelle 1.2. Diese Adressierungsart ist momentan aktuell, doch die schon beschriebene langfristige Lösung für das Problem der
Adressknappheit wurde schon entwickelt und ist bereits im Einsatz: IP Version 6. Mehr dazu findet sich
in Abschnitt 1.7.
1.6. IP-Routing
Eine weitere Hauptaufgabe des Internet-Protokolls
ist das Weiterleiten von Datagrammen im Netz: das
Routing. Dieser Abschnitt dient als Einführung, für
tiefer gehende Einblicke gibt es die beiden Kapitel 3
und 4 zu dieser Thematik.
Die zentrale Frage ist: Wie kommt ein Datagramm vom Sender zum Empfänger? Die Lösung ist
ein simpler Algorithmus, der für jedes ankommende Datagramm durchlaufen wird. Aus der Sicht eines Hosts kann man den Ablauf folgendermaßen beschreiben:
1. Prüfen, ob das Datagramm für meine IP-Adresse
bestimmt ist. Falls dies der Fall ist, dann wird das
Paket angenommen und verarbeitet.
2. Prüfen, ob das Datagramm für einen Host bestimmt ist, der direkt mit mir verbunden ist. Falls
ja, dann wird das Paket an diesen weitergeleitet.
3. Prüfen, ob das Datagramm für ein mit mir verbundenes Netzwerk bestimmt ist. Falls ja, dann
wird das Paket an den Next-Hop-Router dieses
Netzwerks weitergeleitet.
4. Falls keiner der Fälle 1–3 eingetreten ist, dann
wird das Paket an den Default-Router weitergeleitet.
Sollten alle Fälle scheitern, so wird versucht, eine
entsprechende ICMP-Fehlermeldung an den Sender
zu schicken.
Damit das IP die obigen Fälle unterscheiden kann,
ist es nötig zu wissen, welche Hosts direkt erreicht
werden können, welche Router von anderen Netzwerken angeschlossen sind und welche IP-Adresse
der Default-Router hat. Dies wird mit der schon öfters erwähnten Routingtabelle erreicht. In ihr stehen
die benötigten IP-Adressen, mit denen dann die Zieladresse des ankommenden Pakets verglichen wird.
In Schritt 2 wird dabei auf vollständige Übereinstimmung geprüft. Bei Schritt 3 ist lediglich die Netzadresse relevant, wird hier eine Übereinstimmung gefunden, d. h. es gibt einen bekannten Router, der sich
im gleichen Netz befindet, so wird das Datagramm an
diesen Router geschickt. Auf jeden Fall muss aber in
der Routingtabelle die Adresse des Default-Routers,
oft auch als „Next-Hop“ bezeichnet, eingetragen sein.
Prinzipiell gilt hierbei immer die Annahme, dass
der Next-Hop-Router „näher“ am Ziel liegt und über
eine umfangreichere Routingtabelle verfügt. Auf diese Weise gelangt ein Datagramm also „hop-by-hop“
durchs Netzwerk zu seinem Zielhost.
13
1. Internet Protocol (IP)
Weiterhin zu erwähnen ist die Tatsache, dass in der
Routingtabelle für jedes erreichbare Netzwerk nur eine Route eingetragen ist, nämlich die IP-Adresse des
entsprechenden Routers. Würden alle Hosts eines angeschlossenen Netzwerks einen eigenen Eintrag benötigen, so würde die Tabellengröße rasant anwachsen und die Routingvergleiche würden viel Zeit und
Hardwareaufwand benötigen.
1.7. IP Version 6
Der Nachfolger von IPv4 lautet IPv6. Er wird auch
als IP Next Generation bezeichnet und soll in diesem
Abschnitt kurz vorgestellt werden.
Aufgrund der früh erkannten Probleme der Adressknappheit und der immer stärker wachsenden
Routingtabellen wurde ab 1995 intensiv an der sechsten Version des Internet-Protokolls gearbeitet und
nach vielen Tests und einigen Änderungen 1998 die
Spezifikation im zugehörigen RFC 2460 [DH98] festgehalten. IPv6 ist bereits im Einsatz, doch es ist bisher
noch nicht stark verbreitet.
1.7.1. Adressierung
Die alten 32 bit-Adressen haben ausgedient und
werden durch 128 bit lange Adressen ausgetauscht.
Durch diese Maßnahme sollten zukünftig genug IPAdressen zur Verfügung stehen, denn es sind circa
340 Sextillionen (= 3.4 · 1038 ) Adressen möglich.
Auch die gepunktete Dezimalnotation wird nicht
mehr verwendet, die Adressen werden ab jetzt in
hexadezimaler Notation mit Doppelpunkten geschrieben. Eine Adresse besteht aus 8 Blöcken, wobei jeder
Block für 16 bit der Adresse steht. Hier ein Beispiel
einer IPv6-Adresse:
2001:cf8:84b3:3a3:1d49:8a2f:260:7144 .
Dabei können ein oder mehrere Gruppen von 0Blöcken durch zwei aufeinander folgende Doppelpunkte ersetzt werden. Jedoch darf die Adresse nur
an einer Stelle auf diese Weise abgekürzt werden, da
sie sonst nicht mehr eindeutig wäre. Auch dürfen führende Nullen in den Blöcken weggelassen werden.
Das Prinzip der Aufteilung in Netzadresse und
Hostadresse wurde beibehalten und wird ähnlich wie
bei CIDR geschrieben:
2001:cf8:84b3:3a3:1d49:8a2f:260:7144/64 .
Bei dieser Adresse sind folglich die ersten 64 bit die
Netzadresse, diese wäre also 2001:cf8:84b3:3a3::/64.
14
Auch wurde das Hierarchieprinzip hier weitergeführt, somit müsste das obige Netz ein Teilnetz von
2001:cf8:84b3::/48 sein.
Außerdem gibt es jetzt unterschiedliche Arten von
Adressen, die man an ihrem Präfix erkennt, d. h. an
der ersten 16 bit-Gruppe. Beim hier aufgeführten Beispiel mit dem Präfix 2001 handelt es sich um eine
Adresse, die an Provider vergeben wird, damit diese
sie an Endnutzer weitergeben.
Andere Adressarten und spezielle IP-Adressen
sowie weitere detaillierte Informationen zur IPv6Adressierung sind im zugehörigen RFC 3513 [HD03]
zu finden.
1.7.2. Der IPv6-Header
Im Gegensatz zum Version-4-Header hat der IPv6Header eine feste Länge von 40 B. Dieser kann allerdings durch das Anhängen von weiteren Headern
noch erweitert werden.
Der Aufbau ist dem von IPv4 sehr ähnlich, doch
man erkennt deutlich, dass der Header vereinfacht
wurde, um ihn schneller verarbeiten zu können. In
Abbildung 1.5 ist eine Darstellung des Headerinhalts
zusehen.
Es folgt eine kurze Beschreibung der einzelnen Felder:
Version Exakt wie bei IPv4 steht dieses Feld für die
Protokollversion und ist bei IPv6 mit dem Wert
6 belegt.
Traffic Class Dieses Feld steht für einen Prioritätswert, mit dem das Datagramm verarbeitet werden soll, und hat somit ähnliche Funktionalität
wie das TOS-Feld bei IPv4.
Flow label Hiermit können zusammengehörige Pakete speziell gekennzeichnet werden.
Payload Length Dies gibt die Länge des Gesamtpakets exklusive dem Header an. Erweiterungsheader sind hier allerdings mit inbegriffen.
Next Header In diesem Feld steckt die große Flexibilität von IPv6. Hier wird der Typ des als
nächstes folgenden Erweiterungsheaders angegeben, damit dieser auch korrekt verarbeitet werden kann. Beispiele für solche Erweiterungen
sind spezielle Header für Routingoptionen, Authentifikation, Datenintegrität und Datensicherheit. Zu bemerken ist, dass jeder Header den Typ
des ihm folgenden Headers enthält. Eine Ausnahme davon bildet der letzte Erweiterungshea-
1.7. IP Version 6
8
0
Version
24
16
Traffic class
Flow label
Payload length
Next header
Hop limit
Source address
Destination address
Abbildung 1.5.: Format des IPv6-Headers.
der, dieser enthält die Transportprotokollnummer, ähnlich wie im Protocol-Feld bei IPv4.
abläuft. Vom Grundprinzip her unterscheidet er sich
von den bisherigen Methoden, wie zum Beispiel die
Adressvergabe durch das Dynamic Host ConfiguratiHop Limit Dies ist ähnlich wie der TTL-Wert bei on Protocol (DHCP) [Dro97], dahingehend, dass hier
IPv4 ein Zähler für die bereits passierten Kno- keine zentrale Instanz über die vergebenen Adressen
ten im Netzwerk. Erreicht er den Wert Null, so Buch führen muss.
wird auch hier das Datagramm verworfen.
Auch ist bei IPv6 das Renumbering, welches bei
IPv4 keineswegs trivial ist und meist durch manuelles
Source Address Die 128 bit-Adresse des Quell- Eingreifen erfolgen muss, vereinfacht worden. Durch
hosts.
die Autokonfiguration und den vereinfachten Betrieb
von mehreren parallelen IP-Adressen ist es nun ohne
Destination Address Hier befindet sich die IPProbleme möglich, seine IP-Adresse, etwa bei einem
Adresse des Empfängers, allerdings kann dies
Providerwechsel, zu ändern.
auch nur eine Zwischenstation sein, falls ein ErEine später in die Spezifikation eingefügte Erweiweiterungsheader für das Routing vorhanden ist.
terung ist das so genannte Mobile IPv6. Der Kerngedanke bezieht sich darauf, dass ein Host überall unter
der selben IP-Adresse erreichbar ist, egal, ob er sich in
1.7.3. IPv6-Neuerungen
seinem Heimnetzwerk befindet oder mobil unterwegs
Viele neue Features wurden in IPv6 integriert und ein
ist. Dabei wird im Heimnetz ein Home Agent, welAuszug davon soll hier vorgestellt werden.
cher das Mobilgerät vertritt, betrieben. Gelangt das
Als erstes zu nennen wäre hier die Möglichkeit der
Mobilgerät in einen anderen Adressbereich, so erhält
Autokonfiguration von IPv6-Hosts. Allein anhand seies von dem für ihn zuständigen Router eine temporäner MAC-Adresse kann sich ein Host selbst eine lore Adresse, die Care-Of-Address (COA), welche das
kal gültige IP-Adresse berechnen und mit dieser per
Gerät dem Heimagent mitteilt. Dieser kann nun einMulticast auf einer speziellen Adresse mit den für
gehende Datagramme korrekt an den mobilen Host
ihn zuständigen Routern kommunizieren. Vom Rouzustellen. Diese Neuerung ist gerade in der heutigen
ter bekommt der Host dann einen Adressbereich zuZeit der aufkommenden internetfähigen mobilen Gegewiesen, aus welchem er sich eine Adresse ausräte von großem Nutzen.
wählen kann. Anschließend wird noch überprüft, ob
Bei IPv6 gibt es keine Fragmentierung der Pakediese Adresse bereits vergeben ist. Dabei ist zu bete mehr. Standardmässig muss jeder Host Pakete bis
merken, dass dieser gesamte Vorgang vollautomatisch
15
1. Internet Protocol (IP)
zu einer Größe von 1280 B akzeptieren, was bei einer
Ethernet-MTU von 1500 B kaum noch eine Aufteilung der Daten nötig macht. Sind dem Empfänger die
ankommenden Datagramme trotzdem zu groß, so teilt
er dies dem Sender via ICMP-Nachrichten mit und somit wird vor der Übertragung die maximal mögliche
Paketgröße ermittelt, was eine Steigerung der Effizienz zur Folge hat.
Weiterhin ist das neue Internet-Protokoll sicherer
und schneller als sein Vorgänger. Durch die bereits erwähnten Erweiterungsheader sind nun Mechanismen
zur sicheren Datenübertragung, wie Authentifikation
und Datenintegritätsschutz, möglich und durch den
vereinfachten Basis-Header und spezielle Routingerweiterungen gelangen Datagramme schneller zu ihrem Ziel.
Auffällig ist weiterhin, dass bei IPv6 keine HeaderPrüfsumme mehr gebildet wird. Dies wurde in Fachkreisen kontrovers diskutiert und man einigte sich
darauf, die beim Routing aufwändige Prüfsummenberechnung wegzulassen. Dies wurde damit begründet, dass bei höherschichtigen Protokollen ebenfalls eine Prüfsumme gebildet wird und man durch
den Verzicht das Weiterleiten von Datagrammen beschleunigt.
Als letzte Neuerung soll hier die einfache Erweiterbarkeit angeführt werden. Es ist auffällig, dass beim
Entwurf von IPv6 besonders darauf geachtet wurde,
zukünftige Neuerungen ohne große Änderungen einbauen zu können. Das Prinzip der Erweiterungsheader bietet hierfür die Basis. Bereits jetzt existieren viele solcher Erweiterungsformen, doch diese alle zu behandeln würde den Rahmen dieses Abschnitts sprengen. Sie sind in den jeweiligen RFCs gut dokumentiert.
1.7.4. Ausblick
Momentan gibt es noch keine weltweit verbreitete
Anwendung, die ohne IPv6 nicht funktionieren würde
und es wird wohl auch noch dauern, bis sich die neue
Version durchgesetzt hat. Doch aufgrund der Adressknappheit, vor allem im asiatischen Raum, wird wohl
kein Weg daran vorbeiführen. Außerdem werden erst
noch einige Probleme, wie zum Beispiel die schwierige Namensauflösung, die Gewährleistung der Kompatibilität zu IPv4 und den bestehenden höherschichtigen Protokollen oder auch die aufkommenden Datenschutzbedenken durch die „festen“ IP-Adressen, gelöst werden müssen, damit IPv6 global das Steuer im
Internet übernehmen kann.
16
1.8. Fazit
Das Internet-Protokoll ist von grundlegender Bedeutung für das heutige Internet oder Netzwerkkommunikation im Allgemeinen. Es organisiert die Fragmentierung, Adressierung und Zustellung von Datenpaketen auf eine sehr simple, aber dennoch erstaunlich
leistungsfähige und robuste Art und Weise. Diese ist
wohl auch der Grund für das relativ problemlose Anwachsen des Internets bis auf seine derzeitige Größe
und lässt hoffen, dass auch zukünftige Aufgaben erfüllt werden können.
Unsere Netzwerke wachsen und das InternetProtokoll ist sprichwörtlich der Leim, der alles zusammenhält.
2. Internet Control Message Protocol (ICMP)
Stephan Arenswald
2.1. Einführung
Layer
Protokolle
App.
Das Internet Control Message Protocol (ICMP) ist ein
Protokoll, welches wie TCP und UDP (Kapitel 5ff)
zur IP-Protokollfamilie gehört. Es bietet die Möglichkeit, in Netzwerken Fehlerinformationen und einfache Anfragen auszutauschen. Demzufolge ist es kein
weiteres Transportprotokoll, obwohl es direkt auf IP
aufbaut. Da TCP bereits eine verbindungsorientierte
Kommunikation bietet und durch UDP auch die verbindungslose Kommunikation abgedeckt ist, ist dies
auch nicht nötig.
Bei den genannten Transportprotokollen gibt es
einen entscheidenden Nachteil. Was passiert zum Beispiel, wenn ein Paket abgeschickt wurde? Vielleicht
kommt es an, aber vielleicht auch nicht. Jetzt könnte
man argumentieren, dass TCP verbindungsorientiert
ist und eine einwandfreie Übertragung garantiert. Im
Fehlerfall wird die Verbindung aber abgebrochen, ohne dass genau das Problem angegeben wird. Es wurde nicht dafür ausgelegt, den Grund zu ermitteln. Hier
kommt ICMP ins Spiel. Dieses Protokoll ist für genau
diese Aufgabe konzipiert.
Das Internet Control Message Protocol wurde 1981
von J. Postel im RFC 792 [Pos81a] spezifiziert. ICMP
setzt wie bereits erwähnt auf der IP-Protokoll-Familie
auf. Trotzdem ist es ein unerlässlicher Teil des IPProtokolls, weshalb jedes IP-Modul eine Implementierung von ICMP beinhalten muss. Es wurde 1985
durch RFC 950 [MP85] von J. Postel und J. Mogul erweitert. Darauf wird hier allerdings nicht näher eingegangen.
Wie zu Beginn angesprochen, dient das ICMPProtokoll zur Übermittlung von Fehlermeldungen,
z. B. falls eine Nachricht unterwegs verloren geht.
Auf einige dieser Fehlermeldungen wird in Abschnitt 2.4.1 näher eingegangen. Als Anwendungsgebiet gelten aber auch Informationsaustausch und Anfragen. Der berühmteste Vertreter in dieser Kategorie
ist Ping. Dieses kleine Programm sendet eine Nachricht an einen entfernten Computer und wartet, ob ei-
HTTP
FTP
Transp.
SMTP
POP3
IRC
UDP
TCP
IP (IPv4,IPv6), ICMP
Network
Ethernet
Link
⇐
WLAN
Abbildung
2.1.:
Schichtenmodell.
IP-Header
DNS
ICMP
im
TCP/IP-
IP-Datagramm
@
@
type
code
checksum
datagram
Abbildung 2.2.: Aufbau des ICMP-Headers.
ne Antwort kommt. Dieses und einige andere Beispiele werden in Abschnitt 2.4.2 behandelt. Des Weiteren
folgt ein kleiner Exkurs in das Gebiet Mobile IP. Auch
dort spielt ICMP eine wichtige Rolle. In Abschnitt 2.5
wird auf dieses Thema näher eingegangen.
2.2. Einordnung des ICMP
Obwohl das ICMP-Protokoll zu dem Network-Layer
gehört (siehe Abbildung 2.1), kann es nicht anstelle
des IP-Protokolls eingesetzt werden. Es ist eine Ergänzung zu diesem. Der Grund liegt darin, dass sich
ICMP nicht um den Transport selbst kümmert. D. h.
es verwaltet weder Absender, Empfänger noch andere zur Übertragung wichtige Informationen.
17
2. Internet Control Message Protocol (ICMP)
2.3. Aufbau
Der Aufbau ist im Vergleich zu anderen Protokollen
sehr einfach. In Abbildung 2.2 ist zu sehen, dass der
Header (Kopf des Paketes, grau umrandet) lediglich
aus 3 Feldern besteht:
LANs als auch WANs (Internet). Es werden allerdings
keine ICMP-Nachrichten aufgrund von MulticastNachrichten erzeugt. Diese könnten einen Host, welcher ein Paket an viele andere geschickt hat, völlig
überlasten, da er von jedem Empfänger eine Nachricht mit dem gleichen Problem erhalten könnte.
Type Dieses Feld ist 8 bit lang und gibt, dem Namen
2.4.1. Fehlermeldungen
nach, den Typ der ICMP-Nachricht an. Dazu gehören zum Beispiel 0=Echo Reply, 3=Destinati- Lifetime Exceeded Eine Fehlermeldung aufon Unreachable oder 11=Time Exceeded.
grund der Lebenszeitüberschreitung kann aus zwei
Gründen generiert werden. Der erste ist, dass die TTL
Code Durch dieses ebenfalls 8 bit lange Feld wird
(Time To Live) abgelaufen ist. Als zweites gibt es
der Typ näher spezifiziert. So kann Typ 11 (Time
einen Timeout beim Zusammensetzen von FragmenExceeded) zusätzlich durch Code 0=TTL Exceeten.
ded oder 1=Fragment Reassembly Timeout geSollte ein Router ein Paket erhalten, dessen TTL
nauer eingegrenzt werden. Dadurch ist eine gegleich 0 ist, muss es verworfen werden (siehe Abbilnauere Fehlerunterscheidung und demzufolge eidung 2.3). Jetzt kann der Host, welcher das Paket urne bessere Fehlerbehandlung möglich.
sprünglich versendet hat, darüber informiert werden.
Checksum Diese Prüfsumme dient dazu, festzu- Die Adresse zu diesem steht im IP-Header. Der Roustellen, ob die übertragene Nachricht so ange- ter schickt also eine ICMP-Nachricht an den Host und
kommen ist, wie sie abgesendet wurde. Soll- informiert ihn, dass die Lebenszeit abgelaufen ist. Der
te ein Bit bei der Übertragung umgekippt sein, Aufbau dieser Nachricht ist in Abbildung 2.4(a) zu sekann das damit erkannt werden. Die 16 bit lan- hen.
Wie bereits angesprochen, kann diese Fehlermelge Prüfsumme ergibt sich aus dem 16 bit-1erKomplement der Summe des 1er-Komplements dung auch gesendet werden, wenn beim Zusammender ICMP-Nachricht. Das ist der gleiche Algo- setzen von Fragmenten ein Timeout auftritt. Fehlt ein
rithmus, wie er bei dem IP-Protokoll verwendet Teil, wartet der empfangende Host eine gewisse Zeit.
Ist diese abgelaufen, wird eine ICMP-Nachricht an
wird.
den Absender geschickt. Der Rest des Datagramms
In Tabelle 2.1 sind alle Message Types aufgeführt, wird verworfen.
welche im ursprünglichen RFC eingeführt wurden.
Die aktuelle Liste (Juli 2006) umfasst mittlerweile Parameter Problem Angenommen, ein Host ver48 Typen und mehrere hinzugefügte Codes. Bei Typ 3 sendet ein Paket mit Hilfe von IP Version 4 (IPv4).
(Destination unreachable) zum Beispiel ist die An- Dafür wird im IP-Header das Feld „Version“ auf
zahl der Codes von 5 auf 15 gestiegen. Diese Liste 0100 = 4 gesetzt. Auf dem Weg zum Empfän2
10
wird von der IANA verwaltet [Int06b].
ger kippen nun 3 Bits um, so dass sich das Feld auf
Die Typen 9 und 10 aus Tabelle 2.1 gehören nicht 0011 = 3 ändert. Diese Version gibt es nicht. Der
2
10
zu RFC 792. Da sie jedoch in Abschnitt 2.4.2 behan- Empfänger kann das Paket nicht verarbeiten. Entspredelt werden, sind sie zur Vollständigkeit mit eingetra- chend wird der Absender informiert, das es ein Progen.
blem im IP-Header gibt. Abbildung 2.5 verdeutlicht
Das ICMP-Datagramm besteht aus den Nutzdaten, das Beispiel anhand einer Grafik.
welche zur zusätzlichen Information für die jeweiDie ICMP-Nachricht besitzt nach dem Header ein
ligen Typen und Codes dient. D. h. das Datagramm 8 bit langes Feld für einen Pointer. Dieser zeigt auf
wird in zusätzliche Felder mit spezifischen Daten un- das fehlerbehaftete Oktett im IP-Header. Für den beterteilt. Die Auswertung dieser Informationen erfolgt schriebenen Fehlerfall (Fehler im Versionsfeld) würdemzufolge in Abhängigkeit von Typ und Code.
de der Pointer auf 1, also das erste Oktett im IPHeader zeigen (siehe Abbildung 2.4(b)).
2.4. Aufgaben
Der Aufgabenbereich für ICMP erstreckt über alle Arten von Netzwerken. Dazu gehören sowohl
18
Source Quench Übersetzt heißt Source Quench
den „Absender dämpfen“. Diese Nachricht wird von
einem beliebigen Zielhost (Router sind damit nicht
2.4. Aufgaben
Type
Code
0
0
echo reply
792 [Pos81a]
destination unreachable:
network unreachable
host unreachable
protocol unreachable
port unreachable
fragmentation needed but don’t fragment bit set
source route failed
792 [Pos81a]
0
1
2
3
4
5
0
source quench
792 [Pos81a]
redirect
Redirect datagrams for the network
Redirect datagrams for the host
Redirect datagrams for the type of service and network
Redirect datagrams for the type of service and host
792 [Pos81a]
0
1
2
3
8
0
echo request
792 [Pos81a]
9
10
0
0
router advertisement
router solicitation
1256 [Dee91]
1256 [Dee91]
time exceeded
time to live exceeded in transit
fragment reassembly time exceeded
792 [Pos81a]
0
1
header problem
IP header problem
792 [Pos81a]
0
13
14
0
0
timestamp message
timestamp reply message
792 [Pos81a]
792 [Pos81a]
15
16
0
0
information request message
information reply message
792 [Pos81a]
792 [Pos81a]
3
4
5
11
12
Description
RFC
Tabelle 2.1.: Nachrichtentypen bei ICMP.
Abbildung 2.3.: Lebenszeit überschritten.
19
2. Internet Control Message Protocol (ICMP)
11
0 od. 1
checksum
12
00000001
unused
checksum
0 od. 1
unused
Internet Header + 64 bit des Original-Datagramms
Internet Header + 64 bit des Original-Datagramms
(a) Lifetime Exceeded
(b) Parameter Problem
4
0
checksum
5
0-1
checksum
unused
unused
Internet Header + 64 des Original-Datagramms
Internet Header + 64 des Original-Datagramms
(c) Source Quench
(d) Redirect
3
checksum
1
unused
Internet Header + 64 des Original-Datagramms
(e) Destination Unreachable
Abbildung 2.4.: ICMP-Pakete von verschiedenen Fehlermeldungen.
Abbildung 2.5.: Ungültige Parameter.
20
2.4. Aufgaben
ausgeschlossen) an den Absender eines Paketes geschickt. Dafür kann es zwei Gründe geben: entweder
eine zu hohe Auslastung der Serververbindung oder
dass der Server die Pakete nicht schnell genug abarbeiten kann.
Angenommen, ein Netzwerk besteht aus einem
Datenbankserver und zehn Clients (siehe Abbildung 2.6). Diese führen permanent sehr viele Anfragen auf dem Server aus. Dadurch entsteht eine hohe Netzwerkauslastung. Kommt nun ein elfter Client
hinzu, welcher ebenfalls einen hohen Datenverkehr
erzeugt, schickt der Server eine ICMP-Nachricht an
diesen, wenn der Pufferplatz nicht ausreichen sollte.
Das Format dieser Nachricht ist in Abbildung 2.4(c)
zu sehen.
Wie bereits erwähnt, ist es auch möglich, dass ein
Client zu schnell Nachrichten sendet. Der Server versucht darauf hin mit Source-Quench-Nachrichten die
Senderate des Absenders zu drosseln. Er schickt so
lange ICMP-Nachrichten, bis die Datenrate auf seinem gewünschten Niveau liegt. Durch ein langsames Herantasten an die Übertragungsgrenze kann der
Client eine bestmögliche Übertragungsrate erzielen.
Redirect Dieser Nachrichtentyp wird für das folgende Problem, welches in Abbildung 2.7 dargestellt
ist, verwendet. Ein Computer C1 möchte mit einem
zweiten (C2) kommunizieren. C1 schickt eine Nachricht ab. Diese kommt bei Router R1 an. Dieser sieht
nun in der eigenen Routing-Tabelle nach, wohin das
Paket weiter geschickt werden muss. Stellt R1 nun
fest, dass der nächste Router R2 im gleichen Netzwerk liegt wie C1, schickt er die Nachricht nicht nur
weiter, sondern sendet auch eine Redirect-Message an
den Absender zurück. C1 bekommt damit die Information, dass der Weg zu C2 über R2 kürzer ist. Das
erspart unnötigen Datenverkehr.
Es gibt insgesamt 4 Möglichkeiten, das Code-Feld
zu belegen:
• 0: Umleiten von Datagrammen für das Netzwerk. Jedes Paket, welches in das gleiche Zielnetzwerk N2 verschickt werden soll, soll über R2
umgeleitet werden.
• 3: Umleiten von Datagrammen für TOS und den
Host. Wie bei Code 1, jedoch muss zusätzlich der
TOS übereinstimmen.
In RFC 1812 [Bak95] werden die Codes 0 und 2
für überholt erklärt. Das Problem mit Weiterleitungen für komplette Netzwerke besteht darin, dass die
Netzwerk-Spezifikation einer Umgebung, in der Subnetting oder CIDR (vgl. 1.5.4 und 1.5.5) benutzt wird,
mehrdeutig sein kann.
Ein weiteres Problem ist, das ein Redirect nur für
den ersten Hop aus einem Netzwerk heraus funktioniert. Abbildung 2.7 zeigt das Problem. Wenn R2
seine Nachricht an R3 weiterschickt und diese von
dort aus zu R4 weiter gesendet wird, kann R3 keine Redirect-Message zurücksenden, obwohl der Weg
direkt über R4 kürzer wäre. Das liegt daran, dass R4
nicht im gleichen Netz liegt wie R2. Somit müssen die
Nachrichten nach Netzwerk N3 trotzdem einen Umweg gehen.
Destination Unreachable Erreicht ein Paket
nicht das Ziel, kann das mehrere Gründe haben. Entsprechend besitzt das Code-Feld auch mehrere Möglichkeiten.
• 0: Das Netzwerk ist nicht erreichbar. Das kann
unter anderem daran liegen, dass ein Routingproblem vorliegt.
• 1: Der Zielhost ist nicht erreichbar. Dieser Fehler tritt auf, wenn das Paket in das Netzwerk gelangt, wo die IP-Adresse hin gehört, dort jedoch
nicht zugestellt werden kann.
• 2: Das Protokoll ist nicht erreichbar.
• 3: Der Port ist nicht erreichbar. Wenn der Host
das Paket empfängt, dieses aber nicht an die Anwendung mit dem angegebenen Port weiter geleitet werden kann, tritt dieser Fehler auf.
• 5: Eine vorgegebene Route führt nicht zu dem
gewünschten Ziel.
Zu diesen gehören noch einige weitere die hier
nicht aufgeführt sind, weil sie erst nach der Einfüh• 1: Umleiten von Datagrammen für den Host. rung von ICMP hinzugekommen sind. Die einzige
Hierbei werden alle Pakete über R2 umgeleitet, Ausnahme bildet Code 4, welcher ebenfalls zu den
ersten gehört. Aufgrund seines hohen Informationsgedie für den gleichen Zielhost bestimmt sind.
haltes wird dieser jedoch erst in Abschnitt 2.4.2 unter
• 2: Umleiten von Datagrammen für Type of Ser- „Pfad-MTU-Ermittlung“ näher besprochen.
vice (TOS) und das Netzwerk. Wie bei Code 0,
Die Grafik aus Abbildung 2.8 spiegelt ein einfaches
jedoch muss zusätzlich der TOS übereinstim- Experiment wider. Es existieren zwei Netze: ein inmen.
ternes Cluster-Netz und ein externes Netz. Von einem
21
2. Internet Control Message Protocol (ICMP)
Abbildung 2.6.: Source Quench.
Abbildung 2.7.: Redirect.
Abbildung 2.8.: Destination Unreachable.
22
2.4. Aufgaben
PC aus dem Clusternetz soll eine Verbindung zu einer
nicht vorhandenen IP-Adresse im externen Netz aufgebaut werden. Dazwischen liegt der Router ipc654.
Auf ipc654 wird mittels tcpdump der Datenverkehr
sowohl auf dem internen als auch auf dem externen
Interface abgehört. Nun wird von PC1 aus versucht,
eine Telnet-Verbindung aufzubauen.
pc1$ telnet 141.35.15.230
Trying 141.35.15.230...
telnet: Unable to connect to remote
host: No route to host
In der tcpdump-Ausgabe erkennt man, dass der
Router auf dem externen Interface dreimal versucht,
per ARP-Request den unbekannten Zielhost ausfindig zu machen. Da dies nicht gelingt, wird vom Router auf dem internen Interface an PC1 eine ICMPNachricht mit Type 3 und Code 1 gesendet (Abbildung 2.4(e)), dass der Host nicht erreichbar ist.
2.4.2. Anfragen
ICMP ist nicht nur dazu geeignet, Fehlermeldungen
zu versenden, sondern wird auch dazu verwendet, Informationen abzufragen. Im Folgenden werden dazu
einige Beispiele erläutert.
Timestamp-Funktion Damit ist es möglich, die
Uhrzeit auf zwei Computern zu synchronisieren. Abbildung 2.9 verdeutlicht den Sachverhalt.
Ein Computer A möchte von Computer B die aktuelle Zeit wissen. Eine einfache Anfrage in der Form:
„Wie spät ist es?“ ist nicht möglich, denn durch die
unterschiedlich langen Laufzeiten der Daten im Netzwerk vergehen unter Umständen ein paar Sekunden,
bis die Antwort zu A kommt. Während A seine Zeit
mit der neuen aktualisiert, ist diese schon veraltet.
Es ist möglich, mit vier Zeitstempeln eine genauere
Zeit zu erhalten. Abbildung 2.10(a) zeigt den Header
der ICMP-Nachricht, die neben dem Standardkopf ein
paar zusätzliche Felder enthält.
• Identifier identifiziert die Anfrage mit einer Antwort. Bei mehreren Anfragen an verschiedene
Zeitgeber können diese somit auseinander gehalten werden. Er wird nur verwendet, wenn der
Code gleich 0 ist.
• Sequence Number hat die gleiche Funktion wie
der Identifier. Der Identifier besitzt allerdings
eine höhere Wertigkeit. Werden an zwei Computer je zehn Zeitanfragen geschickt, kann der
Identifier auf die Computer-ID und die Sequence
Number auf die Nachricht gesetzt werden. So ist
eine genaue Unterscheidung möglich.
• Timestamps – dazu gehören drei Zeitstempel, die
zur Berechnung einer genaueren Zeit dienen. Sie
sind je 32 bit lang.
Um eine Uhr mit den vier genannten Zeitstempeln
zu synchronisieren, sind die folgenden Schritte notwendig (siehe Abbildung 2.9):
1. A versendet eine ICMP-Nachricht (Type 13,
Code 0) an B. Dabei ist der Originalzeitstempel
(Originate Timestamp) auf die Versandzeit gesetzt.
2. B empfängt die Nachricht und trägt den Empfangszeitstempel (Receive Timestamp) ein.
3. B erstellt eine Antwort, welche ebenfalls eine ICMP-Nachricht (Type 14, Code 0) ist. In
diese trägt er die beiden Empfangszeitstempel
und setzt als Antwortzeitstempel (Transmit Timestamp) die Versandzeit ein.
4. A empfängt die Nachricht und merkt sich die
Empfangszeit.
Nach diesem Ablauf besitzt A vier Zeitstempel.
Dadurch ist er in der Lage, die empfangene Zeit um
die Datenübertragungszeiten zu korrigieren.
Allerdings funktioniert diese Methode der Uhrensynchronisation nicht immer zuverlässig. Für einen
möglichst genauen Abgleich von Zeiten zwischen
zwei Computern gibt es zum Beispiel das Network
Time Protocoll (NTP), welches in RFC 958 [Mil85]
oder das aktuellere Simple NTP (SNTP), welches in
RFC 4330 [Mil06] spezifiziert ist.
Router Discovery Wenn ein Host in ein Netzwerk eingebunden wird, muss dieser lernen, mit welchen Routern er Kontakt aufnehmen kann. Diese Information in einen Computer per Hand einzuspeichern funktioniert nur bei einer kleinen Anzahl von
Geräten. Muss ein ganzes Unternehmen mit mehreren tausend Computern eingebunden werden, ist diese Methode nicht mehr sinnvoll. Aus diesem Grund
gibt es das Router Discovery, eine automatische Beschaffung von wichtigen Routerinformationen (siehe
Abbildung 2.11).
Das Router Discovery ist auf zwei Arten möglich:
Zum einen kann ein Router sich in bestimmten Zeitintervallen bekannt machen. Das birgt aber das Problem, das neue Hosts unter Umständen sehr lange
auf den Router warten müssen. Und zum anderen
23
2. Internet Control Message Protocol (ICMP)
Abbildung 2.9.: Synchronisation zweier Uhren durch ICMP Timestamps.
13, 14
0
checksum
9
0
checksum
# Addr
AES
lifetime
sequence number
identifier
Routeradresse [1]
32 bit Originalzeitstempel
Routerpräferenz [1]
32 bit Empfangszeitstempel
Routeradresse [2]
32 bit Antwortzeitstempel
..
(a) Timestamp
(b) Router Advertisement
0, 8
10
0
checksum
0
checksum
sequence number
identifier
reserved
datagram
(c) Router Solicitation
(d) Echo Request & Reply
3
checksum
4
unused
Internet Header + 64 bit des Original-Datagramms
(e) Path-MTU
Abbildung 2.10.: ICMP-Pakete für verschiedene Anfragen.
24
2.4. Aufgaben
Abbildung 2.11.: Router Discovery.
schickt ein neuer Host eine Router Solicitation („Ansuchung“, Abbildung 2.10(c)), also eine Anfrage auf
Routerinformationen. Der empfangende Router kann
nun seine Antwort schicken. Darin sind, wie in Abbildung 2.10(b) zu sehen, folgende spezifische Informationen enthalten:
Advertisement Count Dieser Zähler gibt die Anzahl der in der Liste enthaltenen Router an.
Address Entry Size Der Wert gibt die Anzahl der
32 bit-Worte pro Routerinformation an. Dieser
Wert ist gewöhnlich 2, bestehend aus Routeradresse und Routerpräferenz.
Lifetime Dieser Wert gibt die Zeit an, für die diese
Routerliste als gültig angesehen werden kann.
Router Adress Entry Das ist eine Menge von Einträgen zu Informationen von Routern, bestehend
aus folgenden Feldern:
Dieses Programm wurde 1983 von Mike Muss programmiert und zum ersten Mal in 4.2aBSD veröffentlicht. Mittlerweile ist es in der Mehrheit der Betriebssysteme verankert. Mike Muss arbeitete damals
an Radar- und Sonaranlagen, woher auch der Name
„Ping“ stammt [pin06].
Ein Beispiel für die Ping-Ausgabe sieht wie folgt
aus:
ipc654$ ping www.google.de
PING www.l.google.com(66.249.85.104)
56(84) bytes of data.
64 bytes from 66.249.85.104:
icmp_seq=1 ttl=248 time=17.8 ms
64 bytes from 66.249.85.104:
icmp_seq=2 ttl=248 time=11.0 ms
64 bytes from 66.249.85.104:
icmp_seq=3 ttl=248 time=10.6 ms
64 bytes from 66.249.85.104:
icmp_seq=4 ttl=248 time=10.8 ms
Als erstes muss der Name des Ziels in eine IPAdresse umgewandelt werden. Das kann durch das
• Preference Level: Bewertung für diesen DNS geschehen. In der zweiten Zeile steht ein Reply
vom Zielhost. Die Sequenznummer ist 1, d. h. die
Router.
Antwort auf die erste Anfrage. Dann wird die TTL
Während für ein Router Advertisement der Type 9 aufgeführt. Im Beispiel hat die Nachricht 7 Hops beist, kann der Code zwei verschiedene Werte anneh- nötigt, um beim Zielhost anzukommen. Als letztes
men. Zum einen 0 für eine einfache Informationsver- steht in der Zeile die Zeit, die das Echo benötigt hat.
breitung und zum anderen 16 für Mobile IP. Auf den Dabei fällt auf, dass die Zeit der ersten Anfrage länger
letzteren Fall wird in Abschnitt 2.5 genauer eingegan- ist als die darauffolgenden, welche sehr nahe beieinander liegen.
gen.
Die Header für Echo Request und Echo Reply sind
Im Gegensatz zur Router-Advertisement-Nachricht
ist die Solicitation-Nachricht vergleichsweise einfach in Abbildung 2.10(d) dargestellt. Als spezifische Felund kurz aufgebaut. Der Type 10, der Code 0 und der gelten der Identifier und die Sequence Number,
die Checksum wird, wie bereits in Abschnitt 2.3 be- welche zur Identifikation von Anfrage und Antwort
schrieben, gebildet. Diese Nachricht dient ausschließ- dienen.
lich zur Anfrage für ein Advertisement.
Die hier beschriebene Form der Router Discovery Pfad-MTU-Ermittlung Es kommt häufig vor, dass
wird bei IPv4 nur selten verwendet.
in verschiedenen Netzen verschiedene MTU-Werte
• Router Adress: IP-Adresse eines Routers
Ping (Echo Request/Echo Reply) Ping dient
dazu, mit Hilfe von ICMP zu überprüfen, ob ein anderer Computer antwortet. Dabei nennt man eine Anfrage einen Echo Request und eine Antwort Echo Reply.
eingestellt sind. Die Maximum Transfer Unit (MTU)
gibt die maximale Paketgröße in einem Netzwerk an;
größere Pakete müssen fragmentiert werden. Beispiele für MTUs sind die Ethernet-MTU von 1500 B oder
die MTU bei X.25 von 576 B.
25
2. Internet Control Message Protocol (ICMP)
Abbildung 2.12.: Pfad-MTU.
Abbildung 2.13.: Mobile IP mit Hilfe von ICMP.
26
2.5. Kleiner Exkurs: Mobile IP
Die Pfad-MTU (Path MTU) ist die kleinste MTU
entlang eines Pfades vom Quell- zum Zielhost. Es
ist mit Hilfe von ICMP möglich, genau diese MTU
zu ermitteln. Das ist wegen des folgenden, in Abbildung 2.12 dargestellten Problems wichtig.
Wenn ein Paket mehrere Netze durchlaufen muss,
um vom Sender zum Empfänger zu gelangen, kann es
durchaus sein, das in diesen Netzen unterschiedliche
MTUs sind. Angenommen im Absendernetz herrscht
eine MTU von 1500 B. Im nächsten Netz liegt dieser Wert bei 1300 B. Dadurch müsste der Router zwischen Netz 1 und 2 das Paket fragmentieren. Das kostet erstens Zeit und zweitens wird durch den größeren
Datenverkehr wegen der Verdopplung der Header die
Belastung des zweiten Netzes erhöht. Es wäre besser, von vorneherein zu wissen, wie groß die kleinste
MTU auf dem Weg ist.
Die Pfad-MTU wie folgt bestimmt. Ein Computer C1 schickt ein Paket der Größe seiner Netz-MTU
an den Router R1. Liegt dieser zwischen zwei Netzen mit unterschiedlichen MTUs, muss er beide vergleichen. Hat das Netz, wohin die Nachricht weiter übertragen werden soll, einen kleineren MTUWert, so schickt der Router eine ICMP-Nachricht
an den Absender zurück, wenn im IP-Header das
Don’t-Fragment-Bit gesetzt ist. Abbildung 2.10(e)
zeigt den Aufbau der Nachricht. Der Type 3 gehört in die Destination-Unreachable-Kategorie (Abschnitt 2.4.1). Da als Code aber 4 gesetzt ist, welcher Fragmentation needed but Don’t Fragment bit
set bedeutet, zählt es hier zu den Anfragen. Im Datenteil der ICMP-Nachricht stehen zusätzlich die kleinere MTU, der IP-Header und die ersten 64 bit des
Original-Datagramms. Nach dem Erhalt einer solchen
ICMP-Nachricht kann der Absender die Paketgröße
entsprechend ändern und das Paket erneut abschicken.
Diese Prozedur geschieht so lange, bis ein kontinuierlicher Datenstrom entsteht.
2.5. Kleiner Exkurs: Mobile IP
In diesem Exkurs soll es um das aktuelle Thema
Mobile IP gehen. Abbildung 2.13 zeigt das Szenario.
Angenommen, man sitzt im Zug von Berlin nach
München. Da man eine Menge Zeit hat, nutzt man die
Gelegenheit und surft im Internet über WLAN. Da
ein WLAN-Access-Point nur eine begrenzte Sendereichweite besitzt, sind auf der Zugstrecke mehrere
dieser Sender aufgestellt. Die Frage ist nun, was passiert, wenn der Laptop von einem Access Point zum
nächsten wechseln muss. Bei jedem Wechsel ändert
sich die IP-Adresse des Notebooks, weil es sich bei
9
0
checksum
# addr
AES
lifetime
Routeradresse [1]
Routerpräferenz [1]
Routeradress[2]
...
type=16
length
sequence number
registration lifetime
code
reserved
Care-of-Adresse [1]
...
Abbildung 2.14.: Erweiterter ICMP-Header mit
Daten zum Erhalt der Router.
jedem Sender neu anmelden muss. Diese Änderung
unterbricht allerdings die Verbindung, was bei VoIP
(Internettelefonie) oder großen Downloads zu Problemen führen kann. Daraus folgt, dass eine ständige Adressänderung eigentlich nicht möglich ist. Stattdessen werden zwei IP-Adressen verwendet. Es gibt
eine primäre Adresse, die dem Heimatnetz des Laptops zugeordnet ist und fest bleibt, und eine sekundäre Adresse, die sich stetig ändert. Der sogenannte Homeserver empfängt an die primäre Adresse gerichtete Datagramme und leitet sie an die sekundäre
Adresse weiter. Der Server kümmert sich darum, immer zu wissen, wo der Laptop gerade ist.
Um sich in einem fremden Netz anmelden zu können, muss erst einmal in Erfahrung gebracht werden, wo man sich anmelden kann. Der Laptop aus
dem Szenario sendet also eine Router-SolicitationNachricht per Multicast, in welcher die TTL des IPHeaders auf 1 gesetzt ist, um sicher zu stellen, das der
erste Router antwortet. Der Aufbau des Router Advertisement ist in Abbildung 2.14 zu sehen. Dazu gehören folgende spezifische Felder:
Length Dieses Feld gibt die Länge der Nachricht
ohne Typ und Längenfeld an.
Sequence Number Diese Nummer dient zur Identifikation bei mehreren Anfragen und Antworten.
Registration Life Time Die RLT gibt die Anzahl
der Sekunden an, die ein Foreign Agent bereit ist,
eine IP-Adresse anzunehmen.
27
2. Internet Control Message Protocol (ICMP)
Code Dieses Feld informiert über den Zustand des
Agenten.
Hat sich der Laptop an einem Access Point neu angemeldet, schickt er seinem Homeserver darüber eine
Nachricht. Der Homeserver merkt sich diese Verbindung. Bei einer Anfrage aus dem Internet an den Laptop kommt diese zum Homeserver. Anstatt das Paket
direkt weiterzugeben, wird per IP-to-IP-Kapselung
ein neues Paket erzeugt, welches mit der sekundären
IP-Adresse ausgestattet ist.
Die Abwicklung des Pakettransportes geschieht
transparent, da die Anwendungen ausschließlich die
primäre Adresse kennen. Nur die Mobile-IP-Software
selbst verpackt und entpackt die Pakete.
28
3. IP – Routing und Traceroute
Norbert Hundeshagen
3.1. Einführung
Die Vorstellung, die die meisten Menschen heutzutage vom Internet haben, ist die, dass alle Rechner,
der eigene eingeschlossen, direkt mit allen Computern weltweit verbunden sind. Daraus folgt, dass sich
das Internet wie ein einziges großes Netzwerk verhält,
und somit das Kapitel „Routing“ mit wenigen Worten
beendet wäre.
In Wirklichkeit besteht das weltweite Netz aus vielen kleinen und großen Rechnerzusammenschlüssen,
die untereinander durch so genannte Router verbunden sind und Daten mit Hilfe dieser austauschen können (siehe Abbildung 3.1 [Wik06d]).1 Der gemeinsame Standard, den die Endgeräte und Router aus den
verschiedenen Netzwerken hierfür verwenden, ist die
TCP/IP-Protokollsuite.
In den vorausgegangenen Kapiteln wurde bereits
erläutert, wie die Übertragung von Daten auf IP-Basis
funktioniert. Die Frage ist nun, wie die Datagramme
ihren Weg durch das Netz von der Quelle zum Ziel
finden. Dazu möchte ich zu Beginn ein paar Grundlagen zum Thema Routing erklären und mich dann
näher mit dem statischen Routing befassen. Als Abschluss dieses Kapitels werde ich noch das Diagnoseprogramm Traceroute und dessen Funktionsweise
vorstellen.
3.2. Grundlagen des
IP-Routing
Wie bereits in der Einführung erwähnt, ist Routing
die Wegewahl von IP-Datagrammen vom Sender zum
Empfänger. Dabei wird das Ziel eindeutig durch seine IP-Adresse (Destination IP Address) identifiziert,
welche im IP-Header (siehe Abbildung 1.2) zu finden
ist. Dort sind auch noch andere Informationen enthalten, die für die Art des Weiterleitens der Pakete von
1 LAN: Local Area Network, MAN: Metropolitan Area Network,
WAN: Wide Area Network.
Abbildung 3.1.: Schema des Internet.
Bedeutung sind. In dem Feld Options können unter
anderem noch die Möglichkeiten Loose Source Routing, Strict Source Routing und Record Route gewählt
werden.
Die Frage ist nun, nachdem das Ziel bekannt ist, auf
welchem Weg die Datenpakete dort hin gelangen? In
den vergangen Jahren stieg das Verkehrsaufkommen
im Internet explosionsartig an, aus diesem Grund hat
die Wegewahl von Informationen durch das Netz eine zentrale Bedeutung. Pakete, die auf redundante Art
und Weise ihren Weg zum Ziel suchen, erhöhen die
Traffic noch zusätzlich. Also ist es unerlässlich, kürzeste Wege von der Quelle bis zum Ziel zu finden.
3.2.1. Optimale Wege in Netzwerken
Optimale Wege in Netzwerkstrukturen sind dadurch
gekennzeichnet, dass sie zum einen die wenigsten
„Kosten“ verursachen. Von Sender zu Empfänger
wird ein Weg gewählt, welcher sich durch hohe Bandbreite und möglichst direkte Verbindungen auszeichnet. Zum anderen ist es immens wichtig, das solche
Routen schleifenfrei sind. Ist dies nicht der Fall, könnte ein Paket lange Zeit einfach nur im Kreis laufen,
ohne sein Ziel zu erreichen.
29
3. IP – Routing und Traceroute
3. wiederhole 1 und 2, bis alle Knoten angeschlossen sind.
Abbildung 3.2.: Graphenbeschreibung einer
Netzwerktopologie.
In Abbildung 3.3 kann man das Ergebnis dieses Algorithmus sehen.
Anhand des erzeugten Baumes ist es nun möglich,
die Next Hops, also den jeweils nächsten Router, den
ein IP-Datagramm auf dem Weg vom Sender zum
Empfänger passiert, zu identifizieren. Somit kann ein
beliebiger Netzwerkteilnehmer ein Bild seiner Umgebung anfertigen und speichern. Dies geschieht in der
Routing-Tabelle, auf die ich später noch näher eingehen werde.
3.3. Statisches
(Next-Hop-)Routing
Abbildung 3.3.: Minimum Spanning Tree.
Um solche optimale Wege zu ermitteln, bedient
man sich der Graphentheorie. Zur Vereinfachung der
Netzwerktopologie und zur Entwicklung von Routingstrategien wird das Netzwerk als Graph beschrieben. Dabei repräsentieren die Knoten die Router und
die Kanten die direkte Verbindung zwischen ihnen.
Wie man in Abbildung 3.2 sieht, abstrahiert diese Art
der Beschreibung die Endgeräte, da sie für die Berechnung von Routen keine Rolle spielen [Mei05].
Der nächste Schritt ist es, den „kürzesten“ Weg in
einem solchen Graphen zu berechnen. Dies geschieht
mit Hilfe eines so genannten Minimum Spanning Tree
oder minimalem Spannbaum.
Definition Minimaler Spannbaum:
Der Unterschied zwischen statischem und dynamischen Routing, welches anhand von Protokollen relativ selbstständig Veränderungen in der Netzwerktopologie erkennt, besteht im Aufbau und der Wartung
der Routing-Tabelle, in der wie bereits erwähnt die
Next-Hops eingetragen sind.
Grundlage für beide Routingverfahren ist die Art
der Zustellung. Man unterscheidet zwischen indirekter und direkter Zustellung der IP-Datagramme zum
Empfänger.
Ein Beispiel für die zwei Übertragungsarten ist
in Abbildung 3.4 zu sehen. Um direkte Zustellung
handelt es sich, wenn Sender und Empfänger zum
gleichen Netzwerk gehören (Abbildung: Rechner A
Ein minimaler Spannbaum enthält die minimale Anzahl an Kanten, die alle Knoten des
Graphen verbinden.
Anhand der Definition kann man erkennen, dass
beide Bedingungen, kürzeste Wege zu den verschiedenen Routern und keine Kreise in den Graphen, erfüllt sind.
Um einen solchen minimalen Spannbaum zu erzeugen, gibt es mehrere Möglichkeiten. Einer der
schnellsten Algorithmen hierfür ist der Algorithmus
von Prim.
Verkürzter Pseudocode des Prim-Algorithmus:
1. starte mit Knoten A
2. wähle „billigste“ Kante, die erzeugten Baum mit
A verbindet
30
Abbildung 3.4.: Direkte und indirekte Zustellung.
3.3. Statisches (Next-Hop-)Routing
und B) und daher IP-Datagramme direkt übertragen
werden können. Ist dies nicht der Fall, wird das Datenpaket an den Next-Hop-Router geschickt, der in
der Routing-Tabelle eingetragen ist und somit die
Schnittstelle für das Quellnetzwerk darstellt.
3.3.1. Versenden von Daten im
Netzwerk
Bevor ich mich mit Einzelheiten zum Thema Routing auseinandersetzen will, möchte ich in diesem
Abschnitt anhand des Beispielnetzwerkes in Abbildung 3.5 einen kurzen Überblick über die Aufgaben,
die ein Router beim Weiterleiten von Datenpaketen
hat, geben.
In der Darstellung sind drei Netzwerke zu sehen,
die durch zwei Router verbunden sind. Diese besitzen
zu ihren lokalen Netzwerken jeweils eine Schnittstelle, sie sind also Mitglieder der Netzwerke, die sie verbinden. Des Weiteren werden drei Rechner (A, B, C)
samt ihrer IP-Adresse angezeigt.
Am Beispiel des sendenden Host A möchte ich die
zwei Möglichkeiten der Datenversendung, die bereits
in der Einleitung besprochen wurden, betrachten.
Router 1 erkennt, dass die Datenpakete nicht an ihn
gerichtet sind und weitergeleitet werden müssen. Ob
er die Daten dabei direkt ausliefern kann oder an ein
anderen Router schickt, entscheidet er wiederum anhand des Netzwerk-Präfixes. Im Beispiel stimmen die
Präfixe von Host C und den Netzen, an die Router 1
angeschlossen ist, nicht überein. Aus diesem Grund
muss ein weiterer Zwischenpunkt gefunden werden,
der mittels direkter Zustellung erreicht werden kann.
Dies ist in der Darstellung der Router 2, der eine
Schnittstelle mit Router 1 gemeinsam hat. Nun haben
die Datenpakete einen Router erreicht, bei dem das
Netzwerk-Präfix mit dem des Ziels übereinstimmt.
Router 2 kann nun die Daten direkt ausliefern.
Gibt es in dem Netz keinen Rechner mit der gesuchten IP-Adresse, sendet der Router eine Nachricht
zurück zur Quelle, die besagt das der Host nicht erreichbar ist.
Die vorangegangenen Absätze haben nur einen
sehr groben Überblick darüber gegeben, wie und auf
welcher Grundlage ein Router seine Entscheidungen
trifft, wie mit zu versendenden Daten weiter zu verfahren ist. Im weiteren Verlauf soll daher näher auf
diese Fragen eingegangen werden.
3.3.1.1. Direkte Zustellung
Wie bereits erwähnt, handelt es sich um direkte Zustellung, wenn Quelle und Ziel im selben Netzwerk
liegen. Zwei Rechner liegen im selben Netzwerk,
wenn sie die gleiche Netzwerk-Präfix besitzen. Da es
sich im Beispiel um ein Klasse-B-Netzwerk handelt,
bestimmen die ersten 16 bit der IP-Adresse den Netzwerkanteil.
Sendet Host A Daten an Host B, werden die Datagramme mit der Zieladresse versehen. A erkennt anhand des Präfixes von B (129.36), dass es einen direkten Weg zum Ziel gibt und schickt die Pakete ins
eigene Netz an den Empfänger.
3.3.1.2. Indirekte Zustellung
Um indirekte Zustellung handelt es sich, wenn Quelle
und Ziel nicht im selben Netzwerk liegen. Will, wie
im Beispiel zu sehen, Host A Daten an Host C senden,
ist dieser für ihn nicht direkt erreichbar, da Host C in
einem anderen Netzwerk liegt. Host A muss sich also
für einen Router in seinem Netz entscheiden, der die
Daten weiterleitet. In diesem Fall ist Router 1 direkt
an Netzwerk 1 angeschlossen. A sendet die Daten an
diesen Router. Dieser Vorgang funktioniert genauso
wie im Abschnitt 3.3.1.1 beschrieben.
3.3.2. IP-Routing-Algorithmus
Um welche Art der Übertragung es sich handelt,
entscheidet ein sendender Rechner anhand der IPZieladresse, die im Datagramm zu finden ist. Dabei
durchläuft jede Maschine, die IP-Pakete verschickt
oder weiterleitet, eine Verarbeitungsvorschrift, den so
genannten Routing-Algorithmus.
Wie man in Abbildung 3.6 sieht, wird zu Beginn
die Zieladresse bestimmt und überprüft, ob es einen
hostspezifischen Weg zum Empfänger gibt. Wenn ja,
wird das Paket verschickt. Ist dies nicht der Fall, richtet sich der Blick nun auf den Netzwerkanteil der
Adresse, mit der Frage, ob es sich um das eigene Netz
handelt oder ob es eine Schnittstelle zum gesuchten Ziel gibt. Können beide Möglichkeiten ausgeschlossen werden, wird zum Schluss in der RoutingTabelle überprüft, ob eine Default-Route definiert ist.
Wenn auch dies nicht zutrifft, erhält der Sender eine
ICMP-Nachricht Destination Unreachable (vgl. Abschnitt 2.3).
Anhand des Algorithmus lässt sich bereits erahnen, dass die Grundlage für sämtliche Entscheidungen über die Art und den Weg der Zustellung von IPDatenpaketen die Routing-Tabelle ist.
31
3. IP – Routing und Traceroute
Abbildung 3.5.: Beispielnetzwerk.
Abbildung 3.6.: IP-Routing-Algorithmus.
32
3.3. Statisches (Next-Hop-)Routing
Abbildung 3.7.: Routing-Tabelle.
3.3.3. Routing-Tabelle
Im weiteren Verlauf möchte ich näher auf den Inhalt
der Routing-Tabelle eingehen sowie deren Erstellung
und Modifikation. In der Abbildung 3.72 sieht man eine solche Tabelle, die mit dem Befehl netstat -r3
aufgerufen wird. Die erste Spalte zeigt das Ziel, an
welches die Pakete gesendet werden sollen, die zweite das Gateway (Router), über den sie laufen müssen.
Der erste Eintrag ist die Standardroute, also diejenige,
die gewählt wird, falls kein passender Eintrag für den
Empfänger existiert. Im Beispiel hat der Defaultrouter
die IP-Adresse 141.35.1.1, welcher, wie in der Abbildung zu sehen ist, auch für nahezu sämtliche Einträge
definiert ist. Dass diese Adresse ein Router ist, kann
man an dem gesetztem G-Flag in der nächsten Spalte
sehen.
Unter Flags können auch noch verschiedene andere
Attribute der Route festgelegt werden [Fre06]:
C Clone: Erzeugt eine neue Route, basierend auf der
Route für den Rechner, mit dem wir uns verbinden. Diese Routenart wird normalerweise für lokale Netzwerke verwendet.
W WasCloned: Eine Route, die automatisch konfiguriert wurde. Sie basiert auf einer lokalen Netzwerkroute (Clone).
Die Spalte Refs (References) gibt die Anzahl der
aktiven Verbindungen auf der Route an. Die nächste Spalte Use zeigt die Anzahl der gesendeten Pakete
und If bezeichnet das verwendete Interface.
Ich möchte jetzt noch ein paar Routen im einzelnen besprechen. Als erstes fällt die Route mit
der IP-Zieladresse 127/84 auf, die das lo0, also
das Loopback-Interface verwendet. Pakete an diese
Adresse werden innerhalb des Rechners behandelt
U Up: Die Route ist aktiv.
und verlassen diesen nicht. Das gleiche gilt auch für
H Host: Das Ziel der Route ist ein einzelner Rechner Datagramme, die an 141.35.1.41 (eigene IP-Adresse)
(Host).
geschickt werden.
In den Zeilen 4 und 7 sieht man die Zieladressen
G Gateway: Alle Daten, die an dieses Ziel gesendet für den Broadcast, 141.35.1.0 und 141.35.1.63, welwerden, werden von diesem System an ihr jewei- che sich aus der in Zeile 5 zu erkennenden Subnetzliges Ziel weitergeleitet.
maske ergeben. Pakete, die so adressiert sind, gehen
S Static: Diese Route wurde manuell konfiguriert, an alle direkt angeschlossenen Hosts. Rundrufe diedas heißt, sie wurde nicht automatisch vom Sys- nen zum Beispiel dem ARP-Protokoll dazu, dass sich
die Netzteilnehmer identifizieren. Die Frage ist nun,
tem erzeugt (siehe Abschnitt 3.3.4).
wie man solche Routing-Tabellen bei sich ändernder
2 Gekürzte Routing-Tabelle vom Server fsuj50.rz.uni-jena.de des Netztopologie wartet.
Universitätsrechenzentrums.
3 In der Abbildung wurde der Befehl netstat mit dem zusätzlichen Flag -n benutzt, um eine Auflösung der IP-Adressen in
Namen zu verhindern.
4 CIDR-Schreibweise, aufgelöst 127.0.0.1.
33
3. IP – Routing und Traceroute
3.3.4. Aufbau und Modifikation der
Routing-Tabelle
3.3.4.3. ICMP Router Discovery
Wie bereits beim ICMP Redirect gesehen, benöDa dieses Kapitel nur das statische Routing betrachtet tigt der Host auch für ICMP Router Discovery eine
und somit die Tabelle nicht dynamisch durch Proto- Defaultroute.
Zu Beginn setzt der Host eine ICMP-Routerkolle aufgebaut wird (dazu siehe Kapitel 4), gibt es
Solicitation-Nachricht
ab, was bedeutet, dass der Senprinzipiell nur drei Möglichkeiten sie zu modifizieder
um
Angabe
eines
Next-Hop-Routers
bittet. Wird
ren: manuell, mittels ICMP Redirect und ICMP Roudiese
Mitteilung
von
einem
Router
empfangen,
antter Discovery. Dabei muss man erwähnen, dass autowortet
dieser
mit
einem
ICMP
Router
Advertisement.
matisch bei der Initialisierung eines neuen Interfaces
die Loopback-Route sowie, falls vorhanden, die Rou- Er gibt damit dem Sender seine Adresse bekannt,
welche der Routing-Tabelle hinzugefügt wird. Dieser
te in das angeschlossene Netzwerk gesetzt wird.
Vorgang kann nun periodisch ablaufen, um mögliche
Veränderungen im Netz zu erkennen.
3.3.4.1. Manuell
Mit Hilfe der Befehle route add und route del 3.3.4.4. Vor- und Nachteile des statischen
lassen sich manuell Routen zur Routing-Tabelle hinAufbaus von Routing-Tabellen
zufügen oder löschen.
Aus dem vorangegangenen Abschnitt ist leicht zu erBeispiel:
kennen, dass sich das statische Routing besonders für
kleine, weitgehend veränderungsfreie Netzwerke eigroute add [-host|net] <dest-IP> [gw <gw-IP>]
net. Durch seine „Benutzerfreundlichkeit“ ist es daher
[netmask <mask>] dev <if>
noch nahezu in jedem Heimnetzwerk zu finden.
route del [-host|net] <dest-IP> [gw <gw-IP>]
Werden die Topologien größer (große LANs oder
[netmask <mask>] dev <if>
MANs), wäre es äußerst zeitaufwendig, eine manuelle
Parameter (das Aussehen der Befehlsfolge variiert Betreuung der Routing-Tabellen vorzunehmen, da die
Strukturen zu starken Änderungen unterworfen sind
je nach Betriebssystem):
und optimale Routen, wie in Abschnitt 3.2.1 gesehen,
-host|-net Direkte Route zum Host oder in ein an- teils „per Hand“ berechnet werden müssten.
Aus diesem Grund existiert mittlerweile eine Reideres Netz.
he von Möglichkeiten, die Routing-Tabellen mit Hilfe
von Protokollen dynamisch aufzubauen. Andernfalls
dest-IP Zieladresse.
hätte das Internet in den letzten Jahren nicht so ein
rasantes Wachstum erfahren.
gw-IP Adresse des Routers.
mask Subnetzmaske.
3.4. Traceroute
if Das verwendete Interface.
Das Programm Traceroute wurde 1988 von Van Jacobson entwickelt. Es dient seitdem als nützliches
3.3.4.2. ICMP Redirect
Werkzeug zu Ermittlung von Routen, die DatenpaDamit das „Routenfinden“ mittels ICMP Redirect kete vom sendenden zum empfangenden Host nehfunktioniert, ist es erforderlich, dass in der Routing- men können. Die Mehrzahl des Wortes „Routen“ wurTabelle wenigstens ein Standardweg manuell oder via de im vorangegangenen Satz nicht ohne Grund geifconfig eingetragen wurde.
braucht, da es keine Garantie dafür gibt, dass IPDer Quellhost sendet ein IP-Datagramm an Rou- Datagramme immer denselben Weg zum Empfänger
ter 1 (siehe Abbildung 2.7: R1). Dieser erkennt, dass nehmen. Und auch die Rückrichtung ist nicht garandas Paket über einen anderen Router (R2), der auch tiert: sendet Host A an Host B über eine bestimmte
direkt mit dem Sender verbunden ist, zum Ziel ge- Route ein Paket und schickt B dasselbe wieder zurück
langt und leitet es weiter. Dann schickt Router 1 ei- zu A, so ist es möglich, dass der Rückweg ein anderer
ne ICMP-Redirect-Nachricht an den Host, die besagt, als der Hinweg ist.
dass Router 2 ein günstigerer Weg zur EmpfängerDa das Programm Ping hinlänglich bekannt ist,
adresse ist. Der Host fügt die neue Route seiner Ta- könnte die Frage aufkommen, wieso man nicht diebelle hinzu.
ses mit der Record-Route-(RR-)Option (ping -r)
34
3.4. Traceroute
benutzt, um Wege aufzuzeichnen (vgl. dazu Abschnitt 1.4.2)? Ping geht dabei folgendermaßen vor:
Es sendet Echo-Request-Nachrichten an den Rechner,
der „angepingt“ wird. Auf dem Weg dorthin sind alle passierten Router durch die verwendete RecordRoute-Option angehalten, ihre IP-Adresse in das Paket einzutragen.
Der Nachteil dabei ist, dass nur Platz für neun
Adressen besteht. Dies war in den Anfangszeiten des
Internets völlig ausreichend, ist aber bei den heutigen Netzdimensionen nicht mehr zu gebrauchen.
Des Weiteren geht die aufgezeichnete Route verloren,
wenn der Zielrechner nicht zu erreichen ist, da in diesem Fall kein Paket zurück läuft. Ein weiterer Grund
gegen den Einsatz von Ping ist der, dass die Router,
die auf dem Weg von der Quelle zum Ziel liegen, die
Record-Route-Option unterstützen müssen. Andernfalls tragen diese ihre Adressen nicht in das gesendete
Paket ein.
3.4.1. Funktionsweise von
Traceroute
Traceroute basiert auf dem Versand von IPDatagrammen und macht sich dabei das Time-ToLive-Feld (TTL) im IP-Header (siehe Abbildung 1.2)
zunutze.
Das TTL-Feld wird üblicherweise dazu genutzt, IPPakete mit einer Lebensdauer zu versehen. Dazu initialisiert man den TTL der zu verschickenden Pakete
mit einem bestimmten Wert5 . Auf dem Weg vom Sender zum Empfänger verringert jeder passierte Router
diesen Wert um 1, bis das Paket am Ziel ankommt
oder der TTL-Wert 0 ist. In diesem Fall sendet der aktuelle Router eine Time-Exceeded-Nachricht an den
Sender und verwirft das Datagramm.
Dieses Verhalten der IP-Datagramme macht sich
nun Traceroute zunutze. Es verschickt Pakete mit
TTL=1 in Richtung Ziel. Erreichen diese Pakete den
ersten Router, dekrementiert dieser die TTL auf 0
und verwirft diese Datagramme. Dabei werden TimeExceeded-Nachrichten zurück zum Empfänger gesandt, in welchen der erste Router seine IP-Adresse
eingetragen und somit sich für den sendenden Host
identifiziert hat. Nun sendet Traceroute IP-Pakete mit
TTL=2. Diese passieren den bereits erkannten Router und erreichen den nächsten mit einer TTL von 1.
Dort geschieht dasselbe wie im ersten Fall: die Pakete
werden verworfen und eine ICMP-Nachricht mit der
gesuchten IP-Adresse zurückgeschickt. Daraus kann
5 Je nach Implementierung liegt dieser Wert üblicherweise zwischen 255 und 64.
man allgemein ableiten, dass das Programm Datagramme mit TTL=n verschickt, um den n-ten Router
auf dem Weg von der Quelle bis zum Empfänger zu
identifizieren.
Aber wie erkennt Traceroute, wann das Ziel
erreicht ist? Der Endrechner verringert zwar die
TTL auf 0, verschickt aber keine Time-ExceededNachricht, da das Paket ja „rechtzeitig“ angekommen
ist.
Um den empfangenden Host zu erkennen, macht
sich die Software den Fakt zu nutze, dass üblicherweise auf Rechnern Ports mit sehr hoher Nummer
nicht offen sind. Aus diesem Grund werden in den IPDatagramme UDP-Pakete an eine Portnummer größer 30000 verschickt. Erreichen diese das Ziel und
treffen auf einen geschlossenen Port, wird eine PortUnreachable-Nachricht an die Quelle gesendet.
Somit weiß Traceroute, dass die Routenverfolgung
beendet ist. In Abbildung 3.8 [Lin06] ist die Funktionsweisen noch einmal graphisch veranschaulicht.
3.4.2. Ausgabe von Traceroute
Abbildung 3.9 stellt beispielhaft die Ausgabe des Programms Traceroute unter Linux dar. Wie man erkennen kann, wird das Programm mit dem Befehl
traceroute <destination> aufgerufen.
Hier wurde eine Routenverfolgung vom Host
fsuj50.rz.uni-jena.de zu google.de aufgezeichnet. Die
vierte Zeile gibt den Namen des Ziels und den der
Quelle an, maximalen TTL-Wert (30 hops max) und
in der fünften Zeile die Paketgröße6 . Die nachfolgende Ausgabe zeigt in der ersten Spalte den TTL-Wert,
dann den Namen und/oder die IP-Adresse des Routers
und in den letzten drei Spalten stehen Zeitangaben in
Millisekunden.
Daraus folgt, dass Traceroute immer drei Datagramme je TTL-Wert Richtung Ziel verschickt. Durch
diese Redundanz soll vermieden werden, dass die
Identifizierung eines Routers allein von einem gesendeten Paket abhängt.
Hier sind die Round-Trip-Zeiten angegeben, also
die Zeiten vom Senden des Datagramms bis zum Eintreffen der ICMP-Nachricht. Erreicht diese Nachricht
nicht innerhalb von 5 s die Quelle, gilt das Paket als
verloren und das nächste wird gesendet7 . In der Ausgabe macht sich das durch ein (*) bemerkbar. Dies
6 Die Maximum Transfer Unit (MTU) gibt die maximale Paketgröße in Bytes an.
7 In der Abbildung 3.9 gibt es eine Besonderheit bei der TTL=17.
Nach dem ersten gesendeten und zurückgelaufenen Datagramm
wurden die letzten beiden über einen anderen Router gelenkt.
35
3. IP – Routing und Traceroute
Abbildung 3.8.: Funktionsweise von Traceroute.
Abbildung 3.9.: Ausgabe von Traceroute.
36
3.5. Zusammenfassung
geschieht solange, bis entweder das Ziel oder der maximale TTL-Wert erreicht ist.
3.4.3. Anwendungsmöglichkeiten
von Traceroute
Hauptsächlich wird Traceroute von Netzwerkadministratoren als Diagnosewerkzeug genutzt. Es dient
dort zur Überprüfung der eingesetzten Routingtabelle
und zum Aufspüren von Routingfehlern.
Als weiteres Beispiel sei hier eine Videokonferenzschaltung genannt, bei der die Teilnehmer starke Bildverzögerungen feststellen. Mit Hilfe von Traceroute
ist es möglich, anhand der Round-Trip-Zeiten zu ermitteln, welcher Router auf dem Weg zur anderen
Endstelle diese Probleme verursacht.
Als abschließende Möglichkeit, das Programm zu
verwenden, sei noch erwähnt, dass Traceroute auch
dazu eingesetzt werden kann, Firewalls zu identifizieren.
3.5. Zusammenfassung
Dieses Kapitel hat einen grundlegenden Überblick
über das IP Routing gegeben. Es soll ermöglichen,
sich mit dem Thema vertraut zu machen, ohne sich
in dessen Detailreichtum völlig zu verlieren. Aus diesem Grund wurden Einzelheiten ausgelassen oder nur
angerissen.
Des Weiteren möchte ich erwähnen, dass das statische Routing heutzutage seine Anwendung nur noch
in kleinen, leicht zu wartenden Netzwerken findet und
in größeren Topologien durch eine Vielzahl von dynamischen Routing-Algorithmen ersetzt wurde, von
denen einige im folgenden Kapitel beschrieben werden. Trotzdem eignet es sich im besonderen dazu, die
Entwicklung von Verfahren zum Routen von Paketen,
sowie die Erstellung von Routing-Tabellen zu erklären.
37
4. Dynamic Routing: RIP, OSPF, BGP
Marco Swiercy
4.1. Einführung
che er in die Routingtabelle einträgt. Stellt der Routing Daemon fest, dass eine Verbindung abgebrochen
Dynamic Routing bezeichnet die Wegewahl im Netz- ist (durch was auch immer: Leitungsdefekt, Routerwerk, bei der nicht am Startknoten der Weg zum Ziel- defekt, . . . ), dann kann er betroffene Routen aus der
knoten mit allen Zwischenstationen bekannt ist, son- Routingtabelle löschen und alternative Routen einfüdern jeder Knoten dynamisch entscheidet, zu wel- gen, um so das Problem zu umgehen.
In einem System wie dem Internet werden mehrere
chem Nachbarknoten er sein erhaltenes Paket weiterschickt. Sobald das Netzwerk größer wird oder Al- verschiedene Routing-Protokolle verwendet. Das Internativrouten entstehen, spielt Dynamic Routing eine ternet ist als eine Menge von Autonomen Systemen
(Autonomous System, AS) organisiert, wobei jedes
große Rolle.
Dafür sind in der TCP/IP-Protokoll-Familie ver- einzelne eine eigene administrative Verwaltung hat.
schiedene Protokolle implementiert: das Routing In- Große Organisationen wie Universitäten oder große
formation Protocol (RIP), Open Shortest Path First Firmen stellen meist ein solches AS dar.
Jedes AS kann ein Routing-Protokoll wählen, mit
(OSPF), oder das Border Gateway Protocol (BGP),
dem die Router innerhalb dieses AS kommunizieum nur einige zu nennen.
ren. Dieses Protokoll heißt Interior Gateway Protocol
(IGP) oder Intradomain Routing Protocol. Die bekanntesten IGPs sind RIP und OSPF.
4.2. Dynamic Routing
Verschiedene Routing-Protokolle, so genannte Exterior Gateway Protocols (EGP), werden für die
Dynamic Routing tritt immer dann auf, wenn RouKommunikation zwischen verschiedenen AS benutzt.
ter mit benachbarten Routern Informationen darüber
Ein neueres Exemplar dieser Protokollklasse ist das
austauschen, mit welchem Netzwerk jeder momentan
Border Gateway Protocol (BGP).
verbunden ist. Der Prozess, der auf dem Router läuft
und auf dem das Routing Protokoll läuft, welches mit
den benachbarten Routern kommuniziert, wird Routing Daemon genannt. Dieser Routing Daemon aktua- 4.3. Routing Information
lisiert die Routing-Tabelle des Kernels anhand von
Protocol (RIP)
Information, die er von den Nachbarroutern erhalten
hat.
Das etwas überholte RIP ist ein typisches
Die Verwendung von Dynamic Routing ändert Distanzvektor-Protokoll (Distance Vector Protocol),
nicht die Art und Weise, wie der Kernel das Routing welches im RFC 1058 [Hed88] spezifiziert wurde.
auf dem IP-Layer gestaltet. Der Kernel sucht nach wie
vor in seiner Routingtabelle, sucht nach Hostrouten,
Netzwerkrouten und Defaultrouten (Abbildung 4.1, 4.3.1. Nachrichtenformat
für Details siehe Abschnitt 3.3.2). Was sich ändert, ist
die Information, die in den Routingtabellen abgelegt RIP-Nachrichten werden in UDP-Datagrammen überwird – sie werden vom Routing Daemon dynamisch tragen. Die Kapselung erfolgt wie in Abbildung 4.2 zu
hinzugefügt und gelöscht, so wie sich die Routen über sehen.
die Zeit ändern. Findet der Routing Daemon mehrere
Abbildung 4.3 zeigt das Format der RIP-Nachricht.
verschiedene Routen zum gleichen Ziel, entscheidet Command ist eine Zahl zwischen 1 und 6. Ein Eintrag
der Routing Daemon, welche die beste ist und wel- von 1 im Command-Feld ist ein Request und 2 ein
39
4. Dynamic Routing: RIP, OSPF, BGP
routing
daemon
route
command
netstat
command
UDP
TCP
ICMP
MP s
IC irect
d
re
routing
table
JA
unser
packet ?
NEIN
IP output:
berechne
‚next hop‘
a
forw
rd
gram
data
source routing
process IP options
IP input queue
IP Layer
network interfaces
Abbildung 4.1.: Übersicht des Routing-Vorgangs.
Reply. 3 und 4 zählen als veraltet. 5 ist ein Poll und 6
den sind und schickt an jedes ein Request-Paket,
der entsprechende Poll-Reply.
in dem er jeden Nachbarrouter auffordert, seine
Der Version-Eintrag ist überlicherweise 1 oder 2
gesamte Routing Table zurückzusenden. Dieser
für RIP Version 1 bzw. RIP Version 2. Die folgenRequest wird per Broadcast gesendet, falls dies
den 20 Bytes spezifizieren die Address Family, die
das Netzwerk unterstützt. Dieses Request-Paket
für IPv4-Adressen immer auf 2 steht, eine IP-Adresse
ist ein spezielles Paket: Command ist 1, Address
und eine mit dieser Adresse assoziierten Metric.
Family ist 0 und Metric ist 16. So wird die geBis zu 25 Routen können in einer RIP-Nachricht
samte Tabelle abgefragt.
versendet (advertised) werden, die alle dieses 20 BFormat haben. Die Grenze von 25 Routen hält die Request erhalten Wenn der Request von der Art
ist wie oben beschrieben ist, wird die gesamGesamtgröße einer RIP-Nachricht (25 · 20 + 4 = 504)
te Routing-Tabelle an den nachfragenden Roukleiner als 512 B. Es ist möglich, dass diese 25 Plätze
ter gesendet. Ansonsten wird der Request verarnicht ausreichen, um die gesamte Routing-Tabelle zu
beitet: Wenn „wir“ eine Route zur nachgefragten
übertragen. Dann werden mehrere RIP-Nachrichten
Adresse haben, dann setzen wir die Metric auf
versendet.
unseren Wert, ansonsten auf 16 (16 ist ein spe-
Initialisierung Wenn der Daemon startet, stellt er
alle Interfaces zusammen, die mit ihm verbun-
command (1-6)
version (1)
address family (2)
(must be zero)
(must be zero)
32-bit IP address
(must be zero)
(must be zero)
IP datagram
Metric (1-16)
UDP datagram
(up to 24 more routes, with same format as previous 20 bytes)
IP Header
UDP Header
RIP message
Abbildung 4.2.: RIP-Einkapselung.
40
Abbildung 4.3.: RIP-Header.
20 bytes
4.3.2. Standard-Operationen
4.4. Open Shortest Path First (OSPF)
zieller Infinity-Wert und bedeutet, dass wir keine
Route zu der nachgefragten IP-Adresse haben).
Zum Schluss wird die Antwort zurückgesandt.
Reply erhalten Die Antwort wird ausgewertet und
darf die Routing-Tabelle aktualisieren. Neue
Einträge können hinzugefügt und gelöscht oder
bestehende Einträge modifiziert werden. Befindet sich in der Antwort eine Route zu einer IPAdresse, die wir auch kennen, ersetzen wir unsere alte Metric mit der aus der Antwort + 1, wenn
dieser Wert kleiner ist als die uns bekannte Metric. Routen aus der Nachricht, die wir nicht kennen, werden unserer Routingtabelle hinzugefügt.
Regelmäßige Updates Alle 30 s wird die gesamte
Routing-Tabelle zu jedem Nachbarrouter gesendet. Sie wird entweder per Broadcast (Ethernet)
oder via Punkt-zu-Punkt-Verbindung übertragen.
Ausgelöste Updates (Triggered Updates)
Diese treten auf, wenn sich die Metric für eine
Route ändert. Dann muss nicht die gesamte
Routingtabelle gesendet werden, sondern nur
die Einträge, die sich änderten.
Abbildung 4.4.: RIP-Metrics.
4.3.4. Nachteile
Jede Route hat weiterhin noch einen mit ihr assoziierten Timeout. Findet das System, auf dem RIP
läuft, eine Route, die 3 min kein Update erhielt, dann
wird die Metric dieser Route auf 16 gesetzt und somit fürs Löschen markiert. Das heißt also, dass wir 6
dieser oben erwähnten 30 s-Updates von dem Router,
der diese Route verkündet, nicht bekommen haben.
Die endgültige Löschung der Route wird dann noch
einmal um 60 s verzögert.
RIP kennt keine Subnetz-Adressierung. Wenn zum
Beispiel eine normal 16 bit lange Host-ID größer Null
ist, dann weiß RIP nicht, ob dieser Nicht-Null-Anteil
eine Subnet-ID ist oder ob die IP-Adresse die komplette Host-Adresse ist.
Ein weiterer Schwachpunkt von RIP ist die sehr
hohe Konvergenzzeit. Das ist die Zeit, die das Netzwerk benötigt, um sich nach einer Topologieänderung
(Disconnects, neue Knoten, . . . ) wieder zu stabilisieren. Der Zustand wird als stabil bezeichnet, wenn
alle Knoten wieder im Netzwerk einen homogenen
4.3.3. Metrics
„Wissensstand“ über das Gesamtnetzwerk haben. Bei
Die vom RIP verwendete Metric ist der Hop-Count. RIP verbreitet sich eine Information, beispielsweise
Der Hop-Count zu allen direkt verbundenen Inter- über den Ausfall eines Routers, sehr langsam. Bei eifaces beträgt 1.
nem RIP-basierten Netzwerk maximaler Größe, also
Beispiel (siehe Abbildung 4.4): B sendet A eine 15 Hops, kann die Konvergenzzeit bis zu 7.5 min beRoute nach D mit Metric 2, A trägt diese Route in tragen, wenn wir davon ausgehen, dass das reguläre
seine Routingtabelle ein mit einer Metric von 3.
Update alle 30 s erfolgt.
Dadurch, dass jeder Router seine Routingtabelle
an seine Nachbarn sendet, kann eine Route zu jedem
Netzwerk innerhalb des AS (Autonomes System, da4.4. Open Shortest Path First
zu später mehr) bestimmt werden. Gibt es mehrere
(OSPF)
mögliche Pfade in dem AS zu einem Zielrouter, dann
wählt der Startrouter den Pfad, der mit dem niedrigsten Hop-Count assoziiert ist und ignoriert alle übrigen Open Shortest Path First [Moy94] ist eine neueMöglichkeiten. Da der Hop-Count auf 15 limitiert ist, re IGP-Alternative zum RIP (Header siehe Abbildarf RIP nur in AS laufen, in denen keine zwei Router dung 4.5). Es räumt mit allen Nachteilen des RIP auf
und ist heute das dominierende Protokoll, während
mehr als 15 Hops voneinander entfernt sind.
41
4. Dynamic Routing: RIP, OSPF, BGP
Version
Type
Length
Router ID
Area ID
Checksum
AuType
Authentication
Schema zur Verfügung, das erlaubt, ein Passwort zu
spezifizieren. So wird gewährleistet, dass die eigene Routing-Tabelle nur von authentifizierten Routern
aktualisiert werden darf. Außerdem benutzt OSPF
Multicast statt Broadcast.
DATEN
Abbildung 4.5.: OSPF-Header.
RIP in der Praxis fast keine Verwendung mehr findet. Im Gegensatz zu RIP – ein Distanzvektorprotokoll (Distance Vector Protocol) – ist OSPF ein Verbindungszustandsprotokoll (Link State Protocol). Distanzvektorprotokoll bedeutet ja, dass die Nachrichten, die vom RIP versendet werden, einen Vektor
mit den Entfernungen (Hop-Counts) enthalten. Jeder
Router hält seine Routingtabelle anhand dieser Vektoren, die er von seinen Nachbarn bekommt, so auf den
neuesten Stand.
In einem Verbindungszustandsprotokoll tauschen
die Router keine Entfernungen ihrer Nachbarn miteinander aus. Stattdessen testet jeder Router aktiv
den Status seiner Verbindung zu jedem Nachbarn.
Diese Informationen, die er dann all seinen Nachbarn schickt, verbreiteten sich so durch das gesamte
AS. Jeder Router baut sich mit Hilfe der Link-StateInformationen eine komplette Routingtabelle auf, die
die Form eines Baums hat, an dessen Wurzel er selbst
steht (vgl. Algorithmus S HORTEST PATH F IRST von
Edsger W. Dijkstra). In praktischer Hinsicht haben
Verbindungszustandsprotokolle gegenüber Distanzvektorprotokollen den entscheidenden Vorteil, schneller zu konvergieren.
Davon abgesehen, dass OSPF ein Verbindungszustandsprotokoll und kein Distanzvektorprotokoll ist,
hat es noch einige entscheidende Vorteile gegenüber
dem RIP.
Der Router übermittelt nur Änderungen in seiner Routing-Tabelle per Multicast an Nachbarn.
Zur Verbreitung der Änderungen werden Link-StateAdvertisement-Nachrichten verwendet. Jedem Interface ist ein dimensionsloser Kostenwert zugewiesen.
Gibt es mehrere gleichkostende Routen zu einem Ziel,
verteilt OSPF den Datenverkehr gleichmäßig auf diese Routen (Load Balancing). Des Weiteren unterstützt OSPF Subnetting (vgl. Abschnitt 1.5.4). Mit jeder Route wird eine Subnetz-Maske assoziiert. Punktzu-Punkt-Verbindungen brauchen bei OSPF keine
IP-Adresse an jedem Ende. Dies kann IP-Adressen
sparen. OSPF stellt ein einfaches Authentifikations-
42
4.5. Autonome Systeme und
das Border Gateway
Protocol
Ein Autonomes System (AS) ist ein IP-Netz, das unter
einer gemeinsamen administrativen Verwaltung steht,
z. B. durch eine Firma, Universität oder InternetProvider, und selbst wiederum aus Teilnetzen bestehen kann. Jedes AS hat eindeutige AS-Nummer
(ASN, 16 bit Integer, geplant ist 32 bit). Verwaltet
wird diese durch die Internet Assigned Numbers Authority (IANA). Die weitere Zuteilung erfolgt durch
eine der Regional Internet Registries (RIR), für Europa ist das das RIPE NCC.
BGP ist ein Exterior Gateway Protocol zur Kommunikation zwischen Routern, die verschiedenen Autonomen Systemen angehören. BGP ist ein Ersatz des
älteren EGP, welches auf dem ARPANET benutzt
wurde.
Ein BGP-System tauscht Information über seine
Erreichbarkeit zu anderen Netzwerken mit anderen
BGP-Systemen aus. Diese Information schließt die
vollen Pfade der autonomen Systeme ein, also alle
AS, die die Daten auf dem Weg zu diesen Netzwerken
passieren müssen. Aus dieser Information lässt sich
ein Graph erzeugen, mit dem es zum Beispiel möglich ist, Schleifen zu verhindern (z. B.: Bin ich selbst
als Knoten in einem Pfad erhalten? Wenn ja? – Schleife!).
Ein IP-Datagramm lässt sich – bezogen auf autonome Systeme – zunächst danach klassifizieren, ob
es entweder lokalen Traffic oder Transit-Traffic hat.
Autonome Systeme können demnach folgendermaßen kategorisiert werden [Wik06a]:
Stub-AS sind an genau ein anderes AS geschlossen
(nur lokaler Traffic).
Multihomed-Stub-AS sind durch mehrere Links
mit einem anderen AS verbunden (nur lokaler
Traffic, höhere Ausfallsicherheit).
Multihomed-AS sind an mehrere andere AS
geschlossen (nur lokaler Traffic, verweigert
Transit-Traffic).
4.6. Zusammenfassung
Transit-AS sind an mehrere andere AS geschlossen
(lokaler Traffic und Transit-Traffic).
4.6. Zusammenfassung
Man kann Routingprotokolle grundsätzlich in zwei
verschiedene Protokolltypen einteilen, Interior Gateway Protocols (IGP) zur Kommunikation zwischen
Routern innerhalb eines einzelnen Autonomen Systems und Exterior Gateway Protocols (EGP) zur
Kommunikation zwischen Routern aus mindestens
zwei verschiedenen Autonomen Systemen. Das Routing Information Protocol, das zu der Zeit, in der
Stevens’ Buch [Ste94] entstand, das dominierende
IGP war, ist mittlerweile vom stärkeren Open Shortest Path First weitgehend abgelöst worden. OSPF
räumt mit den Nachteilen von RIP auf, wie der Beschränkung auf 15 Hops. Das dominierende EGP ist
das Border Gateway Protocol (BGP), welches durchschnittlich kleinere Konvergenzzeiten hat und Schleifen verhindert, da es komplette Routen vom Start zum
Ziel und nicht nur Verbindungsinformationen über die
Nachbarrouter überträgt.
43
Teil II.
Transportschicht
5. User Datagram Protocol (UDP)
Matthias Pischeli
5.1. Einleitung
nen kann, ob das vom Server gesendete Datenpaket
fehlerhaft ist oder nicht.
UDP verwendet zur Datenübermittlung vom QuellEinfach, aber sehr effektiv – so oder so ähnlich könnzum
Zielrechner Ports. Ports werden nummerisch anten 1977 die Überlegungen zum UDP, dem User Dagegeben
und können Werte zwischen 0 und 65535 antagram Protocol gelautet haben. In der Tat handelt es
nehmen.
Die Portnummern des Quell- und des Zielsich bei UDP nicht um das ideale und allumfassende
rechners
werden im Header des Datenpakets mitgeNetzwerkprotokoll, doch trotz seiner Einfachheit oder
sendet.
auch gerade deswegen findet es auch heute noch vielDie Spezifikation des Protokolls ist wie das Protofach Verwendung. Gerade in Bereichen, in denen es
koll
selbst recht dünn. Der RFC 768 [Pos80b] ist nur
um eine schnelle und effektive Datenübertragung an3
Seiten
stark.
kommt, bei der eine „gesicherte“ Übertragung der Daten zweitrangig ist, kommt UDP auch noch heute zum
Einsatz. Gerade im Bereich Mediastreaming (Audiound Video) oder bei VoIP ist UDP oftmals das geeig- 5.2.2. Header
nete Protokoll zu schnellen Datenübertragung. Hier
Ein UDP-Datenpaket (auch Datagramm genannt) begeht es meist darum, die Daten kontinuierlich vom
steht aus zwei Teilen, dem eigentlichen Datenteil,
Server zum Client zu schicken. Eine Fehlerbehandder die zu versendenden Daten enthält, sowie einem
lung wie bei TCP wäre hierbei nur hinderlich. Die EiHeader, dessen Aufbau in Bild 5.1 schematisch dargegenschaften, der Aufbau und die Funktionsweise von
stellt ist. Der Header besteht aus 4 Datenfeldern: EiUDP sollen im weiteren Verlauf dieses Kapitels benem 16 bit langen Quellport, dem gleichlangen Zielschrieben werden. Des Weiteren werden in einem geport, einer Längenangabe (ebenfalls 16 bit lang) und
sonderten Abschnitt Experimente vorgestellt, die im
der schon angesprochenen 16 bit-Prüfsumme.
zugehörigen Seminarvortrag besprochen wurden.
Der Quellport gibt an, von welcher Portnummer
aus der Hostrechner sein Datenpaket versendet hat.
Aufgrund der Tatsache, dass es sich bei UDP um ein
5.2. UDP im Detail
verbindungsloses Protokoll handelt, ist der Quellport
optional und kann auch den Wert 0 erhalten. Der Ziel5.2.1. Eigenschaften
port ist das Gegenstück zum Quellport. Er gibt an,
Wie in der Einleitung angedeutet, handelt es sich bei an welchen Prozess das Datenpaket gesendet werden
UDP um ein einfaches Protokoll zur Datenübertra- soll. Dieser Wert ist jedoch nicht optional. Das Längung in Netzwerken. Es ist ein verbindungsloses Pro- genfeld gibt die Länge des gesamten Datenpakets an.
tokoll, welches sich im TCP/IP-Referenzmodell in Dabei wird sowohl der Header als auch der Datender Transportschicht findet. Die Übertragung der Da- anteil gezählt. Das vierte Datenfeld, die Prüfsumme,
ten ist dabei ungesichert, das heißt, dass wenn ein ist wiederum ein optionales Datenfeld und kann den
Datenpaket bei der Datenübertragung verloren geht Wert 0 aufweisen. Wird eine Prüfsumme angegeben,
oder es fehlerhaft übertragen oder empfangen wur- wurde sie zuvor vom Host mittels des so genannten
de, gibt es keine Möglichkeit, dieses Paket fehlerfrei Pseudoheaders (Abbildung 5.2) und des Datenteils
noch mal zu erhalten oder es mittels möglichen „Re- gebildet.
paraturmaßnahmen“ wieder herzustellen. Einzig eine
Für die Datenübertragung eines UDP-Datenpakets
Fehlererkennung ist möglich. Das bedeutet, dass der wird das Internet-Protokoll (IP) verwendet. Dieses
Client mittels einer mitgesendeten Prüfsumme erken- setzt vor das UDP-Datenpaket seinen eigenen IP-
47
5. User Datagram Protocol (UDP)
Abbildung 5.1.: UDP-Header.
Abbildung 5.2.: UDP-Pseudoheader.
Header. Teile dieses IP-Headers werden nun für die
Erzeugung der Prüfsumme verwendet. Wie bereits gesagt, handelt es sich dabei um einen Pseudoheader,
der nicht übertragen wird. Die einzelnen Datenfelder
des Pseudoheaders sind: Quell- und Ziel-IP-Adresse,
ein so genanntes Nullfeld, das Protokollfeld und die
Länge. Die Quell- und Ziel-Adressen (jeweils 32 bit
lang) bezeichnen dabei die Host- und die Clientadresse der in Kommunikation befindlichen Rechner, das
Nullfeld (8 bit lang) bleibt leer, das 8 bit lange Protokollfeld gibt das Übertragungsprotokoll an (bei UDP
ist es die 17 [Int06d]) und hinter dem 16 bit langen Längenfeld verbirgt sich die Größe des UDPDatenpakets. Aus diesen Daten wird nun die Prüfsumme berechnet und in das entsprechende Feld eingetragen. Auf der Clientseite kann nun wiederum aus
diesen Daten die Prüfsumme berechnet werden und
mit der mitgesendeten Prüfsumme verglichen werden.
Bei einer korrekten Datenübertragung ist das Ergebnis der beiden Prüfsummewerte FFFF16 .
5.3. Experimente
5.3.1. Vorüberlegungen
Stevens beschreibt im Abschnitt „UDP“ seines Buches [Ste94] eine Vielzahl von Experimenten und Ver-
48
suchsaufbauten zum Testen und Erläutern der Funktionalitäten von UDP.
Insbesondere widmet er sich dem Thema des Severdesigns und eventuell auftauchenden Problemen,
die es zu beachten gilt. Stevens selbst schreibt, dass
es ihm nicht um das Programmieren des Servers geht,
sondern es sollen nur die Eigenheiten von UDP analysiert werden. Er verwendet in den Beispielen die
Programme wie sock, tcpdump oder netstat. Die
Quellen z. B. zu seinem sock-Programm sind im Anhang seines Buches abgedruckt. Weitere Experimente
und Versuche zu anderen Aspekten von UDP können
im entsprechenden Buchabschnitt nachgelesen und
leicht nachvollzogen werden. Ebenso sind die folgenden Versuche leicht verständlich und können bei entsprechender vorhandener Versuchsumgebung (wenn
auch in leicht abgewandelter Form) nachvollzogen
werden.
Zur Durchführung der Experimente und Beispiele
aus Stevens’ Buch wurden verschiedene Rechner des
Clusterverbundes RACL des Lehrstuhls für Rechnerarchitektur und -kommunikation verwendet. Hauptziel war dabei, die Netzwerkumgebung von Stevens
so gut wie möglich nachzubilden. Hauptrechner hierbei ist Kopfrechner der ipc654, der mehrere Interfaces
besitzt. Des Weiteren waren einige Client-Rechner
wie z. B. franzi oder inge involviert.
5.3.2. Experiment: Input-Queue
Das folgende Experiment soll auf eventuelle Probleme mit der Eingangswarteschlange (Input-Queue) eines UDP-Servers hinweisen. Zum Durchführen des
Experimentes wurde tcpdump auf ipc654 gestartet.
Dieser lauscht auf UDP-Pakete von beliebiger QuellIP-Adresse am Port 6666. Auf zwei weiteren Rechnern des Clusters (in diesem Falle franzi und inge)
wurde jeweils ein Client gestartet. Der Server (auf
ipc654 gestartet) wurde nach seinen Start in einen 30sekündigen Ruhezustand versetzt.
sock -s -u -v -E -R256 -r256 -P30 6666
Hierbei stehen „-s“ für Server, „-u“ für UDP, „-v“
zum Ausgeben der Client-IP-Adresse, „-E“ zum Ausgeben der Destination-IP-Adresse. Des Weiteren wird
mittels „-R256“ die Buffergröße, mit „-r256“ die
Read-Größe der Anwendung, mit „-P30“ die Zeit, die
der Server schläft, sowie die Portnummer angegeben.
In der Ruhephase des Servers wurden auf franzi
und inge die beiden entsprechenden Clients gestartet,
die nun abwechselnd jeweils 3 Pakete an den Server
auf ipc654 schicken.
5.3. Experimente
Server:
netstat -a -n -f inet
ipc654$ sock -s -u -v -E \
-R256 -r256 -P30 6666
liefert als Local Adress: *.7777. Der Stern hierbei
zeigt an, dass die lokale IP-Adresse eine Wildcard besitzt. Dies kann von Vorteil, aber auch von Nachteil
sein. Will man erreichen, dass der Port nur an einer
bestimmten IP-Adresse Daten annimmt, dann muss
dies beim Serverstart explizit angegeben werden.
Dazu wird der Server mit entsprechender IPAdresse gestartet:
Client 1:
franzi$ sock -u -v ipc654 6666
connected on 192.168.1.7.32869 to
192.168.1.1.6666
11111111111
222222222222
4444444444
Client 2:
inge$ sock -u -v ipc654 6666
connected on 192.168.1.10.32915 to
192.168.1.1.6666
3333333333
5555555555
6666666666
Ausgabe auf dem Server ipc654 :
SO_RCVBUF = 256
warning: IP_RECVDSTADDR not supported
by host
from 192.168.1.7: 11111111111
from 192.168.1.10: 3333333333333
from 192.168.1.7: 222222222222
tcpdump verzeichnet die entsprechenden Pakete
alle als gesendet. Nach der 30-sekündigen Ruhepause des Servers auf ipc654 werden dort die empfangenen Pakete angezeigt. Allerdings fällt auf, dass hierbei
nicht alle Paket vom Server empfangen wurden. Dies
ist so zu erklären, dass der Server zwar alle Pakete
empfangen hat, diese aber aufgrund der Ruhepause in
eine Warteschlange „geparkt“ hat. Das nun nicht alle Pakete als empfangen angegeben werden, liegt daran, dass die Warteschlange nur eine begrenzte Kapazität besitzt. Ist diese voll, werden weitere Pakete nicht
mehr angenommen und vom Server abgewiesen.
5.3.3. Experiment: Restricting Local
IP Address
Bei einem UDP-Server sind die IP-Adressen für die
zu öffnenden Ports mittels einer Wildcard gesetzt.
Dies bedeutet, dass der Server an jedem lokalen Interface ein an den Port adressiertes Paket annimmt. Im
folgenden Experiment starten wir einen UDP-Server
mit Portnummer 7777.
sock -u -s 7777
Der
Eintrag
netstat:
Local
Address
des
sock -u -s 192.168.1.1 7777
Netstat liefert nun für Local Adress: 192.168.1.1
7777. Dies bedeutet, dass jedes Paket, das an den Port
gesendet wird, nur dann angenommen wird, wenn
dies an die richtige IP-Adresse gesendet wird. Andernfalls wird das Paket mittels einer ICMP-PortUnreachable-Nachricht abgewiesen.
Sollen nun mehrere Server mit den gleichen
Portnummern, aber unterschiedlichen lokalen IPAdressen gestartet werden, muss dem sock-Programm
die Erlaubnis erteilt werden, dies zu tun. Dazu gibt es
den Schalter „-A“, der es erlaubt, den Port mehrfach
zu benutzen. Somit kann für verscheiden Dienste dieselbe Portnummer verwendet werden.
Beispiel: (aus Stevens)
sun$ sock -u -s 140.252.1.29 8888
# for SLIP link
sun$ sock -u -s -A 140.252.13.33 8888
# for Ethernet
sun$ sock -u -s -A 127.0.0.1 8888
# for loopback interface
sun$ sock -u -s -A 140.252.13.63 8888
# for Ethernet broadcasts
sun$ sock -u -s -A 8888
# für alle weiteren Dienste (Wildcard)
Entsprechende Pakete werden von den speziellen
an den angegebenen IP-Adressen empfangen. Wird,
wie beim letzten Server, keine IP-Adresse angegeben,
dann empfängt dieser Pakete an weitere, hier nicht explizit spezifizierte Interfaces.
5.3.4. Experiment: Restricting
Foreign IP Address
Ähnlich zum vorhergehenden Experiment kann auch
die sogenannte Foreign IP Address, also die IPAdresse des Senders, eingeschränkt werden. Wird
der Server ohne jedwede Restriktion der entfernten IP-Adresse gestartet, dann zeigt der Eintrag von
netstat Foreign IP Address: *.*. Dies bedeutet,
Programmes dass eingehende UDP-Pakete von jeder Adresse/PortKombination akzeptiert werden. Auch hier kann dies
49
5. User Datagram Protocol (UDP)
in der Praxis von Nachteil sein. Einem Fremdrechner
kann die Kommunikation mit dem Server untersagt
werden oder aber es sollen nur ganz bestimmte, bekannte Rechner auf den Port zugreifen können. Auch
hierfür bietet das sock-Programm eine Möglichkeit
an. Während des Serverstarts kann mittels des Schalters „-f“ und der Angabe einer IP-Adresse und Port
der Sender eingeschränkt werden:
Beispiel:
sock -u -s -f 192.168.1.10.4444 5555
Wird der Foreign-IP-Address-Wert auf diese Weise gesetzt, dann akzeptiert der Server nur noch Pakete
von der spezifizierten IP-Adresse und dem entsprechenden Port. Als Seiteneffekt hierbei fällt beim Aufruf von netstat auf, dass ebenso die Local IP Address
automatisch gesetzt wird.
5.4. Zusammenfassung
UDP ist ein simples, aber häufig verwendetes Protokoll zur Datenübertragung. Es wird trotz seines Alters weiterhin für viele Dienste eingesetzt. Das Protokoll selbst bietet keine Fehlerbehandlung, kann jedoch aufgrund einer meist mitgelieferten Prüfsumme
Fehlererkennung ermöglichen.
Innerhalb der Serverdesigns mittels UDP gibt es einige Probleme zu beachten, z. B. bezüglich der InputQueue-Länge. Des Weiteren bietet UDP einfache,
aber effektive Mittel zu Restriktion von eingehenden
Datenpaketen mittels der Angabe der Foreign bzw.
Local IP Address.
50
6. Transmission Control Protocol (TCP) –
Interactive Data Flow
Christiane Topp
6.1. Einleitung
Jon Postel führte das Transmission Control Protocol
(TCP) im RFC 793 [Pos81c], mit folgenden Worten
ein:
The Transmission Control Protocol (TCP)
is intended for use as a highly reliable host-to-host protocol between hosts in
packet-switched computer communication
networks, and in interconnected systems of
such networks.
Es handelt sich hierbei demnach um eine Vereinbahrung darüber, auf welche Art und Weise die Kommunikation zwischen zwei Endpunkten erfolgen soll.
Dabei findet eine Kontrolle des Kommunikationsprozesses statt, d. h. die Zuverlässigkeit der Verbindung
wird überwacht. TCP ist neben UDP (Kapitel 5) in der
vierten Schicht – der Transportschicht – des ISO/OSIReferenzmodells angesiedelt. Es setzt meistens auf
dem Internet Protocol (IP) auf.
Der von höheren Schichten „heruntergereichte“
Datenstrom wird von TCP in Stücke zerlegt, bestehend aus mehreren Daten-Oktetten. Eine dieser Übertragungseinheiten, die anschließend an IP weitergeben wird, heißt Segment. Im Gegensatz zu UDP, wo
die Segmentgröße immer gleich ist, wird diese beim
Transmission Control Protocol von der TCP-Software
selbst festgelegt.
Neben dem schon erwähnten RFC 793 können u. a.
RFC 1323, RFC 1122, RFC 2581 und RFC 896 genannt werden, in denen weitere Spezifikationen zu
TCP zu finden sind [JBB92, Bra89, APS99, Nag84].
In diesem Kapitel werden die wichtigsten Eigenschaften von TCP näher erläutert. Anschließend wird der Header des TCP-Protokolls vorgestellt. Die Begriffe, die in diesem Abschnitt eingeführt werden, sind für das spätere Verständnis des
Kommunikationsmanagements mittels TCP von es-
Abbildung 6.1.: Verbindungsorientierte Kommunikation.
sentieller Bedeutung. Nachfolgend geht es um den
Datentransfer mittels TCP, wobei in diesem Kapitel
nur auf den Austausch interaktiver Daten eingegangen wird. Den Transfer großer Datenmengen, so genannter Bulk-Daten, behandelt Kapitel 8. Mehrere angeführte Experimente sollen zu einem besseren Verständnis der theoretischen Aspekte beitragen.
6.2. Eigenschaften von TCP
Das Transmission Control Protocol ist sowohl verbindungsorientiert als auch zuverlässig. Dies sind die
beiden am häufigsten hervorgehobenen Eigenschaften von TCP und unterscheiden das Protokoll eindeutig von dem ebenfalls in der Transportschicht angesiedelten verbindungslosen User Datagram Protocol
(UDP).
Verbindungsorientiert Die verbindungsorientierte Kommunikation ist in Abbildung 6.1 [Wik06h]
dargestellt. Die beiden kommunizierenden Anwendungen (z. B. Client/Server) müssen erst eine
51
6. Transmission Control Protocol (TCP) – Interactive Data Flow
Verbindung etablieren, bevor Daten gesendet werden
können. Stevens vergleicht diesen Vorgang in seinem
Buch „TCP/IP Illustrated“ mit dem Wählen einer
Telefonnummer, bevor das Gespräch mit dem Partner
am anderen Ende der Leitung beginnen kann [Ste94]
(vgl. dazu Kapitel 7). Eine Verbindung bei TCP wird
mittels eines Socket-Paars eindeutig identifiziert. Ein
Socket setzt sich zusammen aus der eindeutig vergebenen IP-Adresse eines Kommunikationspartners
und einer Portnummer. TCP stellt auf jedem Host
eine Reihe von verschiedenen Ports zur Verfügung.
Die Ports 0 bis 1023 werden auch als Well Known
Ports bezeichnet und wurden von der Internet Assigned Numbers Authority (IANA) festgelegt. Von
diesen Ports aus kommunizieren Systemprozesse
oder Programme, die von privilegierten Nutzern
ausgeführt werden [Int06c]. Die Ports zwischen 1024
und 65535, d. h. die Registered Ports bzw. Private
Ports, werden von Programmen, die von normalen
Nutzern ausgeführt werden, genutzt.
Das in der Abbildung 6.1 dargestellte Beispiel zeigt
eine TCP-Verbindung zwischen einem Server und einem Client. Beide haben eine eindeutige IP-Adresse
und kommunizieren jeweils über einen definierten
Port. Der Server nutzt in diesem Fall den Port 80, der
für das Protokoll HTTP reserviert ist. Es handelt sich
hierbei folglich um einen Webserver, der dem Client
eine Webseite zur Verfügung stellt. Der Client nutzt
einen Port größer 1023. Für eine Server-Anwendung
ist es sinnvoll, dass diese mehrere Clients bedienen
kann. Auch im aufgeführten Beispiel bestünde theoretisch die Möglichkeit, weitere Verbindungen zu verschiedenen Clients aufzubauen. Aufgrund der sich
unterscheidenden IP-Adressen bzw. Portnummern der
zusätzlichen Clients könnten die einzelnen Verbindungen klar voneinander unterschieden werden. Aufgrund der Möglichkeit der eindeutigen Identifizierung
der beiden Endpunkte spielen Broadcast und Multicast bei TCP keine Rolle.
wird mitgeteilt, sondern der korrekte Empfang von
Daten wird bestätigt. Jedoch kann mit Hilfe dieses
positiven Acknowledgements auch der Verlust eines
Paketes oder der Empfang eines fehlerhaften Paketes signalisiert werden. Zu diesem Zweck läuft beim
Sender für jedes versandte Paket ein Timer mit. Die
TCP-Software des Senders wartet sozusagen auf eine Empfangsbestätigung. Ist ein Segment im vorgegeben Zeitraum nicht bestätigt worden, wird es erneut
gesendet (vgl. hierzu Abschnitt 9.2.6). Hierfür legt
TCP die Retransmission Queue, eine Warteschlange
für eventuell erneut zu sendende Segmente, an, in der
zunächst jedes verschickte Segment als Kopie gespeichert wird. Erhält der Sender die positive Bestätigung,
wird diese Kopie aus der Warteschlange gelöscht. Ansonsten wird sie als Vorlage für das wiederholte Senden genutzt.
Um Veränderungen der Daten während der Übertragung zu registrieren und die fehlerhaften Segmente ggf. verwerfen zu können, erzeugt TCP zum
anderen eine Prüfsumme. Diese wird über den IPPseudoheader, den TCP-Header und die Daten des
Segments gebildet. Der Pseudoheader enthält weniger Informationen als der eigentliche IP-Header und
ist somit für die Berechnung der Prüfsumme besser
geeignet. Der genaue Aufbau wird in Abschnitt 6.3.2
vorgestellt. Der Empfänger des Segments errechnet
die Prüfsumme ebenfalls. Weicht das Ergebnis von
Soll ab, wird das Paket verworfen. Für dieses Segment wird kein Acknowledgement an den Sender verschickt. Somit „spekuliert“ der Empfänger auf das Timeout des mitlaufenden Timers beim Sender und auf
ein daraus resultierendes erneutes Senden des Segments.
Da IP-Datagramme unsortiert beim Empfänger
eintreffen können, liegen die TCP-Segmente, im
ISO/OSI-Referenzmodell eine Schicht weiter oben
angesiedelt, folglich ebenfalls in beliebiger Reihenfolge vor. TCP bringt die Daten wieder in die korrekte
Reihenfolge und reicht sie an die Anwendungsschicht
weiter. Möglich wird dieser Sortiervorgang durch das
Zuverlässig Im RFC 793 ist unter der Überschrift Vergeben von Nummern für jedes Segment. Diese
„Reliability“, was übersetzt „Zuverlässigkeit“ bedeu- Nummern werden als Sequenznummern bezeichnet
tet, folgender Satz zu finden: The TCP must recover und im Abschnitt 6.3 näher erläutert.
Doppelt empfangene Segmente werden von TCP
from data that is damaged, lost, duplicated, or delivered out of order by the internet communication sys- einfach verworfen. Eine gesonderte Benachrichtigung
tem.
erfolgt nicht.
Ein weiterer Mechanismus, der für die ZuverlässigUm diesen Forderungen gerecht zu werden, verfügt
TCP über mehrere Mechanismen. Zum einen wird je- keit von TCP verantwortlich ist, ist die so genanndes erhaltene Segment vom Empfänger bestätigt. Es te Flusskontrolle (Flow Control). Dies ist ein Mitwird mit einem sogenannten Acknowledgement bestä- tel, dass dem Empfänger ermöglicht, mit der Mentigt. Dabei handelt es sich um ein positives Acknow- ge an Daten, die er vom Sender erhält, umzugehen.
ledgement, d. h. nicht der Verlust von Datenpaketen Dabei übermittelt der empfangende TCP-Teilnehmer
52
6.3. TCP-Header
Die nächsten 32 bit beinhalten die Sequenznummer,
die beispielsweise das Sortieren der TCP-Segmente
beim Empfänger ermöglicht. TCP nummeriert jedes
Byte mit einer Sequenznummer. Diese reicht von 0 bis
232 − 1 und wird kontinuierlich hochgezählt. Ist der
Maximalwert erreicht, springt die Nummer zurück
auf 0. Die im Header angegebene Sequenznummer
identifiziert das erste Datenbyte des TCP-Segments
und wird auch als Segment-Sequenznummer bezeichnet. Ist jedoch das SYN-Flag gesetzt, gehört das Segment zum Verfahren des Verbindungsaufbaus. In diesem Fall enthält das Sequenznummernfeld die Initial Sequence Number (ISN), welche keinen konkreten Daten zugeordnet ist, sondern der Synchronisation
der Sequenznummern beim Verbindungsaufbau dient.
Das ersten Datenbyte hat demzufolge die Sequenznummer ISN + 1. Der Verbindungsaufbau verbraucht
also eine Sequenznummer. Gleiches gilt für den VerAbbildung 6.2.: TCP-Header.
bindungsabbau, bei dem das FIN-Flag gesetzt ist. Da
TCP eine Vollduplex-Verbindung unterstützt, bei der
gleichzeitige Kommunikation in beide Richtungen erdem Sender die Menge an Daten, die er maximal entfolgen kann, muss jeder der beiden Kommunikationsgegennehmen kann (Window). Dieser Mechanismus
partner eine Sequenznummer für seine Senderichtung
verhindert, dass ein schneller Host den gesamten Pufgenerieren.
fer des langsamen Hosts belegt.
Das auf das Sequenznummernfeld folgende Datenwort von 32 bit enthält die Acknowledgement-Number,
d. h. die Nummer zur Bestätigung des Empfangs
6.3. TCP-Header
von Datenpaketen. Dieses Feld ist nur dann gülEin Header (engl.: head = Kopf) bildet die Kopfzei- tig, wenn das ACK-Flag gesetzt ist, was bei eile, die Einleitung oder den Vorspann am Anfang ei- ner etablierten Verbindung immer zutrifft. Aufgrund
ner Datei oder eines Datenblockes. Er enthält wich- der Durchnummerierung jedes ausgetauschten Bytes
tige Informationen für den Umgang mit den eigent- lässt sich die Acknowledgement-Number leicht aus
lichen Daten. Des Weiteren wird er zur Adressie- der Sequenznummer berechnen. Sie ergibt sich aus
rung von Daten benötigt, die über ein Netzwerk trans- der Sequenznummer des letzten empfangenen Bytes
portiert werden sollen. So findet man diverse Pro- plus eins. Das heißt, die Bestätigungsnummer ist
tokolle, der verschiedenen Schichten des ISO/OSI- die Sequenznummer, die der Sender der BestätiReferenzmodells, mit einem Header. Zu nennen wä- gung als nächstes von seinem Kommunikationspartren hier beispielhaft die Protokolle IP, UDP, HTTP ner erwartet. Hervorzuheben ist die Tatsache, dass
die Acknowledgment-Number (ACK-Number) den
und auch das Transmission Control Protocol.
erfolgreichen Empfang aller Bytes bis zum Byte vor
der ACK-Nummer bestätigt. Daraus folgt, dass es
6.3.1. Aufbau
nicht möglich ist, einzelne, ausgewählte Stücke des
Jedes TCP-Segment besteht aus einem Header Datenstroms zu bestätigen. Ein kleines Beispiel aus
und ggf. den zu übermittelnden Daten. In Abbil- Stevens’ Buch soll diesen Sachverhalt verdeutlichen:
dung 6.2 [Wik06h] ist der TCP-Header dargestellt. Der Empfänger hat zunächst ein Segment mit den
Die normale Größe beträgt 20 B. Bei Angabe zusätz- Bytes 1 bis 1024 korrekt empfangen. Er bestätigt den
licher Optionen kann die Größe des Headers auf ma- Empfang mit der ACK-Number 1025. Das nächste
von ihm empfangene Segment mit der Sequenznumximal 60 B ansteigen.
Die ersten 32 bit enthalten sowohl die 16 bit Quell- mer 2049 enthält die Bytes 2049 bis 3072. OffenPortnummer als auch die 16 bit Ziel-Portnummer. Zu- sichtlich fehlt ein Segment des Datenstroms, welches
sammen mit der Quell- und Ziel-IP-Adresse bilden sie theoretisch die Bytes 1025 bis 2048 enthalten müssdas Socket-Paar, welches jede TCP-Verbindung in ei- te. Dem Empfänger ist es nun nicht möglich, das
nem Netzwerk eindeutig identifiziert.
zweite von ihm empfangene Paket zu bestätigen. Ein
53
6. Transmission Control Protocol (TCP) – Interactive Data Flow
Acknowledgement mit der ACK-Number 3073 würde gleichzeitig den Empfang des fehlenden Pakets
bestätigen. Demzufolge kann der Empfänger höchstens ein weiteres Acknowledgement mit einer ACKNumber 1025 senden.
Die nächsten 4 bit sind für die Angabe der Headerlänge notwendig. Aufgrund der optionalen Felder am
Ende des Headers ist dessen Länge nicht konstant.
Dieses Feld ermöglicht demzufolge das Ausfindigmachen des ersten Datenbits innerhalb des Segments.
Auf die 6 reservierten Bits folgen nun die verschiedenen Flags. Ist das URG-Flag gesetzt, hat der
Urgent-Pointer Gültigkeit. Dasselbe gilt für das ACKFlag. Nur wenn dieses Flag den Wert 1 annimmt,
darf die Acknowledgement-Number als Bestätigung
für alle davor versendeten Bytes interpretiert werden. Das PSH-Flag steht für Push. Die Push-Funktion
wurde definiert, um dem Nutzer die Möglichkeit einzuräumen, sicherzustellen, dass alle an TCP übermittelten Daten auch an den Empfänger übertragen werden. Sonst könnte der Fall vorliegen, dass die entsprechenden Daten noch im Sende- oder Empfangspuffer
zurückgehalten würden. Das Zurückhalten von Daten
seitens der Sender-TCP-Software hat den Zweck, Daten solange zu sammeln, bis die maximale Segmentgröße erreicht wird. Die Daten können dann mit einem großen Segment verschickt werden anstelle mittels mehrerer kleiner. Damit kann Overhead reduziert werden. Beim Empfänger bewirkt das gesetzte PSH-Flag, dass dieser nicht auf weitere Daten
wartet, sondern die empfangenen Bytes unverzüglich
an die Empfänger-Anwendung hochreicht. Das RSTFlag bewirkt ein Reset der Verbindung. Das SYN-Flag
ist beim Verbindungsaufbau einer TCP-Verbindung,
dem sogenannten Three Way Handshake, gesetzt. Hat
der Sender das Senden von Daten abgeschlossen, setzt
er das FIN-Flag.
Das 16 bit-Feld Window übermittelt die Anzahl an
Bytes, die der Empfänger gewillt ist, zu akzeptieren.
Das Festlegen der Fenstergröße dient der Realisierung der Flusskontrolle. Aufgrund der Beschränkung
dieses Headerfeldes auf 16 bit können mittels TCP
Segmente mit einer Maximalgröße von 216 − 1, also
65535 B, übertragen werden (vgl. Abschnitt 8.1.3).
Die 16 bit Checksum dient der Sicherstellung der
Korrektheit der übertragenen Daten. Sie wird aus dem
Header, dem Pseudoheader und aus den Daten des
TCP-Segments berechnet. Der Empfänger errechnet
unter Einbeziehung des Wertes des Prüfsummenfeldes ebenfalls eine Summe. Diese hat bei fehlerfreien
Segmenten den Wert null. Weicht das durch den Empfänger ermittelte Ergebnis von diesem Wert ab, wird
das Paket als fehlerhaft deklariert und verworfen.
54
Abbildung 6.3.: TCP-Pseudoheader.
Der Urgent-Pointer wird heute nicht mehr verwendet. Ursprünglich ermöglichte er, Notfalldaten zu
übermitteln, indem deren Dringlichkeit mit dem Setzen des URG-Flags explizit vermerkt wurde. Der
Urgent-Pointer an sich ist eine positive Zahl, die addiert mit der Segment-Sequenznummer die Nummer
des letzten Bytes der dringlichen Daten liefert. Der
Urgent-Pointer ist somit ein positiver Offset.
Im Option-Feld können diverse zusätzliche Optionen angegeben werden. Sie vergrößern den Header
und werden bei der Prüfsummenberechnung mit einbezogen. Die am häufigsten angegeben Option ist die
Maximum Segment Size (MSS), die die maximale Segmentgröße, die der Sender empfangen möchte, spezifiziert. Jeder der beiden Kommunikationsendpunkte spezifiziert diese Option normalerweise im ersten
Segment, welches ausgetauscht wird. Jede in diesem
Feld angegeben Option muss einem 32 bit-Wort entsprechen. Benötigt die Option weniger Platz, wird der
Rest bis zum vollen Wort mit Nullen aufgefüllt.
6.3.2. TCP-Pseudoheader
Der Pseudoheader (siehe Abbildung 6.3 [Wik06h])
wird für die Prüfsummenberechnung dem eigentlichen TCP-Header vorangestellt gedacht. Er beinhaltet die Quell- und Zieladresse sowie die Angabe des
Protokolls über eine Nummer und die Länge des TCPSegments ohne die 12 B des Pseudoheaders.
6.4. Datentransfer mittels TCP
In diesem Abschnitt geht es um den Datentransfer
mittels TCP. Stevens führt in seinem Buch eine Analyse des mittels TCP transportierten Datenstroms an.
Die Abbildungen 6.4(a) und 6.4(b) illustrieren die Ergebnisse dieser Untersuchung. Dabei wird stets zwischen Bulk-Daten und interaktiven Daten unterschieden. Unter dem Transfer von Bulk-Daten versteht
6.4. Datentransfer mittels TCP
TCP-Traffik auf Basis der übertragenen
Segmente
60%
50%
40%
30%
20%
10%
0%
bulk
interactive
(a) Segmente.
TCP-Traffik auf Basis der übertragenen
Bytes
10%
zahl der übertragenen Bytes an interaktiven Daten
macht jedoch nur 10% der Gesamtdatenmenge aus. Es
drängt sich die Schlussfolgerung auf, dass die interaktiven Datensegmente um ein Vielfaches kleiner sein
müssen als die Bulk-Datensegmente. Dies wird auch
in der von Stevens herangezogenen Studie bestätigt,
laut der etwa 90% aller Telnet- und Rlogin-Pakete weniger als 10 B Nutzdaten mitführen. Die Leitung wird
mit einer großen Menge an Overhead belastet. Im Gegensatz dazu tendieren die Bulk-Datensegmente dazu,
die maximale Segmentgröße voll auszunutzen. Das
führt zu einem schnelleren Datentransfer, wobei der
Anteil der Nutzdaten dem der Headerdaten überwiegt.
Bei TCP kommen für beide Arten von Daten unterschiedliche Algorithmen zum Einsatz. Dieses Kapitel
setzt sich mit nur einer der beiden Übertragungsmöglichkeiten von Daten auseinander – dem interaktiven
Datentransfer. Dabei wird sowohl der normale Datenfluss betrachtet, als auch die Funktionsweise und der
Nutzen von Delayed Acknowledgement und NagleAlgorithmus erläutert. Die entsprechenden Sachverhalte werden immer anhand konkreter Experimente
dargelegt.
bulk
interactive
90%
(b) Bytes.
Abbildung 6.4.: TCP-Traffic-Analyse
man die ungestörte Übertragung großer Datenmengen. Bulk-Daten sind z. B. große Dateien, die via FTP
heruntergeladen werden. Auch beim E-Mail-Verkehr
fallen Bulk-Daten an. Interaktive Daten sind immer
dort zu verzeichnen, wo der Benutzer interaktiv Befehle über eine Konsole eingibt, diese dann zu einem Server transportiert werden, dort eine Auswertung erfahren und das Resultat zurück an das Terminal
gesendet wird. Die Anwendungen telnet oder ssh
sind hier beispielhafte Vertreter.
Abbildung 6.4(a) verdeutlicht, dass die Hälfte aller TCP-Segmente Bulk-Daten enthalten, die andere
Hälfte interaktive Daten. Ein völlige konträres Bild
zeigt allerdings die Abbildung 6.4(b). Daraus wird ersichtlich, dass bei Betrachtung desselben Fakts auf
Basis der übertragenen Bytes nicht mehr eine 50/50Situation vorliegt, sondern dass sich der Datenstrom
zu 90% aus Bulk-Daten zusammensetzt. Die An-
6.4.1. Experiment: Interaktiver
Datenaustausch
Zunächst betrachten wir den Datenfluss zwischen
zwei Rechnern, die über Telnet miteinander kommunizieren. Die Telnet-Verbindung geht vom Rechner
ipc654 aus. Dort wird das interaktive Kommando ls
eingegeben, um sich den Inhalt des aktuellen Verzeichnisses anzeigen zu lassen. Der Datenstrom wird
auf dem Rechner dana am Port 23 mittels tcpdump
mitgeschnitten und am Bildschirm ausgegeben. Der
Versuchsaufbau ist in Abbildung 6.5 dargestellt.
Das Erstaunliche am Austausch interaktiver Daten ist die Tatsache, dass normalerweise jeder Tastendruck ein separates Datenpaket erzeugt. Somit entstehen TCP-Segmente, die lediglich 1 Byte Nutzda-
Abbildung 6.5.: Aufbau Experiment 1.
55
6. Transmission Control Protocol (TCP) – Interactive Data Flow
Zeichen vier Segmente erzeugt. Anschließend liefert
die Serveranwendung die angeforderten Informationen an den Client.
Neben der eben beschriebenen Variante des Datentransportes zeigt Abbildung 6.7 noch eine weitere Möglichkeit auf. In diesem Fall werden Segment 2
und Segment 3 kombiniert, d. h. die Bestätigung des
Tastendrucks wird zusammen mit dem Echo an den
Client gesendet. Das hat den Vorteil, dass ein Segment
Abbildung 6.6.: Variante 1 der Übertragung ei- eingespart wird. Außerdem werden nicht unnötig Panes Zeichens an ein Remote-System.
kete ohne Nutzdaten versendet. Diese Technik trägt
den Namen Delayed Acknowledgement und wird im
nachfolgenden Abschnitt besprochen.
6.4.2. Experiment: Delayed
Acknowledgement
Der Begriff Delayed Acknowledgement kann ins
Deutsche mit verzögerte Bestätigung übersetzt werAbbildung 6.7.: Variante 2 der Übertragung ei- den. Diese Bezeichnung trägt der Tatsache Rechnung,
nes Zeichens an ein Remote-System.
dass TCP das Acknowledgement normalerweise nicht
in dem Moment sendet, in dem es Daten erhält. Stattdessen verzögert TCP die Bestätigung in der Hofften übertragen. Empfängt der Server, in diesem Fall nung, dass noch Daten in die gleiche Richtung wie das
der Rechner dana, das eingegebene Zeichen, sendet er Acknowledgement gesendet werden müssen. Somit
prompt ein Echo desselben zum Client zurück. Die- kann das ACK zusammen mit den Daten im selben
ses wird dann am Bildschirm des Clients angezeigt. Segment übertragen werden. Abbildung 6.8 veranAbbildung 6.6 zeigt eine Möglichkeit der Kommuni- schaulicht diesen Mechanismus. Hier sind auf Clientkation der beiden Endpunkte bei der Übertragung ei- Seite zwei Delayed Acknowledgements dargestellt.
nes Zeichens. Es werden insgesamt vier Segmente er- Nach dem Erhalt des Echos entsteht eine längere Warzeugt. Aufgrund der Betätigung der Taste „l“ auf der tepause, bevor das bestätigende Paket versendet wird.
Seite des Clients wird ein TCP-Segment kreiert. Die- Die meisten Implementierungen nutzen eine 200 msses transportiert das eine Byte Nutzdaten zur Server- Verzögerung, d. h. TCP verzögert das Acknowledgeseite. Dort wird es von der TCP-Software zur Server- ment bis zu 200 ms, um abzuwarten, ob noch weitere
Anwendung hochgereicht. Außerdem wird der Emp- Daten mit dem Acknowledgement mitgesendet werfang des Segments mit einem Acknowledgement be- den können. Im hier dargestellten Fall war der Nutstätigt. Das Bestätigungspaket besteht also zu 100% zer jedoch nicht schnell genug bei der Eingabe: Die
aus Header-Informationen. Die Server-Anwendung
erzeugt ihrerseits das schon erwähnte Echo des empfangenen Zeichens. Dieses wird in ein TCP-Segment
verpackt und zum Client transportiert. Wiederum passiert hier ein Segment mit nur einem Byte Nutzdaten die Leitung. Anschließend wird der Erhalt des
Echos seitens des Clients mittels eines Acknowledgement bestätigt. Das zweite getippte Zeichen des
Befehls „ls“ würde auf dieselbe Art und Weise mit
vier Segmenten übermittelt. Der Abschluss des Befehls geschieht mit der Betätigung der Return-Taste.
Dabei werden zwei Zeichen kreiert, ein Carriage Return (CR), was den Cursor zurück auf die linke Seite manövriert, und ein Linefeed (LF), welches einen
Zeilenvorschub bewirkt. Beide Zeichen werden ge- Abbildung 6.8.: Delayed Acknowledgement auf
Client-Seite.
trennt voneinander übertragen. Auch hier werden pro
56
6.4. Datentransfer mittels TCP
Abbildung 6.9.: Aufbau Experiment 2.
Abbildung 6.10.: Datenstrom Experiment 2.
200 ms verstrichen, ohne dass erneut Daten zum Versenden bereit standen. Folglich wurde das Segment
mit dem Acknowledgement versendet. Das nächste
Zeichen der Eingabe wurde mittels eines weiteren
TCP-Segments zum Server übertragen. Der Mechanismus hat also in diesem Fall seine Wirkung verfehlt.
Auf Serverseite jedoch bewirkt das Verzögern der Bestätigung, dass ein Segment eingespart werden kann.
Die Telnet-Anwendung liefert das Echo so schnell an
die TCP-Software zurück, dass der Timer unterschritten bleibt.
6.4.3. Experimente:
Nagle-Algorithmus
In den letzten beiden Abschnitten konnten wir sehen, dass während einer Remote-Login-Verbindung
normalerweise 1 Byte Nutzdaten vom Client zum
Server übertragen wird. Dabei werden 41 B große
Pakete generiert, die einen 20 B großen IP-Header,
einen 20 B großen TCP-Header und 1 B Daten enthalten. Diese kleinen Pakete führen in LANs meist
nicht zu Problemen, können aber in Weitverkehrsnetzen zu Datenstau führen. Um diesen Umstand zu
umgehen, wurde der Nagle-Algorithmus entwickelt.
John Nagle beschreibt seinen Lösungsvorschlag im
RFC 896 [Nag84]. Der Algorithmus sieht vor, dass eine TCP-Verbindung, die noch ausstehende Daten hat,
welche bisher nicht mit einem ACK bestätigt wurden,
solange keine neuen Segmente senden darf, bis die
Bestätigung der noch ausstehenden Daten eingetroffen ist. Während der Zeit des Wartens auf die noch
fehlenden Acknowledgements sammelt TCP die anfallenden kleinen Datenmengen und versendet sie zusammen in einem gemeinsamen Segment, sobald das
ACK eintrifft. Abbildung 6.9 veranschaulicht den zu
dieser Problematik gehörenden Versuchsaufbau.
In diesem Beispiel wird von dem Rechner ipc654
über das Fakultätsrechenzentrum (FRZ) der Fakultät für Mathematik und Informatik eine Verbindung
zu einem Rechner irgendwo im Internet aufgebaut.
Der Datentransfer wird wiederum mit Hilfe des Tools
tcpdump mitgeschnitten und am Bildschirm ausgegeben. Um das Wirksamwerden des Nagle-Algorithmus
verfolgen zu können, ist es nötig, dass der Nutzer
bei diesem Experiment sehr schnell tippt. Das schnelle Tippen bewirkt, dass sich Daten beim Sender ansammeln, solange er auf die eintreffenden Acknowledgements der bereits versendeten Segmente wartet.
Dieses Aufstauen von Daten ist nur in einem Versuchsaufbau möglich, in dem die Round Trip Time,
d. h. die Umlaufzeit des Paketes, relativ hoch ist. Die
Umlaufzeit des Paketes bezeichnet die Zeitspanne, die
vom Senden des Paketes bis zum Erhalt der Bestätigung des Empfangs benötigt wird. Da der Datentransfer hier durch das Internet geleitet wird, sollten die
erforderlichen Bedingungen gegeben sein.
Abbildung 6.10 veranschaulicht den von tcpdump
mitgeschnittenen Datenstrom. In der Abbildung ist jeder Sendevorgang mit einer Zahl versehen. Im Vorgang 1 verschickt der Client ein Datenpaket, welches 1 Byte Nutzdaten transportiert. Die Anzahl der
versendeten Bytes ist in Klammern angegeben. Dieses Segment hat die Sequenznummer 5 und die
Acknowledgement-Nummer 47. Das Push-Flag ist
gesetzt. Unter Punkt 2 sieht man die Bestätigung dieses Paketes. Da es sich bei der AcknowledgementNummer immer um die um 1 erhöhte Sequenznummer des letzten Datenpaketes handelt, hat die ACKNummer folglich den Wert 6. Im weiteren Verlauf der
Übertragung ist zu erkennen, dass zu mehreren Zeitpunkten mehr als 1 Byte versendet wird. Im Vorgang 5
werden 2 B und im Vorgang 9 sogar 3 B zum Server
übertragen. Dieser antwortet ebenfalls mit Segmenten, die mehr als 1 B Nutzdaten transportieren, und
57
6. Transmission Control Protocol (TCP) – Interactive Data Flow
Abbildung 6.11.: Aufbau Experiment 3.
Abbildung 6.12.: Betätigen einer Funktionstaste.
bestätigt gleichzeitig den Empfang der Daten. Daraus folgt, dass zum Versenden einer gewissen Datenmenge im Vergleich zu einer Verbindung ohne aktivierten Nagle-Algorithmus signifikant weniger Segmente transferiert werden müssen. Zusätzlich verringert sich der Anteil an Headerdaten im Vergleich zum
Anteil der Nutzdaten. Als weiterer Vorteil des NagleAlgorithmus ist seine selbstregulierende Eigenschaft
zu sehen. Je schneller die Acknowledgements ankommen, desto schneller werden die restlichen Daten gesendet. Gleichzeitig werden in einem langsamen WAN, wo es erwünscht ist, die Anzahl kleiner
Übertragungseinheiten zu reduzieren, auch weniger
Segmente versandt.
Eine noch hervorzuhebende Auffälligkeit dieses
Datenstroms ist das getrennte Versenden der Segmente in Vorgang 10 und 11. Bei Übertragung 10 schickt
der Server nur ein Acknowledgement an den Client,
ohne jedoch, wie in den vorangegangenen Übertragungen, das Echo mit Hilfe des gleichen Segments
zu transportieren. In diesem Fall wird das 3 B große
Echo mittels eines separaten TCP-Paketes versandt.
Dieses Abweichen vom normalen Schema ist ein Zeichen dafür, dass auf Serverseite der Mechanismus
Delayed Acknowledgement aktiviert ist. Die RemoteAnwendung des Servers war nicht schnell genug mit
der Verarbeitung der gesendeten Bytes und konnte das
Echo folglich erst nach Ablauf des Timers für das Delayed Acknowledgement erzeugen. Auf Clientseite ist
diesmal kein Verzögern der Bestätigung zu verzeichnen.
58
Trotz der Vorteile, die der Nagle-Algorithmus bietet, gibt es Momente, in denen der Algorithmus abgeschaltet werden sollte. Ein Beispiel für eine solche
Situation ist in Abbildung 6.11 dargestellt.
Der Nutzer hat eine Remote-Verbindung zu einem
Server aufgebaut. Anstelle von einzelnen Buchstaben,
wie in den vorangegangenen Experimenten, betätigt
er eine Funktionstaste. In diesem Fall möchte er sich
den zuletzt eingegeben Befehl nochmals anzeigen lassen und betätigt die Taste „Pfeil nach oben“. Funktionstasten erzeugen normalerweise mehrere Bytes.
Die Funktionstaste „Pfeil nach oben“ erzeugt den in
Abbildung 6.12 dargestellten Datenstrom.
Zur Übermittlung des Befehls müssen 3 B Nutzdaten übertragen werden. Bekommt TCP die Daten Byte
für Byte, ist es jedoch möglich, dass es bei aktiviertem Nagle-Algorithmus das erste Byte sendet und die
restlichen Bytes zurückhält, solange, bis das Acknowledgement für das erste Byte empfangen wurde. Der
Server auf der anderen Seite der TCP-Verbindung generiert nach Empfang dieses ersten Bytes aber kein
Echo, da der Befehl noch nicht komplett ist. Er wartet auf die restlichen Bytes. Dies löst den DelayedAcknowledgement-Algorithmus auf dem Server aus.
Daraus folgt, dass er das Acknowledgement des ersten Bytes bis zu 200 ms verzögert. Erst nach Erhalt der vom Server verzögerten Bestätigung sendet
der Client die restlichen Bytes des erzeugten Datenstroms. Dieses Verhalten kann zu spürbaren Verzögerungen für den Nutzer führen. Abbildung 6.13 veranschaulicht den mitgeschnittenen Datentransfer dieses
Experimentes.
Abbildung 6.13.: Datenstrom Experiment 3.
7. TCP – Verbindungsaufbau und -abbau
Sascha Brose
7.1. Verbindungsaufbau
Während des Verbindungsaufbaus wird von beiden Seiten eine Initial Sequence Number gewählt und
Bevor mittels des Transmission Control Protocol in einem SYN-Segment an die Gegenseite übermit(TCP) Daten zwischen zwei Endpunkten ausge- telt. Die ISN bildet dabei einen Startpunkt, an dem
tauscht werden können, muss zunächst eine (virtuelle) die Sequenznummern der nachfolgenden Segmente
Verbindung zwischen ihnen aufgebaut werden. Da- ausgerichtet werden. Die ISN entspricht einer gedurch wird eine zuverlässige Datenübertragung zwi- wöhnlichen 32 bit langen Sequenznummer, die aus
der Menge aller möglichen Sequenznummern ausgeschen beiden Punkten möglich.
wählt wird. Die Auswahl der ISN erfolgt heutzutage
nach komplizierten Algorithmen, die das Ziel haben,
die gewählte ISN unvorhersagbar zu machen.
7.1.1. Drei-Wege-Verbindungsaufbau
An dieser Stelle soll jedoch nur auf die Methode,
die im RFC 793 [Pos81c] spezifiziert wird, näher einZur Herstellung einer TCP-Verbindung werden insge- gegangen werden. Dort wird empfohlen, einen 32 bitsamt drei Segmente zwischen den TCP-Schichten der Zähler zu implementieren, der bei Systemstart mit 0
beiden Kommunikationspartner ausgetauscht. Des- initialisiert und anschließend alle 4 ms um 1 inkrehalb wird der Verbindungsaufbau in der Literatur mentiert wird. Nach Erreichen des größtmöglichen
oft auch als Drei-Wege-Handschlag bzw. Three-Way- Wertes soll der Zähler im folgenden Schritt auf 0 zuHandshake bezeichnet.
rückgesetzt werden und danach einen neuen Zyklus
Um eine Verbindung aufzubauen, wird zunächst durchlaufen. Die ISN soll nun so gewählt werden,
von der einleitenden Seite, normalerweise der Sei- dass sie dem aktuellen Zählerstand entspricht.
te des Clients, ein Segment mit gesetztem SYN-Flag
Die Implementierung von TCP in BSD und in den
an den gewünschten Kommunikationspartner über- meisten Derivaten lehnt sich an dieses Verfahren an.
mittelt. Dieses erste Segment besteht dabei, wie alle Dort wird bei Systemstart ein Zähler mit 1 initializum Verbindungsaufbau übertragenen Segmente, nur siert und im Anschluss jede 5 ms um 64 000 erhöht.
aus einem TCP-Header und enthält noch keine Nutz- D. h. nach jeweils ungefähr 9 Stunden und 30 Minudaten. Neben dem gesetzten SYN-Flag beinhaltet es ten wird mit einem neuen Zyklus begonnen. Dies entdie clientseitige Initial Sequence Number (ISN) im spricht grob der doppelten Zeitspanne, die für einen
Sequenznummernfeld. Geht das gesendete Segment Zyklus mit dem im RFC 793 angegebenen Verfahren
beim Kommunkationspartner ein, wird dort ebenfalls benötigt wird.
ein SYN-Segment mit der serverseitigen ISN erstellt
Abbildung 7.1(a) fasst den Inhalt der drei wähund an den initiierenden Endpunkt übertragen. In die- rend des Verbindungsaufbaus zwischen den TCPsem Segement ist zusätzlich das ACK-Flag gesetzt so- Schichten der beiden Endpunkte ausgetauschten Segwie die um Eins erhöhte, clientseitige ISN im Bestä- mente noch einmal zusammen. Es ist hierbei noch zu
tigungsnummernfeld enthalten. Dies dient zur Emp- bemerken, dass die den Verbindungsaufbau initiierenfangsbestätigung des erhaltenen Segments. Um ent- de Seite in der Literatur auch als Seite, die den active
sprechend der Serverseite den Empfang des zweiten open, sowie die Gegenseite als Seite, die den passive
Segments zu bestätigen, wird der Verbindungsaufbau open durchführt, bezeichnet wird.
durch die Übermittlung eines Segments mit gesetzZum Abschluss soll der Drei-Wege-Verbindungstem ACK-Flag (ein sogenanntes ACK-Segment) und aufbau noch einmal anhand eines praktischen Beider um Eins erhöhten serverseitigen ISN im Bestäti- spieles veranschaulicht werden. Um den Austausch
gungsnummernfeld abgeschlossen.
59
7. TCP – Verbindungsaufbau und -abbau
1. Senden eines SYN-Segmentes mit ISN (C)
und Nummer des Portes zu dem Verbindung hergestellt werden soll von Seite des
Clients an Seite des Servers. (active open)
2. Serverseite antwortet mit SYN-Segment,
das die eigene ISN (S) sowie gesetztes ACKFlag und C+1 als Empfangsbestätigung des
ersten SYN-Segmentes enthält.
(passive open)
3. Clientseite bestätigt Empfang des zweiten
SYN-Segmentes durch Segment mit gesetztem ACK-Flag und S+1.
(a)
dana
ipc654
Segment 1
SYN 195909
5730
Segment 2
0910
SYN 229185
095731
59
19
K
AC
Segment 3
ACK 229815
0911
...
(b)
Abbildung 7.1.: Der Drei-Wege-Verbindungsaufbau: (a) allgemein und (b) spezielles Beispiel.
der drei für den Aufbau einer Verbindung nötigen Segmente zwischen den beiden beteiligten TCPSchichten zu verfolgen, soll vom Clusterrechner dana eine Telnet-Verbindung zur Anwendung discard
auf dem Clusterrechner ipc654 hergestellt werden.
Die von beiden Seiten übermittelten Segmente sollen
von Host ipc654 aus mittels tcpdump abgehört werden. Bei discard handelt es sich um eine Anwendung,
die alle von der TCP-Schicht an sie übergebene Daten verwirft und selbst keine Daten an die Gegenseite
übermittelt. Sie dient primär zu Testzwecken und liegt
standardmäßig an Port 9.
Zur Durchführung des Versuches wird zunächst
tcpdump mit folgendem Befehl auf ipc654 gestartet:
17:04:58 dana.56086 > ipc654.discard:
. ack 1
In der Ausgabe von tcpdump wird zunächst für
jedes abgehörte Segment in der Form Quelle.Port >
Ziel.Port angegeben, von welchem Endpunkt es abgesendet wurde und an welchen Endpunkt es gerichtet
ist. Nachfolgend ist ersichtlich, ob ein SYN- (S), FIN(F), PSH- (P) oder RST-Flag (R) im TCP-Header des
Segments gesetzt ist. Falls keines der genannten Flags
gesetzt ist, wird dies an dieser Stelle durch einen
Punkt symbolisiert. Die folgenden durch einen Doppelpunkt getrennten beiden Zahlen sowie die in Klammern stehende Zahl werden nur dargestellt, wenn im
TCP-Header des Segments eine gültige Sequenznumipc654$ sudo tcpdump tcp port 9
mer enthalten ist. Die erste Zahl entspricht dabei der
Nun kann durch das im Anschluss dargestell- Sequenznummer, während die nachfolgende der Sete Kommando die Telnet-Anwendung auf da- quenznummer plus der Anzahl der im Segment überna ausgeführt werden. Diese leitet den TCP- mittelten Nutzdatenbytes gleicht. Die eingeklammerte Zahl gibt die im Segment enthaltenen NutzdatenVerbindungsaufbau ein.
bytes an. Ist im TCP-Header das ACK-Flag gesetzt,
dana$ telnet ipc654 discard
wird von tcpdump zusätzlich „ack“ und im Anschluss
die entsprechende Bestätigungsnummer ausgegeben.
Die von tcpdump erstellte Ausgabe ist nachfol- Hier ist noch zu erwähnen, dass tcpdump standardgend in vereinfachter Form dargestellt.
mäßig nur für das erste abgehörte Segment pro Richtung die wirklichen Sequenz- und Bestätigungsnum17:04:58 dana.56086 > ipc654.discard:
mern ausgibt. Die Sequenz- und BestätigungsnumS 1959095730:1959095730(0)
mern aller weiteren Segmente werden von tcpdump
17:04:58 ipc654.discard > dana.56086:
relativ dazu angegeben. D.h. die Bestätigungsnummer
S 2291850910:2291850910(0)
ack 1959095731
im dritten Segment ist in Wirklichkeit nicht 1 wie dar-
60
7.1. Verbindungsaufbau
gestellt, sondern entspricht der ISN 2 291 850 910 von
ipc654 plus 1, also 2 291 850 911. Diese Umformatierung hat den Sinn, die Lesbarkeit der Ausgabe zu
verbessern, kann aber gegebenenfalls auch durch die
Angabe des Parameters „-S“ ausgeschaltet werden.
In Abbildung 7.1(b) ist der zeitliche Ablauf, zusammen mit den in den TCP-Headern der einzelnen Segmente gesetzten Flags sowie den enthaltenen
Bestätigungsnummern, zu obigem Beispiel graphisch
dargestellt.
7.1.2. Wiederholte Übermittlung von
SYN-Segmenten
Wurde der Drei-Wege-Handschlag zwischen den
TCP-Schichten zweier Endpunkte erfolgreich realisiert, kann im Anschluss mit dem eigentlichen Datenaustausch begonnen werden. Wie aber reagiert das
clientseitige TCP, wenn auf das gesendete SYNSegment die Antwort in Form des serverseitigen
SYN-Segments ausbleibt und die Verbindung somit
nicht etabliert werden kann? Auf diese Frage soll im
Folgenden eingegangen werden.
Das Ausbleiben des serverseitigen SYN-Segments
kann unterschiedliche Gründe haben. Eine mögliche
Ursache besteht darin, dass das clientseitige SYNSegment auf dem Weg zum Empfänger verloren gegangen ist oder dort von einer Firewall herausgefiltert
wurde. Des Weiteren ist es möglich, dass der Host des
Servers zur Zeit nicht am Netz ist oder wegen Überlastung nicht auf Anfragen reagieren kann.
In BSD und den meisten Derivaten ist TCP so implementiert, dass beim Systemstart ein Timer angestoßen wird, der alle 500 ms einen Interrupt auslöst.
Sobald ein active open durchgeführt wird, wird ein
der Verbindung zugeordneter Zähler mit 12 initialisiert und bei jedem durch den Timer hervorgerufenen
Interrupt um 1 dekrementiert. Dies passiert solange,
bis entweder das serverseitige SYN-Segment eingetroffen ist oder der Zähler den Wert 0 erreicht hat. Ist
der Zähler bei 0 angelangt, wird nochmals ein SYNSegment, welches dem ersten entspricht, abgeschickt
und danach der Zähler auf den Wert 48 gesetzt. Im
Anschluss wird wie nach der ersten Initialisierung
des Zählers mit dem Wert 12 fortgefahren. Erreicht
der Zähler wiederum den Wert 0, erfolgt der erneute
Versand eines Duplikates des ersten SYN-Segments.
Nachfolgend wird allerdings nur noch bis zu dem
Zeitpunkt gewartet, an dem seit der Übermittlung des
ersten SYN-Segments 75 s vergangen sind. Ist das serverseitige SYN-Segment bis dahin noch nicht eingegangen, wird der Verbindungsaufbau abgebrochen.
Da der Zähler, nachdem er mit dem Wert 12 initialisiert wurde, das erste Mal zwischen 0 ms und weniger als 500 ms dekrementiert wird, erfolgt der Versand
des zweiten SYN-Segments zwischen 5, 5 s und weniger als 6 s nach dem ersten. In Abbildung 7.2(a) ist
dies graphisch dargestellt. Das dritte und letzte SYNSegment wird 24 s nach dem zweiten abgeschickt,
falls bis dahin noch keine serverseitige Antwort eingetroffen ist. Diese Zeitspanne entspricht dabei genau
48 mal 500 ms.
Das gerade Beschriebene bezieht sich, wie bereits
erwähnt, auf die Implementierung in BSD und vielen davon abgeleiteten Betriebssystemen. Die Realisierungen in anderen Betriebssystemen unterscheiden
sich davon hauptsächlich nur in der Anzahl der bis
zum Abbruch des Verbindungsaufbaues gesendeten
Duplikate sowie den Sendezeitpunkten.
Zum Abschluss soll durch einen praktischen
Versuch auf die Implementierung unter Debian
GNU/Linux 3.1 eingegangen werden. Dazu soll vom
Clusterrechner ipc654 eine Telnet-Verbindung zu einem Windows-XP-Host aufgebaut und die gesendeten Segmente mittels tcpdump abgehört werden.
Dem Netzzugang des XP-Rechners ist dabei die IPAdresse 141.35.180.92 zugewiesen. Zusätzlich verfügt er über eine ZoneAlarm-Firewall, die die ankommenden SYN-Segmente herausfiltert und somit keinen Verbindungsaufbau zustande kommen lässt. Um
den Versuch durchzuführen, wird zunächst tcpdump
und daraufhin telnet auf ipc654 gestartet. Die dazu
gemachten Eingaben sowie die Ausgaben beider Programme sind im Folgenden (im Falle von tcpdump
vereinfacht) dargestellt.
ipc654$ date; telnet 141.35.180.92;
date
Do Sep 21 16:58:12 CEST 2006
Trying 141.35.180.92...
telnet: Unable to connect to remote
host: Connection timed out
Do Sep 21 17:01:21 CEST 2006
ipc654$ tcpdump -i eth1 tcp port 23
16:58:12 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
16:58:15 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
16:58:21 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
16:58:33 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
16:58:57 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
16:59:45 ipc654.49123 > 141... telnet:
S 1863008374:1863008374(0)
61
7. TCP – Verbindungsaufbau und -abbau
dana
11 * 500 Millisekunden = 5,5 Sekunden
11
10
9
8
7
6
5
4
3
2
1
Segment 4
0
Applikation
close
Segment 5
Zu einem Zeitpunkt
dieses Intervalls erfolgt Initialisierung
des entsprechenden
Zählers mit Wert 12
1 Sekunde
Zurücksetzen
des entsprechenden Zählers
auf Wert 48
(a)
...
ipc654
FIN 195909
5731
EOF an
Applikation
5732
ACK 195909
0911
FIN 229185
Applikation
close
Segment 6
Segment 7
ACK 229815
0912
(b)
Abbildung 7.2.: (a) Der 500ms-Timer und (b) Vier-Wege-Verbindungsabbau.
Anhand der Ausgaben wird ersichtlich, dass unter
Debian GNU/Linux 3.1 insgesamt 6 SYN-Segmente
abgeschickt werden, um den Verbindungsaufbau einzuleiten. Die Wartezeit, die bis zum erneuten Versand eines SYN-Segments eingehalten wird, verdoppelt sich dabei jeweils, beginnend bei 3 s. Ist 96 s nach
Übermittlung des sechsten SYN-Segments noch keine
Antwort eingetroffen, so wird der Verbindungsaufbau
189 s nach der Übertragung des ersten SYN-Segments
abgebrochen.
7.2. Verbindungsabbau
Durch den Drei-Wege-Verbindungsaufbau wird eine
logische Punkt-zu-Punkt-Verbindung im VollduplexModus aufgebaut. Dies bedeutet, dass der Datentransfer über diese Verbindung in beide Richtungen
gleichzeitig erfolgen kann. Um eine bestehende TCPVerbindung zu trennen, müssen beide Datenflussrichtungen jeweils unabhängig voneinander geschlossen
werden. Das Schließen der Verbindung in Richtung
der Gegenseite wird dabei durch den Versand eines
Segments mit gesetztem FIN-Flag (ein sogenanntes
FIN-Segment) im enthaltenen TCP-Header realisiert.
Hierbei ist wichtig zu bemerken, dass FIN-Segmente
im Unterschied zu SYN-Segmenten zusätzlich zum
TCP-Header Nutzdaten enthalten können. In Analogie zum Verbindungsaufbau führt hier diejenige Seite,
62
die den Verbindungsabbau einleitet, den active close
bzw. die Gegenseite den passive close durch.
Die vollständige Trennung einer TCP-Verbindung
kann im Allgemeinen auf zwei leicht unterschiedliche Arten erfolgen. Zum einen durch den allgemeinen Vier-Wege-Verbindungsabbau sowie zum anderen durch einen Half-Close, der im Abschnitt 7.2.2
genauer vorgestellt werden soll.
7.2.1. Allgemeiner Vier-WegeVerbindungsabbau
Zum Abbau einer etablierten TCP-Verbindung wird
in den meisten Fällen der allgemeine Vier-WegeVerbindungsabbau durchgeführt. Dabei ruft diejenige Applikation, die keine weiteren Daten übermitteln sowie empfangen möchte, die TCP-Funktion close auf. TCP sendet daraufhin ein FIN-Segment, um
die Verbindung in Richtung der Gegenseite zu schließen. Eventuell noch zum Versand ausstehende, gepufferte Nutzdaten werden hierbei vollständig vor oder
spätestens in dem FIN-Segment übertragen.
Geht das FIN-Segment in der TCP-Schicht des
Empfängers ein, wird vom dortigen TCP ein ACKSegment als Empfangsbestätigung mit der entsprechenden Bestätigungsnummer zurückgesendet. Zusätzlich informiert das Transmission Contol Protocol
die betreffende Anwendung durch die Übergabe eines
End of File (EOF), dass die Applikation der Gegenseite keine weiteren Daten an sie übermitteln möchte.
7.2. Verbindungsabbau
Als Reaktion darauf ruft sie ebenfalls close auf, um
die Schließung der noch geöffneten Übertragungsrichtung einzuleiten. Auf diesen Aufruf reagierend,
übersendet TCP seinerseits ein FIN-Segment an die
Gegenseite. Diese bestätigt durch den Versand eines
ACK-Segments mit der entsprechenden Bestätigungsnummer den Empfang des FIN-Segments und schließt
dadurch den Vier-Wege-Verbindungsabbau ab.
Abschließend soll der Vier-Wege-Verbindungsabbau nochmals anhand eines praktischen Versuches
veranschaulicht werden. Dazu soll das zum DreiWege-Verbindungsaufbau durchgeführte Beispiel aus
Abschnitt 7.1.1 fortgesetzt werden. Dort wurde bereits eine Telnet-Verbindung von dana zur Anwendung discard auf dem Host ipc654 aufgebaut. Die dabei übermittelten Segmente wurden mittels tcpdump
von ipc654 aus abgehört. Nun soll „quit“ im TelnetClient eingegeben werden. Vor dem Schließen ruft
telnet jedoch close auf und leitet so den Vier-WegeVerbindungsabbau zur Trennung der etablierten Verbindung ein.
Die Ausgabe von tcpdump ist nachfolgend vereinfacht dargestellt. Auch wurde auf die erneute Auflistung der drei zum Verbindungsaufbau ausgetauschten
Segmente verzichtet.
ipc654$ sudo tcpdump tcp port 9
...
19:10:12 dana.56086 > ipc654.discard:
F 1:1(0) ack 1
19:10:12 ipc654.discard > dana.56086:
. ack 2
19:10:12 ipc654.discard > dana.56086:
F 1:1(0)
19:10:13 dana.56086 > ipc654.discard:
. ack 2
7.2.2. Half-Close
Im Gegensatz zum allgemeinen Vier-WegeVerbindungsabbau wird beim Half-Close die
aufgebaute TCP-Verbindung zunächst nur in eine
Richtung geschlossen. Die Gegenrichtung bleibt
weiter geöffnet und wird von der Anwendung der
Gegenseite zur Datenübertragung genutzt.
Bei der Einleitung des Half-Close muss dabei die
Anwendung die TCP-Funktion shutdown aufrufen,
damit die ankommenden Daten vom TCP überhaupt
noch an sie weitergeleitet werden. Diese Funktion impliziert, dass TCP zwar durch das Senden eines FINSegments die Verbindung in Richtung der Gegenseite
schließt, jedoch die auf der Gegenrichtung dieser Verbindung ankommenden Daten noch an die Anwendung weiterleitet.
Die eine Richtung der Verbindung bleibt weiterhin solange geöffnet, bis die entsprechende Anwendung keine Daten mehr übertragen möchte und ihrerseits close aufruft. Dies führt in Analogie zum allgemeinen Vier-Wege-Verbindungsabbau zur Übertragung eines FIN-Segments an die Gegenseite. Auch
wird vom dortigen TCP wiederum ein ACK-Segment
als Bestätigung für den Empfang des FIN-Segments
zurückgesendet und dadurch der Half-Close abgeschlossen. Der eben beschriebene Sachverhalt ist in
Abbildung 7.3(a) zusätzlich in graphischer Form angegeben.
In der Praxis kommt der Half-Close im Vergleich
zum allgemeinen Vier-Wege-Verbindungsabbau relativ selten vor. Im Folgenden soll ein Anwendungsbeispiel vorgestellt werden, bei dem ein Half-Close zur
Trennung der aufgebauten TCP-Verbindung durchgeführt wird.
Der nachfolgende Befehl führt die Anwendung
sort auf dem entfernten Host ipc654 aus.
dana$ rsh ipc654 sort < data
In Abbildung 7.2(b) sind die ausgetauschten Segmente mit den tatsächlichen Sequenz- und Bestätigungsnummern sowie den gesetzten Flags nochmals
graphisch dargestellt.
Es ist noch zu erwähnen, dass gelegentlich das
zweite und dritte Segment des allgemeinen VierWege-Verbindungsabbaus vom TCP der passiveclose-Seite durch ein einziges Segment ersetzt werden. Dieses enthält dabei ein gesetztes FIN- sowie
ACK-Flag und die entsprechende Sequenz- sowie Bestätigungsnummer. In diesen Fällen werden somit nur
drei Segmente zwischen beiden Seiten ausgetauscht,
um die etablierte Verbindung vollständig zu schließen.
sort ist dabei ein Programm, das Eingaben nach Er-
halt eines End of File (EOF) sortiert zurückgibt. Im
gegebenen Fall liegt die zu sortierende Eingabe allerdings in der Datei data auf dana vor, so dass zunächst
von rsh der Aufbau einer TCP-Verbindung zu ipc654
initiiert wird. Nach dem Aufbau der Verbindung liest
der Client-rsh den Inhalt der Datei aus und übermittelt diesen über die TCP-Verbindung. Wurde der Inhalt vollständig übertragen, leitet rsh den Half-Close
ein, woraufhin das serverseitige sort ein EOF erhält
und mit dem Sortieren beginnt. Die sortierte Eingabe wird über die noch geöffnete Richtung der Verbindung an den Client-rsh zurückgegeben und von diesem anschließend im Terminal ausgegeben. Die Ab-
63
7. TCP – Verbindungsaufbau und -abbau
Client
Applikation
shutdown
Server
FIN
ack des FIN's
Applikation
read
EOF an
Applikation
Applikation
write
Host dana
Standard Ausgabe:
Terminal
rsh
Daten
ack der Daten
EOF an
Applikation
Standard Eingabe:
Datei data
FIN
Applikation
close
TCPVerbindung
Host ipc654
ack des FIN's
(a)
sort
(b)
Abbildung 7.3.: Half-Close: (a) allgemein und (b) spezielles Beispiel.
bildung 7.3(b) stellt den Ablauf dieses Anwendungsbeispiels noch einmal graphisch dar.
Durch den Einsatz des Half-Close kann der Anwendung sort vergleichsweise einfach mitgeteilt
werden, dass die Eingabe vollständig erfolgt ist.
7.3. Zustandsdiagramm
Abbildung 7.4 zeigt das TCP-Zustandsdiagramm, in
dem alle Zustände, die TCP für eine Verbindung einnehmen kann, dargestellt sind. Die normalerweise
vom TCP des Clients vollzogenen Zustandsübergänge
sind hierbei mittels dickeren, durchgezogenen Pfeilen
angedeutet, während die gestrichelten Pfeile typische
serverseitige TCP-Zustandsübergänge symbolisieren.
Der Auslöser für einen Zustandsübergang und die
eventuell durch den Übergang ausgelösten Aktionen
sind jeweils an der entsprechenden Überführungslinie
spezifiziert. Es ist jedoch an dieser Stelle zu bemerken, dass einige der hier abgebildeten Zustandsüberführungen nicht immer gültig sind. Beispielsweise ist
der Übergang vom Zustand SYN_RCVD zu LISTEN
nur erlaubt, falls SYN_RCVD über LISTEN erreicht
wurde. Auch sind in den meisten Realisierungen von
TCP nicht alle der hier abgebildeten Zustandsüberführungen implementiert. Hier kann als Beispiel das
Betriebssystem BSD erwähnt werden, dessen TCP
den Übergang von SYN_RCVD in den Zustand LISTEN gar nicht unterstützt.
64
Die hier verwendeten Zustandsbezeichnungen
stimmen mit den Namen der Zustände, die von
netstat ausgegeben werden, überein. Im Vergleich
zu den im RFC 793 auf Seite 54 spezifizierten Namen
unterscheiden sie sich jedoch.
Im Folgenden soll kurz anhand des Zustandsüberführungdiagramms nachvollzogen werden, welche
Zustände das client- sowie serverseitige TCP während
des Auf- und Abbaus einer Verbindung durchläuft.
Dazu wird angenommen, dass der Client sowohl den
active open als auch den active close durchführt.
Das clientseitige TCP befindet sich zu Beginn
im Zustand CLOSED, wohingegen das serverseitige TCP im Zustand LISTEN auf eingehende Verbindungsanfragen wartet. Der Zustand CLOSED bildet
dabei nur einen Start- bzw. Endpunkt des Diagramms
und ist in Wirklichkeit nicht realisiert. Nachdem das
TCP des Clients den Verbindungsaufbau durch die
Übermittlung eines SYN-Segments eingeleitet hat,
geht es in den Zustand SYN_SENT über. Das TCP der
Gegenseite antwortet auf den Empfang dieses Segments mit dem Versand eines eigenen SYN-Segments
und nimmt daraufhin den Zustand SYN_RCVD ein.
Geht das serverseitige SYN-Segment im TCP des
Clients ein, überträgt dieses ein ACK-Segment und
wechselt im Anschluss in den Zustand ESTABLISHED. Empfängt das serverseitige TCP dieses ACKSegment, geht es ebenfalls in diesen Zustand über.
Nachdem beide Seiten den Zustand ESTABLISHED
erreicht haben, ist der Verbindungsaufbau abgeschlos-
7.3. Zustandsdiagramm
starting point
CLOSED
ap
appl: passive open
send: <nothing>
recv: SYN
send: SYN,ACK
v
rec
pl:
ac t
ive
s en
op
d:
en
SY
N
LISTEN
app
l
sen : send
d:
SY data
N
passive open
ST
:R
recv: SYN; send: SYN,ACK
SYN_RCVD
SYN_SENT
simultaneous open
r
se n e c v : A
d: <
C
no t K
hi n
g>
data transfer state
ESTABLISHED
appl: close
send: FIN
K
,A C
YN CK
S
:
v
A
rec end:
s
recv: FIN
send: ACK
e
lo s
: c IN
l
F
p
ap nd:
se
recv: FIN
send: ACK
appl: close
send: FIN
LAST_ACK
recv: ACK
send: <nothing>
recv: FIN
send: ACK
passive close
CLOSING
recv: ACK
rec
send: <nothing>
v:
F
sen IN,
A
d:
AC CK
K
FIN_WAIT_2
active open
CLOSE_WAIT
simultaneous close
FIN_WAIT_1
appl: close
or timeout
recv: ACK
send: <nothing>
TIME_WAIT
2MSL timeout
active close
appl:
recv:
send:
indicate normal transitions for client
indicate normal transitions for server
indicate state transitions taken when application issues operation
indicate state transitions taken when segment received
indicate what is sent for this transition
Abbildung 7.4.: TCP-Zustandsüberführungsdiagramm.
65
7. TCP – Verbindungsaufbau und -abbau
sen. Daraufhin kann die Datenübertragung zwischen
Client und Server in beide Richtungen erfolgen, bis
eine der beiden Seiten den Verbindungsabbau initiiert. In diesem Beispiel soll dies, wie oben angenommen, durch den Client passieren. Das clientseitige
TCP begibt sich nach der Übermittlung eines FINSegments in den Zustand FIN_WAIT_1, wohingegen
das Transmission Control Protocol des Servers den
Empfang dieses FIN-Segments durch den Versand eines ACK-Segments bestätigt und danach in den Zustand CLOSE_WAIT wechselt. Das Eintreffen des
ACK-Segments im TCP des Clients bewirkt den dortigen Übergang in den Zustand FIN_WAIT_2. Hier
angekommen verharrt das clientseitige TCP solange,
bis es von der Serverseite ein FIN-Segment übermittelt bekommt. Erhält es dieses, quittiert es den Empfang durch die Übertragung eines ACK-Segments und
geht im Anschluss in den Zustand TIME_WAIT über.
Das TCP des Servers, das sich vor dem Versand des
FIN-Segments an die Clientseite im Zustand CLOSE_WAIT befand, wechselt nach der Übermittlung
in den Zustand LAST_ACK. Nachdem es die Empfangsbestätigung für das gesendete FIN-Segment in
Form eines ACK-Segments vom TCP des Clients erhalten hat, erfolgt der Übergang in den Endzustand
CLOSED.
Natürlich müssen die Sequenz- bzw. Bestätigungsnummern in den ausgetauschten Segmenten entsprechend gesetzt werden. Aus Gründen der Lesbarkeit
wurde darauf im obigen Beispiel nicht explizit eingegangen.
weil TCP eine Verbindung zusätzlich noch solange bekannt bleibt, bis der TIME_WAIT-Zustand für
diese Verbindung verlassen wird. Auf Verbindungen
im TIME_WAIT-Zustand eingehende FIN-Duplikate
werden somit akzeptiert und durch den nochmaligen Versand des entsprechenden ACK-Segments bestätigt. Ein empfangenes FIN-Duplikat deutet hierbei darauf hin, dass der Sender diese Verbindung
noch nicht vollständig getrennt hat, weil er das ACKSegment für das vorausgegangene FIN-Segment nicht
erhalten hat. Würde TCP nicht zunächst in den
TIME_WAIT-Zustand übergehen, könnten verspätete Segmente sowie FIN-Duplikate keiner Verbindung
mehr zugeordnet werden. Dies würde die Übermittlung eines Segments mit gesetzem RST-Flag an den
jeweiligen Sender auslösen. Im Falle eines empfangenen FIN-Duplikates, dessen Sender die entsprechende
Verbindung noch nicht vollständig getrennt hat, hätte
die Übermittlung eines RST-Segments den sofortigen
Verbindungsabbruch der noch in eine Richtung geöffneten Verbindung zur Folge. Hat das TCP für eine
Verbindung bereits den TIME_WAIT-Zustand verlassen, lösen verspätete Segmente sowie Duplikate dieser Verbindung natürlich dennoch RST-Segmente aus.
Zusätzlich ist es nicht möglich, eine neue Instanz
einer Verbindung (Inkarnation) aufzubauen, für die
sich TCP im TIME_WAIT-Zustand befindet. Dies soll
verhindern, dass verspätete Segmente der alten Instanz von TCP als Segmente der neuen Inkarnation
fehlinterpretiert werden. In den meisten Implementierungen von TCP ist dies jedoch noch strenger ausgelegt. Dort kann der lokale Port einer Verbindung,
für die TCP den TIME_WAIT-Zustand eingenommen
7.3.1. Der Zustand TIME_WAIT
hat, keiner neuen Verbindung als Endpunkt zugewieDas TCP derjenigen Seite, die den active close durch- sen werden.
Im Folgenden soll ein praktisches Beispiel durchgeführt hat, geht in den Zustand TIME_WAIT über,
nachdem es das FIN-Segment der Gegenseite durch geführt werden, mit dem auf diesen Sachverhalt nochein entsprechendes ACK-Segment bestätigt hat. Im mals eingegangen wird. Hierbei soll das Programm
Anschluss verharrt es in diesem Zustand für die zwei- sock zum Einsatz kommen, das entweder als Client
fache Maximum Segment Lifetime (MSL). Dies ist der oder auch als Server fungieren kann. Durch den nachGrund, warum der TIME_WAIT-Zustand auch gele- folgenden Aufruf wird sock zunächst als Server, dies
gentlich als 2MSL-Zustand bezeichnet wird. Die Ma- wird durch den Parameter „-s“ spezifiziert, auf dem
ximum Segment Lifetime ist dabei die angenomme- Host ipc654 an Port 6666 gestartet.
ne Maximalzeit, die ein Segment im Netzwerk verbringen kann, bevor es verworfen wird. Die MSL ipc654$ sock -s 6666
wird nicht dynamisch bestimmt, sondern bei der
Anschließend wird durch den unten angegebenen
TCP-Implementierung als Konstante vorgegeben. Im Befehl ein sock-Client auf dana ausgeführt, der sich
RFC 793 wird sie mit 2 Minuten spezifiziert, wohin- mit dem auf ipc654 laufenden sock-Server verbingegen sie in den meisten TCP-Realisierungen bei 30 s det. Der Parameter „-v“ bewirkt dabei, dass der Client
oder 60 s liegt.
nach erfolgreichem Verbindungsaufbau die EndpunkDurch das Verweilen im TIME_WAIT-Zustand te ausgibt.
kann der korrekte Abbau einer etablierten Verbindung besser gewährleistet werden. Dies ist der Fall, dana$ sock -v ipc654 6666
66
7.4. Resetsegmente
connected on 192.168.1.5.37356
to 192.168.1.1.6666
7.4.1. Verbindungsaufbau zu einem
unbesetzten Port
Empfängt TCP eine Verbindungsanfrage in Form eines SYN-Segments, in dem ein lokaler Zielport spezifiziert ist, der von keinem Server auf dem Host
abgehört wird, übermittelt es ein RST-Segment an
den Sender. Das RST-Segment bewirkt den sofortigen Abbruch des Verbindungsaufbaus. Die Sequenznummer des RST-Segments beträgt dabei 0, da zuvor
dana$ sock -b37356 ipc654 6666
keine Verbindung aufgebaut wurde und das eingehenbind() error: Address already in use
de SYN-Segment kein gesetztes ACK-Flag und damit
Durch die Fehlerausgabe ist zu erkennen, dass kei- keine gültige Bestätigungsnummer enthalten hat. Im
ne neue Verbindung zwischen Client und Server auf- RST-Segment ist zusätzlich noch das ACK-Flag gegebaut werden konnte. Der Grund dafür wird anhand setzt, um den Empfang des SYN-Segments zu bestäder im Anschluss vereinfacht dargestellten Ausgabe tigen. Die Bestätigungsnummer entspricht dabei wie
des Programms netstat, das auf dana aufgerufen üblich der um 1 erhöhten Sequenznummer des erhaltenen SYN-Segments.
wurde, ersichtlich.
Das beschriebene Verhalten soll zum Abschluss
dieses
Kapitels zusätzlich anhand eines kleinen prakdana$ netstat
tischen
Beispiels veranschaulicht werden. Dazu soll
Aktive Internetverbindungen (o. Server)
zunächst
tcpdump auf ipc654 gestartet werden, um
Prot Local A.
Foreign A.
State
die
übertragenen
Segmente abzuhören. Danach soll
tcp dana:37356 ipc654:6666 TIME_WAIT
von dana mittels telnet der Verbindungsaufbau zum
Das TCP des Clients befindet sich für die ers- unbesetzten Port 30000 auf ipc654 eingeleitet werte Verbindung noch im TIME_WAIT-Zustand. Der den. Die zur Durchführung nötigen Eingaben sowie
Port 37356 kann somit, bis TCP den TIME_WAIT- die resultierenden Ausgaben sind nachfolgend (im
Zustand für diese Verbindung verlassen hat, von da- Falle von tcpdump vereinfacht) dargestellt.
na nicht als lokaler Endpunkt einer neuen Verbindung dana$ telnet -4 ipc654 30000
verwendet werden.
Trying 192.168.1.1...
Im obigen Beispiel wird der active close von telnet: Unable to connect to remote
der Seite des Clients durchgeführt. Daraus resultiert,
host: Connection refused
dass das TCP des Clients für diese Verbindung den
TIME_WAIT-Zustand einnehmen muss. Dies stellt ipc654$ sudo tcpdump tcp port 30000
jedoch kein Problem dar, da Clients gewöhnlich nicht 13:10:53 dana.51112 > ipc654.30000:
S 2840327430:2840327430(0)
an einen bestimmten Port gebunden sind. Wird der
13:10:53
ipc654.30000
> dana.51112:
Abbau einer Verbindung hingegen vom Server einR
0:0(0)
ack
2840327431
geleitet, führt dies im Allgemeinen dazu, dass dieser seinen Dienst während der nachfolgenden zweifaDer beim Aufruf von telnet angegebene Parachen Maximum Segment Lifetime nicht mehr anbie- meter „-4“ bewirkt, dass die Übertragung der TCPten kann. Dies ist damit zu begründen, dass der Server Segmente nur über IPv4 erfolgt.
sich in dieser Zeit nicht den standardmäßigen lokalen
Port zuweisen kann.
Nun soll der Client zunächst geschlossen und danach mit dem im Anschluss dargestellten Kommando
erneut gestartet werden. Mit der Angabe des Parameters „-b37356“ wird ihm dabei wieder der gleiche lokale Port zugewiesen.
7.4.2. Verbindungsabbruch
7.4. Resetsegmente
Segmente, deren RST-Flag im enthaltenen TCPHeader gesetzt ist, werden auch als Resetsegmente
bezeichnet. Der Versand eines RST-Segments kann
dabei auf verschiedenen Gründen beruhen. Nachfolgend sollen zwei Situationen betrachtet werden, in denen es zur Übermittlung eines RST-Segments kommt.
Neben den beiden bereits bekannten Verfahren, mittels denen eine aufgebaute Verbindung getrennt werden kann (allgemeiner Vier-Wege-Verbindungsabau,
Half-Close), existiert noch eine weitere Möglichkeit
– der Verbindungsabbruch.
Erhält TCP den Befehl, eine Verbindung abzubrechen, werden alle eventuell noch zum Versand ausstehenden, gepufferten Daten verworfen und ein RSTSegment an die Gegenseite übermittelt, wodurch die-
67
7. TCP – Verbindungsaufbau und -abbau
se über den Verbindungsabbruch in Kenntnis gesetzt
wird. Nach dem Empfang dieses RST-Segments informiert das TCP der Gegenseite seine Anwendung über
den Verbindungsabbruch. Dieser ist daraufhin abgeschlossen, da kein ACK-Segment als Empfangsbestätigung für das erhaltene RST-Segment gesendet wird.
In dem zum sofortigen Abbruch der Verbindung
übertragenen RST-Segment ist die von der Gegenseite
erwartete, aktuelle Sequenznummer angegeben. Mittels eines gesetzten ACK-Flags und der entsprechenden Bestätigungsnummer kann zusätzlich noch der
Erhalt empfangener Segmente quittiert werden.
7.5. Zusammenfassung
In diesem Kapitel wurde zunächst darauf eingegangen, wie über TCP mittels eines sogenannten Drei-Wege-Handschlags eine logische Verbindung zwischen zwei Endpunkten hergestellt werden kann. Nachfolgend wurden mit dem allgemeinen
Vier-Wege-Verbindungsabbau und dem Half-Close
zwei Verfahren zur Trennung einer etablierten TCPVerbindung vorgestellt.
Anhand des Zustandsüberführungsdiagramms wurde näher auf die Zustände eingegangen, die vom TCP
eingenommen werden können. Zusätzlich wurde der
Zustand TIME_WAIT genauer analysiert, der im wesentlichen dazu dient, verspätete Segmente einer bestehenden Verbindung herauszufiltern und einen korrekten Verbindungsabbau besser zu gewährleisten.
Abschließend wurden mit dem Verbindungsaufbau
zu einem unbesetzten Port und dem Verbindungsabbruch zwei Situationen vorgestellt, in denen es zur
Übermittlung von RST-Segmenten kommt.
68
8. TCP Bulk Data Flow
Stefan Kratsch
8.1. Einführung
8.1.1. Grundlagen
Dieses Kapitel soll eine Einführung in die Aspekte
von TCP-Implementierungen bieten, welche besonders beim Versenden großer nicht-interaktiver Datenmengen zum Tragen kommen. Im Speziellen wollen wir Sliding Window, Slow Start und Congestion
Avoidance auf dem Stand von TCP Reno betrachten. Ebenso widmen wir uns den Änderungen, die
zur Vermeidung des Silly Window Syndrome und zum
Umgang mit Long Fat Pipe Networks (LFNs) dienen. Nicht betrachten werden wir die Vorhersage von
Paketverlusten auf Basis der gemessenen Round Trip
Time, wie sie in TCP Vegas betrieben wird.
Zunächst einige Grundannahmen über das Verhalten von TCP:
• TCP betrachtet Daten als einen Bytestream, und
weist jedem Byte eine Sequenznummer zu. Ein
TCP-Paket enthält dementsprechend im Header
die Nummer des ersten enthaltenen Datenbytes
und die Länge (Anzahl der Bytes).
• TCP abstrahiert auf eine direkte Verbindung zwischen Sender und Empfänger.
• TCP hat keine Information über Art und Zustand der vermittelnden Hardware, z. B. Größe
und Füllstand von Routerqueues.
• TCP erfährt nicht, ob andere Verbindungen zur
gleichen Zeit Daten übertragen.
• Insgesamt hat TCP nur eine sehr unscharfe Sicht
auf den Zustand des Netzwerks.
Der Schwerpunkt im Bereich Bulk Data Flow liegt
im möglichst effizienten Versenden ohne häufige Paketverluste. Es ist daher notwendig, dass der Sender
eine grobe Sicht der Verbindung gewinnt, sie möglichst gut auslastet, aber auch gegebenenfalls die Sen-
derate reduziert, wenn Paketverluste eine Verstopfung der Leitungen andeuten. Diese Reduzierung ist
auch notwendig im Hinblick auf die Fairness zwischen verschiedenen Verbindungen. Eine neu begonnene Übertragung in einem ausgelasteten Netzwerk
könnte sonst kaum Bandbreite bekommen.
Allerdings versuchen Implementierungen des TCP
regelmäßig, die Senderate zu erhöhen, um etwaige
frei werdende Kapazitäten zu nutzen. TCP Reno versucht dies ständig, während TCP Vegas die gemessene Round Trip Time zu Rate zieht. Trotz diverser
Techniken weiß TCP nicht, welchen Weg die Pakete
nehmen, und ob eine erhöhte oder verringerte Round
Trip Time wirklich eine gute Aussage über den Zustand der Verbindung macht. TCP Reno verwendet
die gemessene Round Trip Time nur für die Bestimmung des Timeout (Gegenstand von Kapitel 9), doch
Techniken wie Delayed Acknowledgements erschweren eine genaue Messung.
Im Gegensatz zum stop-and-wait-Ansatz wird eine Flusskontrolle in Form des Sliding Window verwendet. Dabei muss nicht jedes Paket einzeln bestätigt werden, bevor das nächste verschickt wird. Stattdessen teilt der Empfänger mit, bis zu welcher Byteposition er alle Pakete erhalten hat und wieviele der
folgenden Bytes empfangen werden können. Alle Datenbytes in diesem Bereich können also vom Sender
ohne weiteren Rückmeldungsbedarf verschickt werden. Problematisch ist diese Technik nur, wenn ein
Paket verloren ging, da darauf folgende Pakete vorerst
nicht bestätigt werden können. Es gibt jedoch auch
die Technik der Selective Acknowledgements, die eine
genauere Angabe fehlender Pakete erlaubt.
Wir werden in dieser Ausarbeitung einige Begriffe
und Abkürzungen verwenden:
• MSS = Maximum Segment Size bezeichnet die
maximale Größe eines Segments in Bytes.
• RTT = Round Trip Time bezeichnet die Zeit
zwischen dem Versenden eines Pakets und dem
Eintreffen des zugehörigen Acknowledgements.
69
8. TCP Bulk Data Flow
Receive Window
vom Empfänger angeboten
möglich zu
versenden
0
1
2
3
4
5
6
7
8
9
10
........
ungesendet
gesendet
bestätigt
noch nicht
versendbar
unbestätigt
Abbildung 8.1.: Sliding Window.
Dieser Wert kann sinnvollerweise nur für zum
ersten Mal gesendete Pakete (z. B. nicht für Retransmission) gemessen werden. Meistens wird
ein Mittelwert der bisherigen Messungen gespeichert und gewichtet mit dem aktuellen Messwert
verrechnet.
• Sender und Empfänger bezeichnen im Allgemeinen nicht immer eindeutig zwei Rechner. Vielmehr sind bei einer zweiseitigen Datenübertragung beide Seiten als Sender und Empfänger tätig. Unsere Betrachtungen werden sich aber auf
einen Datenstrom von einem Rechner zu einem
anderen beschränken, insofern ist hier stets einer
Sender und einer Empfänger.
8.1.2. Sliding Window
wurde, erfolgen dann ein oder mehrere Window Updates.
Hat der Empfänger sehr viele Daten erhalten, aber
noch keine an die Applikation weitergereicht, so dass
der Receive Buffer voll ist, dann kann er trotzdem bestätigen und keine weiteren Bytes erlauben. Diese Art
von Acknowledgement nennt man Zero Window. Es
wird erwartet, dass der Empfänger ein Window Update verschickt, sobald wieder hinreichend Platz im
Buffer ist. Wie groß diese Veränderung sein muss, war
ursprünglich nicht festgelegt.
Der Sender erfährt nur im Erfolgsfall durch ein
Acknowledgement des Empfängers, dass ein oder
mehrere Pakete angekommen sind. Vom Zeitpunkt
des ersten Versendens eines Pakets bis zum Eintreffen des entsprechenden Acknowledgements wird der
Sender die Daten daher im Sendebuffer bereithalten.
Er verwaltet daher ein Send Window: diejenigen Daten, deren Versenden er erwartet. Würden über längere Zeit keine Acknowledgements beim Sender eintreffen, dann würde der Empfänger irgendwann alle Daten innerhalb des Send Window erhalten haben. Das
Receive Window würde dann an der ersten Position
hinter dem Send Window liegen. Wären beide Fenster
in Summe größer als der Bereich der Sequenznummern: 0 . . . 232 − 1, dann könnte ein erneut eintreffendes altes Paket fälschlicherweise als neues Paket erkannt werden, da die Sequenznummern zyklisch gerechnet werden.
Beispiel:
Die Sliding-Window-Technik ist ein zentraler Be• Send Window: 0 . . . 2684354559.
standteil der Datenübertragung mittels TCP. Acknowledgements des Empfängers enthalten stets die Posi• Receive Window: 2684354560 . . . 5368709119
(5368709119 = 1073741823 mod 232 ).
tion des nächsten erwarteten Datenbytes sowie eine
Angabe, wie viele Bytes im Moment angenommen
• Alte Pakete zwischen 0 und 1073741823 würden jetzt
werden können. Der Sender kann dann sicher davon
fälschlicherweise als neue angenommen werden.
ausgehen, dass alle Daten bis zur vorigen Stelle anDie Abbildung 8.2 zeigt schematisch, wie sich das
gekommen sind. Des Weiteren ist er sicher, dass der
Sliding Window durch den zyklischen Bereich der SeEmpfänger die angegebene Menge folgender Bytes
quenznummern (0 . . . 232 − 1) bewegt:
annehmen kann, und kann diese sofort versenden. Abbildung 8.1 zeigt das Sliding Window aus Sicht des
1. Sequenznummer des ersten Datenbytes
Senders.
Ebenso kann der Empfänger auch erneut bis zur
2. Bereits an eine Applikation weitergereichte Dagleichen Stelle bestätigen, aber eine andere Window
ten
Size angeben. Diese Art von Acknowledgement nennt
3. Bestätigte Daten, die im Receive Buffer stehen
man Window Update, da sie nur eine Veränderung, in
aller Regel eine Vergrößerung, der Window Size an4. Erhaltene, aber noch nicht bestätigte Daten
gibt. Besonders zwischen einem sehr schnellen Sender und einem langsamen Empfänger kann es vor5. Freier Platz im Receive Buffer
kommen, dass die Acknowledgements das Fenster zunächst so verkleinern, dass keine weiteren Daten ge6. Aktuelles Receive Window
sendet werden können. Sobald der Inhalt des Empfangsbuffers dann an die Applikation weitergereicht
7. Größe des Receive Buffer
70
8.1. Einführung
8.1.3. Window Scaling
1
2
3
Sequenznummern
4
8
7
5
6
Ursprünglich stehen im TCP-Header nur 16 bit für die
Angabe der Window Size zur Verfügung, also können
maximal 64 kB angegeben werden. Mit schneller werdenden Verbindungen und größeren Empfangsbuffern
wurde es notwendig, auch größere Werte angeben
zu können. Die Lösung des Problems ist ein Skalierungsfaktor, der beim Verbindungsaufbau ausgehandelt wird. Ein gesendeter Wert von R entspricht einer
Skalierung um 2R .
Die Aushandlung des Window Scaling zwischen
zwei TCP-Implementierungen verläuft wie folgt:
• Beide Seiten können in ihren SYN-Segmenten
einen Skalierungsfaktor angeben.
• Verzichtet eine Seite auf die Angabe eines Faktors, dann findet keine Skalierung statt.
Abbildung 8.2.: Zyklisches Verhalten der Sequenznummern.
8. Bewegungsrichtung des Sliding Window.
• Haben beide TCP-Implementierungen einen
Faktor angegeben, so wird Window Scaling angewendet. Jede Seite verwendet für die Angabe
ihres Receive Window den eigenen Faktor. Gibt
also einer 3 und einer 5 als Wert für R im SYNSegment an, dann werden die Angaben des ersten um 23 = 8 und die des zweiten um 25 = 32
skaliert.
Die ursprüngliche Definition von TCP in
RFC 793 [Pos81c] ließ einige Freiheitsgrade,
von denen die meisten in späteren RFCs fixiert
wurden [Bra89, APS99]:
• Gibt eine Seite R = 0 an, also eine Skalierung um
2R = 1, so bedeutet dies, dass sie Window Scaling erlaubt, es für die eigenen Receive-WindowAngaben aber nicht verwenden wird.
• Soll der Empfänger schnellstmöglich Acknowledgements senden, oder noch kurze Zeit auf
weitere Pakete warten?
Ein Maximum von R ≤ 14 muss eingehalten werden, da es sonst zu einem sogenannten wrap around
der Sequenznummern kommen kann. Damit meint
man ein derartiges Überlappen der zyklisch gerechneten Sequenznummern, dass nicht mehr eindeutig zwischen neuen und alten Paketen unterschieden werden
kann. Verschiedene Techniken zur Vermeidung dieses
Problems beinhalteten Timestamps oder time-to-liveZähler in den Paketen.
Es kann theoretisch vorkommen, dass sich Sendeund Empfangsfenster nur noch berühren, etwa wenn
alle entsprechenden Pakete angekommen sind, aber
kein Acknowledgement den Sender erreicht hat. Wären die Fenster so groß, dass sie sich am anderen Ende
überlappen, dann könnte ein dupliziertes altes Paket
fälschlicherweise als neues Paket angenommen werden. Die doppelte Fenstergröße muss also kleiner als
die Anzahl der Sequenznummern sein:
• Wie häufig und ab welcher Größe der Veränderung sollen Window Updates erfolgen?
• Soll der Sender die Daten im nutzbaren Fenster
schnellstmöglich als Burst, oder eher gleichmäßig übertragen?
Manche der Punkte sind erst in konkreten Implementierungen festgelegt, oder können gegebenfalls selbst
gewählt werden.
Die meisten TCP-Implementierungen neigen zu
burstartigem Sendeverhalten. Gerade dieses Verhalten
kann leicht zu Verstopfung des Netzwerks und Paketverlusten führen, wenn das nutzbare Fenster zu viele Datenbytes erlaubt. TCP Vegas hingegen versucht,
dass nutzbare Fenster auf eine Round Trip Time zu
verteilen.
2 · Max_Window = 2 · 216 · 2R < 232
⇒
R
≤ 14.
71
8.2. Congestion Control
MSSs
8. TCP Bulk Data Flow
MSSs
Wenn mehrere Hosts viele Pakete senden, kann es zu
Congestion, d. h. Verstopfung des Netzwerks, kommen. Ebenso ist dies am Übergang von schnellen
zu langsameren Netzwerken möglich. In diesem Fall
speichert ein Router alle im schnellen Netzwerk ankommenden Pakete in einem FIFO-Speicher (Queue),
um sie im langsameren Netzwerk weiterzusenden.
Die Differenz der Bandbreiten ist dann die theoretische Geschwindigkeit, mit der sich der FIFOSpeicher unter Volllast füllt. Ist die Queue voll, so
müssen Pakete gelöscht werden. Der Paketverlust,
z. B. durch einen Timeout bemerkt, ist ein sicheres
RTTs
Anzeichen für Congestion.
(a) Slow Start.
Modernere Implementierungen wie TCP Vegas machen sich zu Nutze, dass die Verweilzeit in der Routerqueue sich bereits in der näherungsweise gemessen
Round Trip Time niederschlägt. TCP Vegas versucht,
durch die RTT-Messungen bereits Paketverluste vorherzuahnen und rechtzeitig die Senderate zu reduzieren. Auf dem Stand von TCP Reno sind die Paketverluste ein benötigtes Anzeichen von Congestion. TCP
Reno versucht konstant die Senderate zu erhöhen, um
frei werdende Kapazitäten schnell zu erkennen. Es
unterscheidet dabei zwischen leichten und schweren
Paketausfällen (Retransmission oder Timeout), auf die
Abschnitt 9.3 näher eingeht.
Diesen Implementierungen gemeinsam ist ein sogenanntes Congestion Window (CWND), das als weiRTTs
tere Beschränkung des Senders dient. Als Größe des
(b) Congestion Avoidance.
Send Window verwendet der Sender das Minimum aus
Receive Window und Congestion Window. Der Sender
verwaltet das Congestion Window je nachdem, wel- Abbildung 8.3.: Verlauf des Congestion Window.
che Vorstellung die Implementierung von der Netzwerksituation hat. In der Art und Weise, wie diese
Vorstellung gewonnen wird, unterscheiden sich die
Wird ein bestimmter Grenzwert, der Slow Start
Implementierungen.
Threshold, erreicht, dann wechselt der Sender zur
Congestion Avoidance.
Ist dieser Grenzwert zu hoch voreingestellt, dann
führt der exponentielle Anstieg der Senderate (solan8.2.1. Slow Start
ge nicht durch das Receive Window beschränkt) oft zu
Slow Start wird üblicherweise zu Beginn einer Über- einem schweren Paketausfall, da mit jeder RTT doptragung oder nach einem größeren Paketverlust (Ti- pelt so viele Pakete gesendet werden. Wird der Slow
meout) angewendet. Das Congestion Window beginnt Start Threshold wiederum zu niedrig gewählt, dann
dabei mit einer Größe von zwei bis drei maximalen wechselt der Sender zu schnell zur Phase CongestiPaketen. Für jedes bestätigte Paket erhöht sich das on Avoidance. In dieser Phase steigt die Größe des
Congestion Window um ein Segment maximaler Grö- Congestion Windows relativ langsam, es würde also
ße. Dies führt zu einer Verdopplung des Congestion zu lange dauern, bis die Möglichkeiten des Netzwerks
Window pro Round Trip Time, also einem exponen- vollständig genutzt werden. Die Folge wäre ein sehr
tiellen Verlauf dieses Wertes. Abbildung 8.3(a) zeigt starker Performanceverlust, da zu Beginn einer Überden Verlauf des Congestion Window in dieser Phase. tragung relativ wenig Daten übertragen werden.
72
MSSs
8.3. Experiment
8.3. Experiment
8.3.1. Idee
RTTs
MSSs
(a) CWND bei Paketverlust im Slow Start.
Zur Veranschaulichung der Techniken zur Vermeidung von Congestion haben wir das folgende Experiment durchgeführt.
Zwei Computer eines Clusters sollten Daten über
eine VPN-Verbindung an einen dritten Computer im
Cluster senden. Dabei wurde die zweite Verbindung
kurz nach der ersten aktiviert, so dass sie zunächst eine relativ ausgelastete VPN-Verbindung vorfand. Dadurch sollten folgende Aspekte aufzeigbar werden:
• Slow Start und Congestion Avoidance einer ungestörten Verbindung sollten sichtbar sein, bevor
die zweite Verbindung ihre Übertragung beginnt.
RTTs
(b) CWND bei schwerem Paketverlust im Slow Start.
Abbildung 8.4.: Verlauf des CWND und Slow
Start Threshold bei Paketverlusten.
8.2.2. Congestion Avoidance
Diese Phase verläuft ähnlich dem Slow Start, und
kommt zur Anwendung bei Erreichen des Slow Start
Threshold. Es existieren verschiedene Varianten für
die Erhöhung des Congestion Window in dieser Phase.
Im allgemeinen erhöht sich das Congestion Window
pro Round Trip Time um einen konstanten Wert, z. B.
ein Segment maximaler Größe. Während der Congestion Avoidance wächst das Congestion Window also
linear, siehe Abbildung 8.3(b).
Solange keine oder nur kleine Paketverluste (Retransmission) auftreten, bleibt der Sender in dieser
Phase. Im Falle einer Retransmission wird das Congestion Window halbiert und der Slow Start Threshold
wird ebenfalls auf diesen Wert gesetzt. Tritt in dieser
Phase ein schwerer Paketverlust auf, so wird der Slow
Start Threshold auf den halben Wert des bisherigen
Congestion Window gesetzt und der Sender beginnt
danach mit einem Slow Start.
Die Abbildungen 8.4(a) und 8.4(b) zeigen mögliche Verläufe des Congestion Window im Zusammenspiel von Slow Start und Congestion Avoidance. Die
dünne graue Linie stellt den Slow Start Threshold dar.
In Abbildung 8.4(a) ist dieser Wert so gewählt, dass
der erste Paketverlust bereits während des Slow Start
passiert. In Abbildung 8.4(b) führt ein zu niedriger
Threshold zu einem schweren Paketverlust während
des Slow Start, und in Folge zu einem erneuten Slow
Start.
• Es sollten Paketverluste auftreten, um die Wiederaufnahme des normalen Sendevorgangs mit
Slow Start oder Congestion Avoidance zu beobachten.
8.3.2. Durchführung
Zunächst wurde ein VPN-Skript im Cluster gestartet. Für die Verbindungen wurden spezielle VPNAdressen der Rechner verwendet, so dass aller Datenverkehr den VPN-Tunnel nutzen musste. Dadurch
war sichergestellt, dass trotz des schnellen GigabitLAN eine Konkurrenzsituation zwischen den beiden
Verbindungen entstehen würde. Der Einfluss anderer
Verbindungen war reduziert, da die VPN-Adressen
gewöhnlich nicht verwendet werden. Die Geschwindigkeit des darunterliegenden Gigabit-LAN lässt eine
Einschränkung des VPN durch Verbindungen außerhalb des VPN ausschließen.
Die Paketströme zwischen den Rechnern wurden
mittels tcpdump auf dem Empfängerrechner aufgezeichnet. Das Tool tcptrace identifizierte die Ströme im dump-File und erzeugte daraus xplot-Files, jeweils zwei pro Verbindung.
8.3.3. Beobachtungen
Die Auswertung der Plots ergab vielfältige Beobachtungen:
• Einen lehrbuchartigen Slow Start zu Beginn der
ersten Verbindung, siehe Abbildung 8.5.
• Den langsamen Start der zweiten Verbindung,
die ein zunächst sehr kleines Receive Window
vom Empfängerrechner angeboten bekam, siehe
Abbildung 8.6.
73
8. TCP Bulk Data Flow
Abbildung 8.5.: Slow Start.
Abbildung 8.6.: Start mit kleinem Receive Window.
74
8.3. Experiment
Abbildung 8.7.: Slow Start nach schwerem Paketverlust.
Abbildung 8.8.: Congestion Avoidance nach leichtem Paketverlust.
75
8. TCP Bulk Data Flow
Abbildung 8.9.: Überblick des Datenstroms vom ersten Rechner.
Abbildung 8.10.: Überblick des Datenstroms vom zweiten Rechner.
76
8.4. Weitere Probleme
• Einen schweren Paketverlust auf der ersten Verbindung dem ein gut erkennbarer Slow Start
folgt, siehe Abbildung 8.7. Die dunkelgrauen
Bereiche stellen Selective Acknowledgments dar.
ge Strecken besteht eine relative hohe Wahrscheinlichkeit für den Verlust mindestens eines Pakets. Ein
Paketverlust via timeout bedeutet allerdings den nachfolgenden Beginn eines Slow Start. Gerade darin liegt
eine großer Perfomanceverlust über LFNs. Glücklich• Einen leichten Paketverlust mit folgender Con- weise wurden viele Techniken entwickelt, die dieses
gestion Avoidance, siehe Abbildung 8.8.
Problem verbessern, etwa Fast Retransmit und Selective Acknowledgements.
Die Abbildungen 8.9 und 8.10 zeigen die Datenströme von den beiden Sendern zum Empfängerrechner.
8.4.2. Silly Window Syndrome
8.4. Weitere Probleme
8.4.1. Long Fat Pipe Networks
Die Performance von TCP hängt nicht nur von der
Bandbreite, sondern auch von der Round Trip Time
ab. Das sogenannte Bandwith-Delay-Product (BDP)
gibt an, wie viele Daten gleichzeitig unterwegs sein
können.
Solange kein Acknowledgement eintrifft, kann der
Sender nur Daten versenden, die im aktuellen Send
Window liegen, also nicht mehr als Window Size
viele Bytes. Die Zeit vom Absenden eines Paketes bis zum Eintreffen des Acknowledgements ist
gerade die Round Trip Time. Ist die Window Size kleiner als das BDP, so ist der Sender regelmäßig im Leerlauf. Der Durchsatz ist dann ungefähr
WindowSize/RT T , der maximale hingegen natürlich
Bandbreite = BDP/RT T .
Das Long-Fat-Pipe-Problem besteht darin, Daten
durch Netzwerke zu senden, die Leitungen mit hoher
Bandbreite und hoher Latenz haben. Aus Sicht von
TCP handelt es sich um eine einzelne lange Direktverbindung mit hoher Bandbreite. Zunächst ist eine
derartige Verbindung problematisch, wenn die Sendeund Empfangsbuffer der verwendeten Hardware nicht
mit dem hohen BDP der Verbindung mithalten können. Wenn genügend Buffer zur Verfügung steht, ist
es notwendig, auch eine entsprechend große Window
Size anzubieten. Als das Problem zuerst erkannt wurde, gab es manch negative Meinung, dass TCP nicht
langfristig mit moderner Netzhardware würde mithalten können. Eine Lösung ergab sich dann durch die
Entwicklung der Window-Scale-Option, die das Anbieten viel größerer Receive Windows erlaubt. Die
nächste limitierende Größe sind vielleicht die nur
32 bit für die Angabe der Sequenznummer im TCPHeader.
Ein weiteres bereits erkanntes Problem mit LFNs
besteht in deren Zusammenspiel mit Congestion Avoidance und Slow Start. Bei großen Windows über lan-
Beim Silly Window Syndrome handelt es sich um ein
eher historisches Problem, das durch moderne TCPImplementierungen weitestgehend vermieden wird.
Die Ursache dieses Problems waren Implementierungen, die auf Empfängerseite frei werdenden Inputbufferplatz sehr zügig mitteilten und Sender, die auch bei
kleinen Verschiebungen des nutzbaren Fensters bereits Segmente verschickten.
Im einfachsten Fall kann es bereits beim Datenverkehr zwischen einem Sender und einem Empfänger auftreten, wenn über längere Zeit konstant Daten übertragen werden. Optimalerweise werden große
Datenpakete aufgeteilt auf maximal große Segmente versendet. Wenn der Sender das angebotene Fenster stets sofort ausnutzt, dann können kleine Vergrößerungen des Receive Window auch in entsprechend
kleinen Paketen resultieren. Diese kleinen Window
Updates können entstehen, wenn andere kleine Pakete, z. B. durch ssh verursacht, versendet werden.
Ebenso ist es möglich, dass die Daten nur langsam aus
dem Receivebuffer an Applikationen weitergereicht
werden. Verhalten sich beide Seite wie oben beschrieben so, dass sie stets sehr schnell reagieren, dann wird
ein kleines Paket meist in einer entsprechend kleinen
Vergrößerung des Receive Window resultieren. Solange noch Daten zu senden sind, wird der Sender dann
wiederum ein kleines Paket versenden, um das Window sofort wieder komplett zu nutzen.
Sehr zügiges Reagieren von Sender und Empfänger
kann also in einer Vielzahl kleiner Pakete resultieren,
obwohl primär große Dateien zu versenden sind. Dieses Verhalten wirkt sich negativ auf die Sendeleistung
aus und hat einen größeren Protokolloverhead, da die
Pakete relativ klein sind. Ebenso wird das Netzwerk
unnötig durch kleine Pakete verstopft, die den Routern nicht weniger Arbeit abverlangen. Das Silly Window Syndrome endet spätestens dann, wenn alle Daten
angekommen sind.
Aktuelle TCP-Implementierungen vermeiden das
Silly Window Syndrome durch verändertes Verhalten
auf Sender- und Empfängerseite.
77
8. TCP Bulk Data Flow
• Der Empfänger versucht, kleine Window Updates zu verzögern, bis die Vergrößerung des Fensters mindestens einen bestimmten Anteil des
Maximalfensters oder mindestens eine MSS beträgt.
• Der Sender wiederum wartet bei großen Dateien, bis er wieder ein Paket maximaler Größe senden kann. Ein solcher Zeitpunkt wird immer eintreten, solange die Verbindung zum Empfänger
noch besteht.
Theoretisch genügt es schon, wenn eine der beiden Implementierungen dieses Verhalten nutzt, um
das Silly Window Syndrome zu vermeiden.
Striktere Varianten für den Empfänger geben stets
ein solches Receive Window zurück, dass der nutzbare Platz im Buffer stets ein ganzes Vielfaches eines
MSS ist. Dies kann auch bedeuten, dass der Sender
keine weiteren Daten senden kann, da sein nutzbares
Fenster leer ist. Auf diese Weise ist der Sender meist
in der Lage, Segmente maximaler Größe zu senden.
8.5. Abschließendes
Die Problematik des Übertragens großer Datenmengen mittels TCP hat die Vermeidung von Netzwerkverstopfungen als zentralen Bestandteil. Die dafür
verwendeten Techniken sind viel erforscht und verbessert worden. Das Ziel dabei ist es, die gegebene Hardware maximal gut auszunutzen. Daher haben Implementierungen mit ausgefeilter CongestionVermeidung im Schnitt bessere Übertragungsraten.
Erforscht werden auch Interaktionen verschiedener
Implementierungen hinsichtlich Fairness und gegenseitiger Beeinflussung.
TCP Vegas fügt den in diesem Kapitel aufgeführten
Ansätzen noch einige Ideen, wie die erweiterte Einbeziehung der Round Trip Time, hinzu. Es wird trotz der
beschränkten Sicht von TCP versucht, eine gewisse
Vorhersage zu treffen, die in die Wahl der CongestionWindow-Größe, und damit indirekt der Übertragungsrate, einfließt. Eine Beschäftigung mit den Grundideen von TCP Vegas ist insofern geeignet, den Inhalt
dieses Kapitels zu vertiefen.
78
9. TCP – Timeout und Retransmission
Tino Mai
9.1. Einleitung
In heterogenen Netzwerken, in dem viele Teilnehmer mit unterschiedlichen Eigenschaften verbunden
sind, ist die Möglichkeit eines Paketverlustes allgegenwärtig. Nicht für jede Übertragung ist dies unproblematisch. Eine Dateiübertragung beispielsweise
sollte als Ergebnis eine Datei liefern, die dem Original entspricht. Kommt es während der Übertragung
zu Paketverlusten, dann ist die Datei im günstigsten
Fall partiell unlesbar, wahrscheinlich aber gänzlich
unbrauchbar. Um dies zu verhindern, gilt es, einen
Paketverlust zu erkennen und das verloren gegangene Paket erneut zu übertragen.
Im Gegensatz zum Internet Protocol (IP), handelt es sich bei dem Transmission Control Protocol
(TCP) um ein verbindungsorientiertes Protokoll, welches zuverlässige Dienste für Anwendungen bereitstellt. TCP bietet eine Fehlerkontrolle für Anwendungsdaten durch erneutes Übertragen von fehlerhaften oder verloren gegangenen Segmenten, eine Flusskontrolle zur Koordinierung der Kommunikation zwischen Sender und Empfänger und einer Überlastkontrolle, um eine Überflutung durch Datenwiederholung zu vermeiden. Damit bietet uns TCP genau das,
was wir wünschen: eine robuste Übertragung von Daten. Zur Realisierung dieser Eigenschaften verwendet
TCP Timer.
9.2. TCP Timer
Die Verwendung von Timern ist die einzig effektive
Möglichkeit, da zum Beispiel die Unkontrollierbarkeit des Transportmediums ein direktes Austauschen
von Statusmeldungen zwischen Sendern und Empfängern (zum Beispiel ICMP) nicht ermöglichen. Die
Verwendung von ICMP-Nachrichten wäre sehr wohl
möglich, aber nicht zweckdienlich, da für ICMPPakete genau das gilt, was für TCP-Pakete auch gilt:
Die Zustellung kann nicht garantiert werden. Mittels
eines Timers kann dieses Problem elegant umgangen
werden. Parallel zu einer zu überwachenden Aktion
wird ein Timer gestartet. Wird die Aktion bis zum
Ablauf des Timers durch den Empfänger nicht bestätigt, dann gilt sie als gescheitert. Ob die Ursache nun
beim Kommunikationspartner oder beim Medium zu
finden ist, ist dabei unerheblich, da nicht entscheidbar. Einige Timer, die für das Funktionieren von TCP
unerlässlich sind, wollen wir genauer betrachten. Eine
Übersicht dieser Timer ist in Tabelle 9.1 gegeben.
9.2.1. Connection Establishment
Timer
Im Gegensatz zu IP ist TCP verbindungsorientiert.
Beim Öffnen einer TCP-Verbindung tauschen Sender und Empfänger Kontrollinformationen aus, die sicherstellen, dass der jeweilige Partner existiert und
Daten annehmen kann. Diese Art des Austausches
heißt Drei-wege-Handschlag. Wird der Handshake
nicht innerhalb des Connection Establishment Timeout erfolgreich durchgeführt, so gilt der Verbindungsaufbau als gescheitert.
9.2.2. Delayed Acknowledgement
Timer
Zur Entlastung des Netzwerkes muss TCP nicht
nach jedem empfangenen Segment ein ACK (Acknowledgement) senden. Normalerweise sendet TCP
ein ACK, nachdem es zwei Segmente mit maximaler Größe empfangen hat. Werden weniger Daten empfangen, sendet TCP spätestens nach Ablauf
des Timers ein ACK. Dieses ACK bezeichnet man
dann als Delayed Acknowledgement (siehe auch Abschnitt 6.4.2). Der RFC 1122 [Bra89] definiert 500 ms
als Timer, typisch sind Werte von 200 ms. Problematisch sind Delayed ACKs, wenn der Sender kleine
Datenmengen sendet und dann auf ein ACK wartet.
Dann entstehen in der Kommunikation immer wieder
Pausen von der Laufzeit des Timers.
79
9. TCP – Timeout und Retransmission
Timer
Wert
Funktion
Connection Establishment
ca. 75 s
Delayed Acknowledgement
ca. 200 ms
Keep Alive
ca. 45 s
Idle
ca. 360 s
TCP Persist
ca. 5 s
Maximum Segment Life Wait
ca. 30 s
Retransmission
dynamisch
Zeitfenster, in dem der Drei-Wege-Handschlag erfolgt sein
muss.
Werden weniger Daten empfangen als maximal möglich wäre, sendet TCP erst spätestens nach Ablauf des Timers ein
ACK.
Überprüft den Zustand der Gegenseite durch Senden eines
Paketes.
Bricht die Verbindung nach Ablauf ab, wenn der KeepAlive-Timer keine Antwort erhalten hat.
Überprüft die Gegenseite durch Senden eines Minipaketes,
wenn das Empfangsfenster gleich null ist.
Gibt Ports nach Abbau einer Verbindung erst nach Ablauf
des Timers wieder frei.
Veranlasst die Wiederholung eines Segments nach Ablauf
des Timers.
Tabelle 9.1.: Typische Werte von TCP-Timern in der Praxis.
9.2.3. Keep Alive Timer und Idle
Timer
9.2.5. Maximum Segment Life Wait
Timer
Hier handelt es sich um zwei nicht in der TCPSpezifikation vorgesehene Timer, die aber in UNIXSystemen implementiert sind. Beide stehen miteinander in Verbindung. Der Keep Alive Timer bewirkt,
dass in regelmäßigen Zeitabständen ein leeres Paket
abgeschickt wird, um das Bestehen der Verbindung
zum Partner zu überprüfen. Antwortet der Partnerrechner nicht, wird die Verbindung nach Ablauf des
Idle Timer abgebrochen. Eine Applikation aktiviert
diese Timer mit der KEEP_ALIVE-Option über die
Socket-Schnittstelle. Die Dauer der Timer ist implementationsabhängig und kann daher von System zu
System verschieden sein kann.
Jede Möglichkeit der Verwechslung von Verbindungen sollte verhindert werden. Daher werden nach
dem Abbau von TCP-Verbindungen Portnummern
erst wieder freigegeben, wenn eine bestimmte Zeitspanne, die zweimal die Maximum Segment Lifetime
(MSL) beträgt, vergangen ist (vergleiche dazu auch
Abschnitt 7.3.1). Der Anwender bemerkt diese Wartezeit, wenn er eine Verbindung zwischen gleichen
Partnern (d. h. gleichen IP-Adressen und Portnummern) sofort nach dem Abbruch wieder eröffnen will.
Das System teilt ihm dann mit, dass die verwendete Portnummer noch belegt ist. Erst nach Ablauf des
Timers ist ein erneuter Verbindungsaufbau möglich,
um verspätet eintreffende Pakete nicht irrtümlich einer falschen Verbindung zu zuzuordnen.
9.2.4. TCP Persist Timer
Beim Austausch von Daten über TCP ist es im Prinzip möglich, dass das Empfangsfenster gerade auf 0
steht (vgl. Abschnitt 8.1.2) und genau in diesem Moment das Paket verloren geht, das das Fenster wieder öffnen sollte. Als Ergebnis warten dann Sender
und Empfänger unendlich lange aufeinander. Ein Gegenmittel dazu ist der Persist Timer, der in bestimmten Zeitabschnitten kleine TCP-Segmente der Größe
1 Byte verschickt und damit überprüft, ob die Empfängerseite wieder bereit ist. Ist das Empfangsfenster
nach wie vor 0, kommt eine negative Quittung zurück.
Ist es größer, können nach der positiven Quittung weitere Daten gesendet werden.
80
9.2.6. Retransmission Timer
Der Empfänger bestätigt dem Sender den Empfang
eines Datenpaketes über die Acknowledgement Number. Da diese Nummer mit jedem empfangenen Paket um eins steigt, können auch mehrere empfangene TCP-Segmente durch Angabe der letzten Nummer bestätigt werden. Der Sender startet nach dem
Senden eines Paketes immer einen Retransmission Timer. Wird der Empfang eines Paketes bis zum Ablauf des Timers nicht bestätigt, so wird dieses erneut
verschickt. Abbildung 9.1 zeigt das prinzipielle Funktionieren des Timers. Der Timer wird der Geschwin-
9.3. TCP Retransmission
Zeit
Round Trip Time
Retransmission Timeout
Sender
Empfänger
Abbildung 9.1.: Prinzipieller Ablauf des Retransmission via Timeout.
digkeit der Datenübertragung angepasst und hat somit
keinen festen Wert, sondern ist dynamisch.
9.3. TCP Retransmission
Ein grundlegendes Problem ist, festzustellen, wann
es sich um Congestion handelt und wann nicht. Bekommt der Sender keine Bestätigung für ein versendetes Paket – muss er dann davon ausgehen, dass das
Netz überlastet ist? Oder befindet es sich noch auf
dem Weg und braucht nur länger? Oder ist das Paket
verloren gegangen? Wie lange gibt man einem Paket
Zeit, das Netz zu durchqueren? Und wie lange wartet
man, bis man das Paket noch einmal sendet?
Der Sender muss abschätzen, wann er davon ausgehen kann, dass das Paket verloren gegangen ist und
noch einmal gesendet werden muss. Sendet er das Paket zu früh, befindet sich das alte Paket noch im Netz
und wird unnötig erneut übertragen. Werden Pakete
häufig unnötig erneut übertragen, so provoziert er eine Congestion. Wartet er zu lange, leidet die Übertragungsrate. Ein Timer, dessen Zeitscheibe dynamisch
während der Übertragung der Netzsituation angepasst
wird, ist hier das zentrale Element. Es ist der Retransmission Timer.
das Paket neu gesendet (Retransmission). Grundlage
zur der Berechnung dieses Timers ist die Round Trip
Time (RTT) eines Pakets. Das ist die Zeit, die ein Paket braucht, um vom Sender zum Empfänger zu gelangen plus die Zeit, die das Acknowledgement zurück braucht. Doch da man nicht weiß, welche Route ein Paket durch das Netz nimmt, ist es unmöglich
vorherzusagen, wie lange ein Paket benötigt. Außerdem variiert die Dauer je nach aktueller Belastung
des Netzes. Sie muss also geschätzt werden. TCP benutzt hierfür einen adaptiven Algorithmus. Der Timer
wird im Verlauf der Verbindung ständig verändert und
passt sich der aktuellen Gegebenheiten des Netzes an.
Der Sender verwaltet zur Berechung des Timers
zwei Variablen: Die Smoothed Round Trip Time
(SRTT – geglättete Rundenzeit) und die Round-TripTime Variation (RTTvar – Varianz der Rundenzeiten).
Bevor die erste Rundenzeit gemessen werden kann,
wird das Retransmit Timeout Interval auf drei Sekunden (empirisch) gesetzt. Nach Messung der ersten
Rundenzeit wird die SRT T auf die gemessene Rundenzeit gesetzt und die Varianz auf die Hälfte der
Rundenzeit:
SRT T ← gemessene Rundenzeit
gemessene Rundenzeit
2
Das Retransmit-Timeout-Interval wird dann auf
RT T var ←
RT O ← SRT T + K · RT T var
gesetzt. K ist hierbei ein Faktor als Sicherheitsspielraum, der auf Erfahrungen beruht und in den meisten
Implementierungen auf vier gesetzt. Fortan wird die
Rundenzeit der Pakete kontinuierlich gemessen und
nach jeder Messung werden die Werte wie folgt gesetzt:
RT T var ← (1 − β) · RT T var + β · |SRT T − RT T |
SRT T ← (1 − α) · SRT T + α · RT T
RT O ← SRT T + K · RT T var
α und β sind hier Erfahrungswerte. Jacobson hat folgende Werte vorgeschlagen: α = 1/8 und β = 1/4
[Jac88]. Eine ausschlaggebende Beobachtung bei der
Berechung der Varianzen der Rundenzeiten war, dass
bei starker Belastung des Netzes die Rundenzeiten
stark variieren. Ein Lösungsansatz war, die Standard9.3.1. Retransmission via Timeout
abweichung der Rundenzeiten in die Berechnung mit
Die Zeit zwischen Versenden und Neuübertragung einfließen zu lassen. Allerdings ist die Berechnung
wird Retransmit Timeout Interval (RTO) genannt. Für der Standardabweichung für jedes Paket zu aufwenjedes gesendete Paket wird ein Timer mit dieser Zeit- dig. Daher ist die Berechnung der mittleren Abweischeibe neu gestartet. Läuft er ab (Timeout), wird chung (|SRT T − RT T |) sinnvoller.
81
9. TCP – Timeout und Retransmission
Die Praxis hat gezeigt, dass sich so berechnet ein
realistischer Wert für den Timer ermitteln lässt, der
auch resistent gegen Veränderungen der Netzauslastung ist. Gleichzeitig ist der Timer ein sehr guter Indikator für Congestion, da man mit hoher Wahrscheinlichkeit sagen kann, dass es bei einem Timeout um ein
Anzeichen für Überlastung des Netzwerkes handelt.
9.3.2. Fast Retransmit
Außer dem Retransmission-Timout gibt es einer weitere Möglichkeit, eine Retransmission zu initiieren:
den Erhalt dreier Duplicate-ACKs. Im Acknowledgement des Empfängers wird mit Hilfe der Sequenznummer codiert, welches Paket er als nächstes erwartet. Ein Duplicate-ACK ist ein Hinweis, dass der
Empfänger ein Datenpaket out-of-order erhalten hat.
Das heißt, er hat ein Paket erhalten, dessen Sequenznummer nicht der erwarteten Nummer entspricht.
Daraufhin schickt der Empfänger die Bestätigung des
letzten erhaltenen Pakets noch einmal und teilt dadurch dem Sender die Lücke und die Sequenznummer
des fehlenden Pakets mit. Drei solcher Hinweise sind
für den Sender ein sicheres Signal, dass das Paket verloren gegangen sein muss. Allerdings zeigt dies auch,
dass offensichtlich noch Datenpakete übermittelt werden, sonst würde der Empfänger keine ACKs generieren.
Ohne Fast Retransmit werden nach Ablauf des
Retransmission-Timers das verloren gegangene Datenpaket und alle nachfolgenden Datenpakete im Sendefenster neu übertragen. Dies bedeutet aber einerseits eine unnötige Belastung der Netzwerkressourcen, da alle nachfolgenden Datenpakete auch noch
einmal übertragen werden müssen und andererseits
ein unnötiger Zeitverlust, da bis zum Timeout mit der
Neuübertragung gewartet wird, obwohl schon nach
den dritten Duplicate-ACK klar ist, dass das Paket
verloren gegangen ist. Durch Fast Retransmit wird das
verloren gegangene Paket erneut versendet, ohne auf
das Ablaufen des Timers zu warten.
Obwohl der Fast-Retransmit-Algorithmus das verloren gegangene Paket noch einmal sendet, würde
nach Ablauf des Timers ein Slow Start ausgeführt
werden, bei dem auch die bestätigten Pakete innerhalb des Fensters noch einmal gesendet werden. Daher steuert nach der Fast Retransmission der Fast Recovery Algorithmus nach RFC 2001 [Ste97] die Übertragung. Fast Retransmit und Fast Recovery werden
meist wie folgt implementiert:
• Sobald das dritte Duplicate ACK empfangen
wurde, wird der Threshold auf die Hälfte der
82
noch ausstehenden Segmente des Sendefensters
gesetzt (maximal die Hälfte des Congestion Window):
ssthresh =
# ausstehende Pakete
2
• Das verloren gegangene Paket wird erneut übermittelt und das Congestion Window neu gesetzt:
cwnd = ssthresh + 3 · SMSS
Dies entspricht den drei Segmenten, die durch
Duplicate ACKs bestätigt wurden und vom Empfänger gepuffert werden.
• Für jedes weitere empfangene Duplicate ACK
wird das Congestion Window um ein SMSS erhöht (inflating):
cwnd = cwnd + SMSS
Da der Sender durch das Duplicate ACK weiß,
dass das gesendete Paket das Netzwerk verlassen hat, kann er ein weiteres Paket senden. Da
aber das verloren gegangene Paket noch nicht
bestätigt wurde, gleiten die nachfolgenden Pakete nicht aus dem Fenster. Daher wird es jedes
Mal um ein Segment erhöht.
• Dann kann ein neues Segment übermittelt werden, sofern es das Congestion Window und das
Empfängerfenster zulassen.
• Sobald der Sender ein neues ACK erhält, also
kein Duplicate ACK, wird das Congestion Window wieder auf die Größe des Schwellwertes gesetzt (deflating):
cwnd = ssthresh
Durch dieses erste, neue ACK sollten das verloren gegangene Paket und die anschließend empfangenen Pakete korrekt bestätigt werden.
Abbildung 9.2 zeigt Fast Retransmit in der Praxis.
Interessant sind hier die ACKs mit der Sequenznummer 13032. Offensichtlich bemerkt der Client, dass
das Segment der Sequenznummer 13032 verloren gegangen sein muss. Er beginnt darauf hin Duplicate
ACKs zu senden. Bereits nach dem Eintreffen des
zweiten ACKs mit der Sequenznummer 13032 überträgt der Sender das Paket erneut, da er bereits davon ausgeht, dass das Paket verloren gegangen oder
fehlerhaft ist. Das Sequenzdiagramm ist einer FTPDateiübertragung entnommen, bei der eine große Datei über ein Weitverkehrsnetz verschoben wurde.
9.3. TCP Retransmission
Abbildung 9.2.: Fast Retransmit in der Praxis.
83
9. TCP – Timeout und Retransmission
9.4. Verbesserungen für
WLAN-Netzwerke
WLANs, basierend zum Beispiel auf IEEE 802.11,
GPRS (General Packet Radio Service) oder UMTS
(Universal Mobile Telecommunications System),
stellen nahtlose Konnektivität für tragbare Systeme
zur Verfügung. In WLANs kann es jedoch auch, abhängig von den Bedingungen im Netzwerk, den Signalstärken, elektromagnetischen Interferenzen und
Standortveränderungen der mobilen Systemen, zu
hohen Paketverlusten kommen. Regelmäßige TCPTimeouts und Neuübertragungen können den traditionell ohnehin schmalen Datendurchsatz in solchen
Umgebungen drastisch verschlechtern. In der Praxis
gibt einige Erweiterungen der klassischen Implementierung, um diesen Effekten entgegen zu wirken.
9.4.1. NewReno-Modifikation des
Fast Recovery
Der Fast-Recovery-Agorithmus basiert auf dem
Reno-Algorithmus, der die Datenmenge, die ein Sender bei der Neuübermittlung eines Segments verschicken kann, verringert. Der Reno-Algorithmus funktioniert bei einzelnen verlorenen Segmenten zwar
hervorragend, dies gilt jedoch nicht mehr, wenn
mehrere Segmente verloren gehen. Der NewRenoAlgorithmus [FH99] ermöglicht einen höheren Datendurchsatz. Er ermöglicht Empfangsbestätigungen
für Teile der erfolgreich empfangenen Daten.
basis und überwacht eingehende Empfangsbestätigungen. So kann beim Verlust von mehreren Segmenten eine schnellere Wiederherstellung durchgeführt
werden.
9.4.4. Forward RTO-Recovery
(F-RTO)
Falsche Neuübertragungen (Retransmissions) von
TCP-Segmenten können zum Beispiel dann auftreten, wenn die RTT plötzlich und nur temporär steigt.
Wenn dies passiert, dann fangen die RTOs (Retransmission Timeouts) bereits gesendeter Pakete an abzulaufen. TCP beginnt daher, sie neu zu übertragen.
Wenn dies kurz vor dem Versenden von Daten mit
der Größe eines kompletten Empfangsfensters passiert, kann der Sender das gesamte Fenster erneut
versenden. Der F-RTP-Algorithmus [SK05] verhindert falsche Neuübertragungen. Er geht dabei folgendermaßen vor: Wenn die RTO mehrerer Segmente abläuft, dann überträgt TCP nur das erste Segment neu. Wenn die erste Empfangsbestätigung eingeht, dann fängt TCP an, neue Segmente zu übertragen (wenn dies durch die angegebene Fenstergröße
möglich ist). Wenn die nächste Empfangsbestätigung
einen Timeout für weitere Segmente anzeigt und diese nicht neu übertragen wurden, dann erkennt TCP,
dass der Timeout falsch ist und überträgt die Segmente auch nicht erneut. Dieses Verhalten führt dazu, dass
ein plötzliches Steigen der RTT (zum Beispiel, wenn
ein WLAN-Client von einem Access Point zu einem
anderen wechselt) nicht zu unnötigen Neuübertragungen führt.
9.4.2. Erweiterung der SACK-Option
Selective Acknowledgements (SACK) wurde in
RFC 2018 [MMFR96] definiert und ermöglicht es
dem Empfänger, bis zu vier nicht aufeinander folgende Datenblöcke zu erkennen. RFC 2883 [FMMP00]
definiert eine weitere Verwendung der SACK-TCPFelder. Mit ihr werden doppelte Pakete bestätigt.
Der Sender kann so bei Paketen mit SACK-Option
erkennen, wenn ein Segment unnötig neu übertragen wurde. Er kann dies dann bei zukünftigen
Übertragungen berücksichtigen.
9.4.3. SACK-basierter
Loss-Recovery-Algorithmus
RFC 3517 [BAFW03] definiert ein Verfahren, bei
dem Pakete bei doppelten Empfangsbestätigungen
wiederhergestellt werden können. Der TCP/IP-Stack
verfolgt die SACK-Informationen auf Verbindungs-
84
9.5. SYN-Flood-Angriff
Denial-of-Service-Angriffe zielen darauf ab, legitimen Nutzern den Zugriff auf einen Dienst zu verwehren. Im einfachsten Fall überflutet der Angreifer
den Server mit sinnlosen Paketen, um seine Leitungen zu überlasten. Ein typisches Beispiel dafür ist
ICMP-Flooding. Dies erfordert jedoch einerseits eine große Bandbreite auf Seiten des Angreifers, andererseits lassen sich die Pakete vergleichsweise einfach
mittels vorgelagerten Systemen ausfiltern. Alternativ
kann er versuchen, beispielsweise einen Webserver so
mit Anfragen zu torpedieren, dass normale Anwender
nicht mehr zum Zug kommen. Doch auch hier ist eine
große Bandbreite erforderlich und die IP-Adresse des
Angreifers ist schnell ermittelt und dann blockiert.
Deshalb verlagern sich immer mehr Angriffe auf
sogenannte SYN-Flood-Attacken, die nicht darauf ab-
9.6. Zusammenfassung
zielen, die Bandbreite auszulasten, sondern die Systemressourcen des Servers selbst blockieren. Dazu
verschicken sie SYN-Pakete an den TCP-Port des
Dienstes. Der Server registriert den Synchronisierungswunsch des Clients, legt einen Eintrag in seinen
Tabellen dafür an und bestätigt die Anfrage mit einem
eigenen Synchronisierungspaket (SYN/ACK). Bei einem normalen Verbindungsaufbau bestätigt der Client
dieses ebenfalls mit einem ACK-Paket und komplettiert damit den Drei-Wege-Handschlag einer TCPVerbindung.
Bei einer SYN-Flood-Attacke unterbleibt die Übermittlung des letzten ACK-Paketes. Nun unterhält der
Server eine halboffene Verbindung. Der wartet eine
Zeitlang und wiederholt sein SYN/ACK-Paket, in der
Annahme, das erste sei verloren gegangen (Retransmission). Statt einer Antwort kommen jedoch nur
weitere Verbindungsanfragen, die der Server ebenso
behandelt. Er speichert alle SYN-Anfragen in einem
speziellen Puffer, der sogenannten Backlog Queue. Ist
diese voll, kann er auf diesem Port keine Verbindungen mehr annehmen und das Systen verwirft weitere
SYN-Pakete – der Dienst ist nicht mehr zu erreichen.
Bis der Server einen einmal angelegten Eintrag
in der Backlog-Queue wieder löscht, weil er keine Antwort bekommt, können mehrere Minuten vergehen. Nach einem ersten Timeout, typischerweise
nach 3 s, nimmt der Server an, sein SYN/ACK-Paket
sei verloren gegangen und schickt es erneut. Dieser Vorgang wiederholt sich mit immer längeren Timeouts mehrfach (Linux: 5 Retransmissions). Auf
einem Standard-Linux-System bietet die BacklogQueue Platz für 256 solcher halboffenen Verbindungen. Der Angreifer hat also mehr als genug Zeit, diese
mit Anfragen zu füllen.
In der Regel verwendet der Angreifer gefälschte
Absenderadressen für die SYN-Anfragen. Daher bekommt er die Antwortpakete des Servers zwar nicht
zu sehen, aber durch geschicktes Verteilen der Adressen kann er ein Filtern der Angriffspakete verhindern.
Ein vorgeschalteter Router ist nicht in der Lage, die
gefälschten Pakete von echten Verbindungswünschen
zu unterscheiden.
sendete Paket startet der Sender einen Retransmission
Timer und überwacht deren Ablauf. Wird das Paket
durch den Empfänger nicht durch ein ACK während
dieses Zeitfensters bestätigt, so versucht der Sender
eine erneute Übertragung. Da der Weg eines Paketes
durch ein Netz und die Auslastung des Netzes eine unbekannte Größe ist, verwendet TCP einen adaptiven
Algorithmus zur Bestimmung des Timeout, um möglichst die aktuellen Gegebenheiten eines Netzes zu berücksichtigen. Dem Ablauf des Timers kann der Empfänger vorgreifen, in dem er drei Duplicate-ACKs an
den Sender übermittelt. Erkennt der Empfänger einen
Fehler in der Übertragung, so kann er mittels dieses
Fast Retransmit genannten Mechanismus’ eine Neuübertragung erzwingen.
In der Realität unterliegt die tatsächliche Implementierung der TCP Retransmission ständigen Veränderungen, die zum Teil der Praxis entstammen. Neue
Techniken, wie 10 Gbit/s-Ethernet oder WLAN, lassen eine kontinuierliche Nutzung einer Implementierung nicht zu, sondern verlangen eine stetige Anpassung.
9.6. Zusammenfassung
Zur Realisierung zuverlässiger Dienste für Anwendungen stellt TCP unter anderem einen Mechanismus
bereit, der für verloren gegangene Pakete eine Neuübertragung ermöglicht. Dieser Mechanismus ist ein
Zusammenspiel aus dem Retransmission Timer beim
Sender und ACKs durch den Empfänger. Für jedes ge-
85
Teil III.
Anwendungsschicht
10. Domain Name System (DNS)
Ferdinand Zirker
10.1. Einführung
10.1.1. Motivation
Jeder, der einmal eine E-Mail verschickt oder im
WWW gesurft hat, hat es – meist ohne es zu bemerken
– schon benutzt: das Domain Name System (DNS).
Das DNS ist die meist genutzte, größte und verteilteste Datenbank der Welt. Applikationen wie E-MailClient und Webbrowser verbergen den DNS-Zugriff
vor dem Benutzer. Deshalb ist vielen die Bedeutung
des DNS für das Internet unbekannt.
Dieses Kapitel soll erklären, was das DNS ist, wie
es entstand, welche Konzepte es einführt, welches
Format DNS-Nachrichten haben und wie DNS Software arbeitet.
Abbildung 10.1.: DNS-Protokoll im TCP/IPProtokollstapel.
liche Werte. Bei der Vielzahl der Rechner, mit denen
ein Internet-Nutzer heutzutage kommuniziert, stößt
das menschliche Gedächtnis schnell an seine Grenzen. Abhilfe schafft ein Namensdienst, denn Menschen merken sich Namen wesentlich besser als Zahlenkolonnen. Ein zweiter Vorteil eines Namensdienstes ist, dass Änderungen auf der niedrigen Abstrak10.1.2. Was ist das DNS?
tionsebene der IP-Adresse nach oben hin verschleiDas DNS ist eine verteilte Datenbank, die verschie- ert werden können. Ein weiterer Vorteil ist, dass eine
dene Informationen mit Namen assoziiert. Ein Da- rudimentäre Lastverteilung möglich wird, da einem
tensatz heißt Resource Record (RR). Die RRs sind Namen auch mehrere IP-Adressen zugeordnet werden
über tausende, hierarchisch angeordnete Computer, können
Der erste Namensdienst im Internet bestand in eisogenannte Nameserver, verteilt. Um einen RR zu lesen, wird ein Nameserver von einem Resolver ge- ner auf allen teilnehmenden Rechnern gespeicherten
nannten Client angesprochen. Die Kommunikation Datei namens HOSTS.TXT, in welcher Namen und
zwischen Client und Server erfolgt dabei gemäß ei- zugehörige IP-Adresse aufgelistet waren. Bis heute
nes DNS-eigenen Nachrichtenprotokolls. Dieses be- schlagen Programme lokale Zuordnungen von Namen
findet sich auf der Anwendungsschicht des TCP/IP- zu IP-Adressen in dieser Datei nach. Um damals auf
dem aktuellen Stand zu bleiben, musste man sich die
Protokollstapels, siehe Abbildung 10.1.
Der am häufigsten abgefragte Informationstyp ist neueste Version der Datei von einem zentralem FTPdie IP-Adresse. Das DNS wandelt also meist einen Server des Stanford Research Institute (SRI) herunNamen (z. B. ‘www.uni-jena.de’) in die ihm zugeord- terladen, bzw. dem SRI seine neuen oder geänderten
Namen-IP-Adresse-Paare mitteilen. Ein derart zentranete IP-Adresse (z. B. 141.35.1.50) um.
ler Namensdienst war jedoch nicht mit dem exponentiellen Wachstum des Internets zu skalieren. Die FTP10.1.3. Entstehung des DNS
Last wurde zu groß und Mitarbeiter des SRI waren
Um mit einem Rechner, wie z. B. einem Webserver, nur noch damit beschäftigt, die vielen Änderungen
über das Internet zu kommunizieren, braucht man und Neueintragungen vorzunehmen. Außerdem daudessen IP-Adresse. Ein Internet-Nutzer muss also für erte es recht lange, bis eine Änderung bei den anderen
jeden Kontakt eine 32 bit (mit IPv6 sogar 128 bit) lan- Teilnehmern sichtbar wurde.
ge Zahl wissen. Das sind mehr als 4 Milliarden mög1984 spezifierte Paul Mockapetris in den RFCs 882
89
10. Domain Name System (DNS)
und 883 [Moc83a, Moc83b] das DNS. Designziele
waren Verteilung der Information und ihrer Verwaltung bei gleichzeitiger Konsistenz des Datenbestandes, Unabhängigkeit vom zu Grunde liegenden Kommunikationssystem, Flexibilität in der Art der zu speichernden Information und schließlich Erweiterbarkeit. Sicherheit stand leider nicht von Anfang an mit
auf der Liste. Der Namensdienst, den das DNS bietet, ist vielseitiger und vor allem dezentraler als sein
Vorgänger. 1987 wurden die beiden RFCs verfeinert
und durch RFCs 1034 und 1035 [Moc87a, Moc87b]
ersetzt.
ten hat ein Label und steht für einen Domainnamen, der sich aus den Knotenlabeln auf dem Pfad
zur Wurzel ergibt. Die Label werden dabei durch
einen Punkt voneinander getrennt. Brüderknoten dürfen keine gleichen Label haben. Der Wurzelknoten
hat als einziger ein leeres Label (Länge 0).
Eine Domain wird durch einen Domainnamen
identifiziert und besteht aus dem Teil des Namensraums, der sich unterhalb des zum Domainnamen gehörenden Knoten befindet. Eine Domain ist Subdomain einer Domain, wenn sie in ihr enthalten ist. In
diesem Falle endet der Subdomainname auf den Domainnamen. Die Begriffe Domain und Domainname
werden häufig falsch verwendet.
10.2. Konzepte
Das in einem Domainnamen ganz rechts stehende
Label (erste Ebene des Baumes) ist seine Top Level
Domain (TLD). Domains mit einer country code TLD
10.2.1. Lexikalischer Aufbau eines
(ccTLD), heißen Country Domains oder GeographiNamens
cal Domains. Die Labels der ccTLDs sind die LänIm DNS heißt ein Name Domainname und ist in bis derkürzel aus dem ISO-Standard 3166 [Int06a]. Dozu 127 Teile strukturiert. Die Teile werden Label ge- mains mit einer generic TLD (gTLD) heißen Generic
nannt und durch einen Punkt voneinander getrennt. Domains. Ursprünglich waren es nur sieben (‘com.’,
Domainnamen mit mehr als vier Label kommen aber ‘edu.’, ‘gov.’, ‘int.’, ‘org.’, ‘mil.’, ‘net.’), aber die Innur selten vor.
ternet Corporation for Assigned Names and Numbers
Ein Label ist
(ICANN) führt hin und wieder weitere ein (‘aero.’,
‘biz.’, ‘coop.’, ‘info.’, ‘jobs.’, ‘museum.’, ‘name.’,
• eine 1 bis 63 Zeichen lange Zeichenkette
‘pro.’, ‘travel.’, . . . ). Die gTLDs ‘gov.’ und ‘mil.’ sind
• aus alphanumerische Zeichen (bei Vergleichen den USA vorbehalten, nicht so ‘com.’, ‘org.’ und algelten Großbuchstaben und Kleinbuchstaben als le anderen – trotz gegenteiliger landläufiger Meinung.
Manche Länder unterstrukturieren ihre TLD. So engleich) und Bindestrich,
den z. B. im Vereinigten Königreich die Domainnawobei das erste Zeichen ein Buchstabe sein muss, was men von Unternehmen auf ‘co.uk.’ und die von Bilbisweilen missachtet wird.
dungseinrichtungen auf ‘ac.uk.’. Eine Sonderrolle hat
Ein vollständig qualifizierter Domainname, zu eng- die TLD ‘arpa.’ inne. Sie wird nur für die Inverssuche
lisch Fully Qualified Domain Name (FQDN), darf und die Lokalisierung von Gateways verwendet.
höchstens 255 Zeichen haben und endet auf einen
Punkt. Ein Beispiel für einen FQDN ist ‘ipc654.inf10.2.3. Zonen
ra.uni-jena.de.’, aber auch ‘de.’ ist ein FQDN. Durch
den Endpunkt wird ein FQDN von einem Namen un- Der Namensbaum ist in Zonen unterteilt. In Abbilterschieden, an den eventuell noch ein konfigurations- dung 10.3 sind einige Zonen umrandet. Eine Zone ist
abhängiges Suffix (Domainname des lokalen Netz- eine (großteils zusammenhängende) Menge von Dowerks) angehängt wird. Ohne den Endpunkt ist ein mainnamen mit mindestens zwei Nameservern und
Name nicht eindeutig, denn je nach Konfiguration der eigenständiger Verwaltung. Die Verwaltung ist zubenutzten Applikation und des Resolver kann er zu ständig für die Zonendatei, in der alle RRs der Dounterschiedlichen FQDNs ergänzt werden. Trotzdem mainnamen der Zone liegen. Die Nameserver einer
wird der Punkt von Benutzern oft nicht mit eingege- Zone sind autoritativ für alle Domainnamen der Zoben, wenn das Ergänzungsverhalten bekannt ist.
ne, d. h. sie sind in der Lage zu entscheiden, ob ein
RR zu einem bestimmten Domainnamen existiert und
welche Daten er enthält.
10.2.2. Namensraum
Für jede Zone gibt es genau einen RR vom Typ
Die Reihenfolge der Label in einem Domainnamen SOA, der auf den primären, autoritativen Nameserver
drückt eine Hierarchie aus. Der Namensraum hat ei- der eigenen Zone verweist. Dieser bezieht seine Daten
ne Baumstruktur, siehe Abbildung 10.2. Jeder Kno- direkt aus der Zonendatei, die anderen, sekundären,
90
10.2. Konzepte
Abbildung 10.2.: Namensbaum und ein paar Begriffe.
Abbildung 10.3.: Namensbaum mit Zonenmarkierungen.
91
10. Domain Name System (DNS)
autoritativen Nameserver der Zone beziehen ihre Daten von ihm. Der Vorgang heißt Zonentransfer. Der
Administrator der Zone lässt die Zonendatei vom primären, autoritativen Nameserver neu einlesen, wenn
er Änderungen an ihr vorgenommen hat.
Der Verwalter einer Zone kann die Verwaltung einer Domain, deren Domainname in seiner Zone ist,
an eine andere Partei delegieren. Hierzu erstellt er für
den Domainnamen der zu vergebenden Domain RRs
vom Typ NS, die auf die Nameserver der anderen Partei verweist. Die delegierte Domain gehört jetzt zur
Zone der neuen Verwaltung; es entsteht eine neue Zone. Durch diesen Delegationmechanismus wird das
DNS zu einer verteilten Datenbank. Er ermöglicht den
einzelnen Parteien, ihre Domainnamen selbst zu verwalten, so dass die Datenbank trotz ihrer Größe und
der Vielzahl der Zugriffe lesbar und änderbar bleibt.
Alle Zonen sind Subzonen der Rootzone. Ihr Verwalter, die ICANN, bestimmt also welche TLDs es gibt
und wer sie verwalten darf. Alle anderen Parteien sind
im Grunde nur Pächter, denen die Verwaltungsmacht
auch wieder entzogen werden kann.
Die gTLDs hat die ICANN an Netzwerkfirmen wie
z. B. VeriSign delegiert. Die ccTLD sind an die NICs
(Network Information Centers) der einzelnen Länder
delegiert. Beide delegieren weiter an Domain Name
Registries (DNR) genannte Unternehmen, die wiederum an kleinere DNRs oder an den Registrant genannten Endnutzer delegieren, wenn diese eine freie Subzone/Subdomain beantragen. Die Delegation erfolgt
meistens gegen eine Gebühr und für einen Zeitraum
von ein bis zwei Jahren. Ein Registrant entrichtet eine
Gebühr an die DNR seiner Domain – i. d. R. für ein
oder zwei Jahre im voraus.
Die Nameserver, die für die Rootzone autoritativ sind, werden Rootnameserver genannt. Das
sind derzeit 13 Server mit den Domainnamen
‘a.root-servers.net.’ bis ‘m.root-servers.net.’. Ihre IPAdressen sind in DNS-Software bereits enthalten,
müssen aber regelmäßig aktualisiert werden. Die
meisten Rootnameserver stehen nominell in den USA,
implementieren aber Anycast, damit das DNS auch
von anderen Regionen aus hinreichend schnell ist.
10.2.4. Resource Records
Die aktuelle Ausprägung des Namenbaums und die
aktuelle Einteilung in Zonen ergibt sich aus den
auf den Nameservern vorhandenen, Resource Record
(RR) genannten Datensätzen.
Ein RR besteht aus folgenden Feldern:
NAME Domainname, zu dem die Information gehört
92
TTL Time To Live; Zeit in Sekunden, die der RR gecached werden darf
CLASS Klasse von des RR; ist für Internetbezogene Information immer „IN“
TYPE Typ von RDATA
RDATA Resource Data; der eigentliche Wert (ist bei
bestimmten Typen weiter strukturiert).
Die wichtigsten Typen sind:
A IPv4 Adress
AAAA IPv6 Adress (vier mal so groß wie eine IPv4Adresse)
PTR Domain Name PoinTeR
SOA Start Of Authority
NS Name Server
CNAME Canonical Name
MX Mail eXchange.
Ein RR vom Typ A enthält eine IPv4-Adresse, einer
vom Typ AAAA eine IPv6-Adresse. Ein Domainname, zu dem es ein A- oder AAAA-RR gibt, ist ein
Host, also eine adressierbarer Computer. Normalerweise sind die Blätter des Namensbaums Hosts. Aber
auch ein innerer Knoten kann ein Host sein. Das ist
nützlich, wenn erreicht werden soll, dass ein Domainname wie ‘uni-jena.de.’ zu der IP-Adresse eines bestimmten Rechners, z. B. der des Webservers der Universität Jena, aufgelöst wird.
Ein RR vom Typ PTR enthält (als RDATA) einen
Domainnamen. Das NAME-Feld dieses RR enthält
einen speziellen Domainnamen aus der Domain ‘arpa.net.’, in dem eine IP-Adresse codiert ist. Dieser
RR-Typ wird für die Inverssuche (finde Domainnamen zu einer IP-Adresse) benötigt.
Ein RR vom Typ SOA enthält den Domainnamen
des primären, autoritativen Nameservers und einige
weitere Parameter der Zone. Es gibt pro Zonendatei
genau einen SOA-RR.
Ein RR vom Typ NS enthält den Domainnamen
eines autoritativen Nameservers für die Domain mit
dem Domainnamen aus dem NAME-Feld. Einen solchen RR erstellt man zur Delegation. Auf Rootnameservern gibt es z. B. NS-RRs für die Domain ‘de.’, die
als Wert die Domainnamen der Nameserver des DeNIC (Deutsches Network Information Center) enthalten.
10.3. DNS-Protokoll
Ein RR vom Typ CNAME enthält den Domainnamen, für den der Domainname aus dem NAME-Feld
ein Alias sein soll.
Ein RR vom Typ MX enthält den Domainnamen
eines für die Zone zuständigen Mailservers nebst einem Prioritätswert für diesen. Dieser RR hat nichts
mit der Auflösung von Namen in IP-Adressen oder
umgekehrt zu tun und soll hier als Beispiel dafür dienen, dass das DNS auch andere Information zu Domainnamen speichern kann.
Beispiel:
www.example.com. 8218 IN A 192.0.34.166
Dieser RR hat die Bedeutung, dass dem Domainnamen „www.example.com.“ in der Klasse Internet die
IPv4-Adresse 192.0.34.166 zugeordnet ist und dass
diese Information noch 8218 s gecached werden kann.
Abbildung 10.4.: DNS-Protokoll – allgemeines
Paketformat.
Abbildung 10.5.: DNS-Protokoll – Flags.
10.2.5. Inverssuche
Die Inverssuche ist die Suche nach dem/den Domainnamen zu einer gegebenen IP-Adresse. Hierzu wird
die IP-Adresse in einen Domainnamen aus der Domain ‘in-addr.arpa.’, umgewandelt. Da Domainnamen
rechts am allgemeinsten sind – also von rechts nach
links aufgelöst werden – IP-Adressen in der dezimalen Punktschreibweise aber umgekehrt, wird die IPAdresse „gedreht“. Danach wird ‘in-addr.arpa.’ hinten
angehängt und nach einem PTR-RR für den entstandenen Domainnamen gesucht.
Beispiel: Bei der Inverssuche zur IP-Adresse
141.35.1.50 wird nach einem RR vom Typ PTR zum
Domainnamen ‘50.1.35.141.in-addr.arpa.’ gesucht.
Die NS-RRs der ‘in-addr.arpa.’-Domain sind extra für diesen Zweck erstellt und verweisen schließlich auf autoritative Nameserver der Zone, zu der die
gesuchte IP-Adresse gehört. Auf diesen Nameservern sollte – falls ein Domainname mit der IP-Adresse
existiert – auch ein PTR-RR (in unserem Beispiel zu
‘50.1.35.141.in-addr.arpa’) erstellt worden sein, der
den gesuchten Domainnamen enthält.
10.3. DNS-Protokoll
Das DNS-Protokoll ist auf der Anwendungsebene des
TCP/IP-Protokollstapels, siehe Abbildung 10.1. Standardmäßig benutzt es UDP Port 53. TCP Port 53 wird
bei Zonentransfers und bei Paketen größer 512 B benutzt.
Es gibt ein gemeinsames Nachrichtenformat für
DNS-Anfragen und -Antworten. Das Nachrichtenformat besteht aus einem fixen Header von 12 B Länge
und bis zu vier weiteren Teilen variabler Länge, siehe
Abbildung 10.4.
10.3.1. Header
Die ID wird vom Client in der Anfrage gesetzt und
vom Server in der Antwort übernommen. Sie ermöglicht dem Client, erhaltene Antworten gesendeten
Fragen zuzuordnen. In der Regel erzeugt der Client
einen zufälligen Wert für die ID.
Das FLAGS-Feld ist in Abbildung 10.5 aufgeschlüsselt.
QR Question/Response; zeigt an, ob es sich um eine
Anfrage oder eine Antwort handelt.
OPCODE Operation Code; dieses 4 bit-Feld hat nur
in Anfragen eine Bedeutung und wird bei der
Antwort einfach übernommen. Es zeigt an, ob es
sich um eine normale Anfrage, eine inverse Anfrage oder eine Serverstatusanforderung handelt.
AA Authoritative Answer; das Flag zeigt in Antworten an, ob die Antwort von einem autoritativen
Nameserver stammt.
TC TrunCation; das Flag zeigt an, dass ein Teil der
Nachricht wegen Größenbeschränkung (z. B. bei
Transport über UDP maximal 512 B) abgeschnitten wurde.
RD Recursion Desired; das Flag zeigt in Anfragen
an, dass der rekursive Modus erwünscht ist.
93
10. Domain Name System (DNS)
Klasse QCLASS) haben kann, ist ein Wert von
QTYPE zugeordnet. Zusätzlich gibt es einen
ANY genannter Wert, der für „alle Typen“ steht,
und einen AXFR genannten Wert, der für „Zonentransfer“ steht.
Abbildung 10.6.: DNS-Protokoll – Question
Section.
RA Recursion Available; das Flag zeigt in Antworten
an, dass der rekursive Modus angeboten wird.
Z Zero; dieses 3 bit-Feld ist reserviert für Erweiterungen und muss ‘000’ sein.
RCODE Response Code; dieses 4 bit-Feld hat nur in
Antworten Bedeutung. Es zeigt an, ob und welche Art von Fehler aufgetreten ist, z. B. „Domainname existiert nicht“.
Die folgenden vier Felder sind 16 bit große Zähler, die die Anzahl der Einträge in der Question, Answer, Authority bzw. Additional Section anzeigen. Die
Question Section wird vom Resolver gesetzt und in
der Antwort übernommen. Die anderen Sections werden in Antworten vom Nameserver gesetzt.
10.3.2. Question Section
Die Question Section beinhaltet die Parameter, die eine Anfrage spezifizieren. In der Regel hat die Question Section genau einen Eintrag. Wie man in Abbildung 10.6 sieht, ist ein Eintrag der Question Section
ähnlich aufgebaut wie ein RR, nur dass es kein TTLund kein RDATA-Feld gibt.
QNAME hat eine variable Größe und enthält einen
codierten FQDN. Label von Domainnamen werden in DNS-Nachrichten nicht durch einen
Punkt, sondern durch ein Zählerbyte getrennt.
Das Zählerbyte zeigt die Anzahl der Zeichen des
folgenden Labels an. Ein Zähler mit dem Wert
0 signalisiert, dass das nächste Label das leere
Label des Rootknoten ist. Er zeigt also das Ende von QNAME an. Siehe hierzu auch den Abschnitt „Kompressionsschema“ (10.3.4).
10.3.3. Answer, Authority und
Additional Section
Answer, Authority und Additional Section haben das
gleiche Format: Eine im entsprechenden Headerfeld
angegebene Anzahl von in Abbildung 10.7 dargestellten Einträgen. Ein Eintrag repräsentiert einen RR des
antwortenden Nameservers.
NAME, TYPE und CLASS sind wie QNAME,
QTYPE und QCLASS aus der Question Section spezifiziert. TTL ist 32 bit groß und gibt die Zahl der Sekunden an, die der zugehörige Eintrag (RR) im Cache
gehalten werden soll. RDLENGTH ist 16 bit groß und
gibt die Länge des folgenden Feldes RDATA in Byte
an. RDATA hat eine variable Größe und enthält ein
von TYPE und CLASS abhängiges Datum, so wie im
Abschnitt 10.2.4 beschrieben.
Die Answer Section enthält RRs, die in der Question Section angefragten wurden. Kleine Optimierung: Um nachfolgende DNS-Fragen zu vermeiden,
sendet ein Nameserver, der nach RRs zu einem
Alias-Domainnamen gefragt wurde, zusätzlich zum
CNAME-RR (=Alias) noch den angefragten RR des
kanonischen Domainnamen, falls vorhanden.
Die Authority Section enthält NS-RRs, die auf
Nameserver verweisen, die für eine Domain autoritativ sind, die dem angefragten Domainnamen näher
kommt.
Die Additional Section enthält alle anderen RRs,
die der Nameserver mitsenden möchte. Meist sind
das RRs vom Typ A oder AAAA, die die IP-Adresse
QCLASS ist 16 bit groß und enthält die Klasse des
gewünschten RR, z. B. IN für Internet. Zusätzlich gibt es einen ANY genannter Wert, der für
„alle Klassen“ steht.
QTYPE ist 16 bit groß und enthält den Typ des gewünschten RR. Jedem Typen, den ein RR (der
94
Abbildung 10.7.: DNS-Protokoll – Nonquestion
Section.
10.4. DNS-Software
Auf UNIX-artigen Systemen lässt sich in der Datei
/etc/resolv.conf konfigurieren, wie der Resolver
unvollständige Namen ergänzen soll und ob er einem
bestimmten Nameserver (IP-Adresse!) als erstes eine
Anfrage senden soll.
Wenn er die erwünschte Information nicht im
Cache hat, wandelt der Resolver die Anfrage der Applikation in eine DNS-Anfrage um. Das weitere Vorgehen ist vom Modus abhängig. Ein Resolver kann im
rekursiven Modus oder im iterativen Modus arbeiten.
Im rekursiven Modus sendet er seine Anfrage mit
RD-Flag (Recursion Desired) an einen vorkonfigu10.3.4. Kompressionsschema
rierten Nameserver. Alle weiteren, zum Erhalt der geWie oben erwähnt, darf ein Label zwischen 1 und 63 wünschten Information nötigen Anfragen übernimmt
Zeichen haben. Die beiden Most Significant Bits der dann ein im Nameserver eingebauter, iterativ arbeiZählerbytes in QNAME und NAME sind also stets tender Resolver. Voraussetzung ist, dass der Namenull. Die Längenrestriktion für Labels ist absichtlich server den rekursiven Modus anbietet – ersichtlich am
so gewählt worden. Man benutzt diese beiden bis- gesetzten RA-Flag (Recursion Available) in seinen
her redundanten Bits, um ein Kompressionsschema Antworten. Die meisten Rootnameserver und TLDfür die häufig innerhalb eines DNS-Paketes wieder- Nameserver bieten keinen rekursiven Modus an, um
kehrenden Labels zu implementieren. Sind die beiden sich keine zusätzliche Last aufzubürden. Ein Stub ReMSB ‘11’, so sind die restlichen 6 bit des Bytes kein solver ist ein Resolver, der ausschließlich im rekursiZähler, sondern Teil eines Pointers. Die auf die ersten ven Modus arbeitet.
Im iterativen Modus sendet der Resolver eine An2 bit folgenden 14 bit sind das Offset desjenigen Bytes
frage
ohne RD-Flag an einen ihm bekannten Rootim DNS-Paket, das das Zählerbyte des darzustellennameserver.
Von dem kontaktierten Nameserver erden Labels ist. Auf diese Weise werden zur Darstelhält
er
entweder
den gesuchten RR oder die Konlung eines bereits vorgekommenen Label (bis zu 64 B)
taktdaten
für
einen
Nameserver, der autoritativ ist für
nur 2 Bytes benötigt. Es darf allerdings kein Pointer
eine
in
der
Kette
vom
Rootknoten zum angefragten
auf ein Byte in einem von einer Klasse abhängigen
Domainnamen
tiefer
gelegene
Domain. Diesen fragt
Feld (also RDATA der Nonquestion Sections) verweier
wiederum
an.
Der
Resolver
hangelt sich auf diese
sen, auch wenn es einen Domainnamen enthält.
Weise durch die Zonen-Hierarchie im Namensbaum.
Spätestens beim Anfragen eines für den angefragten
Domainnamen autoritativen Nameserver bekommt er
10.4. DNS-Software
den gesuchten RR oder die zuverlässige Auskunft,
dass der gesuchte RR nicht existiert (DNS-Antwort
10.4.1. Resolver
mit bestimmten Response Code). Dann gibt er einen
Ein Resolver ist ein Software-Modul, das auf den geeigneten Wert an die Applikation zurück bzw. senRechnern von DNS-Teilnehmern installiert ist. Er bil- det eine geeignete DNS-Antwort an den rekursiven
det die Schnittstelle zwischen Applikation und den Resolver, den er bedient.
Beliebte Linux-Tools, um DNS-Anfragen zu stelNameservern.
Aus Applikationssicht ist das DNS ein lokal vor- len, sind nslookup, host und dig.
handener Baum mit Information in den Knoten,
die durch Anfragen an den Resolver gelesen wer10.4.2. Nameserver
den können. Auf UNIX-artigen Systemen heißen die
dafür meist verwendeten Funktionen gethostbyna- Ein Nameserver ist ein Programm, das Antworten auf
me() und gethostbyadress(). Erstere erwartet einen DNS-Anfragen gibt. Umgangssprachlich wird auch
Domainnamen und gibt, falls vorhanden, eine IP- der Computer, auf dem das Programm läuft, als
Adresse zurück, letztere erwartet eine IP-Adresse und Nameserver bezeichnet.
gibt, falls vorhanden, einen Domainnamen zurück.
Ein Nameserver versucht eine Anfrage mit den RRs
Aus Resolversicht hingegen besteht das DNS aus aus seiner Zonendatei oder aus seinem Cache zu beeiner unbekannten Menge von Nameservern, die je- dienen. Ist dies nicht möglich, ist das weitere Vorgeweils einen Teil der gesamten Information haben. hen vom Modus abhängig.
der Nameserver aus der Authority Section enthalten.
Solche RRs werden Glue Records genannt und sie
verhindern, dass durch kreisförmige Abhängigkeiten
ein Nameserver-Domainnamen nicht aufgelöst werden kann. Wenn z. B. ein zu kontaktierender Nameserver einen Domainnamen aus einer Domain hat, für
die er selbst zuständig ist, könnte ohne einen stets mitgesendeten Glue Record auf dem auf ihn verweisenden Nameserver seine IP-Adresse nicht ermittlet werden.
95
10. Domain Name System (DNS)
Wenn der Nameserver keine Rekursion anbietet
oder die Anfrage keine Rekursion erwünscht, so
schickt er in der Authority Section einige NS-RRs für
Nameserver einer Domain, die möglichst nahe an der
angefragten Domain ist. Im ungünstigsten Fall sind
dies die NS-RRs für die Rootnameserver. Diese muss
jeder Nameserver kennen. Ausgehend von den Rootnameservern aber ist ein Nameserver entweder selbst
autoritativ für den gesuchten Domainnamen, oder er
hat delegiert. Im letzteren Fall hat er NS-RRs für die
Nameserver, an die er delegiert. Diese übermittelt er
in der Authority Section seiner Antwort. In der Additional Section seiner Antwort muss mindestens ein
RR mit der IP-Adresse von einem der Nameserver
sein – Stichwort Glue Records.
Wenn der Nameserver Rekursion anbietet und in
der Anfrage Rekursion erwünscht wird, so stellt der
Nameserver die notwendigen Anfragen an die anderen Nameserver. Er agiert also als Client. Für diesen
Zweck ist ein Resolver, der im iterativen Modus arbeitet, im Nameserverprogramm eingebaut. Er hangelt
sich wie im Abschnitt „Resolver“ beschrieben durch
die Domain-Hierarchie. Die Antwort wird schließlich
dem Resolver, der die ursprüngliche Anfrage gestellt
hat, zugesendet.
Wie weiter oben bereits beschrieben, muss ein sekundärer, autoritativen Nameserver regelmäßig seine
Zonendatei mit den Daten vom primären, autoritativen Nameserver aktualisieren. Im SOA-RR der Zone
steht u.a., wann er dies tun soll und welche Versionsnummer die Zonendatei hat.
10.4.3. Caching
Caching ist im DNS wichtig, um die Zahl der Anfragen und damit die Netzlast zu reduzieren, die Verfügbarkeit von Nameservern sicher zu stellen und
die Antwortzeit zu minimieren. Von Vorteil ist dabei die naturgemäß lange Invarianz der meisten DNSInformationen.
Um eine möglichst hohe Trefferquote zu erreichen,
sollte es für einen Bereich ähnlicher Anfragen einen
großen, zentralen Cache geben. Deshalb cachen StubResolver nicht, sondern verlassen sich auf den Cache
ihres Nameservers. Auch Applikationen sollten, wenn
überhaupt, dann nur in sehr eingeschränktem Maße
cachen. Ob ein Resolver cachen sollte, ist von seiner
Umgebung abhängig. Möglich ist auch, dass sich Resolver und Nameserver einen Cache teilen.
Um die Aktualität der RRs und somit die Konsistenz des DNS möglichst hoch zu halten, kann jede Informationsquelle selbst im TTL-Feld ihrer RRs vorschlagen, wie lange der RR maximal gecached wer-
96
den darf. Üblich sind Werte zwischen wenigen Minuten und etlichen Tagen. Bei einer anstehenden RRÄnderung kann der Administrator den TTL-Wert vorher schrittweise senken und so dafür sorgen, dass nach
der Änderung kaum jemand den alten RR im Cache
hat.
Experiment: Man tätige eine DNS-Anfrage nach
einem ungecachten RR. Man tätige dieselbe Anfrage noch einmal. Man beachte verkürzte Dauer für die
Antwort und den gesenkten TTL-Wert des RR bei der
zweiten Anfrage.
10.4.4. Beispiel für eine DNS-Anfrage
Folgendes Beispiel erwähnt Besonderheiten, wie z. B.
ein bestimmter Wert im Flag-Bereich einer DNSNachricht, nur beim ersten Auftreten.
Bob klickt in seinem Webbrowser auf den Link
„http://www.example.pro/index.html“. Der Webbrowser soll also mit einem Rechner mit dem
Domainnamen ‘www.example.pro’ kommunizieren.
Um die dazu nötige IP-Adresse zu erhalten, ruft der
Webbrowser eine geeignete Funktion des lokalen Resolvers auf. Der Resolver sei ein Stub-Resolver und
habe als Nameserver die IP-Adresse des Rechners
‘workhard.isp.de.’, ein Nameserver von Bobs Internet
Service Provider (ISP), eingestellt. Wenn es der Webbrowser noch nicht getan hat, ergänzt der Resolver
den Endpunkt und sendet eine DNS-Anfrage mit OPCODE für „normale Anfrage“ und gesetzten RD-Flag
an den ISP-Nameserver. Die Question Section enthält
die Anfrage nach RRs der Klasse IN vom Typ A zu
dem Domainnamen ‘www.example.pro.’, die anderen
Sections sind leer.
Der Nameserver ‘workhard.isp.de.’ hat den gesuchten RR weder in seiner Zonendatei, noch in seinem
Cache. Er ist auch nicht autoritativ für die angefrage Domain. Da er Rekursion anbietet und RD gesetzt ist, sendet er die Anfrage mit neuer ID und ohne RD-Flag (iterativ) an die IP-Adresse eines zufällig aus seiner Rootnameserver-Liste augewählten Nameservers ‘k.root-server.net.’. Dieser hat zwar keinen gesuchten RR, aber er hat einen NS-RR für
‘ns23.netzwerkfirma.com.’, ein für die TLD ‘com.’
autoritativer Nameserver. Den NS-RR packt er in die
Authority Section und zugehörigen A-RR in die Additional Section und sendet dann eine DNS-Antwort
(mit RCODE „No Error“) zurück an die IP-Adresse
von ‘workhard.isp.de.’.
Eine bis auf die ID gleich gebliebene DNS-Anfrage
sendet ‘workhard.isp.de.’ an die eben erhaltene IPAdresse von ‘ns23.netzwerkfirma.com.’. Leider hat
auch dieser keinen passenden RR, kennt aber einen
10.5. Erweiterungen, Wirtschaft und Politik
für die betreffende Zone autoritativen Nameserver
‘ns.example.pro.’ inklusive IP-Adresse, die er ‘workhard.isp.de.’ mitteilt.
Nun sendet ‘workhard.isp.de.’ eine bis auf die ID
gleich gebliebene DNS-Anfrage an ‘ns.example.pro.’
und erhält den gesuchten RR in der Answer Section
als autoritative Antwort (AA-Flag gesetzt).
Diesen sendet er mit der ID der zu Beginn erhaltenen Anfrage versehen zurück an Bobs Rechner. Bobs
Resolver liest die gesuchte IP-Adresse aus dem RR
und gibt sie an den Webbrowser.
10.5. Erweiterungen,
Wirtschaft und Politik
Mit der Bedeutung des Internet wächst auch die
Macht derjenigen, die die Kontrolle über den DNSNamensraum haben. Firmen wie VeriSign haben
großes finanzielles Interesse, ihre bereits gewonnene Kontrolle zu behalten und geraten deswegen öfters in die Kritik. Um welche Beträge es dabei geht,
zeigt das pazifische Inselarchipel Tuvalu. Tuvalu hat
die ccTLD ‘tv.’ – eines der international bekanntesten
Kürzel. Ein jedes Unternehmen aus der TV-Branche
hätte gerne eine ‘tv.’-Domain für seine Internetpräsenz. Dieser Umstand führte dazu, dass Tuvalu seine
Domain für 50 Millionen Dollar verkauft hat. Heute
ist man der Meinung, dass die Domain noch wesentlich mehr wert ist.
Zu den Haupt-RFCs 1034 und 1035 gibt es gut ein
Dutzend weitere, die
• Ratschläge und Erläuterungen für Administratoren und DNS-Software-Entwickler geben
• neue RR-Typen beschreiben
• das DNS um Sicherheitsmechanismen ergänzen
(DNSSEC, TSIG)
• Unicode-Zeichen in Domainnamen erlauben
• die Inverssuche trotz klassenloser IP-Netzwerke
ermöglichen
• das DNS dynamisieren, so dass es auch für kurzlebigere Daten geeignet ist
• reservierte Headercodes verwenden, um anzuzeigen, dass UDP-Pakete größer 512 Bytes empfangen werden können (EDNS)
• das Anwählen von Internet-Geräten über Telefonnummern (ENUM) ermöglichen
• RFID unterstützen
• das DNS IPv6-kompatibel machen
und noch vieles mehr.
Die Verantwortung über die Rootserver hatte früher die Internet-Organisation IANA, seit einigen Jahren jedoch die ICANN. Da die ICANN eine Organisation amerikanischen Rechts ist, sind viele InternetAktivisten über den Einfluss der USA auf das DNS
beunruhigt. Deshalb haben sie das Open Root Server
Network (ORSN) als eine Alternative zu den RootNameservern der ICANN gegründet.
97
11. File Transfer Protocol (FTP)
Christian Ros
11.1. Einleitung
Die Entwicklung moderner Netzwerke nahm in den
frühen 60er Jahren am Massachusetts Institute of
Technology (MIT) ihren Anfang. Ebendort wurde 1971 im Rahmen des Projektes MAC mit dem
RFC 114 [Bhu71] der Grundstein für das File Transfer Protocol (FTP) gelegt, das sich die sichere und
effiziente Übertragung von Dateien zwischen heterogenen Systemen zum Ziel gemacht hat. Im weiteren Entwicklungsprozess wurde das Protokoll zahlreichen Anpassungen und Erweiterungen unterzogen
und basiert seit 1980 (RFC 765 [Pos80a]) auf TCP/IP.
FTP ist in der Anwendungsschicht des Protokollstapels angesiedelt (vgl. Abbildung 11.1). Im Jahr 1985
wurde mit dem RFC 959 [PR85] eine überarbeitete
Version des RFC 765 veröffentlicht, der die bis heute offiziell gültige Fassung des Protokolls darstellt.
Aufbauend auf diese Fassung sind nach 1985 weitere RFCs erschienen, die die Funktionalität des Protokolls durch die Spezifikation optionaler Erweiterungen verbessern.
TCP/IP Schichten
Protokolle
Anwendungsschicht
FTP
Transportschicht
TCP
Client
Client
FTP-Server
Client
Client
Abbildung 11.2.: Eine Client-Server-Architektur.
Im Zuge dieser langjährigen Entwicklung und des
wachsenden Bedarfs, Daten zu übertragen, hat sich
das File Transfer Protocol als der Standard für die
Datenübertragung im Internet etabliert und steht auf
praktisch allen Plattformen zur Verfügung. Aus diesem Grund wird das File Transfer Protocol im Folgenden detailliert beschrieben und die ihm zu Grunde
liegenden Mechanismen dargestellt. Hierzu werden
im Abschnitt 11.2 die verschiedenen Verbindungen
des Protokolls vorgestellt, bevor im Abschnitt 11.3
auf den Aufbau der Verbindungen, die Datenübertragung und den Verbindungsabbau eingegangen wird.
Daran anschließend wird in Abschnitt 11.4 eine Erweiterung des File Transfer Protocol behandelt – das
File eXchange Protocol.
11.2. FTP-Verbindungen
Netzwerkschicht
Netzzugangsschicht
IP
Netzwerk
Abbildung 11.1.: FTP im TCP/IP-Schichtenmodell.
Das File Transfer Protocol basiert auf einer klassischen Client-Server-Architektur und ermöglicht verschiedenen Clients den Fernzugriff auf einen FTPServer (vgl. Abbildung 11.2). Dabei verwendet FTP
zwei separate TCP-Verbindungen:
• die Steuerverbindung für die Kommunikation
und
99
11. File Transfer Protocol (FTP)
• die Datenverbindung für die Datenübertragung.
Wie Abbildung 11.3 zeigt, erfolgt die Steuerung
des Client direkt durch den Anwender, der diesen über
eine Anwenderschnittstelle bedient, während die Verwaltung der Verbindungen nur intern realisiert wird
und somit für den Anwender nicht unmittelbar sichtbar ist. Sowohl auf dem Client als auch auf dem
Server existieren dabei für die Kontrolle der Steuerverbindung entsprechende Protokollinterpreter und
die mit dem Dateisystem verbundenen Datentransferfunktionen, welche die Datenverbindung steuern.
Bevor der Zugriff auf den Server erfolgen kann,
ist eine Authentifikation mit einem Benutzernamen
und dem dazugehörigen Passwort erforderlich. Viele
FTP-Server ermöglichen hier neben der normalen accountbezogenen Authentifikation mit einem vollwertigen Konto auch eine anonyme Anmeldung, bei der
als Benutzername anonymous und als Passwort in der
Regel die E-Mail Adresse übermittelt wird. Dieser anonyme Zugriff unterliegt im Unterschied zur accountbezogenen Authentifikation jedoch meist zusätzlichen
Beschränkungen.
Das File Transfer Protocol verwendet zwei getrennte TCP-Verbindungen, um den Zugriff auf einen
FTP-Server zu realisieren – die Steuerverbindung für
die Kommunikation und die Datenverbindung für den
eigentlichen Datentransfer. Die Übertragung der Daten über diese Leitungen erfolgt dabei ohne jegliche
Verschlüsselung, weshalb das Protokoll vom Sicherheitsstandpunkt aus gesehen mangelhaft ist.
1997 wurde FTP im RFC 2228 [HL97] durch die
Spezifikation verschiedener Verschlüsselungsmechanismen erweitert. Da diese Erweiterung allerdings
kaum Verbreitung gefunden hat, empfiehlt es sich in
sicherheitskritischen Bereichen, Alternativen wie das
SSH File Transfer Protocol (SFTP)1 zu verwenden.
11.2.1. Die Steuerverbindung
Die Steuerverbindung ist eine VollduplexVerbindung, die während einer FTP-Sitzung
zwischen den Protokollinterpretern permanent
aufgebaut ist und der Kommunikation zwischen dem
Client und dem Server dient. Somit werden über die
Steuerverbindung ausschließlich die Befehle vom
Client an den Server und die Antworten vom Server
an den Client übertragen.
1 Das SSH File Transfer Protocol sollte keinesfalls mit dem Secure File Transfer Protocol verwechselt werden, da dieses nur
die Steuerverbindung per SSH tunnelt und die eigentliche Datenübertragung wie beim File Transfer Protocol unverschlüsselt
erfolgt.
100
Zur Aufrechterhaltung der Kompatibilität zwischen
heterogenen Systemen verwendet das File Transfer
Protocol für den Datentransfer eine rudimentäre Version des bereits spezifizierten Telnet Protokolls (RFCs
854–861 [PR83]). Dementsprechend erfolgt die Übertragung der Daten im 8 bit NVT-ASCII-Format2 bei
dem jede Zeile mittels <CR><LF>3 abgeschlossen
wird.
11.2.1.1. FTP-Befehle
Der Zugriff und die Steuerung des Servers erfolgt anhand von Befehlen, die zwischen den Protokollinterpretern des Client und des Servers übermittelt werden.
Die Befehle lassen sich dabei drei Gruppen zuordnen:
• Befehle für die Zugriffskontrolle,
• Befehle für die Übertragungsparameter und
• Befehle für die Bedienung.
In Tabelle 11.1 wird eine Auswahl verschiedener
Befehle dargestellt.
11.2.1.2. Antworten des Servers
Neben den Befehlen werden auch die Antworten
vom Server über die Steuerverbindung transferiert.
Es handelt sich dabei in der Regel um obligatorische
Antworten, die wichtige Informationen und Statusmeldungen für die Interaktion zwischen Anwender,
Client und Server enthalten und auf empfangene Befehle folgen müssen. Wenn es notwendig sein sollte,
kann der Server auch spontane Nachrichten senden.
Eine Antwort besteht aus einem dreistelligen Zahlencode, dem dazugehörigen optionalen Text und der
Zeilenendemarkierung <CR><LF>. Dabei wird der
Code vom Text durch ein Leerzeichen (<SP>) getrennt:
<Zahlencode><SP><Text><CR><LF>
Beispiel:
257 "/pub" is current directory.
Falls sich die Verwendung von einzeiligen Antworten als unzureichend erweist, können auch mehrzeilige Antworten an den Client verschickt werden. Bei
diesen Nachrichten werden die erste und die letzte
2 Im 8 bit Network-Virtual-Terminal-ASCII-Format wird jedes
Zeichen mit 7 bit codiert und das höchstwertige Bit auf 0 gesetzt.
3 CR = Carriage Return; LF = Line Feed.
11.2. FTP-Verbindungen
FTP-Client
Anwender
Dateisystem
Anwender
Schnittstelle
FTP-Server
Anwender
Protokoll
Interpreter
Steuerverbindung
Server
Protokoll
Interpreter
Anwender
Datentransfer
Funktion
Datenverbindung
Server
Datentransfer
Funktion
Dateisystem
Abbildung 11.3.: Darstellung einer Client-Server-Verbindung des File Transfer Protocols.
Befehle für die
Befehl
Beschreibung
Zugriffskontrolle
USER
PASS
QUIT
(user name)
(password)
(logout)
Benutzernamen an den Server senden.
Passwort an den Server übermitteln.
Die Verbindung beenden.
Übertragungsparameter
PORT
PASV
TYPE
STRU
MODE
(port)
(passive)
(type)
(structure)
(mode)
Client-IP-Adresse und -Port an den Server übermitteln.
In den Passive-Modus wechseln.
Die Datenrepräsentation ändern.
Die Struktur der Daten ändern.
Den Übertragungsmodus wählen.
Bedienung
RETR
STOR
REST
ABOR
LIST
(retrieve)
(store)
(restart)
(abort)
(list)
Veranlasst den Server, eine Datei zu übertragen.
Eine Datei auf dem Server speichern.
Wiederaufnehmen einer unterbrochenen Übertragung.
Den vorherigen Befehl abbrechen.
Den Verzeichnisinhalt auflisten.
Tabelle 11.1.: Eine Auswahl verschiedener FTP-Befehle.
101
11. File Transfer Protocol (FTP)
Antwort
Beschreibung
1yz
Positive einleitende Antwort: Es wird
eine weitere Antwort gesendet, bevor
mit dem nächsten Befehl fortgefahren
werden kann.
Positive abschließende Antwort: Die
Aktion wurde erfolgreich ausgeführt.
Positiver Zwischenbericht: Senden Sie
den nächsten Befehl.
Transiente negative Antwort: Der Befehl kann nicht ausgeführt werden.
Wiederholen Sie den Befehl oder die
Befehlsfolge.
Permanente negative Antwort: Der Befehl wurde nicht akzeptiert.
2yz
3yz
4yz
5yz
x0z
x1z
x2z
x3z
x4z
x5z
Syntax
Informationen
Verbindungen
Authentifikation und Benutzerkonten
Nicht spezifiziert
Dateisystem
Tabelle 11.2.: Bedeutung des 3-stelligen Antwortcodes.
Ziffern ist dazu in Tabelle 11.2 angegeben. Die dritte
Ziffer dient primär der feineren Unterscheidung verschiedener Antworten.
Beispiel:
110
200
226
230
257
331
425
550
Restart marker reply.
Command okay.
Transfer ok.
User logged in, proceed.
<path> created.
User name okay, need password.
Can’t open data connection.
No such file or directory.
11.2.2. Die Datenverbindung
Die Datenverbindung ist eine Vollduplex-Verbindung,
die ausschließlich für die Datenübertragung zwischen
dem Client und dem Server verwendet wird. Dies umfasst neben dem Dateitransfer auch die Übertragung
von Verzeichnisinhalten, da dies nicht über die Steuerverbindung realisiert wird. Im Unterschied zur permanent vorhandenen Steuerverbindung ist die Datenverbindung nur während der eigentlich Übertragung
aufgebaut und wird nach Beendigung des Transfers
geschlossen.
Zeile gesondert gekennzeichnet. Die erste Zeile enthält den Zahlencode, gefolgt von einem Bindestrich, 11.3. Verbindungsdem Text und der Zeilenendemarkierung, während die
Management
letzte Zeile den Zahlencode, <SP>, den Text und die
Zeilenendemarkierung enthält:
Das Verbindungs-Management wird direkt durch die
Protokollinterpreter und Datentransferfunktionen ge<Zahlencode>-<Text><CR><LF>
steuert und umfasst neben dem Auf- und Abbau der
<Text><CR><LF>
Verbindungen ebenso die Datenübertragung. Der An<Text><CR><LF>
wender hat dabei nur beschränkte Interaktionsmög<Zahlencode><SP><Text><CR><LF>
lichkeiten, da die Anwenderschnittstelle die direkte
Kontrolle der Verbindungen meist nicht zulässt.
Beispiel:
211-Status of ’CTAN’
Connected from pixie.uni-jena.de
TYPE: ASCII
STRUcture: File
Mode: Stream
No data connection
211 End of status
Der Text in den Antworten dient dem Anwender
dabei lediglich als Erläuterung, hat aber im weiteren
Sinne keine Bedeutung. Im Unterschied dazu verwendet der Anwender-Protokollinterpreter ausschließlich
den Zahlencode und erhält dadurch Informationen
über gesendete Befehle und den Zustand des Servers.
Dementsprechend hat jede Ziffer des Codes eine bestimmte Bedeutung. Die Bedeutung der ersten beiden
102
11.3.1. Verbindungsaufbau
In einer FTP-Sitzung gliedert sich der Verbindungsaufbau meist in drei Abschnitte:
• den Aufbau der Steuerverbindung,
• die Anmeldung am FTP-Server und
• den Aufbau der Datenverbindung.
11.3.1.1. Aufbau der Steuerverbindung
Der erste Schritt einer FTP-Sitzung ist stets die Etablierung der Steuerverbindung zwischen dem Client
und dem Server. Hierbei initiiert der Client, analog
11.3. Verbindungs-Management
FTP-Server
FTP-Client
Port N
(active open)
Steuerverbindung
Port L
(passive open)
dem Server einen Befehl, für den eine Datenverbindung erforderlich ist (z. B. retrieve, store, list, etc.).
Die Datenverbindung kann auf drei Arten etabliert werden, die durch drei Modi realisiert sind:
Standard-, Port-, und Passive-Modus.
SV
SV
Zeitlicher Verlauf
Standard-Modus Wie Abbildung 11.6(a) zeigt,
erfolgt der Aufbau der Datenverbindung, indem der
Server die Verbindung durch ein active open zwiAbbildung 11.4.: Aufbau der Steuerverbindung.
schen seinem lokalen Port L − 14 und Port N des
Client herstellt. Um diesen bereits für die SteuerverFTP-Server
FTP-Client
bindung verwendeten Port erneut zum Aufbau der
Datenverbindung nutzen zu können, ist es notwenUSER <Benutzername>
N
dig, dass der Client Port N beim passive open mit
L
ed.
SO_REUSEADDR kennzeichnet. Dies hat allerdings
L
331 Password requir
N
den entscheidenden Nachteil, dass nach dem serverseitigem Schließen der Verbindung aufgrund des
PASS <Passwort>
TIME_WAIT-Zustands, der in Abschnitt 7.3.1 erläuN
L
tert wird, für 2MSL Sekunden keine erneute Datenged in.
L
230 User <...> log
verbindung zwischen diesen Ports aufgebaut werden
N
kann.
Abbildung 11.6(b) stellt die zeitliche Abfolge der
Befehle
zum Aufbau der Datenverbindung dar und
Abbildung 11.5.: Befehlsabfolge zur Anmeldung
zeigt
im
Speziellen, dass die Datenverbindung direkt
am Server.
im Anschluss an den Befehl des Client aufgebaut wird
– also noch bevor der Server eine Antwort schickt.
zu Abbildung 11.4, den Verbindungsaufbau durch ein Die Antwort übermittelt der Server somit erst, wenn
active open vom Port N zum Port L des Servers. die Datenverbindung etabliert wurde und der Transfer
Port N sollte dabei möglichst kein Standard-Port sein. zwischen Client und Server möglich ist.
Der Port für die Steuerverbindung auf dem Server ist
Da der TIME_WAIT-Zustand im Standard-Modus
in der Regel Port 21 – kann aber bei den meisten er- jedoch ein grundlegendes Problem darstellt, wird diehältlichen FTP-Servern verändert werden.
ser Modus in der Regel nicht unterstützt und es erfolgt
Nach dem erfolgreichen Aufbau der Verbindungen ein Rückgriff auf den Port- oder Passive-Modus.
sendet der Server im Normalfall eine spontane Antwort, um zu signalisieren, dass die Verbindung aufge- Port-Modus Im Port-Modus wird die Datenverbaut wurde.
bindung nicht zu Port N, sondern zu dem frei wählbaren Port M des Client aufgebaut (vgl. Abbildung 11.7(a)), wodurch die Probleme, die sich durch
11.3.1.2. Anmeldung am FTP-Server
den TIME_WAIT-Zustand ergeben, umgangen werNachdem die Steuerverbindung zwischen dem Client den. Die Spezifikation des verwendeten Ports erfolgt
und dem Server erfolgreich etabliert wurde, ist eine dabei durch den Client, indem dieser den port-Befehl
Authentifikation erforderlich, durch die dem Client und die entsprechenden Parameter an den Server
der Zugriff zum Server ermöglicht wird. Die Anmel- übermittelt.
dung folgt dabei dem Schema aus Abbildung 11.5 und
Der Befehl hat folgende Struktur:
umfasst das Übermitteln des Benutzernamens und des
PORT a1,a2,a3,a4,p1,p2
entsprechenden Passworts an den FTP-Server.
Die obligatorischen Parameter a1 , a2 , a3 , a4 , p1 und
p
2 beschreiben die IP-Adresse und den Port, zu der
11.3.1.3. Aufbau der Datenverbindung
der Server die Verbindung aufbaut:
Der Aufbau der Datenverbindung wird stets durch den
IP:
a1 .a2 .a3 .a4
Client initiiert und ist notwendig, wenn Dateien übertragen oder Verzeichnisinhalte abgerufen werden. Um
4 Da die Steuerverbindung in der Regel Port 21 verwendet, ist der
Port für die Datenverbindung 20.
den Verbindungsaufbau einzuleiten, sendet der Client
103
11. File Transfer Protocol (FTP)
FTP-Server
enver
bindung
Port L - 1
(active open)
(a) Port-Verbindungs-Koordination.
SV
Dat
Port L
DV
(REUSEADDR)
Steuerverbindung
N
SV
Port N
(passive open)
Zeitlicher Verlauf
FTP-Server
FTP-Client
N
N
DV
FTP-Client
N
<Befehl> [<Paramet
er>]
L
Aufbau der Datenverbindu
ng
connection.
150 Opening data
Datenübertragung
L-1
L
L-1
(b) Abfolge der Befehle der Steuerverbindung (SV) und
Auswirkungen auf die Datenverbindung (DV).
Abbildung 11.6.: Aufbau der Datenverbindung im Standard-Modus.
Port:
p1 · 256 + p2 ;
0 ≤ p1 ≤ 255
0 ≤ p2 ≤ 256.
Beispiel:
PORT 141,35,3,16,75,19
IP-Nummer:
Port:
Adresse:
141.35.3.16
75 · 256 + 19 = 19219
141.35.3.16:19219
Nach der Übermittlung der IP-Adresse und des
Ports wird der Verbindungsaufbau durch das Senden
eines Befehls initiiert, woraufhin der Server die Datenverbindung zwischen seinem lokalen Port L − 1
und dem Client-Port M etabliert. Abbildung 11.7(b)
stellt den vollständigen Ablauf und der Befehlsfolge
und die Auswirkung auf die Datenverbindung dar.
Allerdings ergeben sich auch im Port-Modus gewisse Schwierigkeiten:
Die für den Server relevanten Daten (IP-Adresse
und Port) werden im Datenbereich eines IP-Pckets
übertragen, weshalb bei Verwendung von Network
Adress Translation (NAT) eventuell Probleme auftreten. NAT übersetzt in der Regel nur die Daten im IPHeader und nicht die im Datenbereich, was zur Folge
hat, dass die an den Server übermittelten Daten außerhalb des lokalen (NAT-)Netzes ungültig sind und
somit keine Datenverbindung zwischen Client und
Server aufgebaut werden kann.
Ein weiteres Problem entsteht durch das feste Format, mit dem IP-Adressen im Port-Modus übermittelt werden. Dieses Format basiert auf IPv4 und ist
somit nicht für IPv6-Adressen geeignet, weshalb das
104
File Transfer Protocol nicht ohne Weiteres zu IPv6
kompatibel ist.
Neben den Schwierigkeiten mit NAT und IPv6
stellt der stetige Portwechsel beim Aufbau der Datenverbindung ein Problem für Firewalls dar. Eine
Firewall muss deshalb in der Lage sein, eingehende Datenverbindungen zu erkennen, um diese nicht
zu blockieren. Dieses Problem lässt sich allerdings
meist durch die Verwendung des Passive-Modus beheben. Eine Lösung für die Schwierigkeiten, die
mit NAT und IPv6 auftreten, bietet dagegen die im
RFC 2428 [AOM98] spezifizierte Erweiterung, die
bisher jedoch kaum Verbreitung gefunden hat.
Passive-Modus Im Passive-Modus erfolgt der
Aufbau der Datenverbindung nicht durch den Server,
sondern direkt durch den Client. Dabei wird die Verbindung zwischen einem frei wählbarem Port M des
Client und einem durch den Server bestimmten Port P
etabliert (vgl. Abbildung 11.8(a)).
Für diese Realisierung ist es vorab notwendig, den
Server von der Verwendung des Passive-Modus in
Kenntnis zu setzen. Dazu sendet der Client den passive-Befehl an den Server. Als Antwort übermittelt
der Server seine IP-Adresse und den Port, zu dem die
Verbindung hergestellt werden soll. Das Format der
IP-Adresse und des Ports ist dabei mit dem Format,
dass für den port-Befehl verwendet wird, identisch.
Nachdem der Client die IP-Adresse und den Port erhalten hat, sendet er den entsprechenden Befehl an
den Server und initiiert den Aufbau der Datenverbindung. Der vollständige Befehlsablauf wird in Abbildung 11.8(b) dargestellt.
11.3. Verbindungs-Management
FTP-Server
FTP-Client
N
PORT a1, a2, a3,
a4, p1, p2
SV
L
successful.
200 PORT command
L
Datenverbindung
Zeitlicher Verlauf
SV
Port M
(passive open)
Steuerverbindung
DV
Port N
M
SV
FTP-Server
FTP-Client
N
N
DV
N
M
L
Aufbau der Datenverbindu
Port L
Port L - 1
(active open)
(a) Port-Verbindungs-Koordination.
<Befehl> [<Paramet
er>]
ng
L-1
connection.
150 Opening data
Datenübertragung
L
L-1
(b) Abfolge der Befehle der Steuerverbindung (SV) und
Auswirkungen auf die Datenverbindung (DV).
Abbildung 11.7.: Aufbau der Datenverbindung im Port-Modus.
FTP-Server
FTP-Client
N
PASV
N
e Mode
227 Entering Passiv
p2).
p1,
a4,
(a1, a2, a3,
Datenverbindung
Zeitlicher Verlauf
SV
Port M
(active open)
Steuerverbindung
DV
Port N
M
SV
FTP-Server
FTP-Client
N
N
DV
SV
L
M
(a) Port-Verbindungs-Koordination.
<Befehl> [<Paramet
er>]
L
Aufbau der Datenverbindu
ng
P
Port L
Port P
passive open)
L
connection.
150 Opening data
Datenübertragung
L
P
(b) Abfolge der Befehle der Steuerverbindung (SV) und
Auswirkungen auf die Datenverbindung (DV).
Abbildung 11.8.: Aufbau der Datenverbindung im Passive-Modus.
105
11. File Transfer Protocol (FTP)
System A
System B
Der Passive-Modus bietet im Unterschied zu
den anderen Modi gewisse Vorteile. Einerseits werDatentransfer-Funktion
Datentransfer-Funktion
den Probleme, die im Standard-Modus durch den
Transformation
Transformation
TIME_WAIT-Zustands auftreten, umgangen, und
Datentransfer
der
der
(1 Byte ´ 8 bit)
Daten
Daten
zum anderen lassen sich einige (jedoch nicht alle) Schwierigkeiten, die durch die Verwendung von
Firewalls auftreten beseitigen. Bezüglich NAT und
DateiDateisystem
system
IPv6 existieren im Passive-Modus allerdings dieselben Nachteile, die auch im Port-Modus vorhanden
sind. Dementsprechend ist es notwendig – mit Blick
auf die zukünftige Entwicklung des Internets – die Abbildung 11.9.: Übertragung der Daten beim
File Transfer Protocol.
Kompatibilität der Client und Server zu IPv6 herzustellen.
11.3.2.1. Datentypen
Durch den Datentyp wird der grundlegende Typ der
Daten festgelegt. Der FTP-Befehl dafür ist:
TYPE <A | E | I | L <byte>>
ASCII-Typ* Beim ASCII-Typ werden die Daten von
der systemspezifischen ASCII-Kodierung in das
8 bit NVT-ASCII-Format umgewandelt und im
5 Während der Entwicklung des File Transfer Protocols existierten auch Systeme, in denen ein Byte nicht durch 8 bit dargestellt
wurde.
106
Beispiel: Darstellung des Zeilenumbruchs
NVT ASCII:
<CR><LF>
Windows:
Linux:
Macintosh:
<CR><LF>
<LF>
<CR>
Da der Zeilenumbruch auf den verschiedenen Systemen unterschiedlich dargestellt wird, kommt es durch
die Transformation zur Datenveränderung. Dementsprechend werden die Daten zwischen Windows-,
Linux- und Macintosh-Systemen folgendermaßen
transformiert:
,
Windows
<CR><LF>
NVT ASCII
<CR><LF>
Linux
<LF>
,
Das File Transfer Protocol wurde unter Berücksichtigung verschiedener Systeme und Architekturen entworfen und ermöglicht dadurch auch den Datentransfer zwischen heterogenen Systemen. Um diese Flexibilität zu erreichen, werden die Daten vor der Übertragung aus dem systemspezifischen Format in eine standardisierte Form umgewandelt, bevor sie nach Abschluss des Transfers in dass auf dem Zielsystem vorhandene Format konvertiert werden. Die Datentransferfunktionen des Client und des Servers sind hier neben der Transformation auch für die Übertragung der
Daten zuständig, die stets byteweise erfolgt. Unabhängig vom System wird ein Byte als eine Folge von
8 bit, dargestellt.5 Ein Überblick über den Datentransfer ist in Abbildung 11.9 dargestellt.
Die Transformation und die Übertragung der Daten
kann durch verschiedene FTP-Befehle gesteuert werden. Allerdings unterstützt die Mehrheit der Implementierungen diese Befehle nur unzureichend, weshalb die Optionen, die am weitesten Verbreitung gefunden haben, im Folgenden mit einem * gekennzeichnet werden.
Anschluss an die Übertragung in die ASCIIRepräsentation des Zielsystems konvertiert. Dabei kann es speziell beim Datentransfer zwischen
heterogenen Systemen zu Datenveränderungen
kommen, da die Daten ohne Transformation auf
unterschiedlichen Systemen nicht korrekt dargestellt werden.
,
11.3.2. Datenübertragung und
Übertragungsmodi
Macintosh
<CR>
EBCDIC-Typ Der EBCDIC-Typ ermöglicht die effiziente Übertragung von Textdateien, wenn der
Client und der Server das EBCDIC Format verwenden.
Image/Binary-Typ* Beim Image-Typ werden die
Daten als Folge von Bits übertragen, wobei keine
Transformationen stattfinden.
Local-Typ Der Local-Typ erlaubt die Festlegung
der logischen Bytegröße, wodurch der Transfer
11.3. Verbindungs-Management
Für den ASCII- und den EBCDIC-Typ kann ein optionaler Parameter angegeben werden, der die zu verwendende Formatierung festlegt. Der FTP-Befehl für
die Formatsteuerung lautet:
N
QUIT
SV
L
221 Goodbye.
L
N
SV
11.3.2.2. Formatsteuerung
FTP-Server
FTP-Client
Zeitlicher Verlauf
zwischen Systemen mit unterschiedlichen Bytegrößen möglich wird.
N
Abbau der Steuerverbindung
L
Abbildung 11.10.: Abbau der Steuerverbindung.
TYPE <A [N|T|C] | E [N|T|C]>
Non-Print* Die Datei enthält keine zusätzlichen
Formatinformationen.
Telnet Format Control Die Datei enthält TelnetFormatinformationen.
Carriage Control (ASA) Die
Datei
Fortran-(ASA-)Formatinformationen.
enthält
11.3.2.3. Struktur der Daten
Neben dem Datentyp und der Formatsteuerung lässt
sich auch die interne Struktur der zu übertragenden
Dateien festlegen. Der FTP-Befehl für die Datenstrukturierung ist:
• Page-Strukturen durch die Festlegung einer
Last Page signalisiert.
Block -Modus Die Daten werden blockweise übertragen. Jeder Block besteht dabei aus einem
Header und den Nutzdaten. Das Dateiende wird
im Header festgelegt.
Compressed-Modus Die Daten werden blockweise übertragen und durch eine einfache Lauflängenkodierung komprimiert. Ein Block enthält
einen Header und die Nutzdaten.
11.3.3. Verbindungsabbau und
Wiederaufnahme der
File-Struktur* Die Dateien haben keine interne
Übertragung
STRU <F|R|P>
Struktur und sind zusammenhängend.
Im letzten Teil des Abschnitts „VerbindungsRecord-Struktur Die Dateien werden aus sequen- Management“ wird gezielt auf den Abbau der
tiellen Datensätzen aufgebaut.
Steuer- und Datenverbindung eingegangen, bevor
Page-Struktur Die Dateien sind nicht zusammen- abschließend der im File Transfer Protocol spezihängend und bestehen aus mehreren Teilen (so- fizierte Mechanismus zur Wiederaufnahme einer
abgebrochenen Übertragung erläutert wird.
genannten pages).
11.3.2.4. Übertragungsmodi
11.3.3.1. Abbau der Steuerverbindung
Der Übertragungsmodus legt fest, mit welcher Methode die Daten übertragen werden. Der FTP-Befehl zu
Wahl des Übertragungsmodus ist:
Mit dem Schließen der Steuerverbindung wird eine
FTP-Sitzung beendet. Wie Abbildung 11.10 zeigt, initiiert der Client den Abbau durch das Senden des Befehls quit. Nach der Übermittlung der Antwort wird
die Steuerverbindung entweder durch den Client oder
den Server geschlossen.
MODE <S|B|C>
Stream-Modus* Die Daten werden als kontinuierlicher Bytestrom übermittelt. Das Dateiende 11.3.3.2. Abbau der Datenverbindung
wird bei:
Die Datenverbindung wird im Unterschied zur Steu• File-Strukturen durch das Schließen der erverbindung nur temporär während der DatenüberDatenverbindung signalisiert.
tragung benötigt. Deshalb wird die Datenverbindung
• Record-Strukturen durch End-Of-Record- nach Beendigung des Transfers geschlossen. Der Ab(EOR-) und End-Of-File-(EOF-)Markie- bau zählt dabei primär zur Aufgabe des Servers und
rungen signalisiert.
erfolgt in den folgenden Fällen:
107
11. File Transfer Protocol (FTP)
FTP-Server
SV
FTP-Client
N
N
Spezifikation des Übertragungsmodus
(Standard-, Port-, Passivmodus)
L
soll, an den Server. Anschließend wird der Datentransfer durch den Befehle store oder retrieve initiiert.
Die Wiederaufnahme ist allerdings nur beim ImageTyp möglich.
REST <Byte-Positi
on>
SV
N
N
RETR|STOR <Paramete
r>
L
11.4. Das File eXchange
Protocol
L
Das File eXchange Protocol (FXP) ist eine Erweiterung des File Transfer Protocol, die im RFC 959
spezifiziert wird und den direkten Datentransfer zwischen zwei FTP-Servern ermöglicht. FXP stellt allerdings kein eigenes Protokoll dar, es verwendet lediglich verschiedene Eigenschaften des File Transfer
Protocol, um die Übertragung zwischen zwei Servern
zu ermöglichen. Dazu werden, in Analogie zu Abbildung 11.12, zwei Steuerverbindungen von einem
FTP-Client zu den entsprechenden Servern aufgebaut.
Im Falle einer Datenübertragung wird die Datenverbindung nicht zwischen dem Client und den Servern,
sondern direkt zwischen den Servern etabliert.
Durch die Verwendung von FXP ergeben sich folgende Vorteile: Die Datenübertragung findet direkt
zwischen den Servern statt und wird nicht indirekt
über den Client abgewickelt. Dadurch wird die Netzwerkverbindung des Client nicht unnötig belastet und
die CPU-Auslastung des Client ist geringer. Die Übertragungsraten werden nicht durch den Client, sondern
nur durch die Verbindung zwischen den Servern bestimmt. Somit kann unabhängig vom Client ein sehr
hoher Durchsatz erreicht werden, wenn die Server eine sehr schnelle Anbindung haben.
FXP wird in der Regel vom normalen Anwender
nicht benötigt, findet aber speziell bei Administratoren, die verschiedene Server verwalten und große Datenmengen transferieren müssen, Anwendung. Daneben hat FXP auch in der sogenannten Warez-Szene
seine Anhängerschaft gefunden, die es zur schnellen
Verbreitung von Dateien verwenden. FXP ermöglicht
allerdings auch den Missbrauch des Protokolls durch
die sogenannte FTP Bounce Attack, bei der der Client
eine Verbindung zu einem FTP-Server aufbaut und
versucht, über diesen Zugriff zu einem anderen Rechners zu erlangen. Auf öffentlich zugänglichen Systemen ist FXP deshalb in der Regel deaktiviert.
FXP basiert grundsätzlich auf denselben Mechanismen, die auch bei dem einfachen Client-Server
Modell des File Transfer Protocols Anwendung finden. Allerdings existieren beim Aufbau der Datenverbindung gewisse Besonderheiten, da diese zwischen
den beiden Servern etabliert wird. Die Befehlsabfol-
Aufbau der Datenverbindung
DV
DV
SV
Zeitlicher Verlauf
SV
L
<...>
350 Restarting at
VE to
RIE
RET
Send STORE or
initiate Transfer.
connection.
150 Opening data
L
N
Datenübertragung
Abbildung 11.11.: Befehlsabfolge bei der Wiederaufnahme der Datenübertragung.
• Wenn der Server das Ende der Übertragung nur
durch das Schließen der Datenverbindung anzeigen kann.
• Falls der Client den abort-Befehl an den Server
sendet.
• Wenn der Client mit einer Anweisung den Port
ändert.
• Wenn die Datenverbindung geschlossen wird.
• Falls nicht behebbare Fehler auftreten.
Der Client schließt die Verbindung nur dann, wenn
die Daten, die er an den Server sendet (z. B. mittels
store), vollständig übertragen worden sind, und das
Ende des Transfers nur durch den Verbindungsabbau
mitgeteilt werden kann.
11.3.3.3. Wiederaufnahme der
Datenübertragung
Im Falle einer Unterbrechung des Datentransfers ermöglicht das File Transfer Protocol die Wiederaufnahme der Übertragung durch die in Abbildung 11.11
dargestellte Befehlsabfolge.
Der Client spezifiziert dazu den Übertragungsmodus und sendet den Befehl restart mitsamt der BytePosition, an der die Übertragung fortgesetzt werden
108
11.4. Das File eXchange Protocol
FTP-Client
Anwender
Anwender
Schnittstelle
FTP-Server
Server
Protokoll
Interpreter
Steuer
verbindung
Server
Datentransfer
Funktion
Dateisystem
Anwender
Protokoll
Interpreter
FTP-Server
Steuer
verbindung
Server
Protokoll
Interpreter
Server
Datentransfer
Funktion
Datenverbindung
Dateisystem
Abbildung 11.12.: Darstellung einer FXP-Verbindung zwischen einem Client und zwei Servern.
FTP-Server A
SV
PASV
N1
L
L
227 Entering Passiv
e Mode
(a1, a2, a3, a4,
p1, p2).
N1
N2
PORT a1, a2, a3,
a4, p1, p2
SV
L
successful.
200 PORT command
L
SV
N2
STOR <Parameter>
RETR <Parameter>
N1 N2
L
DV
Zeitlicher Verlauf
FTP-Server B
FTP-Client
L
Aufbau der Datenverbindung
L-1
SV
L
DV
P
P
150 Opening data
connection.
connection.
150 Opening data
L
N1 N2
Datenübertragung
L-1
Abbildung 11.13.: Befehlsabfolge zum Aufbau der Datenverbindung beim File eXchange Protocol.
109
11. File Transfer Protocol (FTP)
ge verläuft dabei analog zu Abbildung 11.13. Nachdem der Client die Steuerverbindung zu beiden Servern aufgebaut hat, sendet er an Server A den passive-Befehl und erhält dadurch dessen IP-Adresse und
den Port zu dem die Verbindung aufgebaut werden
soll. Diese Daten sendet der Client anschließend mit
dem port-Befehl an Server B. Nachdem der Client
das store- und retrieve-Kommando an den jeweiligen Server übermittelt hat, öffnet A seine Verbindung
passiv, während B den Aufbau der Datenverbindung
durch ein active open initiiert. Der Datentransfer beginnt, nachdem beide Server die entsprechende Antwort an den Client gesendet haben.
11.5. Fazit
Das File Transfer Protocol wurde als Protokoll zur
Datenübertragung entwickelt und ist seit 1985 standardisiert. Dabei unterscheidet es sich von anderen Übertragungsarten insbesondere dadurch, dass es
zwei TCP-Verbindungen verwendet.
Bei genauerer Betrachtung offenbart das Protokoll allerdings einige Schwachstellen. So existieren neben den verschiedenen Problemen mit Firewalls und der NAT-Adressübersetzung insbesondere
sicherheitstechnische Mängel, da das Protokoll über
praktisch keine Verschlüsselungsmechanismen verfügt und somit aus sicherheitstechnischer Sicht mangelhaft ist. Dementsprechend sollte in sicherheitskritischen Bereichen Alternativen wie dem SSH File
Transfer Protocol der Vorzug gegeben werden. Weil
FTP in der ursprünglichen Form nur IPv4-kompatibel
ist, ergeben sich hinsichtlich IPv6 ebenfalls gewisse
Schwierigkeiten, da eine Erweiterung für IPv6 zwar
existiert, bisher jedoch von den wenigsten Implementierungen eingesetzt wird.
Trotz dieser Probleme wird das File Transfer
Protocol auch in der Zukunft in vielen Bereichen Verwendung finden, da es eine sehr effektive Möglichkeit
bietet, Daten über das Internet zur übertragen und einem großen Personenkreis zur Verfügung zu stellen.
110
12. Simple Mail Transfer Protocol (SMTP)
Qiguang Yan
12.1. Einleitung
E-Mail (von Electronic Mail), einer der am häufigsten
benutzten Internetdienste, bezeichnet eine auf elektronischem Weg in Computernetzwerken übertragene, briefartige Nachricht. Um E-Mails zu verschicken,
wird das SMTP-Protokoll benutzt. SMTP ist die Abkürzung für Simple Mail Transfer Protocol und liegt
in der Anwendungsschicht im TCP/IP-Protokollstapel
(Tabelle 12.1). Die Kommunikation erfolgt über den
Port 25.
Im Abschnitt 12.2 werden das dem SMTPProtokoll zu Grunde liegende Modell und die
Funktionsweise vorgestellt. Danach werden im Abschnitt 12.3 die SMTP-Befehle und SMTP-StatusCodes besprochen. Anschließend wird ESMTP im
Abschnitt 12.4 erklärt. Besondere Aufmerksamkeit wird dabei den ESMTP-Befehlen AUTH und
STARTTLS gewidmet. Anhand eines Beispiels wird
gezeigt, wie die wichtigsten ESMTP-Befehle zum
Versenden einer E-Mail verwendet werden. Daran anschließend wird im Abschnitt 12.5 zwischen „Offenem Mail-Relay“ und „SMTP-Relay-Server“ unterschieden. Im Abschnitt 12.6 wird der Ablauf des EMail-Routings betrachtet. Dabei wird anhand geeigneter Beispiele gezeigt, wie der MX-Record zur Zustellung von E-Mails verwendet wird. Der Aufbau der
E-Mail wird im Abschnitt 12.7 besprochen. Besondere Aufmerksamkeit wird der Received-Zeile und MIME gewidmet. Abschließend wird im Abschnitt 12.8
eine kurze Zusammenfassung gegeben.
TCP/IP-Schicht
Anwendung
Transport
Internet
Netzwerk
Protokoll
SMTP
TCP
IP (IPv4, IPv6)
Ethernet Token Ring
...
Tabelle 12.1.: SMTP im TCP/IP-Protokollstapel.
E-Mail-Benutzer verwenden einen Benutzeragenten, um Nachrichten zu lesen und zu schreiben. EMail-Nachrichten enthielten ursprünglich nur Text,
aber der so genannte MIME-Standard (siehe Abschnitt 12.7.2) erlaubt heute auch Textformatierung
und Anhänge für E-Mail. Er wird von den meisten
Benutzeragenten unterstützt. Ursprünlich war unter
UNIX /bin/mail der Benutzeragent. Heute gibt es
mehrere Alternativen. Die gebräuchlichsten Benutzeragenten sind z. B. mh, pine, mutt für UNIX/Linux
und Outlook für Windows.
Ein Transportagent muss die Mail von einem Benutzeragenten übernehmen, die Adresse des Empfängers verstehen und die Mail an den entsprechenden
Host ausliefern. Für UNIX- und Linux-System stehen
mehrere Transportagenten zur Verfügung, beispielsweise sendmail postfix oder qmail.
Die vom Benutzer erstellten Nachrichten werden
vom Benutzeragenten in eine Warteschlange gestellt,
die der Transportagent verwaltet. Der Transportagent wartet, bis Nachrichten in seine Warteschlange gestellt werden. Dann überträgt er eine Kopie
der Nachrichten an die jeweiligen Empfänger. Um
Nachrichten an den entfernten Empfänger zu sen12.2. Funktionsweise
den, baut der Transportagent des Senders eine TCPVerbindung auf. Steht die Verbindung, arbeiten die
Das SMTP-Design basiert auf einem Kommunikati- beiden Transportagenten mit dem SMTP-Protokoll,
onsmodell nach Abbildung 12.1. In diesem Modell mit dem sich der Sender identifiziert, Empfängegibt es einen Benutzeragenten (Mail User Agent – radressen angibt und die Nachricht überträgt. Der
MUA) und einen Transportagenten (Message Transfer Transportagent des Senders fungiert dabei als SMTPAgent – MTA), welches die Hauptkomponenten des Client, der Transportagent des Empfängers als SMTPMail-Systems sind.
Server. Der SMTP-Client sendet die Nachrichten an
111
12. Simple Mail Transfer Protocol (SMTP)
Abbildung 12.1.: SMTP-Kommunikationsmodell.
den SMTP-Server, der eine Kopie der Nachricht in die
Mailbox des Empfängers stellt.
tigen SMTP-Status-Codes sind in der Tabelle 12.3
aufgelistet.
12.3. SMTP-Befehle und
SMTP-Status-Code
12.4. Extended SMTP (ESMTP)
Für den Austausch der E-Mails sind die Transportagenten zuständig. Untereinander verständigen sich
die Transportagenten mit ASCII-Kommandos. Dabei sendet der SMTP-Client dem SMTP-Server ein
Kommando und dieser antwortet mit einem StatusCode und einer Klartext-Meldung. In diesem Abschnitt werden die SMTP-Befehle und SMTP-StatusCodes diskutiert.
12.3.1. SMTP-Befehle
Die Kommunikation zwischen SMTP-Client und
SMTP-Server basiert auf ASCII-Kommandos.
Laut SMTP-Spezifikation muss eine SMTPImplementierung mindestens die folgenden acht
Kommandos laut Tabelle 12.2 unterstützen.
12.3.2. SMTP-Status-Code
Auf jedes Kommando vom SMTP-Client an den
SMTP-Server schickt der Server einen 3-stelligen
Status-Code mit Klartext-Meldung zurück. Die wich-
112
Als SMTP 1982 durch RFC 821 [Pos82] definiert
wurde, war die Anzahl von Hosts im Internet überschaubar. Da die Verbindungen langsam und instabil
waren, wurde auf Zuverlässigkeit großer Wert gelegt.
Authentifikation war nicht vorgesehen, somit war jeder Mailserver ein Open Relay (Abschnitt 12.5.1),
über den Mails an jeden anderen Knoten weitergeleitet werden konnten. Viele Jahre lang stellte dies auch
kein Problem dar, doch dann brach die Zeit der Spammer und des Werbemülls an, gefälschte Virenwarnungen und Würmer überschwemmten das Medium EMail [Wik06e].
1995 wurde mit Extended SMTP (ESMTP) durch
RFC 1869 [KFR+ 95] das Protokoll erweitert. ESMTP
erweitert SMTP um die Möglichkeit der Authentifikation per Passwortabfrage, um Spammern die Benutzung fremder SMTP-Gateways zu verwehren. Nutzt
ein E-Mail-Client die Erweiterungen von ESMTP,
meldet er sich beim SMTP-Server mit dem Kommando EHLO an. Antwortet der Server mit einer Fehlermeldung, kennt er ESMTP nicht und der Client muss
sich mit HELO anmelden.
In Tabelle 12.4 sind einige ESMTP-Befehle beschrieben, die sehr häufig benutzt werden. Die
12.4. Extended SMTP (ESMTP)
Kommando
Beschreibung
HELO
MAIL
RCPT
HELO startet die SMTP-Sitzung und identifiziert den Client am Server.
MAIL leitet die Mailübertragung ein und liefert gleich die Absender-Adresse mit.
RCPT gibt die Adresse eines oder mehrerer Empfänger an. Dieses Kommando kann deshalb
mehrmals ausgeführt werden.
Mit DATA wird die Übermittlung der eigentlichen E-Mail-Nachricht eingeleitet. Das Ende
wird mit <CR><LF>.<CR><LF> gekennzeichnet.
Mit RSET wird die bereits eingeleitete Mailübertragung abgebrochen. Die Verbindung zwischen Client und Server bleibt bestehen.
NOOP bewirkt eine Antwort vom Server. Damit wird die Verbindungstrennung durch einen
Timeout verhindert.
QUIT beendet die Verbindung zum SMTP-Server. Der Server liefert eine letzte Antwort
zurück.
DATA
RSET
NOOP
QUIT
Tabelle 12.2.: Grundlegende SMTP-Befehle.
Code
Beschreibung
211
214
220
221
250
251
252
354
421
450
451
452
500
501
502
503
504
550
551
552
553
554
System-Status oder System-Hilfe
Hilfe – Informationen zum Ausführen eines Kommandos
Server bereit
Server beendet Verbindung
Kommando ausgeführt
Keine lokale Mailbox – Weiterleitung an “forward path“
Überprüfung der Empfängeradresse nicht möglich – die Nachricht wird dennoch versendet
Starte Empfang der Mail – Beenden mit <CR><LF>.<CR><LF>
Service nicht verfügbar – Verbindung wird beendet
Aktion nicht ausgeführt – Mailbox nicht verfügbar
Aktion abgebrochen – Fehler beim Ausführen
Aktion abgebrochen – Nicht genügend System-Speicher
Syntax-Fehler – Kommando unbekannt
Syntax-Fehler – Parameter oder Argument falsch
Kommando nicht implementiert
Falsche Reihenfolge der Kommandos
Parameter unbekannt / nicht implementiert
Syntax-Fehler – Kommando unbekannt
Mailbox nicht lokal – “forward path“ versuchen
Aktion abgebrochen – Fehler bei der Speicherzuweisung
Aktion nicht ausgeführt – Mailbox-Name nicht erlaubt (Syntax inkorrekt)
Transaktion fehlgeschlagen (beim Verbindungsaufbau: Kein SMTP-Service verfügbar)
Tabelle 12.3.: Übersicht der SMTP-Status-Codes.
113
12. Simple Mail Transfer Protocol (SMTP)
ESMTP-Kommando
Beschreibung
8BITMIME
Mit 8BITMIME gibt der Server an, dass er die Verwendung des 8 bit-ASCIIZeichensatzes im Nachrichtentext erlaubt.
Mit SIZE gibt der SMTP-Server die maximale E-Mail-Größe in Byte an, die er
akzeptiert.
Mit EHLO meldet sich der ESMTP-Client beim SMTP-Server an und teilt ihm
auf diese Weise mit, dass er die ESMTP-Erweiterungen beherrscht.
Mit STARTTLS teilt der Server dem Client mit, dass er eine Verschlüsselung per
TLS wünscht. Mit dem Kommando STARTTLS leitet der Client dann die Verschlüsselung ein.
Durch die Einführung des Befehls AUTH wird eine Authentifikation mit Nutzername und Kennwort am Mailserver ermöglicht.
SIZE
EHLO
STARTTLS
AUTH
Tabelle 12.4.: ESMTP-Befehle.
Tabelle ist nicht vollständig. In den Abschnitten
12.4.1 und 12.4.2 werden die Befehle AUTH und
STARTTLS ausführlich erklärt. Anschließend wird in
Abschnitt 12.4.3 ein Beispiel vorgestellt.
12.4.1. AUTH
SMTP-AUTH bedeutet Authentifikation beim Mailversand. Der wichtigste Grund dafür ist, Benutzern
mit dynamischen IP-Adressen eine Möglichkeit zur
Identifikation gegenüber dem Transportagent zu geben. Dies wurde durch die Einführung des neuen Befehls AUTH ermöglicht. Nun bieten sich hier mehrere Möglichkeiten, das Passwort zu übermitteln. Der
wohl einfachste Weg ist AUTH PLAIN, bei dem das
Passwort im Klartext übermittelt wird. Dies ist im
heutigen Internetzeitalter nicht mehr zumutbar. Deswegen existieren Möglichkeiten, das Passwort verschlüsselt zu übermitteln. Bei der Benutzung von
TLS kann man jedoch gefahrlos AUTH PLAIN benutzen [Mye99].
12.4.2. STARTTLS
TLS bzw. SSL ist eine Möglichkeit, Datenverkehr auf
Layer 3 zu verschlüsseln. Bei SMTP wird TLS benutzt. Dies geschieht nach dem EHLO-Kommando
durch das Senden von STARTTLS. „Sprechen“ ein
SMTP-Client und ein SMTP-Server beide TLS, einigen sie sich von alleine auf die sichere Übertragung.
Dazu tauschen die beiden Rechner bei der Begrüßung,
dem Handshake, Zertifikate aus, mit denen sie sich
gegenseitig authentifizieren. Sie zeigen sich sozusagen die Personalausweise. Im Mail-Verkehr ist es aus
pragmatischen Gründen in der Regel so, dass sich
nur der die Mail entgegennehmende Server gegenüber dem Client ausweist. Ob der Client ein anderer
114
Mailserver ist, der Nachrichten weiterleiten will, oder
das Mail-Programm eines Users, ist dabei gleichgültig. Nun, da der Client dem Server vertrauen kann, einigen sich beide auf einen Verschlüsselungsalgorithmus und die geheimen Sitzungsschlüssel, mit der sie
den nachfolgenden Datenverkehr für Außenstehende
unlesbar machen [Hof99].
12.4.3. ESMTP-Beispiel
Das folgende Beispiel zeigt, wie die wichtigsten
ESMTP-Befehle zum Versenden einer E-Mail verwendet werden.
Zuerst stellen wir über Telnet eine Verbindung zu
einem SMTP-Server her. Der Port ist bei SMTPServern meist 25.
C: telnet mail.example.org 25
S: 220 mail.example.org ESMTP
Nach dem Verbindungsaufbau meldet sich der
Mailserver mit einer einzelnen Zeile. Sie enthält neben einem Erfolg-Statuscode (220) den Rechnernamen. Das Schlüsselwort ESMTP zeigt, dass eine erweiterte Version von SMTP akzeptiert wird.
Um die Verbindung zu initialisieren, begrüßen wir
den SMTP-Server mit einem freundlichen EHLO. Der
Befehl erwartet einen Parameter, der der Name des
SMTP-Servers ist.
C: EHLO example.net
S: 250 example.org Hello example.net
250 AUTH CRAM-MD5 LOGIN PLAIN
250 STARTTLS
250 8BITMIME
250 SIZE
Der SMTP-Server reagiert auf diese Begrüßung
und zeigt zusätzlich noch einige Befehle an, die vom
SMTP-Server unterstützt werden.
12.5. Mail-Relaying
Mit dem Befehl STARTTLS leitet der Client dann
die Verschlüsselung ein. Der Befehl soll vor den anderen Befehlen ausgeführt werden.
C: STARTTLS
S: 220 Go ahead
AUTH ermöglicht eine Authentifikation mit Nutzername und Kennwort am Mailserver. Die folgenden Zeilen demonstriert die Authentifikation mittels
des LOGIN-Verfahrens. Somit erfolgt eine Base64Kodierung (Abschnitt 12.7.2) des Benutzernamens
„hans“ [Wik06f].
C:
S:
C:
S:
C:
S:
AUTH LOGIN
334 VXNlcm5hbWU6
aGFucw==
334 UGFzc3dvcmQ6
c2Nobml0emVsbWl0a2FydG9mZmVsc2FsYXQ=
235 ok
Eine neue E-Mail beginnt immer mit dem Befehl
MAIL. Da wir gleichzeitig den Absender festlegen
möchten, können wir dies über MAIL FROM tun.
C: MAIL FROM: <[email protected]>
S: 250 ok
Wir können einen oder mehrere Empfänger über
das Kommando RCPT TO spezifizieren. Für mehrere
Empfänger wird das Kommando mehrere Male hintereinander eingegeben.
C: RCPT TO: <[email protected]>
S: 250 ok
Das DATA-Kommando leitet die eigentliche Mail
ein. Der MTA wechselt vom Kommando- in den Datenmodus, den er durch einen einzelnen Punkt ganz
am Ende des Textes wieder verlässt. Zur Mail gehören
Header (wieder mit Absender- und Empfängeradresse) und Body (Abschnitt 12.7):
C:
S:
C:
C:
C:
DATA
354 Go ahead.
From: <[email protected]>
To: <[email protected]>
Subject: Hallo
C: Hallo Fritz. Willkommen!
C: .
S: 250 Mail delivered.
Bleibt nur noch der Abschied:
C: QUIT
S: 221 smtp.web.de closing connection
12.5. Mail-Relaying
Man stellt E-Mails in der Regel nicht selbst zu, sondern liefert sie bei einem Mailserver seines Providers
ein, der sich dann um den Weitertransport kümmert.
Der Mailserver des Providers findet dann heraus, welcher Server die Mail für den Empfänger entgegennimmt und leitet sie entsprechend weiter. Beispielsweise schicken Kunden von T-Online ihre ausgehenden E-Mails an mailto.t-online.de, von wo sie dann
weiterverschickt werden. Diese Server werden auch
als Relay-Server bezeichnet, denn sie dienen nur als
Zwischenstation (Relay) für die E-Mails.
12.5.1. Offenes Mail-Relay
Als Offenes Mail-Relay wird ein Rechner B bezeichnet, der von jedem beliebigen Rechner A E-Mail annimmt und an beliebige Dritte C weiterleitet, obwohl
er weder für Mail von A noch für Mail an C zuständig
ist [Wik06c].
Über offene Mail-Relays können von außerhalb
kriminelle Inhalte oder Malware (z. B. Spam, Viren,
Phishing-Mails und Drohungen) verbreitet werden.
Dabei werden die Ressourcen des eigentlichen Verursachers (Bandbreite und Hardware) gespart und seine Identität bleibt gegenüber den Mail-Empfängern
verschleiert. Zur Lösung dieses Problems gibt es
verschiedene Methoden, z. B. SMTP AUTH als Erweiterung des SMTP-Protokolls (Abschnitt 12.4.1),
SMTP-after-POP und Verwendung eines SMTPRelay-Servers.
12.5.2. SMTP-Relay-Server
Als SMTP-Relay-Server, Mail-Relay-Server oder
Smarthost wird ein Mail-Server B bezeichnet, der von
einem Sender A E-Mail annimmt und an beliebige
Dritte C weiterleitet [Wik06g].
Anders beim offenen Mail-Relay nehmen SMTPRelay-Server entweder nur E-Mails der eigenen Kunden entgegen und leiten diese weiter, oder nehmen
Mails von überall an und leiten diese nur an die eigenen Kunden weiter.
12.5.3. Beispiele
In diesem Beispiel hat das Relay-System den
SMTP-Relay-Server mailhost in der lokalen Domain
tuc.noao.edu. Der SMTP-Relay-Server nimmt alle EMails von den Sendern in dieser Domain an. Wir können den Befehl host ausführen und betrachten, wie
sein DNS-Name definiert ist.
115
12. Simple Mail Transfer Protocol (SMTP)
Abbildung 12.2.: Ein Relay-System von zwei Organisationen.
sun% host mailhost
mailhost.tuc.noao.edu CNAME noao.edu
noao.edu
A 140.252.1.54
Alle Transportagenten in diesem Beispiel benutzen
SMTP.
Die Antwort des Befehls host enthält zwei
Zeilen. In der ersten Zeile handelt es sich um
ein CNAME Resource-Record (Details siehe Abschnitt 10.2.4). Die erste Zeile gibt an, dass der
DNS-Name mailhost.tuc.noao.edu als noao.edu definiert ist. In der zweiten Zeile wird mittels eines A
Resource-Record dem DNS-Namen noao.edu die IPAdresse 140.252.1.54 zugeordnet. Wenn der SMTPRelay-Server in der Zukunft geändert wird, brauchen
nur die Informationen im DNS geändert zu werden.
Die Mailkonfiguration jedes einzelnen Rechner in
dieser Domain braucht sich nicht zu ändern.
Viele Organisationen benutzen heute ein RelaySystem. Die Abbildung 12.2 zeigt zwei Organistionen, die SMTP-Relay-Server verwenden. In diesem
Beispiel gibt es vier Transportagenten zwischen Sender und Empfänger. Der lokale Transportagent auf
dem Sender-Host in Organistion A leitet die E-Mail
nur an seinen Relay-Transportagenten weiter. Dies erfolgt mittels einer SMTP-Verbindung im lokalen Netz
der Organisation. Der Relay-Transportagent in Organisation A leitet die E-Mail über das Internet an den
Relay-Transportagent in der Organisation B weiter,
der die E-Mail an den Host des Empfängers sendet.
12.6. E-Mail-Routing über
SMTP und DNS
116
Nachdem der SMTP-Relay-Server eine E-Mail von
einem E-Mail-Client entgegengenommen hat, ist er
für das Weiterleiten an den Ziel-SMTP-Server verantwortlich. Das DNS spielt wie bei den Protokollen
HTTP und FTP eine zentrale Rolle. Im DNS sind spezielle Einträge für die elektronische Post vorhanden:
die Mail Exchange Records (MX-Records). Über diese Einträge identifiziert der SMTP-Server den ZielSMTP-Server der Domain, die in der E-Mail-Adresse
des Empfängers angegeben ist. In den folgenden Beispielen, die Stevens’ Buch [Ste94] entnommen sind,
wird ausführlich diskutiert, wie der MX-Record zum
Senden der E-Mail verwendet wird.
12.6.1. Beispiel: MX-Record
Der Host mlfarm.com ist nicht direkt mit dem Internet
verbunden. Er hat zwei MX-Records, die auf zwei mit
dem Internet verbundene SMTP-Server verweisen.
sun% host -a -v -t mx mlfarm.com
12.6. E-Mail-Routing über SMTP und DNS
mlfarm.com
mlfarm.com
IN MX 10 mercury.hsi.com
IN MX 15 hsi86.hsi.com
Additional information:
mercury.hsi.com IN A 143.122.1.91
hsi86.hsi.com
IN A 143.122.1.6
3
0.505739 (0.0602)
sun.1143 > mercury.hsi.com.25 :
S 1617536000:1617536000(0) win 4096
4
0.985428 (0.4797)
mercury.hsi.com.25 > sun.1143:
S 1832064000:1832064000(0)
ack 1617536001 win 16384
5
0.986003 (0.0006)
sun.1143> mercury.hsi.com.25:
. ack 1 win 4096
6
1.735360 (0.7494)
mercury.hsi.com.25 > sun.1143:
P 1:90(89) ack 1 win 16384
Wir senden jetzt eine E-Mail an dem Host mlfarm.com.
sun% mail -v [email protected]
To: [email protected]
Subject: MX test message
.
Dann erhalten wir die folgenden Nachrichten:
Sending letter ... [email protected]...
Connecting to mlfarm.com via tcp...
mail exchanger is mercury.hsi.com
Trying 143.122.1.91...connected
220 mercury.hsi.com ...
In den Zeilen 3 bis 5 baut der Host sun mit dem
SMTP-Server des Hosts mercury.hsi.com eine TCPVerbindung auf. Der SMTP-Server schickt in der Zeile 6 einen Status-Code 220 zurück (Abschnitt 12.3.2).
Das bedeutet, dass der Transportagent eine DNS- Das Beispiel wird in der Abbildung 12.3 veranschauAbfrage nach den Mail Exchangern für mlfarm.com licht.
macht. Wenn er eine Antwort bekommt, sucht er sich
den MX mit der kleinsten Priorität heraus, in unserem 12.6.2. Beispiel: Zielhost nicht
Beispiel 10, und macht eine erneute DNS-Abfrage,
erreichbar
um die IP-Adresse des MX zu bekommen.
Wir können mittels tcpdump diese SMTP- Wenn ein Zielhost nicht erreichbar ist, können wir
Verbindung mitschneiden. Vor dem Senden der E- mittels MX-Records nach weiteren Mail Exchangern
Mails vom Host sun soll er so konfiguriert werden, suchen. Dies wird an folgendem Beispiel verdeutlicht.
Wir können mittels des Programms host ermitteln,
dass er kein Relay verwendet. Das Ziel ist, dass
die SMTP-Verbindung zwischen den Hosts sun und dass der Host sun zwei MX-Records hat.
mercury.hsi.com betrachtet werden kann. Weiterhin
wird der Host noao.edu als Nameserver benutzt. Die sun% host -a -v -t mx sun.tuc.noao.edu
sun.tuc.noao.edu MX 0 sun.tuc.noao.edu
mittels tcpdump mitgeschnittenen Pakete sehen wie
sun.tuc.noao.edu MX 10 noao.edu
folgt aus:
1
0.0 sun.1624 > noao.edu.53:
2+ MX? mlfarm.com.
2
0.445572 (0.4456)
noao.edu.53 > sun.1624:
2* 2/0/2 MX mercury.hsi.com. 10
Additional information:
sun.tuc.noao.edu A 140.252.1.29
sun.tuc.noao.edu A 140.252.13.33
noao.edu
A 140.252.1.54
Nachdem
der
SMTP-Server
des
Hosts
sun.tuc.noao.edu abgeschaltet worden ist, senden wir
In der ersten Zeile macht der Transportagent ei- eine E-Mail vom Host vangogh.cs.berkeley.edu zu
ne DNS-Abfrage nach den Mail Exchangern für ml- ihm. Dies sieht wie folgendes aus:
farm.com. Das Plus-Zeichen nach der 2 steht für
das Setzen des recursion-desired-Flags (siehe Ab- % mail -v [email protected]
schnitt 10.3). Die Antwort in der Zeile 2 zeigt, dass A test to a host that’s down.
EOT
das authoritative-answer-Flag gesetzt ist (das Sternchen nach 2). Das impliziert, dass der Namenserver [email protected]... Connecting
noao.edu zuständig für die Domain mlfarm.com ist. to sun.tuc.noao.edu. (smtp)...
2/0/2 bedeutet, dass zwei Antwort-RR (die zwei MXRR), keine Authority-RR und zwei zusätzliche A-RR [email protected]... Connecting
(die zwei IP-Adressen der Hosts in MX-RR) in der to noao.edu. (smtp)...
220 noao.edu
Antwort enthalten sind.
117
12. Simple Mail Transfer Protocol (SMTP)
Abbildung 12.3.: E-Mail-Routing über SMTP und DNS.
Der SMTP-Server sucht sich zuerst den MX
mit der kleinsten Priorität heraus. In unserem Beispiel wird der Zielhost sun.tuc.noao.edu zum Senden ausgewählt. Dann verbindet sich der Host vangogh.cs.berkeley.edu mit dem Host sun.tuc.noao.edu.
Der Host sun.tuc.noao.edu ist nicht erreichbar. Anschließend versucht vangogh.cs.berkeley.edu es mit
dem nächsten MX-Record mit höherer Priorität,
nähmlich noao.edu. Der Host noao.edu ist erreichbar und liefert einen Status-Code 220 zurück (Abschnitt 12.3.2).
Wir können mittels tcpdump diese SMTPVerbindung mitschneiden. Die Pakete sehen wie folgt
aus:
Der Verbindungsaufbau wird von sun abgelehnt in
der Zeile 2. Anschließend versucht es vangogh mit
der nächsten IP-Adresse für sun (140.252.13.33). Der
Verbindungsaufbau wird wieder abgelehnt in der Zeile 3.
Der SMTP-Client kann nicht zwischen den verschiedenen Fehlermeldungen vom SMTP-Server unterscheiden. Das führt dazu, dass der SMTP-Client
die nächste IP-Adresse versucht, wenn eine IPAdresse nicht erreichbar ist. In manchen Fällen ist es
nicht günstig. Im Fall von „host unreachable“ kann
z. B. dieselbe IP-Adresse beim zweiten Versuch erreicht werden.
1
0.0 vangogh.3873 > 140.252.1.29.25:
S 2358303745:2358303745(0) ...
12.7. Aufbau einer E-Mail
2
0.000621 (0.0006)
140.252.1.29.25 > vangogh.3873:
R 0:0(0) ack 2358303746 win 0
3
0.300203 (0.2996)
vangogh.3874 > 140.252.13.33.25:
S 2358367745:2358367745(0) ...
4
0.300620 (0.0004)
140.252.13.33.25 > vangogh.3874;
R 0:0(0) ack 2358367746 win 0
Um Computern die Weiterleitung bzw. die Darstellung zu erleichtern, sind E-Mails intern in zwei Teile geteilt. Der für Weiterleitung wesentliche Teil mit
Sender- und Empfängerzeilen heißt Header. Der Body enthält den Nachrichtentext der E-Mail.
12.7.1. Header
Die in Abbildung 12.4 dargestellte E-Mail wurde von [email protected] an [email protected] versendet. Die Zeilennummern
In der ersten Zeile sendet vangogh ein SYN-Paket wurden hingefügt, damit in der nachfolgenden Bemit einer Sequenznummer 2358303745 an die pri- schreibung besser darauf verwiesen werden kann. Sie
märe IP-Adresse für den Host sun (140.252.1.29). sind nicht Teil der eigentlichen Nachricht.
118
12.7. Aufbau einer E-Mail
Abbildung 12.4.: Typischer E-Mail-Header.
Zeile 1 wurde von /bin/mail oder mail.local
bei der endgültigen Auslieferung hinzugefügt. Dadurch kann der Server – falls vorhanden – eine erste
und einfache Benutzerüberprüfung durchführen, um
Spamming einzudämmen. Aufgrund der Fälschbarkeit lässt sich Spamming aber nicht sicher vermeiden.
Es gibt zu viele offene Mailserver (Abschnitt 12.5.1),
die keinerlei Überprüfung vornehmen. Zeile 2 gibt
den Return-Path an, der eine andere Adresse enthalten
kann, als die From-Zeile später im Mail-Header. Fehlermeldungen sollen an die Adresse im Return-Path
geschickt werden.
Die Zeilen 3 bis 8 dokumentieren, wie die Nachricht auf dem Weg zu der Mailbox des Benutzers über
verschiedene Relay-Server weitergereicht wurde. Jeder Relay-Server (Abschnitt 12.5), der die Nachricht
verarbeitet, fügt dem Header eine Received-Zeile hinzu. Die Received-Zeilen werden immer oberhalb der
bisherigen Zeilen eingefügt, wodurch sich von unten nach oben der genaue Weg, den die Nachricht
nahm, nachvollziehen lassen sollte. Jede dieser Received-Zeilen beinhaltet den Namen der sendenden Maschine, den Namen der empfangenden Maschine, die
MTA-Version auf der empfangenden Maschine und
den Empfänger.
Zeile 11 enthält die Message-ID, die sich von einer Warteschlangen-ID unterscheidet und innerhalb
des weltweiten Mail-Systems eindeutig ist. Eindeutig heißt hier, dass keine E-Mail von einem beliebigen Absender mindestens innerhalb der nächsten zwei
Jahre die gleiche Message-ID haben darf. Sie wird
der Nachricht hinzugefügt, sobald diese in das MailSystem eingespeist wird.
12.7.2. Multimedia Internet Mail
Extensions (MIME)
Die ersten E-Mail-Systeme waren nur für die Übertragung von 7 bit-Daten ausgelegt. Andere Daten mussten vor dem Verschicken manuell in 7 bit-Darstellung
umgewandelt (z. B. mittels uuencode) und beim
Empfänger entsprechend zurückgewandelt werden.
Selbst die Umlaute musste man „verstümmeln“.
Durch die Hardwareausstattung von heutigen
Rechnern (Rechenleistung, Audio, hochauflösende Bildschirme, Scanner, . . . ) ist natürlich auch
Multimedia-Mail praktikabel geworden. Dazu kommen gestiegene Übertragungskapazitäten im Netz. Im
Juni 1992 wurde die Spezifikation für MultimediaNachrichten unter dem Namen Multipurpose Internet
Mail Extensions (MIME) veröffentlicht.
MIME ermöglicht das Versenden von binären Anhängen und Mails, die aus mehreren Teilen bestehen.
Realisiert wird dies von den beteiligten Mailprogram-
119
12. Simple Mail Transfer Protocol (SMTP)
Abbildung 12.5.: Eine einfache Multipart-Message.
men durch Verwendung des Content-Type-Headers
„multipart/mixed“ und die Festlegung einer speziellen Zeichenfolge, die als Grenze (boundary) zwischen
diesen Teilen dient (und natürlich in der Mail sonst
nicht vorkommen darf). Innerhalb der einzelnen Teile der Mail kann man wieder angeben, ob es sich um
einen Text oder eine Binär-Datei handelt. Binäre Daten werden nach einem speziellen Verfahren (Base64)
für die Übertragung umgewandelt.
Das nächste Beispiel (Abbildung 12.5) zeigt eine
solche Mail, so wie sie per SMTP übertragen wird,
aber vom Benutzer in dieser Form nicht gesehen wird.
Sie besteht aus Text mit Sonderfunktionen, einem
Bild-Teil und einer Referenz auf ein Postscript-File
in einem FTP-Archiv.
12.8. Zusammenfassung
Im einfachsten Fall wird die E-Mail direkt von dem
Host des Senders zu dem des Empfängers übertragen. Ein Hintergrundprogramm im Host des Senders
fungiert als Client und nimmt mit dem Mailserver
im Host des Empfängers Kontakt auf. Die beiden
Programme übertragen Nachrichten über das SMTPProtokoll. Der Server speichert die Nachrichten in der
Mailbox des Empfängers auf dem entfernten Host.
120
Man stellt E-Mails in der Regel nicht selbst zu, sondern liefert sie bei einem Mailserver seines Providers
ein, der sich dann um den Weitertransport kümmert.
Der Mailserver des Providers findet dann heraus, welcher Server die Mail für den Empfänger entgegennimmt und leitet sie entsprechend weiter.
Nachdem der SMTP-Relay-Server eine E-Mail von
einem E-Mail-Client entgegengenommen hat, ist er
für das Weiterleiten an den Ziel-SMTP-Server verantwortlich. Das DNS spielt hierbei eine zentrale Rolle. Im DNS sind spezielle Einträge für die elektronische Post vorhanden. Das sind die Mail Exchange
Records (MX-Records). Über diese Einträge identifiziert der SMTP-Server den Ziel-SMTP-Server der
Domain, die in der E-Mail-Adresse des Empfängers
angegeben ist.
Da E-Mail-Systeme Nachrichten nur in ASCII-Text
darstellen, können in eine E-Mail keine Binärdaten
direkt eingebunden werden. Der MIME-Standard ermöglicht es einem Sender, binäre Daten zu kodieren
und mit einer Nachricht zu übertragen.
13. Network File System (NFS)
Friedemann Boelter
13.1. Allgemeine
Informationen zu NFS
Die folgenden Seiten befassen sich mit NFS, dem Network File System. Es stellt Dienste bereit, um transparent auf Dateien, welche auf verteilten Datenträgern
innerhalb eines Netzwerkes verfügbar sind, zugreifen zu können. Hierbei handelt sich um eine ClientServer-Anwendung. Das System ist so angelegt, dass
für den Nutzer die Zugriffe auf lokale und entfernte Dateien praktisch keinen Unterschied machen. Intern werden für die Zugriffe auf einen NFS-Server
automatisch Anfragen, die Remote Procedure Calls
(RPC), generiert, und über das Netzwerk versendet. Abbildung 13.1.: NFS im OSI-Schichtenmodell.
Die RPC-Antworten des Servers werden ebenfalls automatisch empfangen und für die Anwendung des
Nutzers aufbereitet. Somit ist NFS in die Anwen- gründet auf dem einheitlichen Kommunikationsprodungsschicht des ISO-OSI Referenzmodells 13.1 ein- tokoll. RPC gibt es in verschiedenen Varianten, die
interessante Erscheinungsform für das NFS ist Sunzuordnen [Wik06b].
RPC.
13.2. Remote Procedure Call
13.2.1. Funktionsweise von RPC
Remote Procedure Calls (RPC) sind eine Möglichkeit, Operationen auf einem mit dem Netzwerk verbundenen Rechner auszuführen, die von einem anderen Netzwerkrechner gesteuert werden. Dabei ist es
nicht notwendig, dass beide Rechner eine einheitliche
Architektur oder gleiches Betriebssystem verwenden,
insofern die genutzte Hard- und Software RPCs handhaben kann. Hierbei werden nicht direkt Befehle zwischen Client und Server verschickt, sondern beide
Rechner haben eine Kommunikationsinstanz, einen
Dolmetscher zwischengeschaltet. Diese kommunizieren miteinander über das Netzwerk. Die beteiligten
Rechner sorgen sich darum, dass diese Zwischeninstanzen kompatibel zu den internen Vorgängen sind.
RPCs treten meistens in Client-Server-Strukturen auf.
Dabei ist der Client der Befehlssender und der Server
der Befehlsempfänger. Die Tatsache, dass diese Architektur übergreifende Kommunikation funktioniert,
Wie schon im vorherigen Abschnitt erwähnt, besitzen Client und Server einen Dolmetscher, der für die
direkte Kommunikation untereinander sorgt. Dieser
wird als Client- bzw. Server-Stub bezeichnet. Der Ablauf eines solchen Nachrichtenaustausch ist in Abbildung 13.2 veranschaulicht und wird im folgenden genauer erläutert. Kommt es während der Ausführung
des Clientprogramms zum Aufruf einer remote procedure, dann wird der Aufruf weitergegeben an den
Client-Stub, der Teil des RPC-Package ist. Der ClientStub übersetzt die Parameter des Prozeduraufrufs in
eine Nachricht und sendet diese via Netzwerk an den
Server. Der Server-Stub nimmt die Nachricht entgegen und übersetzt die geschickten Parameter in für
den Server verständliche Formate und ruft die entsprechende Operation auf. Die Rückgabewerte des
Servers werden intern an den Server-Stub übermittelt, dieser übersetzt sie in eine Netzwerknachricht
121
13. Network File System (NFS)
Abbildung 13.2.: Aufruf eines RPC (links) und Rückgabe eines RPC (rechts).
und sendet sie an den Client-Rechner. Die gesendete
Nachricht wird als RPC auf dem Client erkannt und
von dem Client-Stub bearbeitet, dieser übersetzt sie
in ein systeminternes Format und leitet die Ergebnisse an den ursprünglichen Aufruf zurück. Aus Sicht
der Client-Anwendung wurde direkt mit dem Server
in scheinbar einer Sprache kommuniziert.
Auf diese Weise lassen sich einfach Programme implementieren, die Ressourcen fremder Rechner
nutzen, ohne die genaue Architektur oder die verwendete Software des Zielrechners zu kennen. Des Weiteren ist es für die Nutzung unerheblich, welches Kommunikationsprotokoll oder Übertragungsmedium verwendet wird. Der Client- und Server-Stub kümmern
sich um den fehlerfreien und reibungslosen Ablauf
der Übertragung. Eine weitere Vereinfachung durch
das RPC-Package besteht darin, dass die Parameter
des jeweiligen Aufrufs automatisch in die entsprechenden Formate der verschiedenen Systeme übersetzt werden. Hierzu wird eine einheitliche im RPCPackage definierte Darstellung eingesetzt, die External Data Representation (XDR).
zwischen Client und Server und wird vom Client gesetzt. Stellt der Client beim Empfang eines RPC fest,
dass die Nummer nicht gleich der im gesendeten Aufruf ist, dann wird die Nachricht verworfen und solange gewartet, bis die korrekte Antwort vom Server gesendet wird. Jeder neue Aufruf bekommt eine neue
XID. Der nächste Teil beschreibt, ob eine Nachricht
ein Call (0) oder ein Reply (1) ist. Diese Unterscheidung ist wichtig, denn es könnte sein, dass ein System sowohl als Client als auch als Server agiert. RPC
version, program, version und procedure number charakterisieren eindeutig, welche RPC-Version verwendet und welche Prozedur in welcher Version auf dem
Server ausgeführt werden soll. Der nächste Abschnitt,
die credentials, enthalten nähere Informationen über
den Client, diese sind für Zugriffsrechte und zur Authentifikation des Clients beim Server vorgesehen. Es
folgt der verifier; dieser Abschnitt enthält ähnliche Informationen wie der vorhergehende, nur sind sie in
diesem Fall verschlüsselt. Im Gegensatz zu den bisherigen Feldern haben diese beiden keine feste Länge.
Die übrigen Bytes des Datagramms sind reserviert für
die Eingabeparameter der Prozedur. Anhand der Größe des Datagramms und der Länge der bisherigen Ab13.2.2. Aufbau von SunRPCschnitte kann der Server-Stub ermitteln, wie groß das
Nachrichten
Parameterfeld ist. Die Parameter werden in einem eiEs gibt inzwischen mehrere Versionen von RPC, die genen Format, welches das RPC-Package bereitstellt,
auf einen jeweils größeren Operationsbereich ausge- übertragen.
Der RPC-Reply (Abbildung 13.3 rechts) ist bis zur
legt sind. Auch die verwendeten Kommunikationsprotokolle variieren. So gibt es auf TCP und UDP ba- XID analog aufgebaut. reply (1) beschreibt das Datasierende RPC-Definitionen und sogenannte transport- gramm als eine Antwort. Der folgende Abschnitt gibt
unabhängige Varianten, die mit praktisch jeder durch den Status der Bearbeitung des RPCs wieder. 0 heißt
den Kernel bereitgestellten Kommunikationsart arbei- in dem Fall accepted. Hiermit kann der Server mitten können. Der Aufbau der Netzwerknachrichten äh- teilen, wenn ein Fehler bei der Annahme der Nachnelt sich in den meisten Fällen, so dass sich im folgen- richt durch den Server-Stub erkannt wird, z. B. bei
den auf eine spezielle Form, den RPC-Nachrichten nicht übereinstimmender RPC-Version. Sollte auch
der Server sich authentifizieren sollen, so kann dies
über UDP, bezogen werden kann.
Der RPC-Request in Abbildung 13.3 links enthält im verifier-Teil entsprechend verschlüsselt geschezunächst IP- und UDP-Header, die aus den Kapiteln hen. Der accept status weist auf Fehler hin, die bei der
1 und 5 bekannt sind. Die transaction_ID (XID) ent- Wahl der Prozedur und bzw. bei der Übertragung der
spricht im wesentlichen der aus dem TCP-Protokoll auszuwählenden Prozedur vorgekommen sind. 0 steht
bekannten Sequenznummer. Sie dient zum Abgleich hier wiederum für eine erfolgreiche Verarbeitung. Die
122
13.2. Remote Procedure Call
Abbildung 13.3.: Aufbau eines aufrufenden RPC (links) und Antwort (rechts) unter Verwendung
von UDP.
Ergebnisparameter werden auf die gleiche Weise wie
beim Senden codiert und in den procedure results angegeben.
ruf der RPC wird nicht explizit eine Verbindung zwischen Sender und Empfänger aufgebaut. Erst wenn eine Anwendung des Client eine remote procedure ausführt und der Client-Stub mit der Bearbeitung beauftragt wird, wird eine entsprechende Verbindung zum
13.2.3. External Data Representation Server aufgebaut (active open für TCP) oder eine bis(XDR)
herige Verbindung weiter genutzt. Des Weiteren ist es
Da sich die Darstellung der Parameter auf verschiede- möglich, dass der Server nicht nur RPCs von nur einen Rechnersystemen unterscheiden kann, bietet das nem Client bekommt, sondern gerade für AnwendunRPC-Package ein allgemeines Format für die Über- gen wie NFS kommen Anfragen von mehreren Clitragung der Parameter an. Dieses nennt man Ex- ents. Hierfür gibt es auf dem Server, aber auch auf
ternal Data Representation (XDR). In XDR werden den Clients, ein Liste aller durch RPCs verwendeten
nicht nur die Eingabe- und Ergebniswerte formatiert, Ports. Jedes Programm jeder Prozedur in jeder Versisondern der Inhalt des gesamten Datagramms außer on bekommt einen eigenen Port und somit einen eigeder IP-Header und dem Header des Transportproto- nen TCP- bzw. UDP-Endpunkt. Die Verwaltung diekolls. Aufgrund dieser Standardisierung muss ledig- ser Liste wird durch den Portmapper durchgeführt.
lich jeder Rechner das RPC-Package entsprechend Wird nun eine RPC-Anfrage ausgeführt, so erfragt
seiner internen Spezifikation der Parameter imple- die Client-Seite durch einen RPC an den Portmapmentieren, um RPCs korrekt empfangen und senden per, auf welchem Port die gewünschte Prozedur in der
zu können [CPS95]. Für die gebräuchlichen Datenty- jeweiligen Version des bestimmten laufenden Serverpen wie Integer, Float, usw. gibt es in diesem Stan- Programms erreichbar ist. Nach einer Antwort durch
dard fest definierte Darstellungen. So werden z. B. den Portmapper kommuniziert der Client direkt mit
alle Integer-Zahlen mit 4 Bytes kodiert. Aus diesem der entsprechenden Port auf dem Server. Der PortGrund hat auch jeder Abschnitt aus dem unteren Be- mapper selbst ist dabei ein RPC-Server-Programm,
reichen in 13.3, welcher eine einfache Zahl darstellt, also Teil des RPC-Packages.
In den neueren Servern werden, um die Last ein4 B reserviert.
zelner Aufgaben und auch die benutze Portanzahl zu
reduzieren, so genannte Daemons wie z. B. der Mount
13.2.4. Portmapper und Daemons
Daemon für NFS eingesetzt. Hierbei handelt es sich
um mehrfach ausgeführte Instanzen eines Programms
Die Übertragung von RPCs geschieht unabhängig daim Kernel, die praktisch parallel arbeiten. Dabei sind
von, ob der Server oder der Client überhaupt bereit
sie über einen Port erreichbar.
sind, eine Nachricht entgegen zu nehmen. Vor Auf-
123
13. Network File System (NFS)
Die Liste des Portmapper lässt sich mit Hilfe von
rpcinfo -p ausgeben.
13.3. Das NFS-Protokoll
Die Einleitung beschrieb das NFS-Protokoll als eine
transparente Art der Zugriffe auf Dateien und Verzeichnissen auf einem Server im Netzwerk. Transparenz bedeutet hier, dass Dateien über das Netzwerk
abgefragt werden können, ohne dass die jeweilige
Anwendung einen Unterschied zwischen lokalen und
NFS-Zugriffen macht. Dies wird über die Anwendung
der RPCs gewährleistet, da die Abwicklung der Kommunikation gänzlich vom RPC-Package übernommen
wird. Somit werden externe Filesysteme virtuell in
das eigene System integriert. Hierin liegt auch der
Grund für die Client-Serverstruktur von NFS. Gleichwertige Kommunikationspartner würden die Kontrolle über den Informationsaustausch gegenseitig regeln
müssen, dies kostet Zeit und Rechenleistung, was
die effiziente Arbeitsweise mit verteilten Ressourcen
mindern würde. Deshalb wird nur einem Partner, dem
Client, die Kontrolle über den Transfer gewährt. Dies
wiederum ermöglicht aufgabenorientierte Implementierung auf beiden Seiten. NFS gibt es mittlerweile in
4 Versionen. Die am weitesten verbreitete Version ist
NFS 3.
13.3.1. Ablauf eines NFS-Zugriffs
Greift eine beliebige Anwendung während der Ausführung auf eine Datei zu (siehe Abbildung 13.4), so
weiß erst der Kernel des Clients, ob diese Datei lokal oder über NFS erreichbar ist. Handelt es sich um
einen NFS-Zugriff, so wird eine RPC generiert und an
den Server geschickt. Dies geschieht über das Netzwerkinterface via TCP oder UDP an den entsprechenden Port des Servers. Häufig wird UDP verwendet,
Port 2049 ist standardmäßig implementiert. Der NFSServer empfängt den RPC und gibt an das lokale System den jeweiligen Zugriff auf die Dateien weiter. Das
Ergebnis dieses Zugriffs wird anschließend in eine
RPC-Antwort gesteckt und an den Client übermittelt.
Zuletzt stellt der Kernel die Ergebnisse des Zugriffs
der aufrufenden Anwendung zu Verfügung.
Offensichtlich entsteht hier ein Engpass, denn
selbst moderne Netzwerktechnik ermöglicht nicht
solche Zugriffszeiten wie auf lokale Speichermedien. Auch Fehler in der Übertragung verzögern das
schnelle Arbeiten. Um die Zeiten für den Zugriff auf
größere Daten zu beschleunigen, werden sowohl auf
Client- als auch auf Server-Seite Daemons eingesetzt.
124
So werden scheinbar parallel mehrere Anfragen bearbeitet. Die Verwaltung der jeweiligen Daemons obliegt dabei dem jeweiligen Betriebssystem.
13.3.2. Dateizugriff via File Handles
Für die Anzeige und den Zugriff auf Dateien, erstellt
der Server bei NFS ein Objekt (file handle), welches
die jeweilige Datei oder das Verzeichnis eindeutig referenziert. Dieser Handle wird an den Client übermittelt. Jeder Zugriff des Client auf eine Datei auf dem
NFS-Server erfolgt nur noch über diesen file handle. Dabei ist es für den Client nicht möglich, dieses
Objekt selbst in irgendeiner Weise zu bearbeiten. Für
die Anwendungen des Clients macht es im Übrigen
keinen Unterschied, wie dieses Objekt beschaffen ist
oder generiert wird. Die Implementierung des NFSServers kümmert sich um die Verwaltung dieses file
handle.
In der aktuellen NFS-Version haben die Handles eine Größe von 64 B.
13.3.3. Einbinden von NFS auf dem
Client
Um NFS einsetzen zu können, muss der Client das
Server-NFS in seinen Verzeichnisbaum einbinden,
dies geschieht über einen festgelegten Mountpunkt.
Der zugehörige UNIX-Befehl ist mount (siehe Abbildung 13.5). Nach dem Start des NFS-Servers wird
der Mount Daemon gestartet, erstellt einen UDP- und
TCP-Endpunkt und registriert diese via RPC bei dem
eigenen Portmapper. Der NFS-Server ist nun betriebsbereit. Wird der Mount-Befehl des Client gestartet,
so wird zuerst der Port des Mount Daemon des Servers über RPC an den Portmapper abgefragt. Der
Server antwortet mit den entsprechenden Ports. Darauf stellt der Client eine RPC-Anfrage an den Port
des Mount Daemon, um das entsprechenden Dateisystem zu integrieren. Der Daemon antwortet mit dem file handle des angeforderten Dateisystems. Als letzte
Aktion wird der file handle im NFS-Client registriert
und an gegebener Stelle (Mountpunkt) in das lokale
Dateisystem eingebunden. Der Mount Daemon kann
dabei auch Anfragen zurückweisen, falls der Client
nicht die Berechtigung hat, das bestimmte Dateisystem einzubinden. Mount Daemon, Portmapper und
der mount-Befehl sind alles Anwendungen des Nutzers, also nicht vom Kernel ausgelöst.
Abbildung 13.6 zeigt den Verzeichnisbaum eines
NFS-Client. Die Unterverzeichnisse des Mountpunktes (home) werden durch den Kernel automatisch auf
das Server-Dateisystem verwiesen. Sollte der lokale
13.3. Das NFS-Protokoll
Abbildung 13.4.: Aufbau eines NFS-Systems.
Abbildung 13.5.: Ablauf eines Aufruf des mount-Befehls.
125
13. Network File System (NFS)
Abbildung 13.6.: Verzeichnisstruktur aus Sicht des Clients.
Ordner Dateien oder Verzeichnisse enthalten, so sind
diese nicht erreichbar, solange das NFS eingebunden
bleibt.
13.3.4. Die NFS-Prozeduren
Es gibt 21 RPC-Prozeduren [CPS95] in NFS Version 3. Nicht alle dieser Funktionen sind gleich häufig
in der Ausführung, so dass einige Funktionen, die speziell auf die Eigenschaften des UNIX-Betriebssystem
aufbauen und somit schwer in andere Umgebung umgesetzt werden können, in gewissen System nicht belegt sind. Die wichtigsten Lese- und Schreibzugriffe
sind jedoch von jedem System realisiert. Es folgt eine
Liste der wichtigsten (häufigsten) Funktionen:
write Analog zum Lesen werden file handle, Byteanzahl und Startpunkt mit den zu schreibenden
Bytes übergeben.
create Erstellt eine Datei auf dem NFS-Server.
remove Löscht eine Datei auf dem NFS-Server.
mkdir Erstellt ein Verzeichnis.
rmdir Löscht ein Verzeichnis.
readdir Gibt die Unterverzeichnis und Dateien eines
Verzeichnisses an. Entspricht dem „lookup“ für
Verzeichnisse.
13.3.5. Zustandslosigkeit und
Idempotenz
getattr Gibt die Eigenschaften und Attribute der gewünschten Datei zurück
Um den Betrieb mit vielen Clients zu gewährleisten,
wird, wie schon erwähnt, dem Server die Kontrolle
setattr Setzt die änderbaren Attribute wie Rechte,
über die Art und Abfolge der Datenzugriffe entzoZeitpunkt der letzen Änderung usw. einer Datei
gen. Über den Fortschritt und den Stand der angelookup Vor jedem Öffnen von Dateien wird dieser forderten Daten weiß nur der NFS-Client Bescheid.
Befehl ausgeführt, es wird ein file handle für den Da der Server keinen Zustand hat, können unerwartete Ereignisse wie Verbindungsabbrüche nicht durch
jeweiligen Zugriff zurückgegeben.
den Client abgefragt werden. In solchen Fällen wieread Der Inhalt einer NFS-Datei kann ausgelesen derholt der Client solange die gewünschten Anfragen,
werden. Hierzu wird der file handle und die Zahl bis der Server antwortet. Dies hat natürlich den Vorder zu lesenden Bytes, sowie der Startpunkt in- teil, das Ausfälle des Servers den Fortschritt der Verarbeitung des Client in keiner Weise abbrechen. Der
nerhalb der Datei angegeben.
126
13.4. Experimente rund um NFS
Client merkt lediglich, dass der Server länger benötigt, um eine Anfrage zu bearbeiten. Nachteil der Zustandslosigkeit ist, dass der Server mit scheinbar beliebigen Anfragen bombardiert werden könnte, ohne
zu merken, ob diese Befehlsabfolge überhaupt Sinn
ergibt. Ein Prinzip, diese Unabhängigkeit und somit
die Eigenschaften des NFS zu ermöglichen, ist die
Idempotenz der verwendeten Prozedur. Das heißt, eine Prozedur ist so angelegt, dass sie bei der Ausführung mit denselben Eingaben zu jedem Zeitpunkt
auch das gleiche Ergebnis liefert. „read“ ist ein Beispiel einer solchen Prozedur. Wie im vorherigen Abschnitt erwähnt, wird Byteanzahl und Startpunkt der
zu lesenden Datei angegeben. Dies ermöglicht, dass
jede RPC-Anfrage auch den gewünschten Teil der Datei wiedergibt. Es sind aber nicht alle Prozeduren von
NFS auch idempotent. Geht zum Beispiel die erfolgreiche Antwort auf ein „create“ oder ein „remove“
verloren, so sendet der Client diesen nach gewisser
Zeit erneut, der Server hat aber die geforderte Datei
nicht mehr oder bereits erstellt. Dies würde eine negative Antwort des Servers bedeuten; der Client würde
eine fehlerhafte Auskunft an die aufrufende Anwendung weitergeben, ohne diese erkannt zu haben. Genau für solche Sonderfälle besitzt der NFS-Server eine Eweiterung um ein begrenztes Gedächtnis (ReplyCache). Dieser speichert für bekannte Prozeduren, die
nicht idempotent sind, die zuletzt gesendeten Antworten. Kommt es nun zu einer RPC-Retransmission
durch den Client, wird die Antwort mit der entsprechenden XID nochmals gesendet, ohne die betreffende Aktion auszuführen.
13.4. Experimente rund um
NFS
Die folgenden Experimente wurden im Rahmen des
Seminars durchgeführt. Die verwendeten Systeme unterstützen UNIX-NFS-Zugriffe.
13.4.1. Experiment: Einfache
NFS-Zugriffe
Im Versuch in Abbildung 13.7 wird von einem NFSClient eine einfache Anwendung zum Lesen einer
Datei auf dem NFS-Server gestartet. Die auftretende
Kommunikation wird abgehorcht und im folgenden
erläutert. Die Datei test enthält nur wenige beliebige
Buchstaben, so dass der Datenverkehr überschaubar
bleibt. test befindet sich auf dem NFS-Server. Die
Kommunikation wird mit
$ tcpdump ...
auf dem Port 2049 abgehört. Wie schon in den vorhergehenden Abschnitten erwähnt, ist der Port 2049 für
die NFS-Kommunikation standardmäßig implementiert, dies erleichtert die Auswertung der Ausgabe.
Folgender Befehl wird eingegeben:
$ cat test
hello world
Nach wenigen Millisekunden erhält man die Antwort,
den Inhalt der Datei, angezeigt. Der Client sendet für
die jeweilige Datei ein „getattr“ und darauf ein „access“. „access“ ist dabei eine NFS3-Funktion, welche
die Zugriffsrechte des Clients überprüft. Es folgt eine
„read“-Anfrage über den gewählten file handle. Die
Anfragen werden jeweils mit „reply ok“ beantwortet.
Wie man leicht sehen kann, löst eine Anwendung des
Nutzers automatisch eine Vielzahl von RPC-Requests
aus. Der Nutzer hat keine Einsicht in diese Vorgänge.
13.4.2. Experiment: NFS-Zugriffe
während eines
Verbindungsabbruchs
Der Versuch in Abbildung 13.8 soll die Zustandslosigkeit des NFS-Servers veranschaulichen. Der
Grundgedanke ist, während eines NFS-Zugriffs den
Server abstürzen zu lassen oder die physikalische
Netzwerkverbindung zu trennen. Anschließend müsste der Server neu gestartet werden, um alle evtl. Speicherungen der bisherigen Kommunikation zu löschen.
Würde nun die physikalische Verbindung wieder aufgebaut, so müsste der NFS-Zugriff an der Stelle des
Verbindungsabbruch wieder aufgenommen werden.
Der Nutzer sollte dabei nichts weiter feststellen als eine längere Wartezeit bei der Ausführung der Anwendung.
Auf dem vorliegenden Testnetzwerk ist diese harte
Trennung nicht möglich, darum wurde der Ablauf ein
wenig modifiziert. Der Client und Server entspricht
den aus Abbildung 13.7. Allerdings wird ein zusätzlicher VPN-Tunnel zwischen dem Client und Server
eingerichtet. Nach Installation ist der Server über die
physische und über ein virtuelle Verbindung erreichbar. Über die virtuelle Schnittstelle wird nun NFS auf
dem Client eingebunden.
$ mount ipc654-mp:/export/tmp /tcp
Anschließend wird die virtuelle Verbindung beendet. Dies löscht auch automatisch den für diese Verbindung verwendeten Cache des Servers. Vom Client
aus wird nun eine einfache Anwendung
127
13. Network File System (NFS)
Abbildung 13.7.: Struktureller Aufbau und Ablauf des 1. Experiments
Abbildung 13.8.: Struktureller Aufbau und Ablauf des 2. Experiments.
128
13.5. Fazit
$ ls -i tcp/TCP_IP
gestartet, die auf den gerade eingerichteten NFS-Teil
zugreift. Diese Kommunikation wird abgehört. Nach
einiger Zeit wird der VPN-Tunnel wieder gestartet. Ist
der Startvorgang beendet, kann man feststellen, dass
die Ausgabe der Anwendung des Clients ordnungsgemäß erfolgt ist. Dabei gibt es keine Fehlerausgabe oder ähnliches, lediglich die größere Wartezeit ist
am Client-Rechner zu bemerken. Ein Blick auf die abgehörten Daten lässt den Grund dafür erkennen: Der
Client stellt Anfragen an den Server mit einer XID,
während die Serververbindung unterbrochen ist. Man
erkennt, dass der Client weiterhin versucht, die Anfrage zu senden. Sobald die Verbindung wieder aufgebaut wird, bekommt der Client exakt die Antwort auf
den wiederholt gesendeten RPC, leicht zu erkennen
an der entsprechenden XID. Die folgenden RPC werden normal übermittelt, ohne einen Unterschied durch
den Serverausfall zu verdeutlichen.
13.5. Fazit
Wie die Experimente gezeigt haben, merkt der
Anwender von dem Ablauf der einzelnen RPCKommunikationsprozesse zwischen Client und
Server nichts. Das NFS wird wie ein lokales Dateisystem angesprochen und bearbeitet. Sogar die
Einrichtung von NFS auf dem Client stellt keinen
großen Aufwand dar. Prinzipien wie die Idempotenz
der Prozeduren und die Zustandslosigkeit des Servers
sichern den ordnungsgemäßen und transparenten
Ablauf des Datenzugriffs. Die Organisation der
übertragenen Inhalte über standardisierte Typdarstellung (XDR) und der Zugriff über eigens definierte
file handle ermöglichen System und Architektur
übergreifende Kommunikation.
Die neuste NFS-Version 4 geht in die Richtung,
die Sicherheit der übertragenen Daten zu steigern,
um den NFS-Betrieb innerhalb lokaler Netzwerke
auf LAN-übergreifende Strukturen zu erweitern. Das
Konzept der Zustandslosigkeit lässt sich dabei nicht
mehr verwirklichen, da der Server Informationen zum
Client behalten muss, um die Geschwindigkeit einzelner Verbindungen zu optimieren.
129
Literaturverzeichnis
[AOM98]
A LLMAN , M., S. O STERMANN und C. M ETZ: FTP Extensions for IPv6 and NATs. RFC 2428
(Proposed Standard), September 1998.
[APS99]
A LLMAN , M., V. PAXSON und W. S TEVENS: TCP Congestion Control. RFC 2581 (Proposed
Standard), April 1999. Updated by RFC 3390.
[BAFW03] B LANTON , E., M. A LLMAN, K. FALL und L. WANG: A Conservative Selective
Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP. RFC 3517 (Proposed
Standard), April 2003.
[Bak95]
BAKER , F.: Requirements for IP Version 4 Routers. RFC 1812 (Proposed Standard), Juni 1995.
Updated by RFC 2644.
[Bhu71]
B HUSHAN , A.K.: File Transfer Protocol. RFC 114, April 1971. Updated by RFCs 133, 141,
171, 172.
[Bra89]
B RADEN , R.: Requirements for Internet Hosts - Communication Layers. RFC 1122 (Standard),
Oktober 1989. Updated by RFCs 1349, 4379.
[Com00]
C OMER , D OUGLAS (editor): Internetworking with TCP/IP – Principles, Protocols, and
Architectures. Prentice Hall, 4th edition, 2000.
[CPS95]
C ALLAGHAN , B., B. PAWLOWSKI, and P. S TAUBACH: NFS Version 3 Protocol Specification.
RFC 1813 (Informational), June 1995.
[CS91]
C OMER , D OUGLAS E. and DAVID L. S TEVENS: Internetworking with TCP/IP, volume 1:
Principles, Protocols and Architectures. Prentice Hall, 1991.
[Dee91]
D EERING , S.: ICMP Router Discovery Messages. RFC 1256 (Proposed Standard), September
1991.
[DH98]
D EERING , S. and R. H INDEN: Internet Protocol, Version 6 (IPv6) Specification. RFC 2460
(Draft Standard), December 1998.
[Dro97]
D ROMS , R.: Dynamic Host Configuration Protocol. RFC 2131 (Draft Standard), March 1997.
Updated by RFCs 3396, 4361.
[FH99]
F LOYD , S. and T. H ENDERSON: The NewReno Modification to TCP’s Fast Recovery
Algorithm. RFC 2582 (Experimental), April 1999. Obsoleted by RFC 3782.
[FLYV93]
F ULLER , V., T. L I, J. Y U, and K. VARADHAN: Classless Inter-Domain Routing (CIDR): an
Address Assignment and Aggregation Strategy. RFC 1519 (Proposed Standard), September
1993. Obsoleted by RFC 4632.
[FMMP00] F LOYD , S., J. M AHDAVI, M. M ATHIS, and M. P ODOLSKY: An Extension to the Selective
Acknowledgement (SACK) Option for TCP. RFC 2883 (Proposed Standard), July 2000.
[Fre06]
F REE BSD G ERMAN D OCUMENTATION P ROJECT: Das FreeBSD-Handbuch, chapter 27.2.
Gateways und Routen. FreeBSD Project, 2006.
http://www.freebsd.org/doc/de/books/handbook/network-routing. Zugriff am 21.09.2006.
131
Literaturverzeichnis
[HD03]
H INDEN , R. and S. D EERING: Internet Protocol Version 6 (IPv6) Addressing Architecture.
RFC 3513 (Proposed Standard), April 2003. Obsoleted by RFC 4291.
[Hed88]
H EDRICK , C.L.: Routing Information Protocol. RFC 1058 (Historic), June 1988. Updated by
RFCs 1388, 1723.
[HKC+ 96] H UBBARD , K., M. KOSTERS, D. C ONRAD, D. K ARRENBERG, and J. P OSTEL: Internet
Registry IP Allocation Guidelines. RFC 2050 (Best Current Practice), November 1996.
[HL97]
H OROWITZ , M. and S. L UNT: FTP Security Extensions. RFC 2228 (Proposed Standard),
October 1997.
[Hof99]
H OFFMAN , P.: SMTP Service Extension for Secure SMTP over TLS. RFC 2487 (Proposed
Standard), January 1999. Obsoleted by RFC 3207.
[How06]
H OWSTUFFWORKS . COM: Domain Name System. http://computer.howstuffworks.com/dns.htm,
2006. Zugriff am 20.09.2006.
[Int06a]
I NTERNATIONAL O RGANIZATION FOR S TANDARDIZATION: ISO 3166 code lists.
http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html, 2006.
Zugriff am 19.10.2006.
[Int06b]
I NTERNET A SSIGNED N UMBERS AUTHORITY: ICMP message types.
http://www.iana.org/assignments/icmp-parameters, 2006. Zugriff am 11.10.2006.
[Int06c]
I NTERNET A SSIGNED N UMBERS AUTHORITY: Port numbers.
http://www.iana.org/assignments/port-numbers, 2006. Zugriff am 18.10.2006.
[Int06d]
I NTERNET A SSIGNED N UMBERS AUTHORITY: Protocol numbers.
http://www.iana.org/assignments/protocol-numbers, 2006. Zugriff am 07.09.2006.
[Int06e]
I NTERNET W ORLD S TATS: Internet usage statistics – the big picture.
http://www.internetworldstats.com/stats.htm, 2006. Zugriff am 07.09.2006.
[Jac88]
JACOBSON , VAN: Congestion avoidance and control. In ACM SIGCOMM ’88, pages 314–329,
Stanford, CA, August 1988.
[JBB92]
JACOBSON , V., R. B RADEN, and D. B ORMAN: TCP Extensions for High Performance. RFC
1323 (Proposed Standard), May 1992.
[KFR+ 95] K LENSIN , J., N. F REED, M. ROSE, E. S TEFFERUD, and D. C ROCKER: SMTP Service
Extensions. RFC 1869 (Standard), November 1995. Obsoleted by RFC 2821.
[Lin06]
L INUXFIBEL: Netzwerk-Diagnose. http://www.linuxfibel.de/netdiag.htm, 2006. Zugriff am
22.09.2006.
[Mei05]
M EINEL , C HRISTOPH: Technische Grundlagen des Internet. Vorlesung, Universität Potsdam,
2005.
[Mil85]
M ILLS , D.L.: Network Time Protocol (NTP). RFC 958, September 1985. Obsoleted by RFCs
1059, 1119, 1305.
[Mil06]
M ILLS , D.: Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI. RFC
4330 (Informational), January 2006.
[MMFR96] M ATHIS , M., J. M AHDAVI, S. F LOYD, and A. ROMANOW: TCP Selective Acknowledgment
Options. RFC 2018 (Proposed Standard), October 1996.
[Moc83a]
132
M OCKAPETRIS , P.V.: Domain names: Concepts and facilities. RFC 882, November 1983.
Obsoleted by RFCs 1034, 1035, updated by RFC 973.
Literaturverzeichnis
[Moc83b]
M OCKAPETRIS , P.V.: Domain names: Implementation specification. RFC 883, November
1983. Obsoleted by RFCs 1034, 1035, updated by RFC 973.
[Moc87a]
M OCKAPETRIS , P.V.: Domain names - concepts and facilities. RFC 1034 (Standard),
November 1987. Updated by RFCs 1101, 1183, 1348, 1876, 1982, 2065, 2181, 2308, 2535,
4033, 4034, 4035, 4343, 4035, 4592.
[Moc87b]
M OCKAPETRIS , P.V.: Domain names - implementation and specification. RFC 1035
(Standard), November 1987. Updated by RFCs 1101, 1183, 1348, 1876, 1982, 1995, 1996,
2065, 2136, 2181, 2137, 2308, 2535, 2845, 3425, 3658, 4033, 4034, 4035, 4343, 2137, 2845,
3425, 3658, 4035, 4033.
[Moy94]
M OY, J.: OSPF Version 2. RFC 1583 (Draft Standard), March 1994. Obsoleted by RFC 2178.
[MP85]
M OGUL , J.C. and J. P OSTEL: Internet Standard Subnetting Procedure. RFC 950 (Standard),
August 1985.
[Mye99]
M YERS , J.: SMTP Service Extension for Authentication. RFC 2554 (Proposed Standard),
March 1999.
[Nag84]
NAGLE , J.: Congestion control in IP/TCP internetworks. RFC 896, January 1984.
[pin06]
Webseite des Erfinders von ping. http://ftp.arl.mil/~mike/ping.html, 2006. Zugriff am
11.10.2006.
[Pos80a]
P OSTEL , J.: File Transfer Protocol specification. RFC 765, June 1980. Obsoleted by RFC 959.
[Pos80b]
P OSTEL , J.: User Datagram Protocol. RFC 768 (Standard), August 1980.
[Pos81a]
P OSTEL , J.: Internet Control Message Protocol. RFC 792 (Standard), September 1981.
Updated by RFC 950.
[Pos81b]
P OSTEL , J.: Internet Protocol. RFC 791 (Standard), September 1981. Updated by RFC 1349.
[Pos81c]
P OSTEL , J.: Transmission Control Protocol. RFC 793 (Standard), September 1981. Updated by
RFC 3168.
[Pos82]
P OSTEL , J.: Simple Mail Transfer Protocol. RFC 821 (Standard), August 1982. Obsoleted by
RFC 2821.
[PR83]
P OSTEL , J. and J.K. R EYNOLDS: Telnet Protocol Specification. RFC 854 (Standard), May
1983.
[PR85]
P OSTEL , J. and J. R EYNOLDS: File Transfer Protocol. RFC 959 (Standard), October 1985.
Updated by RFCs 2228, 2640, 2773.
[SK05]
S AROLAHTI , P. and M. KOJO: Forward RTO-Recovery (F-RTO): An Algorithm for Detecting
Spurious Retransmission Timeouts with TCP and the Stream Control Transmission Protocol
(SCTP). RFC 4138 (Experimental), August 2005.
[Ste94]
S TEVENS , W. R ICHARD: TCP/IP Illustrated, volume 1: The Protocols. Addison-Wesley, 1994.
[Ste97]
S TEVENS , W.: TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery
Algorithms. RFC 2001 (Proposed Standard), January 1997. Obsoleted by RFC 2581.
[Tan02]
TANENBAUM , A NDREW S.: Computer Networks. Prentice Hall, 4th edition, 2002.
[Wik06a]
W IKIPEDIA: Autonomes System. http://de.wikipedia.org/wiki/Autonomes_System, 2006.
Zugriff am 14.08.2006.
133
Literaturverzeichnis
[Wik06b]
W IKIPEDIA: Network File System. http://de.wikipedia.org/wiki/Network_File_System, 2006.
Zugriff am 21.09.2006.
[Wik06c]
W IKIPEDIA: Offenes Mail-Relay. http://de.wikipedia.org/wiki/Offenes_Mail-Relay, 2006.
Zugriff am 09.09.2006.
[Wik06d]
W IKIPEDIA: Schema des Internets. http://de.wikipedia.org/wiki/Bild:Schema_internet.png,
2006. Zugriff am 06.09.2006.
[Wik06e]
W IKIPEDIA: Simple Mail Transfer Protocol.
http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol, 2006. Zugriff am 09.09.2006.
[Wik06f]
W IKIPEDIA: SMTP-Auth. http://de.wikipedia.org/wiki/SMTP-Auth, 2006. Zugriff am
09.09.2006.
[Wik06g]
W IKIPEDIA: SMTP-Relay-Server. http://de.wikipedia.org/wiki/SMTP-Relay-Server, 2006.
Zugriff am 09.09.2006.
[Wik06h]
W IKIPEDIA: Transmission Control Protocol.
http://de.wikipedia.org/wiki/Transmission_Control_Protocol, 2006. Zugriff am 05.06.2006.
134
Autorenverzeichnis
Stephan Arenswald, 17
Friedemann Boelter, 121
Sascha Brose, 59
Norbert Hundeshagen, 29
Christian Kauhaus, 1
Stefan Kratsch, 69
Pascal Lenzner, 5
Tino Mai, 79
Matthias Pischeli, 47
Christian Ros, 98
Marco Swiercy, 38
Christiane Topp, 51
Qiguang Yan, 111
Ferdinand Zirker, 89
135
Herunterladen