PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alles über TCP - IP


TrackerPolizei
26.02.2009, 18:24
TCP-IP ist allgemein in vier Layer (Schichten) unterteilt.

Applications Layer: --------- ------ ------- ------- ----
-------
|Telnet | | FTP | | SMPT | | DNS | | sonstige
|
--------- ------ ------ ------- -----------
| | | |
--------------------- --------------------
| Transport Control | | User Datagram |
Transport Layer: | Protocol | | Protocol |
| TCP | | UDP |
--------------------- --------------------
| |
-----------------------------------------------
| Internet Protocol IP |
Internet Layer: | Internet Control Message Protocol ICMP |
-----------------------------------------------
| | |
--------- ------------ --------------
Network Layer: | X.25 | | Ethernet | | Token Ring |
--------- ------------ --------------



Später mehr zu den einzelnen Layer bzw. Protokolle!

Das System der Layer beruht darauf, dass ein Layer die Dienste
des darunterliegenden Layers benutzen kann. Der Layer,
der die Dienste in Anspruch nimmt, braucht nicht zu wissen,
wie der benutzte Dienst erbracht wird, d.h.
jeder Dienst hat seine eigene Aufgabe und muss sich nicht um die anderen Dienste
kümmern.
Daten, die von dem "Application Layer" über ein Netzwerk versendet werden,
durchlaufen vom "Application Layer" ausgehend den "Transport Layer",
den "Internet Layer" bis zum "Network Layer"!
Jeder Layer (ausser der Application Layer) fügt dabei einen Header ein!

Skizze:


--------
Application Layer: | Data |
--------
|
---------- --------
Transport Layer: | Header | | Data |
---------- --------
|
---------- ---------- --------
Internet Layer: | Header | | Header | | Data |

---------- ---------- --------
|
---------- ---------- ---------- --------
Network Layer: | Header | | Header | | Header | | Data |

---------- ---------- ---------- --------




Network Layer (Netzwerk Schicht)

Der Netzwerk Layer bildet die unterste Schicht bei TCP-IP.
Protokolle auf diesem Layer (z.B. Ethernet, Token Bus) legen fest wie ein Host
an ein
Netzwerk angeschlossen ist und wie die IP Pakete über dieses Netzwerk übertragen
werden.
Der Network Layer umfasst also die Aufgabe der Bitübertragungsschicht,
Sicherungsschicht und Vermittlungsschicht.


Internet Layer

Einleitung:

Das Internet verbindet Teilnetze miteinander. BACKBONES bilden das Rückgrat des
Internet.
BACKBONES werden aus Leitungen mit sehr hoher Bandbreite und schnellen Routern
gebildet.
An die BACKBONES sind größere Netze angeschlossen, die wiederum die LANs von
ISPs, Unis, Behörden, etc... verbinden.


Internet Protocol (IP)

IP stellt die Basisdienste für die Datenübermittlung in TCP-IP da.
Das Internet Protocol adressiert hauptsächlich Hosts und fragmentiert
Datenpakete.
Solche Pakete werden nach besten Bemühen übermittelt.
Ob die Hosts im gleichen Netz oder in verschiedenen Netzen liegen,
spielt keine Rolle. Die Ankunft der Pakete ist allerdings nicht garantiert.


IP Header

Ein IP Paket ist ein Datenblock mit dem Header, welcher notwendig ist,
um den Datenblock zuzustellen.

Der Header besteht aus einem mindestens 20 Byte großem Teil und einem optionalen
Teil von variabler Länge.


Bits
1 4 8 12 16 20 24 28 32
| | | | | | | | |
----------------------------------------------------------------- |
| Version | Lenght | Type of Service | Total Lenght | |
----------------------------------------------------------------- H
| Identification | Flags | Fragment Offset | E
----------------------------------------------------------------- A
| Time to live | Protocol | Header Checksum | D
----------------------------------------------------------------- E
| Source Adress | R
----------------------------------------------------------------- |
| Destination Adress | |
----------------------------------------------------------------- |
| Options (variable Länge) padding | |
----------------------------------------------------------------- |
| Daten |
-----------------------------------------------------------------


Beschreibung der IP Header Felder:

Version:
Enthält die Versionnr. des IP-Protokolls.
Aktuelle Versionnr. ist 4. Aber Version 6 ist in Erprobung.

Lenght:
Lenght gibt die Länge des Headers an, da die Länge durch das Optionsfeld
variabel ist.
Die Länge wird in 32 Bit Worten angegeben. Kleinster Wert ist 5 (20 Byte), in
diesem Fall fehlt das Optionsfeld.
Der Header kann maximal 60 Bytes gross sein, das Lenghtfeld hat dann den Wert
15.

Type of Service:
Hier wird angegeben wie Nachrichten behandelt werden sollen. Das Feld hat
normalerweise den Wert 0!


0 1 2 3 4 5 6 7
+-------+-------+-------+-------+-------+-------+-------+
| precedence | D | T | R | | |
---------------------------------------------------------


Precedence (0-2 Bits): Priorität! Von 0 (normal) bis 7 (Steuerungspaket).

Flags: Geben an worauf de Host am meisten Wert legen soll!
D: Verzögerung (Delay)
T: Durchsatz (Throughtput)
R: Zuverlässigkeit (Reliability)

Total Lenght:
Gibt die Gesamtlänge des Datenpaketes an (max. 65.535 Bytes)

Identification:
Über dieses Feld wird dem Zielhost mitgeteilt, zu welchem Datengramm ein neu
angekommenses Fragment gehört.
Alle Fragmente eines Datengramms enthalten die gleiche Identification Nr. Die
Nr. wird vom Sender vergeben.

Flags (3 Bits):

1.Bit: ungenutzt
2.Bit: DF (Don't Fragment)! Datengramm darf nicht fragmentiert werden.
3.Bit: MF (More Fragments)! Datengramm besteht aus mehreren Fragmenten!
Das MF Bit ist bei allen Fragmenten, ausser dem Letzten gesetzt.

Fragment Offset:
Bezeichnet, an welche Stelle (relativ zum Beginn des gesamten Datengramms) ein
Fragment gehört.
Mit diesen Angaben setzt der Zielhost das Paket wieder zusammen. Ein Datengramm
kann aus maximal
8192 Fragmenten bestehen! Alle Fragmente, ausser dem letzten, müssen größer als
8 Byte sein.

Time to Live:
Dieses Feld ist ein Zähler mit dem die Lebensdauer eines IP-Paketes begrentzt
wird. Maximalwert ist 255,
also 255 Sekunden, da eine Einheit als eine Sekunde gilt. Jeder Netzknoten, den
das Paket durchläuft,
verringert dieses Feld um eine Stelle. Bei längeren Zwischenspeicherungen in
einem Router kann der
Wert auch mehrmals verringert werden.
Wenn der Wert gleich 0 ist erhält der Absender eine ICMP Nachricht (mehr dazu
später).
Das Feld dient dazu, damit ein Paket nicht entlos im Netz umherwandert.

Protocol:
Enthält die Nr. des Transportprotokolls an das das Paket weitergeleitet wird.
Bei UNIX Systemen in Datei /etc/protocols.
z.B.
0 = IP
1 = ICMP
2 = IGMP
3 = GGP
6 = TCP
12 = PUP
17 = UDP
22 = IDP
255 = RAW

Header Checksum:
Prüfsumme des IP Headers!
Jeder Netzknoten, den das Paket durchläuft berechnet die Header Checksum neu,
da sich das TIME TO LIVE Feld bei jedem Netzknotendurchlauf verändert.
Die Checksum wird aus dem 1er-Komplement der Summe aller 16-Bit Halbwörter der
zu überprüfenden Daten genommen.

Source/Destination Adress:
Enthalten die 32 Bit langen Sender/Empfänger IP-Adressen. (später mehr).

Options/Padding:
Auf das Optionsfeld gehe ich hier nicht ein!
Das Paddingfeld dient Füllzwecken, wenn ein Optionsfeld nicht 32 Bit lang ist.

Adressesierung auf der Internet Schicht!

Beim Durchlauf der vier TCP-IP Schichten werden vier verschiedene Adressen
verwendet:

1.) Eine Netzwerkadresse (z.B. eine Ethernet Adresse)
2.) Eine Internet - Adresse
3.) Eine Transportprotokoll - Adresse
4.) Eine Portnummer

Die Internet Adresse und die Transportprotokoll Adresse befinden sich im IP-
Header.

IP - Adressen

Jeder Host und Router hat im Internet seine 32 Bit lange IP-Adresse.
Die Netzwerkadressen werden vom NETWORK INFORMATION CENTER (NIC) vergeben.
Die Adressen werden nicht einzeln zugeordnet, sondern nach Netzklassen vergeben.
Wer IP - Adressen für ein Netz beantragt, erhält nicht für jeden Rechner eine
Adresse,
sondern einen Bereich von Adressen, den man selbst verwalten muss.

Auf IP Adress Klassen gehe ich hier nicht ein!

IP Adressen werden normalerweise in diesem Format geschrieben:
127.0.0.1
Die 32 Bit große Zahl wird als in 4 Bytes zerlegt, die mit Punkten voneinader
getrennt sind.

Beispiel:
binär: 01111111111111111111111111111111
geschrieben als: 127.255.255.255

kleinste IP - Adresse ist: 0.0.0.0
größte IP - Adresse ist: 255.255.255.255

Fragmentierung

Um Datengramme auf jeder Art von Netzwerk verschicken zu können,
ist IP in der Lage die Größe des Datengramms an das Netzwerk anzupassen.
Jeder Netzwerk gibt die maximale Paketgröße in der MTU (Maximum Transfer Unit -
MTU)
an. X.25 hat die MTU auf 128 Byte. Ethernet auf 1500 Byte.

Jeder Host/Router/etc... muss also in der Lage sein IP Datengramme zu
fragmentieren:


---------------------------------------------------------------------
| IP Header | Data |
---------------------------------------------------------------------
/ | | \
/ | | \
--------------------- --------------------- ---------------------
| header | fragment | | header | fragment | | header | fragment |

--------------------- --------------------- ---------------------



Wie man sieht enthält jeder Fragment einen vollständigen IP Header!
Durch das Identification Feld lassen sich die Fragmente wieder zusammenfügen.
Die Lage eines Fragments im gesamten Datengramm wird mit dem Fragment Offset
festgestellt.


Internet Control Message Protocol (ICMP)

ICMP ist Bestandteil jeder IP-Implementierung und hat die Aufgabe der Fehler-
und Diagnoseinformation zu transportieren.
ICMP wird in RFC 792 spezifiziert.

Die ICMP Message wird in ein IP-Datengramm eingekapselt.
Nur der Grundaufbau des ICMP-Header ist immer gleich, der Protokollkopf wechselt
jedoch.


Bits
1 4 8 12 16 20 24 28 32
| | | | | | | | |
------------------------------------------------------------------
| Type | Code | Checksum |
------------------------------------------------------------------
| Miscellaneaus |
------------------------------------------------------------------
| IP protocol header and further 64 Bits or test Data |
------------------------------------------------------------------
Der ICMP Header


Wichtige ICMP-Nachrichtentypen:

Destination Unreachable
ein Netzwerk, Host, Protokoll, Port ist nicht erreichbar
ein Paket kann nicht fragmentiert werden, weil das DF-Bit gesetzt ist
die Source Route Option nicht erfolgreich ist

Source Quench
ein Host kann die gesendeten Nachrichten nicht mehr verarbeiten. Der sendende
Host muss die Rate zum Aussenden von Nachrichten verringern.

Parameter Problem
falsche Angabe im IP-Header! Paket wird verworfen.

Redirect
Paket wurde falsch weitergeleitet. Sendende Host muss Route ändern.

Time Exceeded
Der "Time to Live" Wert im IP-Header hat den Wert 0 erreicht.

ICMP verwendet IP zum Übertragen der Nachrichten, eine ICMP Nachricht wird also
in ein
IP-Datengramm eingekapselt!


-------------------------------------------------
| IP HEADER | Datagram Daten |
-------------------------------------------------
/\
-------------------------------------
| ICMP Header | ICMP Data |
-------------------------------------


ICMP-Tunneling

Über ICMP können auch versteckte Nachrichten übermittelt werden, das sog. "ICMP-
Tunneling"!
Dabei wird das Datenfeld des ICMP Paketes benutzt um Daten zu übertragen!
Damit hat man zwar keinen Zugriff auf einen Rechner/Netz, allerdings ist es doch
ein Bedrohung
für die Sicherheit eines Netzes!
Ich geh vielleicht später in einem anderen Tutorial darauf ein!


Transport Layer


Einleitung

Über dem Internet Layer befindet sich der Transport Layer. Die wichtigsten
Protokolle des Transport Layers sind TCP (Transmission Control Protocol) und das
User Datagram Protocol (UDP).
In diesem Text gehe ich nur auf TCP ein! Informationen über UDP gibts in RFC
768!


Transmission Control Protocol (TCP)


TCP stellt die Zuverlässigkeit der Datenübertragung mit dem Mechanismus Positive
Acknowledgement with Re-Transmission (PAR) da.
PAR sendet die zusendenden Daten so lange, bis der Empfänger das Erhalten der
Daten positiv bestätigt hat.

Ein Dateneinheit heißt Segment, ein Segment besteht aus einem 20 Byte große
Header und den zu übertragenden Daten.
In jedem Segment-Header ist eine Prüfsumme enthalten, anhand der Empfänger
prüfen kann, ob die Daten fehlerfrei angekommen sind.
Wenn die Daten fehlerfrei geschickt wurden, wird eine Bestätigung
zurückgesendet, anderfalls wird das Segment verworfen und keine Bestätigung
geschickt.
Ist nach einer bestimmten Zeitperiode (timeout-period) keine Bestätigung beim
Sender eingegangen wird das Segment erneut verschickt.

Das TCP Segment wird in das IP-Datengramm eingefügt. IP-Datengramme mit TCP-
Segmenten werden an TCP weitergeleitet.


Three Way Handshake (Verbindungsaufbau)

Da TCP ein verbindungsorientiertes Protokoll ist, muss vor jeder
Datenübertragung ein Verbindungsaufbau statt finden.
Dieser Verbindungsaufbau funktioniert über den Three Way Handshake!

Three Way Handshake:




--------- ---------
| | SYN | |
| A | ----------------------------------------------> | B
|
| | Sequenze Nr = X | |
--------- ---------



--------- ---------
| | SYN, ACK | |
| A | <---------------------------------------------- | B |
| | Sequence Nr = Y Acknewledgement Nr. = X +1 | |
--------- ---------



--------- ---------
| | ACK | |
| A | ----------------------------------------------> | B |
| | Sequence Nr = X +1 Acknewledgement Nr. = Y +1 | |
--------- ---------



Beschreibung des Three Way Handshakes:

Im ersten Schritt sendet Host A ein Segment mit gesetztem SYN Flag im TCP Header
(später mehr).
Die Sequenze Nr. in diesem Segment teil Host B mit welche Sequenze Nr. von Host
A verwendet wird.

Im zweiten Schritt nimmt Host B die Verbindungsanforderung an, indem er das SYN
und das ACK Flag im TCP Header setzt.
Die Sequenze Nr. teilt Host A welche Sequenze Nr. Host B verwendet.
Als Acknowledgement Nr. wird die Sequenze Nr. aus dem ersten Schritt von Host A
verwendet und um 1 erhöht!

Im dritten Schritt bestätigt Host A schlußendlich den Aufbau indem er das ACK
Flag im TCP Header setzt.
Die Sequenz Nr. ist gleich die Sequenz Nr. die in Schritt 2 von Host B erhalten
wurde.
Als Acknowledgment Nr. wird die gesendete Sequenz Nr. von Host B um 1 erhöht.
Im dritten Schritt können bereits Daten übertragen werden.

Nach diesem Vorgang ist der Verbindungsaufbau beendet und es können Daten
ausgetauscht werden.

Zum Beenden der Verbindung wird wieder ein Three Way Handshake mit gesetztem FIN
Bit verwendet!


Ports

TCP leitet die Daten an die entsprechende Applikation (ftp, smtp, telnet, http)
im Application Layer weiter.
Zur Adressierung der Anwendungen werden auf dem Transport Layer sog. Portnumbers
verwendet.
Portnumbers sind 16 Bit groß, es können also bis zu 65535 verschiedene Ports je
Host genutzt werden.
Eine IP-Adresse zusammen mit einer Portnumber werden als SOCKET bezeichnet.

Auf UNIX Systemen sind die Portnumbers in der Datei /etc/services definiert.
Portnumbers bis 256 werden als well-known ports reserviert, auf ihnen laufen
well-known services.
Portnumbers von 256 bis 1024 werden für UNIX Dienste (z.B. rlogin) benutzt.


TCP Header


Bits
1 4 8 12 16 20 24 28 32
| | | | | | | | |
------------------------------------------------------------------ |
| Source Port | Destination Port | |
------------------------------------------------------------------ H
| Swquence Number | E
------------------------------------------------------------------ A
| Acknewledgement Number | D
------------------------------------------------------------------ E
| Offset|Reserved | Flags | Windows | R
------------------------------------------------------------------ |
| Checksum | Urgent Pointer | |
------------------------------------------------------------------
| Option (variable Länge) | Padding |
------------------------------------------------------------------
| Daten |
------------------------------------------------------------------


TCP Header Beschreibung

Source-/Destination Port

Die Felder Source Port (Quellport) und Destination Port (Zielport) adressieren
die Endpunkte der Verbindung.
Die Größe eines der Felder beträgt 16 Bit.

Sequence Number, Acknowledgement Number

Die Sequence Number und die Acknowledgement Number sind jeweils 32-Bit Zahlen.
Die Nummern geben die Stellung der Daten des Segments innerhalb des
ausgetauschten Datenstroms an.
Die Sequence Number gilt in Senderichtung, die Acknowledgement Number für
Empfangsquittungen.

Beim Verbindungsaufbau generiert jeder TCP-Verbindungspartner eine Sequence
Number,
die sich währen der Verbindung NICHT wiederholen darf.
Bei der Datenübertragung wird die Sequence Nr. vom Absender jeweils um die
Anzahl der bereits gesendeten Bytes erhöht.
Mit der Acknowledgement Number gibt der Empfänger an, bis zu welchem Byte er die
Daten bereits korrekt empfangen hat.
Die Nr. gibt allerdings nicht an, welches Byte als letztes korrekt empfangen
wurde,
sondern welches Byte als nächstes zu erwarten ist.

Offset

Dieses Feld gibt die Länge des TCP-Headers in 32 Bit Worten an!

Reserved

Mmmhhh, was könnte das wohl heißen?

Flags

In diesem Feld werden die sechs 1-Bit Flags bestimmt!

Das Flag Feld:


1 2 3 4 5 6
-------------
|U|A|P|R|S|F|
|R|C|S|S|Y|I|
|G|K|H|T|N|N|
-------------


Beschreibung des Flag Feld:

URG:
Ist das Flag URG auf 1 gesetz, muss der Urgend Pointer beachtet werden

ACK:
Wird gesetzt um anzugeben, das die Acknowledgement Nr. gültig ist.
Ist das Bit auf 0 gesetzt, enthält das TCP-Segment keine Bestätigung, das Feld
Acknowledgement Nr. wird ignoriert!

PSH:
Ist das PSH-Bit gesetzt, so werden die Daten in dem entsprechenden Segment
sofort bei Ankunft der adressierten Anwendung bereitgestellt ohne sie zu
puffern.

RST:
Dieses Flag dient dazu eine Verbindung zurückzusetzen, falls ein Fehler bei
Übertragung aufgetreten ist.
Dies kan sowohl der Fall sein, wenn ein ungültiges Segment übertragen wurde, ein
Host abgestürzt ist oder der Versuch eines Verbindungsaufbaus abegewiesen werden
soll!

SYN:
Das SYN-Flag (Synchronize Sequence Numbers) wird verwendet, um Verbindung
aufzubauen.
Zusammen mit der Acknowledgement Number und dem ACK-Bit wird die Verbindung mit
dem Three Way Handshake aufgebaut.

FIN:
Das FIN-Flag dient zum Beenden einer Verbindung. Ist das Bit gesetzt, gibt dies
an, daß der Sender keine weiteren Daten zu Übertragen hat. Das Segment mit
gesetztem FIN-Bit muß quittiert werden.


Window

Dieses Feld enthält die Anzahl der bytes, die der Empfänger ab dem bereits
bestätigten Byte empfangen hat.
Mit diesem Feld erfolgt die Flußsteuerung. Jede Seite einer Verbindung darf die
Anzahl Bytes senden, die im Feld Window angegeben sind, ohne auf eine Quittung
vom Empfänger zu warten.

Checksum

Die Checksum prüft den Protokollkopf, die Daten und den Pseudo Header!

Pseudo Header:


Bits
1 4 8 12 16 20 24 28 32
| | | | | | | | |
------------------------------------------------------------------
| Source Address |
------------------------------------------------------------------
| Destination Adress |
------------------------------------------------------------------
| 000000000 | Protocol = 6 | TCP segment lenght |
------------------------------------------------------------------



Der Algorithmus für die Checksum ist einfach:
alle 16 Bit Wörter werden im 1er Komplement addiert und die Summe ermittelt.
Ist das Feld nach der Berechnung nicht 16 Bit lang wird es um ein Nullbyte
aufgefüllt.
Führt der Empfänger des Segments die Berechnung auf das gesamte Segment
aus - inkluse des Checksum Feld - sollte das Ergebnis 0 sein.
Durch den Pseudo Header kann verhindert werden das falsch zugeteilte IP-Pakete
erkannt werden.

Urgent Pointer

Der Urgent Pointer zeigt wichtige Daten in dem TCP-Segment an! Der Urgent
Pointer wird gelesen wenn das URG Flag gesetzt ist!

Options

Optionsfeld mit variabler Länger

Padding

Siehe IP

Cerberus
26.02.2009, 19:34
löl ....

lang lang ists her ...
7-Schichten-ISO-Modell .....

oh man :)

aber so ist es numal mit dem Basics -- alles meißt recht "trocken"