 |
Grundlagen Computernetze
Prof. Jürgen Plate |
TCP/IP
Die Protokolle der TCP/IP-Familie wurden in den 70-er Jahren für den
Datenaustausch in heterogenen Rechnernetzen (d. h. Rechner verschiedener
Hersteller mit unterschiedlichen Betriebssystemen) entwickelt. TCP steht
für 'Transmission Control Protocol' (Schicht 4) und IP für 'Internet
Protocol' (Schicht 3). Die Protokollspezifikationen sind in sogenannten
RFC-Dokumenten (RFC - Request for Comment) festgeschrieben und veröffentlicht.
Aufgrund ihrer Durchsetzung stellen sie Quasi-Standards dar.
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.:
- Telnet (RFC 854)
Ein virtuelles Terminal-Protokoll, um vom eigenen Rechensystem einen interaktiven
Zugang zu einem anderen System zu realisieren.
- FTP (RFC 959)
Dieses (File-Transfer-) Protokoll ermöglicht, die Dateidienste eines
Fremdsystems interaktiv zu benutzen sowie die Dateien zwischen den Systemen
hin und her zu kopieren.
- NFS (RFC 1094)
Das Network File System ermöglicht den Zugriff auf Dateien an einem
entfernten System so, als wären sie auf dem eigenen. Man nennt dies
auch einen transparenten Dateizugriff. NFS basiert auf den zur TCP/IP-Familie
gehörenden UDP- (User- Datagramm-) Protokollen (ebenfalls Schicht 4),
RFC 768. Im Unterschied zu TCP baut UDP keine gesicherten virtuellen Verbindungen
zwischen kommunizierenden Hosts auf. Aufgrund dieser Eigenschaft ist es
für den Einsatz in lokalen Netzen vorgesehen.
- NNTP (RFC 977)
Das Network News Transfer Protocol spezifiziert Verteilung, Abfrage, Wiederauffinden
und das Absetzen von News-Artikeln innerhalb eines Teils oder der gesamten
Internet-Gemeinschaft. Die Artikel werden in regional zentralen Datenbasen
gehalten. Einem Benutzer ist es möglich, aus dem gesamten Angebot nur
einzelne Themen zu abonnieren.
- SMTP (RFC 821/822)
Das Simple-Mail-Transfer-Protokoll (RFC 821) ist ein auf der IP-Adressierung
sowie auf der durch den RFC 822 festgelegten Namensstruktur basierendes
Mail-Protokoll.
- DNS (RFC 920)
Der Domain Name Service unterstützt die Zuordnung von Netz- und Host-Adressen
zu Rechnernamen. Dieser Service ist z. B. erforderlich für die Anwendung
von SMTP sowie in zunehmendem Maße auch für Telnet und FTP.
Aus Sicherheitsgründen wendet sich der fremde Host an den DNS, um zu
prüfen, ob der IP-Adresse des ihn rufenden Rechners auch ein (Domain-)Name
zugeordnet werden kann. Falls nicht, wird der Verbindungsaufbau abgelehnt.
Der große Vorteil der TCP/IP-Protokollfamilie ist die einfache Realisierung
von Netzwerkverbunden. Einzelne Lokale Netze werden über Router oder
Gateways verbunden. Einzelne Hosts können daher über mehrere Teilnetze
hinweg miteinander kommunizieren.
IP als Protokoll der Ebene 3 ist die unterste Ebene, die darunter liegenden
Netzebenen können sehr unterschiedlich sein:
- LANs (Ethernet, Token-Ring, usw.)
- WANs (X.25, usw.)
- Punkt-zu-Punkt-Verbindungen (SLIP, PPP)
| Internet-Protokolle |
| OSI-Schicht |
Internet Protokoll Suite |
DOD Schicht |
| 7 |
Anwendung |
File Transfer |
Electronic Mail |
Terminal Emulation |
Usenet News |
World Wide Web |
Domain Name Service |
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 |
Hypertext Transfer Protocol (HTTP) RFC 2616 |
Domain Name Service (DNS) RFC 1034 |
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:
- Physikalische Adressen (z. B. Ethernet-Adresse)
- Internet-Adressen (Internet-Nummer, IP-Adresse)
- Domain-Namen
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 Dienstprogramme der Schichten 5-7 zurückgreifen.
Die Umsetzung einer IP-Adresse in eine Hardware-Adresse erfolgt durch
Tabellen und auf Hardware-Ebene (z. B. Ethernet) automatisch über
ARP (Adress Resolution Protocol). Dazu ein Beispiel:
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.
Auf der Netzwerkschicht aufbauend liegt die Internet-Schicht, die die erste
Abstraktionsschicht vom Transportmechanismus darstellt. Auf dieser Schicht 3 stellt
das Internet-Protokoll (IP) den grundlegenden Netzdienst zur Verfügung,
den Versand von Datenpaketen, sogenannten Datagrammen, über verschiedene Netze
hinweg. Die Netzwerkschicht hat keine Information darüber, von welcher Art
die Daten sind, die sie befördert. Nehmen wir als Beispiel das Ethernet:
Von der Ethernet-Karte werden die vom Netz kommenden Daten an die Treibersoftware
für die Karte weitergereicht. Diese interpretiert einen Teil dieser Daten als
IP-Header und den Rest als Datenteil eines IP-Paketes. Auf diese Weise ist der
IP-Header innerhalb eines Ethernet-Paketes eingekapselt. Aber auch das IP-Paket
selbst enthält wieder ein Datenpaket für eine höhere Protokollebene
(TCP), dessen Header auf der IP-Ebene als Bestandteil der Daten erscheint. Man kann
sich das so vorstellen, wie die russischen Puppen, die ineinandergeschachtelt sind.
Die kleinste Puppe ganz innen repräsentiert die Nutzdaten, alle außen herum
geschachtelten Puppen sind 'Protokoll-Verpackung'.
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 kleinere 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
nichts 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.
Format des IP-Headers
- Version
- Kennzeichnet die IP-Protokollversion
- IHL (Internet Header Length)
- Die Angabe der Länge des IP-Headers erfolgt
in 32-Bit-Worten (normalerweise 5). Da die Optionen nicht unbedingt auf
Wortlänge enden, wird der Header gegebenenfalls aufgefüllt.
- Type of Service
- Alle Bits haben nur "empfehlenden" Charakter. 'Precedence' bietet
die Möglichkeit, Steuerinformationen vorrangig zu befördern.
- Total Length
- Gesamtlänge des Datagramms in Bytes (max. 64 KByte).
- Identification
- Dieses und die beiden folgenden Felder steuern die Reassembly. Eindeutige
Kennung eines Datagramms. Anhand dieses Feldes und der 'Source Address'
ist die Zusammengehörigkeit von Fragmenten zu detektieren.
- Flags
- Die beiden niederwertigen Bits haben folgende Bedeutung:
- Don't fragment: Für Hosts, die keine Fragmentierung unterstützen
- More fragments: Zum Erkennen, ob alle Fragmente eines Datagramms empfangen wurden
- Fragment Offset
- Die Daten-Bytes eines Datagramms werden numeriert und auf die Fragmente
verteilt. Das erst Fragment hat Offset 0, für alle weiteren erhöht
sich der Wert um die Länge des Datenfeldes eines Fragments. Anhand
dieses Wertes kann der Empfänger feststellen, ob Fragmente fehlen.
Beispiel siehe unten.
- Time-to-live (TTL)
- Jedes Datagramm hat eine vorgegebene maximale Lebensdauer, die hier angegeben
wird. Auch bei Routing-Fehlern (z. B. Schleifen) wird das Datagramm irgendwann
aus dem Netz entfernt. Da Zeitmessung im Netz problematisch ist, und keine
Startzeit im Header vermerkt ist, decrementiert jeder Gateway dieses Feld
--> de-facto ein 'Hop Count'.
- Protocol
- Da sich unterschiedliche Protokolle auf IP stützen, muß das übergeordnete
Protokoll (ULP, Upper Layer Protocol) angegeben werden. Wichtige ULPs sind
- 1: ICMP Internet Control Message P.
- 3: GGP Gateway-to-Gateway P.
- 6: TCP Transmission Control P.
- 8: EGP Exterior Gateway P.
- 17: UDP User Datagram P.
- Header Checksum
- 16-Bit-Längsparität über den IP-Header (nicht die Daten)
- Source Address
- Internet-Adresse der Quellstation
- Destinantion Address
- Internet-Adresse der Zielstation
- Options
- Optionales Feld für weitere Informationen (deshalb gibt es auch die
Header-Länge). Viele Codes sind für zukünftige Erweiterungen
vorgesehen. Die Optionen dienen vor allem der Netzsteuerung, der Fehlersuche
und für Messungen. Die wichtigsten sind:
- Record Route: Weg des Datagramms mitprotokollieren
- Loose Source Routing: Die sendende Station schreibt einige Zwischenstationen
vor (aber nicht alle)
- Strict Source Routing: Die sendende Station schreibt alle Zwischenstationen
vor.
- Timestamp Option: Statt seiner IP-Adresse (wie bei Record Route) trägt
jeder Gateway den Bearbeitungszeitpunkt ein (Universal Time).
- Padding
- Füllbits
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 zum 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.25
Bei dieser Adresse werden zwei Teile unterscheiden, die Netzwerkadresse und die
Rechneradresse, wobei unterschiedlich viele Bytes für beide Adressen verwendet
werden:
Die Bereiche für die Netzwerkadresse ergeben sich durch die Zuordnung der
ersten Bits der ersten Zahl (a), die eine Erkennung der Netz-Klassen
möglich machen.
Netzklassen
| |
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) |
Besondere Adreßklassen
| |
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:
- Alle Rechner mit der gleichen Netzwerkadresse gehören zu einem
Netz und sind untereinander erreichbar.
- Zur Koppelung von Netzen unterschiedlicher Adresse wird eine spezielle Hardware-
oder Softwarekomponente, ein sogenannter Router, benötigt.
- Je nach Zahl der zu koppelnden Rechner wird die Netzwerkklasse gewählt.
In einem Netz der Klasse C können z. B. 254 verschiedene Rechner gekoppelt
werden (Rechneradresse 1 bis 254). Die Hostadresse 0 wird für die Identifikation
des Netzes benötigt und die Adresse 255 für Broadcast-(Rundruf-)Meldungen.
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 keinem
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:
- Class-A-Netz: 10.0.0.0 - 10.255.255.255
- Class-B-Netze: 172.16.0.0 - 172.31.255.255
- Class-C-Netze: 192.168.0.0 - 192.168.255.255
Zusätzlich hat die IANA auch das folgende Class-B-Netz für private
Netze reserviert, das schon von Apple- und Microsoft-Clients verwendet wird, sofern
kein DHCP-Server zur Verfügung steht. Das Verfahren heißt APIPA (Automatic Private IP Addressing):
- 169.254.0.0 - 169.254.255.255
Der für IP reservierte Adressraum reicht nicht mehr aus, um alle
Endgeräte anzusteuern. Mögliche Abhilfen:
- Dynamische Vergabe von IP-Adressen: Dieses Verfahren wird beim Dial-In beim
Provider verwendet. Es eignet sich auch im lokalen Netz, wenn davon auszugehen ist,
daß immer nur ein Teil der Rechner in Betrieb ist. Der Benutzer bekommt für
die Dauer einer Verbindung eine IP-Adresse zugeteilt. Das bekannteste Verfahren
heißt DHCP (dynamic host configuration protocol).
- Weiterentwicklung des IP-Protokolls: Mit IP Version 6 wird ein auf 128 Bit
erweiterter Adressraum geschaffen. Damit stehen genügend Adressen zur Vefügung.
- Network Address Translation (NAT): Über ein Gateway wird im Internet
eine andere IP-Adresse verwendet als im lokalen Netz (private Adressräume).
Die Umsetzung erlaubt sogar, ein komplettes privates Netz (siehe oben) mit einer
einzigen externen IP-Adresse zu betreiben.
Network Address Translation (NAT) und IP-Masquerading
Die begrenzte Verfügbarkeit von IP-Adressen hat dazu geführt, daß
man sich Gedanken über verschiedene Möglichkeiten machen mußte,
wie man mit den existierenden Adressen ein größeres Umfeld abdecken
kann.
Eine Möglichkeit, um private Netze (und dazu gehört letztendlich auch
ein privater Anschluß mit mehr als einem PC) unter Verwendung möglichst
weniger Adressen an das Internet anzukoppeln stellen NAT, PAT
und IP Masquerading. Alle Verfahren bilden private Adressen gemäß
RFC 1918 oder einen proprietären (nicht registrierten) Adreßraum eines
Netzes auf öffentliche registrierte IP-Adressen ab.
Subnetze
Nachdem nun klar ist, was ein Netz der Klasse A oder B ist, soll auf die Bildung
von Subnetzen hingewiesen werden. Diese dienen dazu, ein bestehendes Netz
in weitere, kleinere Netze zu unterteilen.
- Subnetze sind Strukturierungsmöglichkeit für Netze, ohne
daß man zusätzliche Klasse-A-, Klasse-B- oder Klasse-C-IP-Adressen braucht.
- Die Standardprozedur, um ein Netz in Unternetze (Subnetze) zu teilen,
nennt man "Subnetting".
- Die Hostadresse des A-, B- oder C-Netzes teilt sich in die Bereiche
Subnetzadresse (Subnet-ID, Teilnetz-ID) und Hostadresse (verbleibende, verkürzte
Host-ID). Ein Teil des Hostadressbereiches wird also genutzt, um die Subnetze zu
unterscheiden.
- Die Netzadresse und den Subnetzanteil des Hostadressraumes bezeichnet man als
"erweiterte Netzadresse" (extended network prefix).
- Die interne Subnetz-Struktur von A-, B- oder C-Netzen ist nach außen hin
unsichtbar.
- Damit Router in der Lage sind, Datagramme in das richtige Netz zuzustellen,
müssen sie bei der IP-Adresse den Netz- und Hostanteil unterscheiden können.
- Dies geschieht traditionell durch die Netzmaske bzw. Subnetzmaske (subnet mask).
Die Subnetzmaske dient dem Rechner dazu, die Zuordnung von Netzwerk-Teil und
Host-Teil vorzunehmen. Sie hat denselben Aufbau wie eine IP-Adresse (32 Bit bzw.
4 Byte). Per Definition sind alle Bit des "Netzwerk-Teils" auf 1 zu setzen,
alle Bit des "Host-Teils" auf 0. Für die o.a. Adreßklassen hat die
Subnetzmaske demnach folgendes Aussehen:
| 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 |
Diese Subnetzmaske (auch "Default Subnetzmaske" genannt) kann manuell
überschrieben werden.
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.
Aufteilung in Subnetze
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 |
Anmerkungen:
*) Die erste und letzte bei der Unterteilung entstehenden Adressen
dürfen nicht verwendet werden (Verwechslung mit Netz- und Broadcast-Adresse
des übergeordneten Netzes). Die Anzahl der Subnetze verringert sich somit
jeweils um zwei:
Ist der Netzwerkanteil der IP-Adresse n Bits, dann erhält man
(2n) - 2 Subnetze.
**) 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 in einem 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).
Beispiel: Aufteilung in 4 Subnetze
Ein Netz der Klasse C soll in vier gleich große Subnetze geteilt werden. Die
Netzadresse beträgt 192.168.98.0. Der Administrator wählt daher zur
Unterteilung die Subnetz-Maske 255.255.255.192. Die vier Rechner mit den IP-Adressen
192.168.98.3, 192.168.98.73. 192.168.98.156 und 192.168.98.197 befinden sich daher
in vier Subnetzen zwischen denen geroutet werden muß. Broadcasts in Subnetz 1
werden somit nicht in die anderen Subnetze übertragen. Es ist nun zum Beispiel
für das Unternehmen möglich, die Rechner des Vertriebs in Subnetz 1, die
des Einkaufs in Subnetz 2, jene der Entwicklung in Subnetz 3 und ein Netz aus
Demorechnern in Subnetz 4 zu organisieren. Damit ist gesichert, daß
Störungen in einzelnen Subnetzen auch lokal auf diese beschränkt
bleiben. Sie schlagen nicht auf die Datenstruktur des ganzen Unternehmens durch.
Allgemein ergibt sich für ein C-Netz folgende Aufstellung:
Subnetze eines C-Netzes
In Klammern die reduzierte Anzahl der Subnetze (Anzahl - 2). Die rot unterlegten
Möglichkeiten sind dann in der Praxis nicht einsetzbar.
| 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 |
Beispiel: Aufteilung in 8 (6) Subnetze
Von den acht variabel verwendbaren Bits nutzt er also die drei höchstwertigen
Bits für das Subnetz und die fünf letzten Bits für die Hostadresse.
Die erste Adresse jedes Subnetz ist die Adresse in der alle Hostbits den Wert 0 haben.
| |
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
Anmerkung:
Die Zahl hinter dem Schrägstrich (oben ist das die 27) gibt an,
wieviele Bits der 32 Bit langen IP-Adresse als Netzanteil verwendet werden.
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 |
Als kleine Hilfe gibt es hier noch einen Subnetz-Rechner
als Javascript-Programm. Eingegeben wird eine IP-Netzadresse
in CIDR-Form (Classless Inter-Domain Routing,
z.B. 10.1.2.0/24). Nach dem Klick auf "Berechnen" erscheinen
im unteren Feld die Werte der Netzadresse, der Subnet-Maske und
der Bereich der zugehörigen IP-Adressen, wobei die erste Adresse
des angebenen Bereichs die Netzadresse darstellt und die letzte Adresse
die Broadcast-Adresse.
ICMP erlaubt den Austauch von Fehlermeldungen und Kontrollnachrichten auf
IP-Ebene. ICMP benutzt das IP wie ein ULP, ist aber integraler Bestandteil
der IP-Implementierung. Es macht IP nicht zu einem 'Reliable Service', ist
aber die einzige Möglichkeit Hosts und Gateways über den Zustand
des Netzes zu informieren (z. B. wenn ein Host temporär nicht erreichbar
ist --> Timeout).
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:
- Type
- Identifiziert die ICMP-Nachricht
- 0 Echo reply
- 3 Destination unreachable
- 4 Source quench
- 5 Redirect (Change a Route)
- 8 Echo request
- 11 Time exceeded for a datagram
- 12 Parameter Problem on a datagram
- 13 Timestamp request
- 14 Timestamp reply
- 15 Information request
- 16 Information reply
- 17 Address mask request
- 18 Address mask reply
- Code
- Detailinformation zum Nachrichten-Typ
- Checksum
- Prüfsumme der ICMP-Nachricht (Datenteil des IP-Datagramms)
- Identifier und Sequence-Nummer
- dienen der Zuordnung eintreffender Antworten
zu den jeweiligen Anfragen, da eine Station mehrere Anfragen aussenden kann
oder auf eine Anfrage mehrere Antworten eintreffen können.
Wenden wir uns nun den einzelnen Nachrichtentypen zu:
- Echo request/reply
- Überprüfen der Erreichbarkeit eines Zielknotens. Es können
Testdaten mitgeschickt werden, die dann unverändert zurückgeschickt
werden (--> Ping-Kommando unter UNIX).
- Destination unreachable
- Im Codefeld wird die Ursache näher beschrieben:
0 Network unreachable
1 Host unreachable
2 Protocol unreachable
3 Port unreachable
4 Fragmentation needed
5 Source route failed
- Source quench
- Wenn mehr Datagramme kommen als eine Station verarbeiten kann, sendet sie
diese Nachricht an die sendende Station.
- Redirect
- wird vom ersten Gateway an Hosts im gleichen Teilnetz gesendet, wenn es
eine bessere Route-Verbindung über einen anderen Gateway gibt. In der
Nachricht wird die IP-Adresse des anderen Gateways angegeben.
- Time exceeded
- Für diese Nachricht an den Quellknoten gibt es zwei Ursachen:
- Time-to-live exceeded (Code 0): Wenn ein Gateway ein Datagramm eliminiert,
dessen TTL-Zähler abgelaufen ist.
- Fragment reassembly time exceeded (Code 1): Wenn ein Timer abläuft,
bevor alle Fragmente des Datagramms eingetroffen sind.
- Parameter problem on a Datagramm
- Probleme bei der Interpretation des IP-Headers. Es wird ein Verweis
auf die Fehlerstelle und der fragliche IP-Header zurückgeschickt.
- Timestamp request/reply
- Erlaubt Zeitmessungen und -synchronisation im Netz. Drei Zeiten werden gesendet
(in ms seit Mitternacht, Universal Time):
- Originate T.: Sendezeitpunkt des Requests (vom Absender)
- Receive T.: Ankunftszeit (beim Empfänger)
- Transmit T.: Sendezeitpunkt des Reply (vom Empfänger)
- Information request/reply
- Mit dieser Nachricht kann ein Host die Netid seines Netzes erfragen, indem
er seine Netid auf Null setzt.
- Address mask request/reply
- Bei Subnetting (siehe unten) kann ein Host die Subnet-Mask erfragen.
Für den User nutzbar ist ICMP vor allem für die Kommandos ping
und traceroute (bei Windows "tracert"). Diese Kommandos senden ICMP-Echo-Requests
aus und warten auf den ICMP-Echo-Reply. So kann man die Erreichbarkeit eines
Knotens feststellen. Will man alle Knoten im lokalen Netz erkennen genügt ein
ping auf die Broadcast-Adresse, z. B.:
ping 192.168.33.255
Zum Anzeigen der Arp-Tabelle gibt es unter Windows wie unter Linux das arp-Kommando,
mit arp -a erhält man eine Liste der aktuell gespeicherten MAC-Adressen und
deren Zuordnung zu IP-Adressen.
Führt man das obige ping-Kommando und das arp-Kommando nacheinander
aus, erhält man eine liste der IP- umd MAC-Adressen der aktiven lokalen Knoten, z.B.:
ping -b -c1 192.168.33.255
arp -a
UDP ist ein einfaches Schicht-4-Protokoll, das einen nicht zuverlässigen,
verbindungslosen Transportdienst ohne Flußkontrolle zur Verfügung
stellt. UDP ermöglicht zwischen zwei Stationen mehrere unabhängige
Kommunikationsbeziehungen (Multiplex-Verbindung): Die Identifikation der
beiden Prozesse einer Kommuninkationsbeziehung geschieht (wie auch bei TCP,
siehe unten) durch Port-Nummern (kurz "Ports"), die allgemein
bekannten Anwendungen fest zugeordnet sind. Es lassen sich aber auch Ports
dynamisch vergeben oder bei einer Anwendung durch verschiedene Ports deren
Verhalten steuern. Die Transporteinheiten werden 'UDP-Datagramme' oder 'User
Datagramme' genannt. Sie haben folgenden Aufbau:
- Source Port
- Identifiziert den sendenden Prozeß (falls nicht benötigt, wird
der Wert auf Null gesetzt).
- Destination Port
- Identifiziert den Prozeß des Zielknotens.
- Length
- Länge des UDP-Datagramms in Bytes (mindestens 8 = Headerlänge)
- UDP-Checksum
- Optionale Angabe (falls nicht verwendet auf Null gesetzt) einer Prüfsumme.
Zu deren Ermittlung wird dem UDP-Datagramm ein Pseudoheader von 12 Byte
vorangestellt (aber nicht mit übertragen), der u. a. IP-Source-Address,
IP-Destination-Address und Protokoll-Nummer (UDP = 17) enthält.
Welches übergeordnete Protokoll der Transportschicht das Datenpaket
erhält, steht im 'Protokoll'-Feld eines jeden IP-Paketes. Jedes Protokoll
der Transportschicht bekommt eine eindeutige Identifikationsnummer zugewiesen,
anhand der die IP-Schicht entscheiden kann, wie weiter mit dem Paket zu verfahren
ist. Eines der wichtigsten Protokolle der Transportschicht ist TCP.
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:
- Die Fenster größe im Beispiel beträgt drei Bytes.
- Byte 1 wurde von der Datenquelle gesendet und vom Empfänger quittiert.
- Die Quelle hat die Bytes 2, 3 und 4 gesendet, sie wurden aber vom
Empfänger noch nicht quittiert (Quittung eventuell noch unterwegs).
- Byte 5 wurde von der Quelle noch nicht gesendet. Er geht erst dann auf
die Reise, wenn die Quittung für Byte 2 (oder höher) eingetroffen ist.
Das TCP-Paket wird oft auch als 'Segment' bezeichnet. Jedem TCP-Block ist ein
Header vorangestellt, der aber wesentlich umfangreicher als die bisherigen ist:
- Source Port
- Identifiziert den sendenden Prozeß.
- Destination Port
- Identifiziert den Prozeß des Zielknotens.
- Sequence Number
- TCP betrachtet die zu übertragenden Daten als numerierten Bytestrom,
wobei die Nummer des ersten Bytes beim Verbindungsaufbau festgelegt wird.
Dieser Bytestrom wird bei der Übertragung in Blöcke (TCP-Segmente)
aufgeteilt. Die 'Sequence Number' ist die Nummer des ersten Datenbytes im
jeweiligen Segment (--> richtige Reihenfolge über verschiedene Verbindungen
eintreffender Segmente wiederherstellbar).
- Acknowledgement Number
- Hiermit werden Daten von der Empfängerstation bestätigt, wobei
gleichzeitig Daten in Gegenrichtung gesendet werden. Die Bestätigung
wird also den Daten "aufgesattelt" (Piggyback). Die Nummer bezieht
sich auf eine Sequence-Nummer der empfangenen Daten; alle Daten bis zu dieser
Nummer (ausschließlich) sind damit bestätigt --> Nummer des
nächsten erwarteten Bytes. Die Gültigkeit der Nummer wird durch
das ACK-Feld (--> Code) bestätigt.
- Data Offset
- Da der Segment-Header ähnlich dem IP-Header Optionen enthalten kann,
wird hier die Länge des Headers in 32-Bit-Worten angegeben.
- Res.
- Reserviert für spätere Nutzung
- Code
- Angabe der Funktion des Segments:
- URG Urgent-Pointer (siehe unten)
- ACK Quittungs-Segment (Acknowledgement-Nummer gültig)
- PSH Auf Senderseite sofortiges Senden der Daten (bevor Sendepuffer
gefüllt ist) und auf Empfangsseite sofortige Weitergabe an die Applikation
(bevor Empfangspuffer gefüllt ist) z. B. für interaktive Programme.
- RST Reset, Verbindung abbauen
- SYN Das 'Sequence Number'-Feld enthält die initiale Byte-Nummer
(ISN) --> Numerierung beginnt mit ISN + 1. In der Bestätigung
übergibt die Zielstation ihre ISN (Verbindungsaufbau).
- FIN Verbindung abbauen (Sender hat alle Daten gesendet), sobald der
Empfänger alles korrekt empfangen hat und selbst keine Daten mehr loswerden
will.
- Window
- Spezifiziert die Fenstergröße, die der Empfänger bereit
ist anzunehmen - kann dynamisch geändert werden.
- Checksum
- 16-Bit Längsparität über Header und Daten.
- Urgent Pointer
- Markierung eines Teils des Datenteils als dringend. Dieser wird unabhängig
von der Reihenfolge im Datenstrom sofort an das Anwenderprogramm weitergegeben
(URG-Code muß gesetzt sein). Der Wert des Urgent-Pointers markiert
das letzte abzuliefernde Byte; es hat die Nummer <Sequence Number>
+ <Urgent Pointer>.
- Options
- Dieses Feld dient dem Informationsaustausch zwischen beiden Stationen auf
der TCP-Ebene, z. B. die Segmentgröße (die Ihrerseits von der
Größe des IP-Datagramms abhängen sollte, um den Durchsatz
im Netz optimal zu gestalten).
Ablauf einer TCP-Session
Im Gegensatz zu IP ist TCP verbindungsorientiert. Das muß so sein,
denn TCP-Verbindungen sollen ja für den Benutzer prinzipiell wie Dateien zu
handhaben sein. Das bedeutet, eine TCP-Verbindung wird wie eine Datei geöffnet und
geschlossen, und man kann ihre Position innerhalb des Datenstroms bestimmen, genau
wie man bei einer Datei die Position der Lese- oder Schreibposition angeben kann.
TCP sendet die Daten auch in größeren Einheiten, um den Verwaltungsaufwand
durch Header- und Kontrollinformationen klein zu halten. Im Gegensatz zu
den IP-Paketen bezeichnet man die Einheiten der Transportschicht als "Segmente".
Jedes gesendete TCP-Segment hat eine eindeutige Folgenummer, welche die Position
seines ersten Bytes im Byte-Strom der Verbindung angibt. Anhand dieser Nummer
kann die Reihenfolge der Segmente korrigiert und doppelt angekommene Segmente
können aussortiert werden. Da die Länge des Segments aus dem IP-Header
bekannt ist, können auch Lücken im Datenstrom entdeckt werden, und der
Empfänger kann verlorengegangene Segmente neu anfordern.
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. |
 |
TCP-Zustandsübergangsdiagramm
Den gesamte Lebenszyklus einer TCP-Verbindung beschreibt die folgende Grafik in einer
relativ groben Darstellung.
Erklärung der Zustände:
- LISTEN: Warten auf ein Connection Request.
- SYN-SENT: Warten auf ein passendes Connection Request,
nachdem ein SYN gesendet wurde.
- SYN-RECEIVED: Warten auf Bestätigung des Connection Request
Acknowledgement, nachdem beide Teilnehmer ein Connection Request
empfangen und gesendet haben.
- ESTABLISHED: Offene Verbindung.
- FIN-WAIT-1: Warten auf ein Connection Termination Request des Kommunikationspartners
oder auf eine Bestätigung des Connection Termination, das vorher gesendet wurde.
- FIN-WAIT-2: Warten auf ein Connection Termination Request des Kommunikationspartners.
- CLOSE-WAIT: Warten auf ein Connection Termination Request (CLOSE) der darüberliegenden
Schicht.
- CLOSING: Warten auf ein Connection Termination Request des Kommunikationspartners.
LAST-ACK: Warten auf die Bestätigung des Connection Termination Request, das zuvor an
den Kommunikationspartner gesendet wurde.
Zeitüberwachung
In allen Protokollimplementierungen spielt die Zeit eine wichtige Rolle. So werden
alle Abläufe zeitlich überwacht. Dazu werden in der Protokollimplementierung
sogenannte "Timer" gestartet, deren Timeout zur Fehlerbehandlung führt.
Paketwiederholungs-Wecker oder Retransmission Timeout
In Weitverkehrsnetzen mit unterschiedlichsten Verbindungsarten, die noch dazu
zeitlichen Schwankungen unterworfen sind, ist die Wahl der Wartezeit auf
Bestätigungen schwierig.
Der Retransmission Timeout (RTO) läuft ab, wenn der vorgegebene Zeitraum
zwischen dem Aussenden eines TCP-Pakets bis zum Eintreffen der dazugehörigen
Quittung überschritten wird. In diesem Fall muß das Paket noch einmal
gesendet werden. Allerdings darf der Zeitraum nicht fest definiert sein, da man
sonst TCP nicht über Netzwerke mit unterschiedlichen Laufzeiten betreiben
könnte - wenn man z.B. Ethernet und eine serielle Verbindung über mehrere
Gateways miteinander vergleicht, ergibt sich ein tausendfacher Unterschied in der
Übertragungsrate. Daher wird in TCP bei jedem Paket die Zeit gemessen, die
zwischen Senden und Empfangen einer Quittung vergeht, die sogenannte Round Trip Time
(RTT). Die so gemessene Zeit wird über eine Formel umgerechnet, die Spitzen
nach oben und unten herausfiltert, sich aber auch allmählich an eine
verlängerte oder verkürzte Laufzeit anpaßt. Das Ergebnis ist die
Smoothed Round Trip Time (SRTT), d.h. die mittlere Zeit, die für einen
Paketaustausch verstreicht. Diese Zeit wird nochmals skaliert, um weiteren Spielraum
für unvorhergesehene Verzögerungen zu schaffen.
SRTT: S = aS + (1 - a)R
RTO: T = min[U, max[L,ßS]]
(L < T < U)
S Smoothed Round Trip Time
R Round Trip Time
T Retransmission Timeout (z.B. 30 Sekunden)
U Zeitobergrenze (z.B. 1 Sekunde)
L Zeituntergrenze (z.B. 1 Minute)
a Smoothing Factor (z.B. 0.9)
ß Scaling Factor (z.B. 2.0)
Die beiden Formeln werden durch den RFC 793 spezifiziert: zunächst den SRTT-Filter,
danach die Ermittlung des RTO. Falls nach der Wiederholung des Pakets der Wiederholungstimer
ein weiteres Mal abläuft, wird der RTO in der Regel bis zu zwölfmal exponentiell
erhöht. Erst wenn auch diese Erhöhung keinen Effekt zeigt, gilt die Verbindung als
unterbrochen.
Persistance Timer
Beim Austausch von Daten über TCP ist es im Prinzip möglich, daß
das Empfangsfenster gerade auf 0 steht - und genau in diesem Moment ein Paket
verlorengeht, das das Fenster wieder öffnen sollte. Als Ergebnis warten
dann beide TCPs bis in alle Ewigkeit aufeinander. Ein Gegenmittel dazu ist der
Persistenz-Timer, der in bestimmten Zeitabschnitten kleine TCP-Pakete
(1 Byte) abschickt 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.
Stillhaltezeit oder Quiet Time
Jede Möglichkeit der Verwechslung von Verbindungen durch im Netz herumirrende
überholte TCP-Pakete 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. Die MSL
entspricht der Zeit, in UNIX die im TTL-Feld von IP eingetragen wird.
Der UNIX-Anwender bemerkt diese Wartezeit, wenn er eine Verbindung zwischen
gleichen Partnern (d.h. gleichen Portnummern) sofort nach dem Abbruch wieder
eröffnen will. Das System teilt ihm dann mit, daß die verwendete
Portnummer noch belegt ist. Erst nach Ablauf von ca. 30 Sekunden ist ein erneuter
Verbindungsaufbau möglich.
Keep Alive Timer und Idle Timer
Dabei handelt es sich um zwei nicht in der TCP-Spezifikation vorgesehene Wecker, die
aber in UNIX-Systemen implementiert sind. Beide stehen miteinander in Verbindung.
Der Keep Alive Timer bewirkt, daß 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 Timers abgebrochen. Eine Applikation aktiviert diese Timer mit
der KEEP_ALIVE-Option über die Socket-Schnittstelle.
In der folgenden Tabelle sind die Werte für die oben genannten Timer angegeben.
Dazu ist zu bemerken, daß die Dauer der Timer implementationsabhängig ist
und nicht immer auf die unten angegebenen Werte eingestellt sein muß.
| Einstellungen der TCP-Timer (implementationsabhängig) |
| Timer | Dauer [s] |
| Retransmission Timeout | dynamisch |
| Persistance Timer | 5 |
| Quiet Timer | 30 |
| Keep Alive Timer | 45 |
| Idle Timer | 360 |
Algorithmen zur Steigerung der Effizienz
Zwischen einer TCP-Implementierung nach Spezifikation und einem optimierten TCP-Subsystem,
wie man es in UNIX-Systemen vorfindet, liegt ein weiter Weg. Zahllose Verbesserungen
sind in den Jahren in die UNIX-TCP-Implementierungen eingeflossen und neue Algorithmen
in Nachfolgeversionen integriert worden:
Acknowledgement Delay
Normalerweise sendet der Empfänger nach Erhalt eines Pakets ein Antwortpaket,
in dem die Größe des Empfangsfensters verkleinert und die Daten quittiert
werden. Nach Übergabe der Daten an den empfangenden Prozeß werden die Datenpuffer
im System frei, was ein Absenden eines Pakets mit einer Vergrößerung des
Empfangsfensters zur Folge hat. Hat das Programm die Daten verarbeitet, folgt in der
Regel kurz danach eine Antwort, es sind also für eine Transaktion in der Regel drei
Pakete notwendig. Man hat aber festgestellt, daß in manchen Fällen, z.B. beim
Telnet- oder SSH-Betrieb, ein Verzögern des Quittungspakets um 0,2 Sekunden
Vorteile bringt: nach dieser kurzen Wartezeit können alle drei Informationen -
Empfangsfenster, Quittung und Antwort - in einem einzigen Paket versendet werden. Damit
Datentransfers, die hohen Durchsatz benötigen, nicht gebremst werden, unterbleibt die
Verzögerung, wenn das Empfangsfenster um mindestens 35% oder zwei maximale Pakete
verändert wurde.
Silly Window Syndrome Avoidance
In bestimmten Situationen werden Empfangsfensterangaben versendet, die derart klein sind,
daß das Netzwerk und Rechner von den vielen Quittungspaketen über Gebühr
belastet werden. Um das zu verhindern, wird das Empfangsfenster nur dann wieder
vergrößert, wenn ausreichend Platz (mehr als 1/4 des Datenpuffers oder ein
maximales Paket) zur Verfügung steht. Desgleichen verhält sich auch der
Sender konservativ und sendet nur, wenn das angebotene Fenster ausreichend groß ist.
Nagle Algorithm oder Small Packet Avoidance
Benannt nach
seinem Erfinder John Nagle, versucht dieser Algorithmus eben-
falls, das Versenden von kleinen TCP-Paketen zu verhindern. do,
In diesem Fall geht es aber darum, auf der Senderseite zu verhin- es
dern, daß in kleinen Einheiten von der Applikation an TCP über- Ari
gebene Daten auch in dieser Form weiterversendet werden. Ein Co
erstes Paket wird sofort ausgesendet, weitere Daten auf der ge,~
Senderseite aber so lange gepuffert, bis ein volles maximales Seg- un
ment geschickt werden kann oder eine Quittung für das erste gn
Paket eingetroffen ist. Probleme ergeben sich mit diesem bis
Algorithmus aber bei Anwendungen, die viele kleine Nachrich- un
ten abschicken, ohne eine Antwort zurückzuerhalten, z.B. dem X In
Window System. In diesem Fall kann der Nagle-Algorithmus En
verbindungsspezifisch abgeschaltet werden. pal
Slow Start with Congestion Avoidance
Diese miteinander verbundenen Algorithmen, manchmal auch als Jacobson-Algorithmen
bezeichnet, sind erst in jüngster Zeit bekannt geworden und in erster
Linie für langsame Netzwerke und den Betrieb von Netzen mit Gateways von
Bedeutung. Man hatte in den letzten Jahren beobachtet, daß das Internet mit
steigender Belastung immer weniger Datendurchsatz lieferte und zum Teil sogar
nahezu zusammenbrach. Als man die Vorgänge näher betrachtete, wurde
festgestellt, daß mehr als die Hälfte der Daten Wiederholungen
verlorengegangener TCP-Pakete waren. Was war geschehen? Ein Netzwerkpfad -
Datenpuffer vom Sender über mögliche Gateways bis hin zum
Empfänger - kann nur eine endliche Datenmenge aufnehmen.
Wenn ein Gateway oder ein Host sehr durch Verkehr belastet sind, kann es
vorkommen, daß nicht genügend Pufferplatz zur Aufnahme von Paketen
vorhanden ist. In diesem Fall werden die Pakete vom Gateway verworfen,
woraufhin der Absender des Pakets nach Ablauf des Retransmission Timeouts
eine Wiederholung vornimmt und dadurch insgesamt die Belastung des Netzes weiter
unnötig steigert. Der Slow Start-Algorithmus versucht nun zu ermitteln, wieviele
Daten zu einem Zeitpunkt in Richtung Empfänger unterwegs sein können, ohne
daß es dabei zu Verlusten kommt. Erreicht wird das über eine allmähliche
Steigerung der ausgesendeten Datenmenge bis zu einem Punkt, an dem sich ein
gleichmässiger Datenfluß ohne Wiederholungen ergibt. Wo früher
die Menge der auszusendenden Daten durch die Größe bestimmt wurde,
ist jetzt die Aufnahmekapazität des Netzwerkpfads, das sogenannte "Congestion Window",
die bestimmende Größe, wobei das Congestion Window immer kleiner oder gleich
dem Empfangsfenster (Receive Window) ist. Hat sich das Congestion Window eingependelt,
wird es erst wieder verändert, wenn auftretende Wiederholungen ein Ansteigen der
Netzwerklast signalisieren: in diesem Fall tritt die "Congestion Avoidance" in Kraft.
Gleichzeitig wird durch ständiges vorsichtiges Vergrößern des Congestion
Windows versucht, unter Umständen freiwerdende Ressourcen zu benutzen. Aufgrund des
konservativen Verhaltens läßt sich der Durchsatz um bis zu 30% steigern und
die Anzahl der wiederholten Pakete um über 50% senken. In Verbindung mit diesen
beiden Algorithmen wurde auch die Ermittlung des Retransmission Timeouts verbessert.
Dieser Wert paßt sich jetzt schneller an Veränderungen in der RTT an und
verhindert zusätzliche Paketwiederholungen.
Ports für jeden Dienst
Server-Prozesse lauschen bei UDP und TCP auf bestimmten Portnummern. Per
Übereinkunft werden dazu Ports niedriger Nummern verwendet. Für
die Standarddienste sind diese Portnummern in den RFCs festgeschrieben.
Ein Port im "listen"-Modus ist gewissermaßen eine halboffene Verbindung.
Nur Quell-IP und Quellport sind bekannt. Der Serverprozeß kann vom
Betriebssystem dupliziert werden, so daß weitere Anfragen auf diesem
Port behandelt werden können.
- Die Portnummern werden auf dem Host-System konfiguriert und haben zwei Funktionen:
- Allgemein verfügbare Dienste werden über 'well known' Ports
(--> feste, per RFC zugeordnete Portnummer) erreichbar. Sie stehen
also für ein Protokoll, das über die Nummer direkt
angesprochen wird
- oder sie werden beim Verbindungsaufbau vereinbart und einem
Server-Programm zugewiesen
- Die Portangabe ist nötig, wenn mehrere Serverprogramme auf dem
adressierten Rechner laufen.
- Die Portnummer steht im TCP-Header und ist 16 Bit groß. Theoretisch
können also bis zu 65535 TCP-Verbindungen auf einem Rechner mit einer einzigen
IP-Adresse aufgebaut werden.
- Portnummern werden oft auch bei der Konfiguration von Internet-Clients
als Parameter gefordert.
- Die Client-Prozesse verwenden normalerweise freie Portnummern, die vom
lokalen Betriebssystem zugewiesen werden (Portnummer > 1024).
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 |
| 80 | HTTP (Proxy-Server) |
| 110 | POP3 |
| 143 | IMAP |
Eine vollständige Portliste erhält man bei
http://www.isi.edu/in-notes/iana/assignments/port-numbers.
| Well Known Ports |
1 – 1023 |
Diese Ports sind fest einer Anwendung oder einem Protokoll
zugeordnet. Die feste Zuordnung ermöglicht eine einfachere Konfiguration.
Die Verwaltung dieser Ports übernimmt die Internet Assigned Numbers Authority
(IANA). |
| Registered Ports |
1024 – 49151 |
Diese Ports sind für diverse Dienste vorgesehen. |
| Dynamically Allocated Ports |
49152 – 65535 |
Diese Ports werden dynamisch zugewiesen. Jeder Client kann
diese Ports nutzen. Wenn ein Prozess einen Port benötigt, fordert er diesen
bei seinem Host an. |
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.
Port-Scans
Beim Scanning wird versucht, offene Ports eines Rechners zu ermitteln. Das ist
meist auch der erste Schritt eines Angreifers, der in einem Rechner eindringen will.
Deshalb dient ein Portscan auch dazu, die Sicherheit des eigenen Systems zu
überprüfen. Bei den Scanning-Methoden wurden Verfahren entwickelt, bei denen
versucht wird, den Scanvorgang auf dem gescannten Rechern unentdeckt zu lassen.
- TCP-Connect-Scan
Bei dieser Methode wird versucht, eine Verbindung zu einem Port auf
dem Zielrechner aufzubauen. Der Scanner läßt einen vollständigen
Dreiwege-Handshake zu, bevor er die Verbindung wieder unterbricht.
Diese Art der Scans ist allerdings sehr leicht zu entdecken und
kann auch leicht mit Hilfe von Firewalls abgeblockt werden.
- TCP-SYN-Scan
Diese Methode wird oft als "Half-Open-Scan" bezeichnet. Der Scanner sendet
ein SYN-Packet an den Zielrechner, wie bei einem ganz normalen Verbindungsaufbau.
Wenn der Zielrechner mit einem RST antwortet, weiß der Scanner, daß dieser
Port geschlossen ist. Antwortet der Zielrechner jedoch mit einem SYN/ACK, handelt
es sich um einem offenen Port. In diesem Falle wird die Verbindung vom Scanner sofort
mit einem RST beendet. Diese Art des Scannens ist nicht ganz so leicht auf dem
Zielrechner zu entdecken wie der Connect Scan.
- Stealth FIN-Scan
Stealth Scans sollen vom Zielrechner nicht entdeckt werden. Allerdings
gibt es Programme, die genau solche Scans entdecken. Beim "Stealth FIN Scan"
wird nur ein Packet mit einem FIN-Flag, ohne begleitendes ACK-Flag gesendet.
Diese Art von Paket ist unzulässig. Wenn der Port offen ist, wird das Paket des
Scanners vom Zielrechner ignoriert. Wenn der Port geschlossen ist, antwortet der
Zielrechner mit einem RST-Paket.
- Stealth Xmastree-Scan
Bei diesem Scan sind die FIN-, URG-, und PUSH-Flags alle gemeinsam gesetzt. Auch
dieses Paket ist unzulässig. Wenn der Port offen ist, wird das Paket des
Scanners vom Zielrechner ignoriert. Wenn der Port geschlossen ist, antwortet der
Zielrechner mit einem RST-Paket.
- Stealth Null-Scan
Bei diesem Scan sind alle Flags auf Null gesetzt. Alles Weitere wie oben.
- ACK-Scan
Dieser Scan wird verwendet, um Firewalls zu testen ob sie mit "stateful inspection"
arbeiten (z.B. Firewall 1) oder ob es sich nur um einfache Packetfilter handelt,
die eingehende SYN Packete verwerfen. Der ACK-Scan sendet
ein Packet mit gesetztem ACK-Flag und zufälliger Sequenznummer an die Ports.
Wenn das Paket von der Firewall durchgelassen wird, sendet der Server ein RST, da
das Paket nicht zuzuordnen ist. In diesem Fall wird der Port als "ungefiltert"
klassifiziert. Wenn die Firewall den Status einer Verbindung überwacht, wird
das Paket ohne eine Antwort vom Zielrechner abgewiesen oder es wird dem
Scanner mit einer ICMP Destination unreachable Nachricht geantwortet.
Das Point to Point Protocol (PPP) findet gegenwärtig vielfachen
Einsatz. Es arbeitet mit drei Teilprotokollen:
- Das Data Link Layer Protocol ermöglicht die Übertragung
(Encapsulation) von Datagrammen über serielle Verbindungen mit Hilfe von HDLC.
- Das Link Control Protocol (LCP) steuert Aufbau, Konfiguration und
Test der Verbindung.
- Das Network Control Protocol (NCP) ermöglicht die Übertragung
von Konfigurationsdaten für verschiedene Protokolle der Vermittlungsschicht.
PPP ist geeignet für den simultanen Einsatz verschiedener Protokolle der
Vermittlungsschicht, es ist also ein so genanntes "Multi-Protokoll-Protokoll".
Es ist ein zustandsorientiertes Protokoll:
PPP ist ein verbindungsorientiertes Protokoll und unterscheidet drei Phasen
Verbindungsaufbau, Datenübertragung und Verbindungsabbau. Die Realisierung
dieser Phasen unter Berücksichtigung der Teilprotokolle von PPP zeigt
das Bild unten.
- Der anrufende PPP-Knoten sendet LCP-Rahmen zum Aufbau und zur Konfiguration der
Verbindung (Data Link). Die LCP-Pakete verfügen über ein Feld mit
Konfigurations-Optionen. Zu diesen Optionen zählen beispielsweise die
Maximum Transmission Unit (MTU). Hierbei handelt es sich um die Angabe, ob
bestimmte PPP-Felder komprimiert werden, oder das Link Authentication Protocol
(LAP).
- In einer optionalen Phase wird überprüft, ob die Qualität der
Verbindung für den Aufbau einer Übertragung der Pakete der Vermittlungsschicht
ausreicht.
- Es folgt eine Authentifizierungsphase.
- Der anrufende PPP-Knoten sendet NCP-Rahmen zur Auswahl und Konfiguration des zu
übertragenden Protokolls der Vermittlungsschicht.
- Nun können die Daten übertragen werden.
- Die Verbindung bleibt bis zur Beendigung durch LCP- oder NCP-Rahmen bestehen
oder bis ein externes Ereignis auftritt. Zu diesen kann eine Unterbrechung durch den
Anwender, der Abbruch der Übertragung oder der Ablauf eines "Inactivity Timers"
zählen.
PPP unterstützt verschiedene Protokolle zur Authentifizierung. Dabei realisieren
alle Protokolle nur eine einseitige Authentifizierung. Dies bedeutet, dass sich der
anrufende Knoten bzw. dessen Anwender authentifizieren und der angerufene Knoten diese
Authentifizierung überprüfen muss. Der angerufene Knoten authentifiziert
sich durch seine Verfügbarkeit unter dieser physischen Verbindung. Die
wichtigsten Authentifizierungsprotokolle sind:
- das Password Authentication Protocol (PAP),
- das Shiva Password Authentication Protocol(SPAP),
- das Challenge Handshake Authentication Protocol (CHAP) sowie
- eine Variante des CHAP, das Microsoft-CHAP (MS-CHAP), das in zwei Versionen vorliegt.
Die Authentifzierungsprotokolle mit der größten Verbreitung sind PAP und CHAP. Auch
MS-CHAPv2 ist recht häufig anzutreffen. Die meisten ISPs fragen beim einwählenden Host
zunächst CHAP an.
PAP unterstützt ein so genanntes Zwei-Wege-Handshake. Die Kombination "Username/Password"
wird vom anrufenden Knoten so lange übertragen, bis die Authentifizierung bestätigt
oder abgelehnt wird. Im Falle der Ablehnung wird die Verbindung abgebrochen. Dieses Vorgehen
bietet allerdings nur eine geringe Sicherheit: Das Passwort wird unverschlüsselt übertragen.
Es ist eine beliebige Anzahl von Wiederholungen möglich. Und schließlich werden
Häufigkeit und Geschwindigkeit der Versuche vom anrufenden Knoten bestimmt, so dass ein
Brute-Force-Angriff möglich wird.
CHAP bietet ein erhöhtes Sicherheitsniveau im Rahmen eines so genannten Drei-Wege-Handshakes.
Der anrufende Knoten darf erst die Authentifizierung beginnen, wenn er vom angerufenen Knoten dazu
aufgefordert wurde. Auf diese Weise werden Häufigkeit und Geschwindigkeit der Versuche vom
angerufenen Knoten bestimmt. Zusätzlich wird die Kombination "Username/Password" nur im Rahmen
einer Ein-Wege-Hash-Funktion (Message Digest 5, MD5) übertragen. Die Überprüfung
kann also nicht nur beim Verbindungsaufbau, sondern auch periodisch während der Verbindung
stattfinden.
Das rasche (exponentielle Wachstum) des Internet zwingt dazu, das Internet Protokoll
in der Version 4 (IPv4) durch ein Nachfolgeprotokoll (IPv6 Internet Protocol
Version 6) zu ersetzen.
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.
Classless InterDomain Routing - CIDR
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.
Internet Protokoll Version 6 - IPv6 (IP Next Generation, IPnG)
Der vorrangige Grund für eine Änderung des IP-Protokolls ist auf den
begrenzten Adreßraum und das Anwachsen der Routing-Tabellen zurückzuführen.
CIDR schafft hier zwar wieder etwas Luft, dennoch ist klar absehbar, daß auch
diese Maßnahme nicht ausreicht, um die Verknappung der Adressen für eine
längere Zeit in den Griff zu bekommen. Weitere Gründe für eine
Änderung des IP-Protokolls sind die neuen Anforderungen an das Internet, denen IPv4
nicht gewachsen ist. Streaming-Verfahren wie Real-Audio oder Video-on-Demand erfordern
das Festlegen eines Mindestdurchsatzes, der nicht unterschritten werden darf. Bei IPv4
kann so ein "Quality of Service" jedoch nicht definiert - und damit auch nicht
sichergestellt - werden. Die IETF (Internet Engineering Task Force) begann
deshalb 1990 mit der Arbeit an einer neuen Version von IP. Die wesentlichen Ziele des
Projekts sind:
- Unterstützung von Milliarden von Hosts, auch bei ineffizienter Nutzung des Adreßraums
- Reduzierung des Umfangs der Routing-Tabellen
- Vereinfachung des Protokolls, damit die Router Pakete schneller abwickeln können
- Höhere Sicherheit (Authentifikation und Datenschutz) als das heutige IP
- Mehr Gewicht auf Dienstarten, insbesondere für Echtzeitanwendungen
- Unterstützung von Multicasting durch die Möglichkeit, den Umfang zu definieren
- Möglichkeit für Hosts, ohne Adreßänderung auf Reise zu gehen (Laptop)
- Möglichkeit für das Protokoll, sich zukünftig weiterzuentwickeln
- Unterstützung der alten und neuen Protokolle in Koexistenz für Jahre
Im Dezember 1993 forderte die IETF mit RFC 1550 die Internet-Gemeinde dazu auf,
Vorschläge für ein neues Internet Protokoll zu machen. Auf die Anfrage
wurde eine Vielzahl von Vorschlägen eingereicht. Diese reichten von nur
geringfügigen Änderungen am bestehenden IPv4 bis zur vollständigen
Ablösung durch ein neues Protokoll. Aus diesen Vorschlägen wurde von der
IETF das Simple Internet Protocol Plus (SIPP) als Grundlage für die neue
IP-Version ausgewählt.
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.
Die Merkmale von IPv6
Viele der Merkmale von IPv4 bleiben in IPv6 erhalten. Trotzdem ist IPv6 im allgemeinen
nicht mit IPv4 kompatibel, wohl aber zu den darüberliegenden Internet-Protokollen,
insbesondere den Protokollen der Transportschicht (TCP, UDP). Die wesentlichen Merkmale
von IPv6 sind:
- Adreßgröße: Statt bisher 32 Bit stehen nun 128 Bit
für die Adressen bereit. Theoretisch lassen sich damit 2128
= 3.4*1038 Adressen vergeben.
- Header-Format: Der IPv6-Header wurde vollständig geändert. Der
Header enthält nur sieben statt bisher 13 Felder. Diese Änderung ermöglicht
die schneller Verarbeitung der Pakete im Router. Im Gegensatz zu IPv4 gibt es bei IPv6
nicht mehr nur einen Header, sondern mehrere Header. Ein Datengramm besteht
aus einem Basis-Header, sowie einem oder mehreren Zusatz-Headern, gefolgt von den Nutzdaten.
- Erweiterte Unterstützung von Optionen und Erweiterungen: Die Erweiterung
der Optionen ist notwendig geworden, da einige der bei IPv4 notwendige Felder nun optional
sind. Darüber hinaus unterscheidet sich auch die Art, wie die Optionen dargestellt
werden. Für Router wird es damit einfacher, Optionen, die nicht für
sie bestimmt sind, zu überspringen.
- Dienstarten: IPv6 legt mehr Gewicht auf die Unterstützung von
Dienstarten. Damit kommt IPv6 den Forderungen nach einer verbesserten Unterstützung
der Übertragung von Video- und Audiodaten entgegen, z. B. durch eine Option zur
Echtzeitübertragung.
- Sicherheit: IPv6 beinhaltet nun im Protokoll selbst Mechanismen zur sicheren
Datenübertragung. Wichtige neue Merkmale von IPv6 sind hier Authentifikation,
Datenintegrität und Datenverlässlichkeit.
- Erweiterbarkeit: IPv6 ist ein erweiterbares Protokoll. Bei der Spezifikation
des Protokolls wurde nicht versucht, alle möglichen Einsatzfelder für das
Protokoll in die Spezifikation zu integrieren. Über Erweiterungs-Header kann das
Protokoll erweitert werden.
Aufbau des IPv6-Basis-Headers
Im IPv6 wird im Vergleich zum IPv4 auf eine Checksumme verzichtet,
um den Routern die aufwendige Überprüfung - und damit Rechenzeit
- zu ersparen. Ein Übertragungsfehler muss deshalb in den höheren
Schichten erkannt werden. Der Paketkopf ist durch die Verschlankung
nur doppelt so groß, wie ein IPv4-Header.
- Version:
-
Mit dem Feld Version können Router überprüfen, um welche
Version des Protokolls es sich handelt. Für ein IPv6-Datengramm ist dieses Feld
immer 6 und für ein IPv4-Datengramm dementsprechend immer 4. Mit diesem Feld
ist es möglich für eine lange Zeit die unterschiedlichen Protokollversionen
IPv4 und IPv6 nebeneinander zu verwenden. Über die Prüfung des Feldes
Version können die Daten an das jeweils richtige "Verarbeitungsprogramm"
weitergeleitet werden.
- Priority:
-
Durch das Feld Priority (oder Traffic Class) kann angegeben
werden, ob ein Paket bevorzugt behandelt werden muß. Dies ist für die
Anpassung des Protokolls an die neuen Real Time Anwendungen nötig geworden.
Damit können zum Beispiel Videodaten den E-Maildaten vorgezogen werden. Bei
einem Router unter Last besteht damit die Möglichkeit der Flusskontrolle.
Pakete mit kleinerer Priorität werden verworfen und müssen wiederholt
werden.Mit den vier Bit lassen sich 16 Prioritäten angeben, wovon
1 bis 7 für "Non Real Time"- und 8 bis 15 für "Real Time"-Anwendungen
reserviert sind. Die Zahl Null gibt an, dass die Priorität des
Verkehrs nicht charakterisiert ist.
- Flow Label
-
Mit Hilfe des Feldes Flow Label können Eigenschaften des Datenflusses
zwischen Sender und Empfänger definiert werden. Das Flow
Label selbst ist nur eine Zufallszahl. Die Eigenschaften müssen
durch spezielle Protokolle oder durch den Hop-by-Hop-Header in den Routern
eingestellt werden. Eine Anwendung ist zum Beispiel, daß die Pakete eines
Flusses immer den gleichen Weg im Netz nehmen. Durch Speichern der Informationen
für das jeweilige Flow-Label, muß der Router bestimmte Berechnungen nur
für das erste Paket ausführen, und kann danach für alle Folgepakete
die Resultate verwenden. Erst die Einführung des Flow Labels ermöglicht
die Einführung von Quality-of-Service-Parametern im IP-Verkehr.
- Payload Length
-
Das Feld Payload Length (Nutzdatenlänge) gibt an, wie viele Bytes
dem IPv6-Basis-Header folgen, der IPv6-Basis-Header ist ausgeschlossen. Die
Erweiterungs-Header werden bei der Berechnung der Nutzdatenlänge mit einbezogen.
Das entsprechende Feld wird in der Protokollversion 4 mit Total Length bezeichnet.
Allerdings bezieht IPv4 den 20 Byte großen Header auch in die Berechnung ein,
wodurch die Bezeichnung "total length" gerechtfertigt ist.
- Next Header
-
Das Feld Next Header gibt an, welcher Erweiterungs-Header dem IPv6-Basis-Header
folgt. Jeder folgende Erweiterungs-Header beinhaltet ebenfalls ein Feld Next Header, das
auf den nachfolgenden Header verweist. Beim letzten IPv6-Header, gibt das Feld an, welches
Transportprotokoll (z.B. TCP oder UDP) folgt.
- Hop Limit
-
Im Feld Hop Limit wird festgelegt, wie lange ein Paket überleben darf.
Der Wert des Feldes wird von jedem Router vermindert. Ein Datengramm wird verworfen,
wenn das Feld den Wert Null hat. IPv4 verwendete hierzu das Feld Time to Live.
Die Bezeichnung bringt mehr Klarheit, da schon in IPv4 die Anzahl Hops gezählt
und nicht die Zeit gemessen wurde.
- Source Address, Destination Address
-
Die beiden Felder für Quell- und Zieladresse dienen zur
Identifizierung des Senders und Empfängers eines IP-Datengramms. Bei IPv6 sind
die Adressen vier mal so groß wie IPv4: 128 Bit statt 32 Bit.
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.
Erweiterungs-Header im IPv6
Bei IPv6 muß nicht mehr der ganze optionale Teil des Headers von allen Routern
verarbeitet werden, womit wiederum Rechenzeit eingespart werden kann. Diese
optionalen Header werden miteinander verkettet. Jeder optionale Header beinhaltet
die Identifikation des folgenden Header. Es besteht auch die Möglichkeit
selber Optionen zu definieren.
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, ...) |
IPv6-Adressen
Die IPv6-Adressen sind zwar von 32 Bit auf 128 Bit angewachsen, trotzdem sind die
grundsätzlichen Konzepte gleich geblieben. Die Adresse wird normalerweise
Sedezimal (Hexadezimal, Basis 16) notiert und hat die allgemeine Form
xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
Sie ist damit recht länglich. Um die Schreibweise zu vereinfachen,
wurden einige Regeln eingeführt:
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.
- Unicast
Als Unicast-Adressen bezeichnet man die Adressen, die für Punkt-zu-Punkt-Verbindungen
verwendet werden. Sie werden in verschiedene Gruppen eingeteilt:
- Linklokale und standortlokale Adressen
Diese Adressen werden für die TCP/IP-Dienste innerhalb eines Unternehmens
genutzt. Die Linklokalen Adressen werden nicht in das Internet geroutet und haben
den folgenden Aufbau:
Im Gegensatz dazu stehen die standortlokalen Adressen, die nur innerhalb eines
Subnetzes gültig sind und deshalb von keinem Router behandelt werden.
- Multicast-Adressen
In IPv4 wird das Rundsenden eines Paketes an mehrere Stationen durch das IGMP
(Internet Group Management Protokoll) realisiert. In IPv6 ist das Prinzip
übernommen, aber ein eigener Adresstyp definiert worden. IGMP entfällt
somit gänzlich. Das Paket für Multicast-Meldungen sieht wie folgt aus:
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.
- Anycast Adressen
Diese Adressen sind neu definiert worden. es können mehrere Rechner zu einer
Gruppe zusammengefasst werden und sie sind dann unter einer einzigen Adresse erreichbar.
Damit ist beispielsweise eine Lastverteilung möglich: der Rechner, der am wenigsten
belastet ist, behandelt das Paket. Die Adresse hat die folgende Struktur:
Sicherheit
Der Bedarf an digitalen Unterschriften oder elektronischen Zahlungsmöglichkeiten
steigt ständig. Deshalb stand bei der Spezifikation von IPv6 die Sicherheit von
Anfang an im Mittelpunkt. Für die Sicherheitsfunktionen von IPv6 ist eine
spezielle Arbeitsgruppe "IPSec" zuständig.
In IPv6 wurden Sicherheitsmechanismen für die Authentisierung und Verschlüsselung
auf IP Ebene spezifiziert. Die Verschlüsselungsfunktionen definieren Verfahren,
die das Mitlesen durch Unbefugte verhindern. Es gibt zwei unterschiedliche Ansätze.
Bei der ersten Variante werden alle Nutzdaten (Payload) verschlüsselt. Der Header
bleibt normal lesbar. Bei der anderen Variante ist es möglich, den Header
ebenfalls zu verschlüsseln. Das codierte Paket wird in ein anderes IPv6-Packet
verpackt und zu einem fixen Ziel befördert ("IP-Tunnel"). Am Ziel wird das Paket
wieder entschlüsselt und über das sichere interne Netz übertragen.
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.
Es hat sich ziemlich früh herausgestellt, daß menschliche
Benutzer die numerischen IP-Adressen nicht benutzen wollen,
sondern aussagekräftige und vor allem merkbare Namen
bevorzugen. Außerdem ist es ein großer Nachteil der IP-
Adressen, daß aus ihnen keinerlei geographische Information
zu entnehmen ist. Man sieht einer Zieladresse nicht an, ob
sie in Australien oder im Nebenzimmer lokalisiert ist,
außer man kennt zufällig die gewählten Zahlen. Es wurde
daher das Domain Name System entwickelt, das den Aufbau von
Rechnernamen regelt. Es ordnet jedem (weltweit eindeutigen)
Namen eine IP-Adresse zu. Dabei gibt es einige Varianten.
Eine Maschine mit einer IP-Adresse kann mehrere Funktionen
haben und daher auch mehrere Namen, die auf diese
Funktionen hinweisen. Genauso kann eine Maschine (z. B. ein
Router) viele IP-Adressen haben aber nur einen Namen.
Beim "Domain-Name-System" (oder kurz: DNS) handelt es sich um einen
Dienst, der zu einem Rechnernamen die zugehörige IP-Nummer
liefert und umgekehrt. Das ist in etwa mit der Funktionsweise
einer Telefonauskunft vergleichbar:
Der Kunde ruft bei einer bestimmten Telefonnummer an und fragt
nach der Rufnummer eines Teilnehmers. Nachdem er Name und Wohnort
der gesuchten Person durchgegeben hat, erhält er als Antwort die gewünschte
Nummer aus einem Verzeichnis. Genauso läuft eine DNS-Abfrage ab.
Gibt ein Benutzer in seinem Webbrowser zum Beispiel die Adresse
http://www.VereinGegenZuLangeDomainnamenEV.de
ein, dann sorgt ein Teil der Netzwerk-Software
auf seinem lokalen Rechner dafür, daß ein Name-Server nach der IP-Adresse
des Rechners www.vereingegenzulangedomainnamenev.de gefragt wird.
Dieser Softwareteil wird als Resolver bezeichnet und entspricht in
obigem Beispiel dem Kunden, der die Auskunft anruft.
Welche IP-Adresse dieser Server hat, muß dem Klientenrechner natürlich
bekannt sein, genauso wie der Kunde eine einzige Telefonnummer wissen muß,
nämlich die der Auskunft selbst.
Auf der Serverseite arbeitet eine Software, die als "Domain-Name-Server" oder
kurz "Name-Server" bezeichnet wird und anhand einer Datenbank
("Zone-File") die passende IP-Nummer zum Rechnernamen liefert, oder
einen anderen Name-Server fragt, wenn die Adresse unbekannt ist.
DNS ist ein typisches Beispiel für einen Verzeichnisdienst. Seine Aufgaben sind:
- Strukturierung der Namen. (Domänen-Konzept)
- Zuteilung und Verwaltung von Namen.
- Auflösen von Namen (="Nachschlagen") in beide Richtungen (Name zu Adresse und Adresse zu Name)
- Zwischenspeichern von Adressen (Caching)
- Einteilung der Daten in hierarchische Ebenen
- Verteilung der Daten auf verschiedene Knoten
- Bereitstellung von Redundanz (Secondary-DNS, Caching-Only-Server)
Damit das DNS funktioniert muß es Instanzen geben, die
Namen in IP-Adressen und IP-Adressen in Namen umwandeln
('auflösen') können. Diese Instanzen sind durch Programme
realisiert, die an größeren Maschinen ständig (meist im
Hintergrund) im Betrieb sind und 'Nameserver' heißen. Jeder Rechner, der an das
Internet angeschlossen wird, muß die Adresse eines oder
mehrerer Nameserver wissen, damit die Anwendungen auf
diesem Rechner mit Namen benutzt werden können. Die
Nameserver sind für bestimmte Bereiche, sogenannte
'domains' oder 'Zonen', zuständig (Institute, Organisationen, Regionen)
und haben Kontakt zu anderen Nameservern, so daß jeder Name
aufgelöst werden kann.
Domänen-Konzept
In den Anfängen des ARPA-Nets, aus dem das Internet entstand, wurde die
Namensauflösung über eine einzige Datei erledigt. Jeder Rechner
kopierte sich Nachts per FTP diese Datei von einem Master-Server auf die
lokale Platte. Dieses Konzept funktioniert natürlich nur, solange die
Anzahl der Namen nicht groß ist. Die benötigte Bandbreite ist proportinal
zum Quadrat der beteiligten Rechner.
B ~ N2
Als Relikt aus dieser Zeit kennt fast jedes Betriebssystem auch heute noch eine
Hosts-Datei, in der für kleine Netze Rechner/Nummern-Zuordnungen
abgelegt werden könen. (Bei Windows im Verzeichnis \WINDOWS\HOSTS,
bei Unix unter /etc/hosts, bei Novell unter
SYS:SYSTEM/ETC/HOSTS, etc.)
Die Syntax aller dieser Hosts-Dateien ist einfach. Für jeden Rechner gibt
es eine eigene Zeile mit dem Inhalt:
IP-Nummer Hostname Alias Alias ....
Zum Beispiel:
192.168.112.1 chef dumpfbacke
192.168.112.2 Snow-White
192.168.112.3 Doc
192.168.112.4 Happy
192.168.112.5 Bashful
192.168.112.6 Sneezy
192.168.112.7 Sleepy
192.168.112.7 Grumpy
192.168.112.8 Dopey
Der Begriff Alias läßt sich dabei am besten durch "Spitzname"
(oder englisch Nickname) ersetzen; also ein weiterer Name für ein und den
selben Rechner.
Bei einer kleinen Menge von Rechnern ist die Namensverwaltung mit einer Datei noch
möglich; für einen so großen und ständig wechselnden Verbund wie
das Internet ist sie aber nicht geeignet. Hier ist eine dezentrale Verwaltung mit
einem eigens darauf abgestimmten Namensraum nötig.
Der Namensraum des DNS ist in sogenannte Domänen eingeteilt. Die Domänen sind
hierarchisch als Baum angeordnet,
Ausgehend von der Wurzel (=Root) des Baumes ist der Namensraum in sogenannte
"Toplevel-Domains" eingeteilt. Man unterscheidet dabei zwischen zwei verschiedenen
Klassen von Toplevel-Domänen: Den generischen und den länderspezifischen.
| Toplevel-Domänen |
| generisch |
| com | Kommerzielle Organisationen |
| edu | (education) Schulen und Hochschulen |
| gov | (government) Regierungsinstitutionen |
| mil | militärische Einrichtungen |
| net | Netzwerk betreffende Organisationen |
| org | Nichtkommerzielle Organisationen |
| int | Internationale Organisationen |
arpa | und das alte ARPA-Net bzw. Rückwärts-Auflösung
von Adressen |
Ende 2000 sind neue TLDs von der ICANN genehmigt worden:
| aero | Luftfahrtindustrie |
| coop | Firmen-Kooperationen |
| museum | Museen |
| pro | Ärzte, Rechtsanwälte und andere Freiberufler |
| biz | Business (frei für alle) |
| info | Informationsanbieter (frei für alle) |
| name | Private Homepages (frei für alle, aber nur
dreistufige Domains der Form <Vorname>.<Name>.name) |
|
| länderspezifisch |
Jeweils ein Länderkürzel für jedes Land, z.B.:
| by | Weissrussland |
| de | Deutschland |
| at | Östereich |
| fr | Frankreich |
| to | Tonga |
| tv | Tuvalu |
|
Unterhalb der Toplevel-Domänen folgen Subdomänen, die wiederum Domänen
enthalten könen und schliesslich, als Blatt des Baumes, ein einzelner Rechner.
Der Name www.netzmafia.de ist also so zu verstehen. In der Toplevel-Domäne
".de" ist die Subdomain "Netzmafia" bekannt. Innerhalb der Subdomain
"netzmafia" gibt es einen Rechner namens "www". Analog zu unserem
Beispiel mit der Telefonauskunft, ist mit "de" das Land, mit "netzmafia" der Ort und
die Straße und mit "www" der Name eines Teilnehmers bestimmt. Die komplette Adresse
eines Rechners in der beschriebenen Notation, z.B. bezeichnet man (www.netzmafia.de)
als FQDN (Full-Qualified-Domain-Name).
Für die Aufnahme einer Verbindung zwischen zwei Rechnern
muß in jedem Fall der Rechnername in eine zugehörige IP-
Adresse umgewandelt werden. Aus Sicherheitsaspekten ist es
manchmal wünschenswert, auch den umgekehrten Weg zu gehen,
nämlich zu einer sich meldenden Adresse den Namen und damit
die organisatorische Zugehörigkeit offenzulegen.
Komponenten des DNS
Insgesamt sind es drei Hauptkomponenten, aus denen sich das DNS zusammensetzt:
- Der Domain Name Space, ein baumartig, hierarchisch strukturierter Namensraum
und die Resource Records. Das sind Datensätze, die den Knoten zugeordnet sind.
- Name Server sind Programme bzw. Rechner, die die Informationen über die
Struktur des Domain Name Space verwalten und aktualisieren. EinNameserver hat
normalerweise nur eine Teilsicht des Domain Name Space zu verwalten. Oft wird
auch der Rechner, auf dem das Nameserverprogramm läuft, als 'Nameserver' oder
'DNS-Server' bezeichnet.
- Resolver sind die Programme, die für den Client Anfragen an den
Nameserver stellen. Resolver sind einemNameserver zugeordnet; bei Anfragen, die er
nicht beantworten kann (anderer Teilbereich des Domain Name Space). kann er aufgrund
von Referenzen andere Nameserver kontakten, um die Information zu erhalten.
Der Nameserver des DNS verwaltet also einzelne Zonen, die einen Knoten im DNS-Baum
und alle darunterliegenden Zweige beinhalten. Auf jeder Ebene des DNS-Baums kann es
Namesever geben, wobei jeder Nameserver seinen nächsthöheren und nächstniedrigeren Nachbarn
kennt. Aus Sicherheitsgründen gibt es für jede Zone in der Regel mindestens zwei Nameserver
(primary und secondary), wobei beide die gleiche Information halten.
Nameservereinträge können nicht nur die Zuordnung Rechnername - IP-Adresse enthalten,
sondern (neben anderem) auch weitere Namenseinträge für einen einzigen Rechner und
Angaben für Postverwaltungsrechner einer Domain (MX, mail exchange).
Basis des Nameservice bilden die "Root-Nameserver", die für die Top-Level-Domains
zuständig sind. Federführende Organistation ist hier die ICANN
(=Internet Corporation for Assigned Names and Numbers ,
Adresse: http://www.icann.org). Gründung 1998.
ICANN beauftragt die Verwalter der Zone "." (Wurzel des DNS-Baumes) mit 13 Servern.
Bis auf die Server I (Stockholm), K (London) und M (Tokio) stehen alle
Server in den USA.
| Name | Typ | Betreiber | URL |
| a | com | InterNic | http://www.internic.org |
| b | edu | ISI | http://www.isi.edu |
| c | com | PSINet | http://www.psi.net |
| d | edu | UMD | http://www.umd.edu |
| e | usg | NASA | http://www.nasa.gov |
| f | com | ISC | http://www.isc.org |
| g | usg | DISA | http://nic.mil |
| h | usg | ARL | http://www.arl.mil |
| i | int | NordUnet | http://www.nordu.net |
| j | ( ) | (TBD) | http://www.iana.org |
| k | int | RIPE | http://www.ripe.net |
| l | ( ) | (TBD) | http://www.iana.org |
| m | int | WIDE | http://www.wide.ad.jp |
Der Server A ist der primä