Grundlagen Computernetze |
Prof. Jürgen Plate |
Die Schichten 5 - 7 des OSI-Standards werden hier in einer Anwendungsschicht zusammengefaßt, da die Anwendungsprogramme alle direkt mit der Transportschicht kommunizieren.
In Schicht 4 befindet sich außer TCP, welches gesicherten Datentransport (verbindungsorientiert, mit Flußkontrolle (d. h. Empfangsbestätigung, etc.) durch Windowing ermöglicht, auch UDP (User Datagram Protocol), in welchem verbindungsloser und ungesicherter Transport festgelegt ist. Beide Protokolle erlauben durch die Einführung von sogenannten Ports den Zugriff mehrerer Anwendungsprogramme gleichzeitig auf ein- und dieselbe Maschine.
In Schicht 3 ist das verbindungslose Internet-Protokoll (IP)
angesiedelt. Datenpakete werden auf den Weg geschickt, ohne daß auf eine
Empfangsbestätigung gewartet werden muß. IP-Pakete dürfen unter bestimmten
Bedingungen (TTL=0, siehe unten) sogar vernichtet werden. In Schicht 3 werden
damit auch die IP-Adressen festgelegt. Hier findet auch das Routing, das heißt
die Wegsteuerung eines Paketes von einem Netz ins andere statt. Ebenfalls in
diese Ebene integriert sind die ARP-Protokolle (ARP - Address Resolution
Protocol), die zur Auflösung (= Umwandlung) einer logischen IP-Adresse in eine
physikalische (z. B. Ethernet-) Adresse dienen und dazu sogenannte Broadcasts
(Datenpakete, durch die alle angeschloßenen Stationen angesprochen werden)
verwenden. ICMP, ein Protokoll, welches den Austausch von Kontroll- und
Fehlerpaketen im Netz ermöglicht, ist ebenfalls in dieser Schicht realisiert.
Die Schichten 1 und 2 sind gegenüber Schicht 3 protokolltransparent. Sie können durch standardisierte Protokolle (z. B. Ethernet (CSMA/CD), FDDI, SLIP (Serial Line IP), PPP (Point-to-Point Protocol)) oder andere Übertragungsverfahren realisiert werden.
Zur TCP/IP-Familie gehören mehrere Dienstprogramme der höheren
OSI-Schichten (5 - 7), z. B.:
Internet-Protokolle | ||||||||
---|---|---|---|---|---|---|---|---|
OSI-Schicht | Internet Protokoll Suite | DOD Schicht | ||||||
7 | Anwendung | File Transfer | Electronic |
Terminal Emulation | Usenet News | Domain Name Service | World Wide Web | Art der Kommuni- kation |
6 | Darstellung | File Transfer Protocol (FTP) RFC 959 |
Simple Mail Transfer Protocol (SMTP) RFC 821 |
Telnet Protocol (Telnet) RFC 854 |
Usenet News Transfer Protocol (NNTP) RFC 977 |
Domain Name Service (DNS) RFC 1034 |
World Wide Web (WWW) RFC |
Applikation |
5 | Sitzung | |||||||
4 | Transport | Transmission Control Protocol (TCP) RFC 793 |
User Datagram Protocol (UDP) RFC 768 |
Host to Host Kommunikation | ||||
3 | Netzwerk | Address Resolution Protocol (ARP) RFC 826 |
Internet Protocol (IP) RFC 791 |
Internet Control Messsage Protocol RFC 792 |
Internet | |||
2 | Sicherung | Ethernet | Token Ring | DQDB | FDDI | ATM | lokales Netzwerk | |
1 | Physikalische Übertragung | Twisted Pair | Lichtwellenleiter | Coaxkabel | Funk | Laser | Netzzugriff |
Es ist offensichtlich, daß die Gateways neben dem Routing weitere
nichttriviale Funktionen haben, wenn sie zwischen den unterschiedlichsten
Teilnetzen vermitteln (z. B. unterschiedliche Protokolle auf Ebene 2,
unterschiedliche Datenpaketgröße, usw.).
Aus diesem Grund existieren in einem Internet drei unabhängige Namens- bzw. Adressierungsebenen:
Die Ethernet-Adresse wurde bereits behandelt, auf die anderen beiden Ebenen wird in den folgenden Abschnitten eingegangen. Die Umsetzung der höchsten Ebene (Domain-Namen) in IP-Adressen erfolgt durch das oben erwähnte DNS, worauf die Dienstprogramm der Schichten 5-7 zurückgreifen.
Die Station A will Daten an eine Station B mit der Internetadresse I(B) senden, deren physikalische Adresse P(B) sie noch nicht kennt. Sie sendet einem ARP-Request an alle Stationen im Netz, der die eigene physikalische Adresse und die IP-Adresse von B enthält.
Alle Stationen erhalten und überprüfen den ARP-Request und die angesprochene Station B antwortet, indem sie einen ARP-Reply mit ihrer eigenen physikalischen Adresse an die Station A sendet. Letztere speichert die Zuordnung in einer Tabelle (Address Resolution Cache).
Auch für die Umkehrfunktion gibt es eine standardisierte Vorgehensweise, den
RARP (Reverse ARP). Hier sendet die Station A unter Angabe ihrer physikalischen
Adresse P(A) einen RARP-Request. Wenn im Netz nur eine Station als RARP-Server
eingerichtet ist (eine Station, die alle Zuordnungen von P(x) <--> I(x)
"kennt"), antwortet diese mit einem RARP-Reply an die anfragende
Station, der I(A) enthält. Diese Funktion ist z. B. für sogenannte "Diskless
Workstations" wichtig, die ihre gesamte Software von einem Server laden.
IP ist ein verbindungsloses Protokoll. Es ist also nicht notwendig,
eine IP-Verbindung zu einem Rechner zu 'öffnen', bevor man Daten zu diesem
Rechner senden kann, sondern es genügt, das IP-Paket einfach abzusenden und
darauf zu vertrauen, daß es schon ankommen wird. Bei einem
verbindungsorientierten Protokoll wird beim Öffnen einer Verbindung getestet,
ob der Zielrechner überhaupt erreichbar ist. Ein verbindungsloses Protokoll
macht das nicht und kann demnach auch nicht garantieren, daß ein Datenpaket überhaupt
beim Empfänger ankommt. IP garantiert auch nicht, daß von einem einmal
abgeschickten Datenpaket nur eine Kopie beim Empfänger ankommt oder daß in
einer bestimmten Reihenfolge abgeschickte Datenpakete auch wieder in dieser
Reihenfolge empfangen werden.
Normalerweise laufen die IP-Pakete über mehrere Zwischenstationen, bis sie am
Zielrechner ankommen. Bricht irgendwann während der Übertragung ein Übertragungsweg
zusammen, so wird ein neuer Weg zum Ziel gesucht und benutzt. Da der neue Weg
zeitlich länger oder kürzer sein kann als der alte, kann man keine allgemeingültigen
Aussagen darüber machen, in welcher Reihenfolge IP-Pakete beim Empfänger
eintreffen. Es kann auch sein, daß bei dieser Umschalterei IP-Pakete
verlorengehen oder sich verdoppeln. Das Beheben der so entstehenden Probleme überläßt
das IP-Protokoll anderen, höherliegenden Schichten.
Das Internet-Protokoll ist somit ein verbindungsloser Dienst mit einem 'Unreliable Datagram Service', d. h. es wird auf der IP-Ebene weder die Richtigkeit der der Daten noch die Einhaltung von Sequenz, Vollständigkeit und Eindeutigkeit der Datagramme überprüft. Ein zuverlässiger verbindungsorientierter Dienst wird in der darüberliegenden TCP-Ebene realisiert.
Ein IP-Datagramm besteht aus einem Header und einem nachfolgenden Datenblock,
der seinerseits dann z. B. in einem Ethernet-Frame "verpackt" wird.
Die maximale Datenlänge wird auf die maximale Rahmenlänge des physikalischen
Netzes abgestimmt. Da nicht ausgeschlossen werden kann, daß ein Datagramm auf
seinem Weg ein Teilnetz passieren muß, dessen Rahmenlänge niedriger ist, müssen
zum Weitertransport mehrere (Teil-)Datagramme erzeugt werden. Dazu wird der
Header im Wesentlichen repliziert und die Daten in kleiner Blöcke unterteilt.
Jedes Teil-Datagramm hat also wieder einen Header. Diesen Vorgang nennt man
Fragmentierung. Es handelt sich um eine rein netztechnische Maßnahme, von der
Quell- und Zielknoten nicht wissen müssen. Es gibt natürlich auch eine
umgekehrte Funktion, "Reassembly", die kleine Datagramme wieder zu
einem größeren packt. Geht auf dem Übertragungsweg nur ein Fragment verloren,
muß das gesamte Datagramm wiederholt werden. Es gilt die Empfehlung, daß
Datagramme bis zu einer Länge von 576 Bytes unfragmentiert übertragen werden
sollten.
Die Hauptaufgabe von IP ist es also, die Unterschiede zwischen den verschiedenen, darunterliegenden Netzwerkschichten zu verbergen und eine einheitliche Sicht auf die verschiedensten Netztechniken zu präsentieren. So gibt es IP nicht nur in Netzen, sondern auch als SLIP (Serial Line IP) oder PPP (Point to Point Protocol) für Modem- oder ISDN-Verbindungen. Zur Vereinheitlichung gehören auch die Einführung eines einheitlichen Adressierungsschemas und eines Fragmentierungsmechanismus, der es ermöglicht, große Datenpakete durch Netze mit kleiner maximaler Paketgröße zu senden: Normalerweise existiert bei allen Netzwerken eine maximale Größe für ein Datenpaket. Im IP-Jargon nennt man diese Grenze die 'Maximum Transmisson Unit' (MTU). Natürlich ist diese Obergrenze je nach verwendeter Hardware bzw. Übertragungstechnik unterschiedlich. Die Internet-Schicht teilt IP-Pakete, die größer als die MTU des verwendeten Netzwerks sind, in kleinere Stücke, sogenannte Fragmente, auf. Der Zielrechner setzt diese Fragmente dann wieder zu vollständigen IP-Paketen zusammen, bevor er sie an die darüberliegenden Schichten weitergibt. Der Fragement Offset gibt an, an welcher Stelle in Bezug auf den IP-Datagramm-Anfang das Paket in das Datagramm einzuordnen ist. Aufgrund des Offset werden die Pakete in die richtige Reihenfolge gebracht. Dazu ein Beispiel:
Es soll ein TCP-Paket mit einer Länge von 250 Byte über IP versandt werden. Es wird angenommen, daß ein IP-Header eine Länge von 20 Byte hat und eine maximale Länge von 128 Byte pro Paket nicht überschritten werden darf Der Identifikator des Datagramms beträgt 43 und der Fragmentabstand wird in 8-Byte-Schritten gezählt. Das Datenfragment muß also durch 8 dividierbar sein.
Da alle Fragmente demselben Datagramm angehören, wird der Identifikator für
alle Fragmente beibehalten. Im ersten Fragment ist das Fragment Offset natürlich
noch Null, das MF-Bit jedoch auf 1 gesetzt, um zu zeigen, daß noch Fragmente
folgen. Im IP-Header des zweiten Fragments beträgt das Fragment Offset 13
(104/8 = 13) und zeigt die Position des Fragments im Datagramm an. Das MF-Bit
ist noch immer 1, da noch ein Datenpaket folgt. Der Header des dritten Fragments
enthält dann ein MF-Bit mit dem Wert 0, denn es handelt sich um das letzte
Datenpaket zur Datagramm 43. Das Fragment Offset ist auf 26 gesetzt, da vorher
schon 208 Daten-Bytes (8 * 26 = 208) übertragen wurden.
Sobald das erste Fragment (gleich welches) im Empfänger ankommt, wird ein Timer
gesetzt. Sind innerhalb der dort gesetzten Zeit nicht alle Pakete zu einem
Datagramm eingetroffen, wird angenommen, daß Fragmente verlorengingen. Der Empfänger
verwirft dann alle Datenpakete mit diesem Identifikator.
Was geschieht aber, wenn der Kommunikationspartner nicht erreichbar ist? Wie schon erwähnt, durchläuft ein Datagramm mehrere Stationen. Diese Stationen sind in der Regel Router oder Rechner, die gleichzeitig als Router arbeiten. Ohne Gegenmaßnahme würde das Datenpaket für alle Zeiten durch das Netze der Netze irren. Dazu gibt es im IP-Header neben anderer Verwaltungsinfo auch ein Feld mit dem Namen TTL (Time To Live). Der Wert von TTL kann zwischen 0 und 255 liegen. Jeder Router, der das Datagramm transportiert, vermindert den Wert dieses Feldes um 1. Ist der Wert von TTL bei Null angelangt, wird das Datagramm vernichtet.
Die Adressen, die im Internet verwendet werden, bestehen aus einer 32 Bit langen Zahl. Damit sich die Zahl leichter darstellen läßt, unterteilt man sie in 4 Bytes (zu je 8 Bit). Diese Bytes werden dezimal notiert und durch Punkte getrennt (a.b.c.d). Zum Beispiel:
141.84.101.2 129.187.10.25Bei dieser Adresse werden zwei Teile unterscheiden, die Netzwerkadresse und die Rechneradresse, wobei unterschiedlich viele Bytes für beide Adressen verwendet werden:
Klasse A - Netz | Klasse B - Netz | Klasse C - Netz | |
Netz-ID | 8 Bit = 1 Byte | 16 Bit = 2 Byte | 24 Bit = 3 Byte |
Host-ID | 24 Bit = 3 Byte | 16 Bit = 2 Byte | 8 Bit = 1 Byte |
Netzmaske | 255.0.0.0 | 255.255.0.0 | 255.255.255.0 |
Adressklassen-ID (= Feste Bits im 1. Byte, 1. Quad) |
0 | 10 | 110 |
Wertebereich (theoretisch) | 0.0.0.0 bis 127.255.255.255 | 128.0.0.0 bis 191.255.255.255 | 192.0.0.0 bis 223.255.255.255 |
Anzahl der Netze | 128 (= 27) | 16384 (= 26*256 = 64*256) |
2097152 (= 25*256*256 = 32*256*256) |
Anzahl der Rechner im Netz |
16777216 (= 2563) | 65536 (= 2562) | 256 (= 2561) |
Klasse D | Klasse E | |
Adressklassen-ID | 4 Bit = "1110" | 5 Bit = "11110" |
keine Netz-ID, sondern: | 28 Bit-Identifikator | 27 Bit-Identifikator |
Wertebereich | 224.0.0.0 bis 239.255.255.255 | 240.0.0.0 bis 247.255.255.255 |
Anwendungen | für Multicast-Gruppen | reservierte Adressen für Zukünftiges |
Grundsätzlich gilt:
Die Netzwerkadresse 127.0.0.1 bezeichnet jeweils den lokalen Rechner (loopback address). Sie dient der Konsistenz der Netzwerksoftware (jeder Rechner ist über seine Adresse ansprechbar) und dem Test.
Damit man nun lokale Netze ohne Internetanbindung mit TCP/IP betreiben kann, ohne IP-Nummern beantragen zu müssen und um auch einzelne Rechnerverbindungen testen zu können, gibt es einen ausgesuchten Nummernkreis, der von keinen Router nach außen gegeben wird. Diese "privaten" Adressen sind im RFC 1597 festgelegt. Es gibt ein Class-A-Netz, 16 Class-B-Netze und 255 Class-C-Netze:
Der für IP reservierte Adressraum reicht nicht mehr aus, um alle Endgeräte anzusteuern. Mögliche Abhilfen:
IP Masquerading rückt mit dieser Funktionalität sehr nahe an Proxy- und Firewall-Lösungen heran, wobei ein Proxy explizit für ein Protokoll (z. B. HTTP) existieren und aufgerufen werden muß.
Adreß-Klasse | Subnetzmaske (binär) | Subnetzmaske (dezimal) |
---|---|---|
Class A | 11111111.00000000.00000000.00000000 | 255.0.0.0 |
Class B | 11111111.11111111.00000000.00000000 | 255.255.0.0 |
Class C | 11111111.11111111.11111111.00000000 | 255.255.255.0 |
Eine Subnet-Maske für ein Netz der Klasse C lautet daher 255.255.255.0. Das bedeutet, daß die ersten drei Bytes die Netzadresse angeben und das vierte Byte die Rechner adressiert. Eine Subnetz-Maske mit dem Wert 255.255.0.0 würde folglich ein Netz der Klasse B angeben und für ein C-Netz steht die Maske 255.255.255.0.
Netzwerk- anteil in Bit |
Hostanteil in Bit |
Subnetz- anzahl *) |
Hostanzahl **) | Subnetzmaske |
8 | 24 | 1 | 16777216 | 255.0.0.0 Klasse A |
9 | 23 | 2 | 128*65536 | 255.128.0.0 |
10 | 22 | 4 | 64*65536 | 255.192.0.0 |
11 | 21 | 8 | 32*65536 | 255.224.0.0 |
12 | 20 | 16 | 16*65536 | 255.240.0.0 |
13 | 19 | 32 | 8*65536 | 255.248.0.0 |
14 | 18 | 64 | 4*65536 | 255.252.0.0 |
15 | 17 | 128 | 2*65536 | 255.254.0.0 |
16 | 16 | 1 | 65536 | 255.255.0.0 Klasse B |
17 | 15 | 2 | 128*256 | 255.255.128.0 |
18 | 14 | 4 | 64*256 | 255.255.192.0 |
19 | 13 | 8 | 32*256 | 255.255.224.0 |
20 | 12 | 16 | 16*256 | 255.255.240.0 |
21 | 11 | 32 | 8*256 | 255.255.248.0 |
22 | 10 | 64 | 4*256 | 255.255.252.0 |
23 | 9 | 128 | 2*256 | 255.255.254.0 |
24 | 8 | 1 | 256 | 255.255.255.0 Klasse C |
25 | 7 | 2 | 128 | 255.255.255.128 |
26 | 6 | 4 | 64 | 255.255.255.192 |
27 | 5 | 8 | 32 | 255.255.255.224 |
28 | 4 | 16 | 16 | 255.255.255.240 |
29 | 3 | 32 | 8 | 255.255.255.248 |
30 | 2 | 64 | 4 | 255.255.255.252 |
**) Die Rechneranzahl verringert sich ebenfalls um zwei wegen
Subnetz-Adresse (alle Rechnerbits auf 0) und Broadcast-Adresse (alle
Rechnerbits auf 1):
Ist der Hostanteil der IP-Adresse m Bits, dann erhält man (2m)
- 2 Hosts pro Subnetz.
Besitzt breispielsweise ein Unternehmen ein Netz der Klasse C, möchte man dieses vielleicht in zwei Segmente unterteilen, die voneinander getrennt sind. Der Broadcastverkehr des ersten Segments kann so das andere nicht beeinträchtigen. In diesem Fall kommt die Subnetz-Maske zum Einsatz, welche die Rechneradressen in zwei Bereiche gliedert. Sollen die Rechner in vier gleich große Subnetze mit je 64 Knoten eingeteilt werden, lautet die Subnetz-Maske 255.255.255.192. Es gilt die folgende Formel für das Maskier-Byte:
Bytewert = 256 - (Anzahl der Knoten im Segment)
Als das Subnetting erstmals standardisiert wurde, war es verboten die Subnetze zu nutzen, in denen alle Subnetzbits den Wert 0 oder 1 hatten (siehe Anmerkungen oben). Damit ergeben sich im Beispiel nur zwei Subnetze mit je 62 Hosts. Inzwischen beherrschen fast alle Systeme korrektes Subnetting ("classless" routing).
Allgemein ergibt sich für ein C-Netz folgende Aufstellung:
Subnetzbits | Hostbits | mögliche Subnetze | Hostadressen | Subnetzmaske |
1 | 7 | 2 (0) | 126 (0) | 255.255.255.128 |
2 | 6 | 4 (2) | 62 | 255.255.255.192 |
3 | 5 | 8 (6) | 30 | 255.255.255.224 |
4 | 4 | 16 (14) | 14 | 255.255.255.240 |
5 | 3 | 32 (30) | 6 | 255.255.255.248 |
6 | 2 | 64 (62) | 2 | 255.255.255.252 |
7 | 1 | 128 | 0 | 255.255.255.254 |
Subnetzbits | Hostbits | dezimal | |||||||
Dezimale Wertigkeit des Bit | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
erstes Subnetz | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
zweites Subnetz | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 32 |
drittes Subnetz | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 64 |
viertes Subnetz | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 96 |
fünftes Subnetz | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 |
sechstes Subnetz | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 160 |
siebtes Subnetz | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 192 |
achtes Subnetz | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 224 |
Damit sind die acht zur Verfügung stehenden Subnetze bekannt:
192.168.0.0/27 192.168.0.32/27 192.168.0.64/27 192.168.0.96/27 192.168.0.128/27 192.168.0.160/27 192.168.0.192/27 192.168.0.224/27
Diese Subnetze können jetzt einzelnen Netzen zugeordnet werden. Die folgende Tabelle zeigt die Netz- und Broadcastadressen von jedem einzelnen Subnetz und die Rechneradressen.
Subnetz | IP-Adressen (letztes Oktett) | ||
Netz | Hosts | Broadcast | |
erstes Subnetz | 0 | 1-30 | 31 |
zweites Subnetz | 32 | 33-62 | 63 |
drittes Subnetz | 64 | 65-94 | 95 |
viertes Subnetz | 96 | 97-126 | 127 |
fünftes Subnetz | 128 | 129-158 | 159 |
sechstes Subnetz | 160 | 161-190 | 191 |
siebtes Subnetz | 192 | 193-222 | 223 |
achtes Subnetz | 224 | 225-254 | 255 |
Die ICMP-Nachricht ist im Datenteil des IP-Datagramms untergebracht, sie enthält ggf. den IP-Header und die ersten 64 Bytes des die Nachricht auslösenden Datagramms (z. B. bei Timeout).
Die fünf Felder der ICMP-Message haben folgende Bedeutung:
Wenden wir uns nun den einzelnen Nachrichtentypen zu:
Die Aufgabe von TCP ist es, die oben geschilderten Defizite von IP zu verbergen. Für den TCP-Benutzer soll es nicht mehr sichtbar sein, daß die darunterliegenden Protokollschichten Datenpakete versenden, sondern es soll der Benutzer mit einem Byte-Strom wie bei einer normalen Datei (oder einem Terminal) arbeiten können. TCP garantiert vor allen Dingen den korrekten Transport der Daten - jedes Paket kommt nur einmal, fehlerfrei und in der richtigen Reihenfolge an. Zusätzlich können bei TCP mehrere Programme die Verbindung zwischen zwei Rechnern quasi-gleichzeitig nutzen. TCP teilt die Verbindung in viele virtuelle Kanäle ("Ports") auf, die zeitmultiplex mit Daten versorgt werden. Nur so ist es möglich, daß beispielsweise mehrere Benutzer eines Rechners zur selben Zeit das Netz in Anspruch nehmen können oder daß man mit einer einzigen Wählverbindung zum Provider gleichzeitig E-Mail empfangen und Dateien per FTP übertragen kann.
Dieses Protokoll implementiert also einen verbindungsorientierten, sicheren Transportdienst als Schicht-4-Protokoll. Die Sicherheit wird durch positive Rückmeldungen (acknowledgements) und Wiederholung fehlerhafter Blöcke erreicht. Fast alle Standardanwendungen vieler Betriebssysteme nutzen TCP und das darunterliegende IP als Transportprotokoll, weshalb man die gesamte Protokollfamilie allgemein unter 'TCP/IP' zusammenfaßt. TCP läßt sich in lokalen und weltweiten Netzen einsetzen, da IP und die darunterliegenden Schichten mit den unterschiedlichsten Netzwerk- und Übertragungssystemen arbeiten können (Ethernet, Funk, serielle Leitungen, ...). Zur Realisierung der Flußkontrolle wird ein Fenstermechanismus (sliding windows) verwendet (variable Fenstergröße). TCP-Verbindungen sind vollduplex. Wie bei allen verbindungsorientierten Diensten muß zunächst eine virtuelle Verbindung aufgebaut und bei Beendigung der Kommunikation wieder abgebaut werden. "Verbindungsaufbau" bedeutet hier eine Vereinbarung beider Stationen über die Modalitäten der Übertragung (z. B. Fenstergröße, Akzeptieren eines bestimmten Dienstes, usw.). Ausgangs- und Endpunkte einer virtuellen Verbindung werden wie bei UDP durch Ports identifiziert. Allgemein verfügbare Dienste werden über 'well known' Ports (--> feste zugeordnete Portnummer) erreichbar. Andere Portnummern werden beim Verbindungsaufbau vereinbart.
Damit die ständige Bestätigung jedes Datensegments den Transport nicht über Gebühr hemmt, werden zwei Tricks verwendet. Zum einen kann die Empfangsbetätigung einem Segment in Gegenrichtung mitgegeben werden - das spart ein separates Quittungssegment. Zweitens muß nicht jedes Byte sofort bestätigt werden, sondern es gibt ein sogenanntes 'Fenster'. Die Fenstergröße gibt an, wieviele Bytes gesendet werden dürfen, bis die Übertragung quittiert werden muß. Erfolgt keine Quittung, werden die Daten nochmals gesendet. Die empfangene Quittung enthält die Nummer des Bytess, das als nächstes vom Empfänger erwartet wird - womit auch alle vorhergehenden Bytes quittiert sind. Die Fenstergröße kann dynamisch mit der Quittung des Empfängers geändert werden. Werden die Ressourcen knapp, wird die Fenstergröße verringert. Beim Extremfall Null wird die Übertragung unterbrochen, bis der Empfänger erneut quittiert. Neben einem verläßlichen Datentransport ist so auch die Flußkontrolle gewährleistet.
Das Prinzip des Fenstermechanismus ist eigentlich ganz einfach. Wenn man das Bild betrachtet, ergibt sich folgende Sachverhalt:
Das TCP-Paket wird oft auch als 'Segment' bezeichnet. Jedem TCP-Block ist ein Header vorangestellt, der aber wesentlich umfangreicher als die bisherigen ist:
Beim Öffnen einer TCP-Verbindung tauschen beide Kommunikationspartner
Kontrollinformationen aus, die sicherstellen, daß der jeweilige Partner
existiert und Daten annehmen kann. Dazu schickt die Station A ein Segment mit
der Aufforderung, die Folgenummern zu synchronisieren.
Das einleitende Paket mit gesetztem SYN-Bit ("Synchronise-" oder
"Open"-Request) gibt die Anfangs-"Sequence Number" des
Client bekannt. Diese Anfangs-"Sequence Number wird zufällig bestimmt. Bei
allen nachfolgenden Paketen ist das ACK-Bit ("Acknowledge",
"Quittung") gesetzt. Der Server antwortet mit ACK, SYN und der Client
bestätigt mit ACK. Das sieht dann so aus:
Die Station B weiß jetzt, daß der Sender eine Verbindung öffnen möchte und an welcher Position im Datenstrom der Sender anfangen wird zu zählen. Sie bestätigt den Empfang der Nachricht und legt ihrerseits eine Folgenummer für Übertragungen in Gegenrichtung fest.
Station A bestätigt nun den Empfang der Folgenummer von B und beginnt dann mit der Übertragung von Daten.
Diese Art des Austausches von Kontrollinformationen, bei der jede Seite die Aktionen der Gegenseite bestätigen muß, ehe sie wirksam werden können, heißt "Dreiwege-Handshake". Auch beim Abbau einer Verbindung wird auf diese Weise sichergestellt, daß beide Seiten alle Daten korrekt und vollständig empfangen haben. Im zeitlichen Zusammenhang stellt sich eine TCP/IP-Verbindung folgendermaßen dar:
Das folgende Beispiel zeigt die Arbeitsweise des TCP/IP - Protokolls. Es wird eine Nachricht von einem Rechner im grünen Netz zu einem Rechner im orangen Netz gesendet.
![]() |
Die Nachricht wird in mehrere Pakete aufgeteilt und auf der besten Route auf die Reise geschickt. Das verbindungslose IP-Protokoll sorgt zusammen mit den Routern für den Weg. |
Da eine Strecke überlastet ist, werden die Pakete 3, 4 und 5 auf einer anderen Strecke weiter transportiert. Dieser Transport erfolgt zufälligerweise schneller als jener der Pakete 1 und 2. | ![]() |
![]() |
Die Pakete wandern ihrem Bestimmungsnetz entgegen. Das erste Paket ist bereits angekommen. Paket 3 kommt vor Paket 2 am Ziel an. |
Die Pakete 1, 2 und 3 sind - in falscher Reihenfolge - am Zielrechner angekommen. Auf der Strecke, auf der Pakete 4 und 5 transportiert werden, tritt eine Störung auf. | ![]() |
![]() |
Paket 4 ist bei der Störung verloren gegangen. Paket 5 wird auf einer anderen Route zum Zielnetz geschickt (wären die Routen statisch am Router eingetragen, ginge auch Paket 5 verloren). |
Alle überlebenden Pakete sind am Zielrechner angekommen. Das TCP-Protokoll setzt die Pakete wieder in der richtigen Reihenfolge zusammen und fordert das fehlende Paket 4 nochmals beim Sender an. Für den Empfänger ergibt sich ein kontinuierlicher Datenstrom. | ![]() |
Erklärung der Zustände:
Normalerweise stützen sich Programme auf Anwendungseben auf mehrere der Protokolle (ICMP, UDP, TCP).
Die "well known" Portnummern (0 bis 1023), die weltweit eindeutig adressiert werden müssen, werden durch die IANA (Internet Assigned Numbers Authority) vergeben. Einige Beispiele für TCP-Ports (UDP verwendet eine andere Zuordnung):
Portnummer | Protokoll |
---|---|
20 | FTP (Daten) |
21 | FTP (Befehle) |
22 | Secure Shell |
23 | Telnet |
25 | SMTP |
53 | DNS-Server |
70 | Gopher |
79 | Finger |
80 | HTTP (Proxy-Server) |
110 | POP3 |
119 | NNTP |
143 | IMAP |
194 | IRC |
210 | WAIS |
256 - 1023 | UNIX-spezifische Services |
540 | UUCP |
1024 - 49151 | Registered Ports |
49152 - 65535 | Dynamic / Private Ports |
Eine vollständige Portliste erhält man bei http://www.isi.edu/in-notes/iana/assignments/port-numbers.
IP-Adresse und Portnummer definieren einen Kommunikationsendpunkt, der in der TCP/IP-Welt "Socket" genannt wird. Die Grenze zwischen der Anwendungsschicht und der Transportschicht ist in den meisten Implementierungen zugleich die Grenze zwischen dem Betriebssystem und den Anwendungsprogrammen. Im OSI-Modell ist diese Grenze in etwa die Grenze zwischen den Schichten 4 und 5. Daher ordnet man IP meist ungefähr in die Ebene 3 und TCP ungefähr in Ebene 4 des OSI-Modells ein. Da TCP/IP jedoch älter und einfacher als das OSI-Modell ist, kann diese Einordnung nicht genau passen.
Vinton Cerf (der 'Vater' des Internet) bezeichnet in einem Interview mit der Zeitschrift c't das Internet "(...) als die wichtigste Infrastruktur für alle Arten von Kommunikation.". Auf die Frage, wie man sich die neuen Kommunikationsdienste des Internet vorstellen könne, antwortete Cerf:
"Am spannendsten finde ich es, die ganzen Haushaltsgeräte ans Netz anzuschließen. Ich denke dabei nicht nur daran, daß der Kühlschrank sich in Zukunft mit der Heizung austauscht, ob es in der Küche zu warm ist. Stromgesellschaften könnten beispielsweise Geräte wie Geschirrspülmaschinen kontrollieren und ihnen Strom genau dann zur Verfügung stellen, wenn gerade keine Spitzennachfrage herrscht. Derartige Anwendungen hängen allerdings davon ab, daß sie zu einem erschwinglichen Preis angeboten werden. Das ist nicht unbedingt ferne Zukunftsmusik; die Programmierer müßten eigentlich nur damit anfangen, endlich Software für intelligente Netzwerkanwendungen zu schreiben. Und natürlich muß die Sicherheit derartiger Systeme garantiert sein. Schließlich möchte ich nicht, daß die Nachbarkinder mein Haus programmieren!"
Auf die Internet Protokolle kommen in der nächsten Zeit also völlig neue Anforderungen zu.
Der Verknappung der Internet-Adressen durch die ständig steigende Benutzerzahl wird zunächst versucht, mit dem Classless Inter-Domain Routing (CIDR) entgegen zu wirken. Durch die Vergabe von Internet-Adressen in Klassen (A,B,C,...) wird eine große Anzahl von Adressen verschwendet. Hierbei stellt sich vor allem die Klasse B als Problem dar. Viele Firmen nehmen ein Netz der Klasse B für sich in Anspruch, da ein Klasse A Netz mit bis zu 16 Mio. Hosts selbst für eine sehr große Firma überdimensioniert scheint, ein Netz der Klasse C mit 254 Hosts aber zu klein.
Ein größerer Host-Bereich für Netze der Klasse C (z. B. 10 Bit, 1022 Hosts pro Netz) hätte das Problem der knapper werdenden IP-Adressen vermutlich gemildert. Ein anderes Problem wäre dadurch allerdings entstanden: die Einträge der Routing-Tabellen hätten sich um ein Vielfaches vermehrt.
Ein anderes Konzept ist das Classless Inter-Domain Routing (RFC 1519): die verbleibenden Netze der Klasse C werden in Blöcken variabler Größe zugewiesen. Werden beispielsweise 2000 Adressen benötigt, so können einfach acht aufeinanderfolgende Netze der Klasse C vergeben werden. Zusätzlich werden die verbliebenen Klasse-C-Adressen restriktiver und strukturierter vergeben (RFC 1519). Die Welt ist dabei in vier Zonen aufgeteilt, von denen jede einen Teil des verbliebenen Klasse C Adreßraums erhält:
194.0.0.0 - 195.255.255.255 | Europa |
198.0.0.0 - 199.255.255.255 | Nordamerika |
200.0.0.0 - 201.255.255.255 | Mittel- und Südamerika |
202.0.0.0 - 203.255.255.255 | Asien und pazifischer Raum |
204.0.0.0 - 223.255.255.255 | Reserviert für zukünftige Nutzung |
Jede der Zonen erhält dadurch in etwa 32 Millionen Adressen zugewiesen. Vorteil bei diesem Vorgehen ist, daß die Adressen einer Region im Prinzip zu einem Eintrag in den Routing-Tabellen komprimiert worden sind und jeder Router, der eine Adresse außerhalb seiner Region zugesandt bekommt diese getrost ignorieren darf.
Als die Entwickler mit den Arbeiten an der neuen Version des Internet Protokolls begannen, wurde ein Name für das Projekt bzw. das neue Protokoll benötigt. Angeregt durch die Fernsehserie "Star Trek - Next Generation", wurde als Arbeitsname IP - Next Generation (IPnG) gewählt. Schließlich bekam das neue IP eine offizielle Versionsnummer zugewiesen: IP Version 6 oder kurz IPv6. Die Protokollnummer 5 (IPv5) wurde bereits für ein experimentelles Protokoll verwendet.
Das Feld Length (Internet Header Length - IHL) von IPv4 ist nicht mehr vorhanden, da der IPv6-Basis-Header eine feste Länge von 40 Byte hat. Das Feld Protocol wird durch das Feld Next Header ersetzt. Alle Felder die bisher zur Fragmentierung eines IP-Datengramms benötigt wurden (Identification, Flags, Fragment Offset), sind im IPv6-Basis-Header nicht mehr vorhanden, da die Fragmentierung in IPv6 gegenüber IPv4 anders gehandhabt wird. Alle IPv6-kompatiblen Hosts und Router müssen Pakete mit einer Größe von 1280 Byte unterstützen. Empfängt ein Router ein zu großes Paket, so führt er keine Fragmentierung mehr durch, sondern sendet eine Nachricht an den Absender des Pakets zurück, in der er den sendenden Host anweist, alle weiteren Pakete zu diesem Ziel aufzuteilen. Es wird also vom Hosts erwartet, daß er von vornherein eine passende Paketgröße wählt. Die Steuerung der Fragmentierung erfolgt bei IPv6 über den Fragment Header. Das Feld Checksum ist nicht mehr vorhanden.
Derzeit sind sechs Erweiterungs-Header definiert. Alle Erweiterungs-Header sind optional. Werden mehrere Erweiterungs-Header verwendet, so ist es erforderlich, sie in einer festen Reihenfolge anzugeben.
Header | Beschreibung |
---|---|
IPv6-Basis-Header | Zwingend erforderlicher IPv6-Basis-Header |
Optionen für Teilstrecken (Hop-by-Hop Options Header) |
Dies ist der einzige optionale Header, der von jedem Router bearbeitet werden muß. Bis jetzt ist nur die "Jumbo Payload Option" definiert, in der die Länge eines Paketes angegeben werden kann, das länger als 64 KByte ist. |
Optionen für Ziele (Destination Options Header) |
Zusätzliche Informationen für das Ziel |
Routing (Routing Header) |
Definition einer vollständigen oder teilweisen Route. Er wird für das Source-Routing in IPv6 verwendet. |
Fragmentierung (Fragment Header) |
In IPv6 wird, wie oben beschrieben, die Fragmentierung nur noch End to End gemacht. Die Fragmentierinformationen werden in diesem optionalen Header abgelegt. |
Authentifikation (Authentication Header) |
Er dient der digitalen Signatur von Paketen, um die Quelle eindeutig feststellen zu können. |
Verschlüsselte Sicherheitsdaten (Encapsulating Security Payload Header) |
Informationen über den verschlüsselten Inhalt. |
Optionen für Ziele (Destination Options Header) |
Zusätzliche Informationen für das Ziel (für Optionen, die nur vom endgültigen Ziel des Paketes verarbeitet werden müssen). |
Header der höheren Schichten (Upper Layer Header) |
Header der höheren Protokollschichten (TCP, UDP, ...) |
xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxxSie ist damit recht länglich. Um die Schreibweise zu vereinfachen, wurden einige Regeln eingeführt:
1234:0000:0000:0000:0000:0000:0000:1234 --> 1234:0:0:0:0:0:0:1234 --> 1234::1234
0:0:0:0:0:0:C206:AFFE oder ::C206:AFFEUm die Lesbarkeit zu erhöhen kann man auch eine gemischt Form verwenden:
::194.6.161.126
::FFFF:C206:A17E
::1
In IPv4 wurden die Adressen anfänglich in die bekannten Klassen eingeteilt. Ein weiteres Problem bei den IPv4 Adressen ist, daß die Router keine Hierarchie in den Adressen erkennen können. Auch IPv6 ist in der allgemeinen Form unstrukturiert, es kann aber durch definierte Präfixe strukturiert werden. Die allgemein strukturiert Adresse sieht danach wie folgt aus:
Die Strukturierung erlaubt die Einteilung der Adresse in Adresstypen. Jeder Präfix identifiziert somit einen Adresstyp. Die bereits definierten Adresstypen und die zugehörigen Präfixe sind:
Adresstyp | Präfix (binär) |
---|---|
Reserviert für IPv4 und Loopback | 0000 0000 |
NSAP-Adressen | 0000 001 |
IPX-Adressen | 0000 010 |
Anbieterbasierte Unicast-Adresse | 010 |
Reserviert für geografische Unicast-Adresse | 100 |
Zusammenfassbare globale Adressen | 001 |
Standortlokale Adresse | 1111 1110 11 |
Multicast-Adresse | 1111 1111 |
Wie man in der Tabelle erkennen kann, werden die Adressen grob in die Typen Unicast, Multicast und Anycast eingeteilt, deren Eigenschaften nachfolgend kurz erklärt werden sollen.
Die Einführung von nationalen Registern ergibt eine Aufteilung der Anbieter- und Subscriber-ID in National-Register-, Anbieter- und Subscriber-ID.
Im Gegensatz dazu stehen die standortlokalen Adressen, die nur innerhalb eines Subnetzes gültig sind und deshalb von keinem Router behandelt werden.
Das Flag gibt an, ob die Gruppen ID temporär, oder von der IANA zugewiesen ist. Der Scope gibt den Gültigkeitsbereich der Multicast Adresse an. Dieser reicht vom nodelokalen bis zum globalen Bereich.
Authentisierungsmechanismen liefern den Beweis auf Unverfälschtheit der Nachricht und identifiziert den Absender (Digitale Unterschrift). Hier werden verschiedene kryptographische Verfahren eingesetzt. Die Verfahren für die Verschlüsselung und die Authentisierung können auch getrennt angewandt werden. Verwaltung und Verteilung der Schlüssel wird nicht von IPv6 gelöst. Das Standardverfahren für den IPv6-Authentisierungsmechanismus ist MD5 mit 128 Bit langen Schlüsseln. IPv6 schreibt keinen Verschlüsselungsmechanismus vor, jedes System im Internet muß jedoch den DES mit CBD (Cipher Block Chaining) unterstützen.
mit freundlicher Unterstützung von Herrn Prof. Jürgen Plate