Stand: 08.12.97

OSSOS - Netz-Hilfen: TCP/IP-Konzept

Labs/Willmann


Zur OSSOS - Homepage

Dieser Text beschreibt die Grundlagen des TCP/IP-Konzeptes.


Einbindung von TCP/IP im OSI-Referenzmodell

Schicht

Funktion

Protokoll

7 Application Telnet FTP SMTP ...
6 Presentation
5 Session TCP ...
4 Transport
3 Network IP ...
2 Data-Link Ethernet ...
1 Physical

Applikationsprogramme, die für TCP/IP entwickelt worden sind, benutzen meist mehrere Protokolle. Die Summe der Schichten der Protokolle nennt man den Protocol-Stack. Benutzerprogramme kommunizieren mit der obersten Schicht des Protokoll-Stacks. Die oberste Schicht reicht die Informationen an untere Schichten weiter, bis sie schließlich vom physikalischen Netzwerk übertragen werden. Beim Empfänger verläuft der Prozeß umgekehrt von den unteren zu den oberen Schichten.

Im Einzelnen sieht das so aus:

  1. Die Applikationsschicht reicht einen Byte-Strom an die Transport-Schicht im Absender-Computer.
  2. Die Transportschicht teilt diesen Strom in TCP-Pakete, fügt einen Kopf (Header) mit fortlaufender Nummer für dieses Paket hinzu, und reicht alles an die IP-Schicht weiter. Außerden wird eine Prüfsumme gebildet.
  3. Die IP-Schicht bildet ein Paket, bestehend aus einem Datenteil, der das TCP-Paket enthält, und einem Kopf (Header), der Absender- und Empfängeradressen enthält. Die IP-Schicht bestimmt die physikalische Adresse des Zielcomputers (oder eines Zwischencomputers, z.B. Router). Das Paket und die physikalische Adresse wird an die Daten-Schicht weitergereicht. Wieder wird eine Prüfsumme gebildet.
  4. Die Datenschicht überträgt das IP-Paket im Datenfeld eines Daten-Rahmens zum Zielcomputer.
  5. Im Zielcomputer, dem Empfänger, entfernt dessen Datenschicht den Daten-Rahmen-Kopf und reicht das IP-Paket an die IP-Schicht weiter.
  6. Die IP-Schicht prüft den IP-Paket-Kopf. Wenn die dort enthaltene Prüfsumme nicht mit der von der Empfänger-IP-Schicht berechneten übereinstimmt, wird das Paket verworfen.
  7. Falls jedoch die Prüfsumme korrekt ist, streift die IP-Schicht den IP-Paket-Kopf ab, und reicht das freigewordene TCP-Paket an die TCP-Schicht weiter. Diese prüft die fortlaufende Nummer, um die korrekte Reihenfolge festzustellen.
  8. Die TCP-Schicht im Empfänger berechnet die Prüfsumme und vergleicht sie mit der übertragenen. Ist sie korrekt und stimmt die Reihenfolge, so wird eine Bestätigung an den Absendercomputer geschickt, andernfalls wird das Paket verworfen.
  9. Die TCP-Schicht streift den TCP-Paket-Kopf ab und reicht den Byte-Strom an die Applikation im Empfänger weiter.
  10. Die Applikation empfängt den Byte-Strom, als wäre sie direkt mit dem Empfängercomputer verbunden.

Die IP-Adresse

Die physikalische Adresse eines Computers ist seine Media-Access-Controll-Adresse, die sogenannte MAC-Adresse.  Sie ist 6 Byte lang und in drei Byte für den Hersteller und in drei Byte für eine fortlaufende Nummer aufgeteilt. Jede MAC-Adresse ist weltweit eindeutig. In der Regel ist diese in der Hardware der Netzwerkkarte enthalten.
(Beispiel: 80 00 1B 3f 24 7A hex)

[Theoretisch ergeben sich für die Adressen 00 00 00 00 00 00 bis FF FF FF FF FF FF  1612, also etwa 2.8*1014 Adressen, was etwa 50000 pro Mensch ergibt.]

Im Gegensatz dazu ist die IP-Adresse hardware-unabhängig und 4 Byte lang, aber auch weltweit eindeutig. Leider gibt es hier nur 168, also etwa 4,3*109, d.h. nur etwa eine pro Erdenbewohner. Da diese IP-Nummern knapp werden, ist eine Erweiterung auf 6 Byte in Planung (IPv6). Dann sollen etwa 1000 IP-Adressen pro Quadratmeter zur Verfügung stehen.

Wenn ein IP-Paket über das Netzwerk gesendet wird, wird es zuvor in ein physikalisches Paket eingekapselt. Die folgende Darstellung zeigt ein IP-Paket, gekapselt in einem Ethernet-Rahmen:

IP-Paket
"Vorwort" Ziel-Adresse Quell-Adresse Paket-Typ Paket-Daten Ethernet CRC

Rahmen-Kopf

Rahmen-Daten

Ethernet-Rahmen

Eine IP-Adresse und eine MAC-Adresse sind ziemlich verschieden und haben wenig mit einander zu tun.
Eine IP-Adresse wird auf eine MAC-Adresse abgebildet. Dazu wird das ARP-Protokoll (address resolution-protocol) benutzt. Sendet ein Knoten (Computer, Router,...) ein Paket mittels IP, dann muß die physikalische Adresse ermittelt werden, die zur Ziel-IP-Adresse passt, die im IP-Paket angegeben ist. Um diese physikalische Adresse herauszufinden, sendet der Knoten ein ARP-Signal (Broadcast), das die Ziel-IP-Adresse enthält. Der Knoten mit dieser IP-Adresse sendet seine physikalische Adresse zum anfragenden Knoten zurück.

Die IP-Adresse besteht (zur Zeit) aus 4 Bytes (also jeweils Zahlen zwischen 0 und 255). Jede solche 4-Byte-IP-Adresse ist in zwei Teile zerlegt, den Netzwerk-Teil und den Host-Teil. Der Netzwerkteil identifiziert das Netzwerk, der Hostteil den Knoten.

Außerdem wird diese Teilung noch in (meist) drei Kategorien eingeteilt: Class-A, Class-B, Class-C.

Class-A

1 Byte

3 Byte

0 Netzwerk-Adresse Host-Teil

Das höchstwertige Bit der 32-Bit (=4 Byte) ist 0. Eine Bit-Darstellung mit n=Netzwerk-Bit und h=Host-Bit sieht so aus:

0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh

Anzahl der Class-A-Netzwerke: 126 (1-126, 127 ist reserviert)   7 Bits

Anzahl der Knoten pro Netzwerk: 16.777.215      24 Bits = 11111111.11111111.11111111 = FF.FF.FF hex

Class-B

2 Byte

2 Byte

10 Netzwerk-Adresse Host-Teil

Die zwei höchstwertigen Bits sind 10. Eine Bit-Darstellung mit n=Netzwerk-Bit und h=Host-Bit sieht so aus:

10nnnnnn.nnnnnnnn.hhhhhhhh.hhhhhhhh

Anzahl der Class-B-Netzwerke: 16383 (128.x-191.x)   14 Bits = (10) 111111.11111111 = 3FFF hex

Anzahl der Knoten pro Netzwerk: 65535       16 Bits = 11111111.11111111 = FFFF hex

Class-C

3 Byte

1 Byte

110 Netzwerk-Adresse Host-Teil

Die drei höchstwertigen Bits sind 110. Eine Bit-Darstellung mit n=Netzwerk-Bit und h=Host-Bit sieht so aus:

110nnnnn.nnnnnnnn.nnnnnnnn.hhhhhhhh

Anzahl der Class-C-Netzwerke: 2.097.151 (192.x.x-223.x.x)   21 Bits = (110) 11111.11111111.11111111= 1F.FF.FF hex

Anzahl der Knoten pro Netzwerk: 254 (255 ist reserviert)      8 Bits = 11111111 = FF hex

(Die angegebenen Anzahlen sind in Wirklichkeit geringfügig kleiner, da einige Adressen für Spezialzwecke reserviert sind).

Identifizieren von Netzwerkklassen

Mit Hilfe des ersten Bytes der IP-Adresse lassen sich die Klassen unterscheiden:

1-126 1.h.h.h - 126.h.h.h Class A
128-191 128.n.h.h - 191.n.h.h Class B
192-223 192.n.n.h - 223.n.n.h Class C

Reservierte IP-Adressen

Class D,E,F

Adressen im Bereich 224.0.0.0 bis 254.0.0.0 (die ersten drei Bits sind 111) sind entweder experimentelle Adressen oder für zukünftigen Gebrauch reserviert. Sie spezifizieren keine Netzwerke.

Subnetzwerke und Netzwerkmasken

Ein Netzwerk läßt sich intern weiter in Subnetze zerlegen. Dabei sieht es nach außen weiter wie ein Netzwerk aus. So wissen z.B. externe Router nicht von einer Segmentierung, wohl aber interne Router.

Um ein Netzwerk mit gegebener Netzwerkadresse weiter zu unterteilen, wird der Hostteil der IP-Adresse zerlegt:

Netzwerk-Adresse Host - Adressteil
Subnetz-Adresse Host-Adresse

Betrachen wir als Beispiel eine Class-B-Adresse 129.47.0.0. Die 2 Bytes=16 Bits des Hostteil zerlegen wir in z.B. 4 Bits für eine Subnetzadressierung und 12 Bits für die Hostadressierung. Dies erlaubt also 15 Subnetze und 4094 Knoten.

Eine andere Aufteilung in z.B. 8 und 8 Bits würde 254 Netzwerke mit je 254 Knoten erlauben.

Es muß nun einen Mechanismus geben, mit dem die Aufteilung in Netz- und Hostteil der Adresse sichtbar wird. Dazu wird die sogenannte Subnetzmaske (subnetwork mask) verwendet. Sie besteht ebenfalls aus 4 Bytes und wird bei Adressberechnungen über eine logische UND-Verknüpfung mit der IP-Adresse undiert. Dabei entsteht der vollständige Netzwerk-Adressanteil. Zwei Beispiele mögen dies verdeutlichen:

IP-Adresse:  129.47.27.14   = 10000010.00111001.00011011.00001110
Subnetmask:  255.255.0.0    = 11111111.11111111.00000000.00000000
                             -------------------------------------
                              10000010.00111001.00000000.00000000  = 129.47.0.0

eine Subnetzadressierung mit 4 Bits:

IP-Adresse:  129.47.27.14   = 10000010.00111001.00011011.00001110
Subnetmask:  255.255.240.0  = 11111111.11111111.11110000.00000000
                             -------------------------------------
                              10000010.00111001.00010000.00000000  = 129.47.(16).0


Ein Beispiel eines in zwei Segmente zerlegtes Netz, bei der die Subadressierung 4 Bits verwendet:

  129.47.192.254   129.47.192.253
        |                |
  ------------------------------------------
                 |                         |   Subnetz 192  (1100)
           129.47.193.1                    |
                                       ---------
                                      |         |  129.47.192.1
     Subnetmask: 255.255.240.0        | Router  |
                                      |         |  129.47.128.1
                                       ---------
                                           |
           129.47.129.1                    |   Subnetz 128  (1000)
  ------------------------------------------
        |                |
  129.47.128.254   129.47.128.253

 Aufgeschlüsselte IP-Adressen und Subnetzmaske:

                               Subnetzadr.
                                  |  |
                |  Netzadresse  |     |lok.Hostadr|   
Subnetmask:     11111111.11111111.11110000.00000000
----------------------------------------------------------------------------
129.47.128.254: 10000010.00111001.10000000.11111110  IP-Adr. auf Subnetz 128
129.47.129.1  : 10000010.00111001.10000001.00000001  IP-Adr. auf Subnetz 128
129.47.192.254: 10000010.00111001.11000000.11111110  IP-Adr. auf Subnetz 192
129.47.193.1  : 10000010.00111001.11000001.00000001  IP-Adr. auf Subnetz 192

Subnetz Null

Hier gibt es unterschiedliche Ansichten. In vielen Fällen ist das Subnetz 0000 verboten und wohl auch das Subnetz 1111. Im allgemeinen sollte man also bei Subnetzen, die nur Nullen oder nur Einsen haben, vorsichtig sein, bzw. diese meiden.

Eine ausführliche Beschreibung eines segmentierten Class-C-Netzes, bei dem die zur Verfügung stehenden 8 Bits in 2 Bits für die Netzsegmentierung und 6 Bits für die Knoten aufgeteilt sind, findet sich im Text segment.htm.

Ratschläge zur Subnetz-Adressierung

Man sollte die Subnetzadressen binär von links nach rechts mit Einsen und die Hostadressen von rechts nach links mit Einsen auffüllen. Dies läßt einen Puffer zwischen dem Subnetz- und dem Hostteil für spätere Änderungen. Z.B.:

   1000 xxxx . xxxx xxxx  Subnetz 128
   0100 xxxx . xxxx xxxx  Subnetz 64
   1100 xxxx . xxxx xxxx  Subnetz 192
   ...

   1000 0000 . 0000 0001  Host 1 im Subnetz 128
   1000 0000 . 0000 0010  Host 2 im Subnetz 128
   1000 0000 . 0000 0011  Host 3 im Subnetz 128
   ...

Es ist üblich, Routern, Gateways, usw. die höchstmöglichen Hostadressen zu geben, also z.B. 129.47.64.127 im Subnetz 64 des obigen Beispiels.

Broadcast-Adressen

Es gibt davon drei Typen: Netzwerk-Broadcasts, Subnetzwerk-Broadcasts und Broadcast Adressen. Ein Netzwerk-Broadcast hat im Netzwerkteil der Adresse eben den Netzwerkteil der IP-Adresse, im Hostteil nur Einsen. Z.B. 129.47.255.255 im Netz 129.47.

Ein Subnetzwerk-Broadcast enthält ebenfalls den Netzteil der IP-Adresse, den Subnetzteil und sonst nur Einsen. Z.B. 129.47.79.255 (=129.47.0100 1111. 11111111) im Subnetz 64.

Ein bißchen Literatur zum Thema:
TCP/IP Referenz - Handbuch  von Netware 4.1
Linux Network Administrator Guide, Olaf Kirch, O'Reilly&Associates
Linux, Kofler, Addison-Wessley
uvm...


Zurück zur OSSOS - Homepage