TCP/IP wurde für
das ARPANET (Advanced Research Projects Agency), dem Vorgänger des heutigen
Internets, entwickelt. Das ARPANET war in seiner ursprünglichen Nutzung ein rein
militärisches Netz, das zur Koordination von weiträumig verteilten
militärischen, behördlichen und wissenschaftlichen Einrichtungen dienen sollte.
Die Entwicklung der TCP/IP Architektur, welche die bis dahin verwendeten
Protokolle ablösen sollte, begann etwa 1978, 1981 wurde TCP/IP im
RFC2 793 standardisiert. Im Jahre 1983
wurden die TCP/IP-Protokolle zu Military Standards (MIL STD) erhoben
und alle Institutionen, die am ARPANET partizipierten, mußten auf die neuen
Protokolle umstellen. Eine der Hauptvorgaben bei der Entwicklung des ARPANETs
und der damit verbundenen Protokolle war, dass auch beim Ausfall einiger Knoten
(durch z.B. äußere Einwirkung des Feindes) das restliche Netz weiterhin
funktionsfähig bleiben sollte.
Aus dieser Vorgabe resultieren einige Eigenschaften des TCP/IP Modells.
Wie man sieht, besteht der Protokollstack von TCP/IP nicht aus 7, sondern nur
aus 4 Schichten. Dieses Modell mit vier Schichten basiert auf den drei Ebenen,
die im Protocol Model des DOD (US-Verteidigungsministrerium) im DDN
Protocol Handbook beschrieben werden.
Es fehlen die Darstellungsschicht und die
Kommunikationssteuerungsschicht aus dem OSI-Modell.
Die Kommunikationssteuerungsschicht ist bei TCP/IP hauptsächlich in der
Transportschicht untergebracht. Es exisitieren auch keine Sessions wie
bei OSI, sondern Verbindungen werden bei TCP/IP über sockets und port
referenziert und somit die zuständigen Applikationsendpunkte festgelegt. Falls
Applikationen bei TCP/IP zusätzliche Kommunikationssteuerungsdienste benötigen,
müssen diese auf Applikationsebene erbracht werden. Ein Beispiel sei
Network File System(NFS), welches seine eigene
Kommunikationssteuerung mitbringt, die Remote Procedure Call
(RPC).
Auch die Darstellungsschicht fehlt bei TCP/IP. Diese Funktionalität
liegt auf Applikationsebene. Ein Beispiel sei Multipurpose Internet Mail
Extensions (MIME).
Die Tranportschicht teilt sich vertikal bei TCP/IP auf in User Datagram Protocol (UDP) und Transmission Control Protocol (TCP).
Die Portnummern zusammen mit der Quell- und Zieladresse
spezifizieren einen Socket. Jede Maschine, welche über TCP/IP
kommuniziert, wird ein Socket zu der empfangenden Maschine hin öffnen. Sind die
Sockets verbunden, steht bei TCP ein verlässlicher Dienst zu Verfügung.
Eine Applikation kann mehrere Sockets öffnen und über diese parallel
kommunizieren.
Die Internet-Schicht bei TCP/IP ist fast
identisch zu der Vermittlungsschicht vom OSI-Modell. Ein Unterschied ist, das
bei IP nur verbindungslose Kanäle existieren. Die Vermittlungsschicht ist
zuständig für den Weg, welchen die Pakete von einem Kommunikationspartner zum
anderen nehmen. Dabei wird für jedes Daten-Paket unabhängig entschieden, welche
Route dieses durch das Netz nehmen soll.
Ein weiterer Unterschied zu OSI ist, dass IP eine feste Länge für die Adresse (32
Bit) verlangt.
Die Vermittlungsschicht kümmert sich darum, die Daten,
die sie von der Transportschicht erhalten hat, in Pakete mit bestimmten
Längen zu unterteilen, welche den Beschränkungen der physikalischen Schicht
Rechnung tragen (Fragmentierung).
Über die Sicherungsschicht und Bitübertragungsschicht wird bei
TCP/IP nichts weiter erwähnt, da TCP/IP auf unterschiedlichen darunterliegenden Netzwerktypen
aufgebaut ist. Es verlangt nur irgendein Protokoll, welches dem Rechner
ermöglicht irgendwelche IP-Pakete zu verschicken. Da also die unteren
Protokolle nicht näher spezifiziert sind, variieren diese von Rechner zu Rechner
und Netzwerk zu Netzwerk.
Im Folgenden wird die zugrundeliegende
Netz-Architektur zusammengefasst als Grafik dargestellt:
Genau wie im OSI-Modell werden die Daten im Stack nach unten weitergereicht, wenn Daten verschickt werden. Beim Empfang verläuft der Weg genau umgekehrt, von Netzzugangsschicht zu der Anwendungsschicht. Jede Schicht fügt ihre eigenen Kontrollinformationen hinzu. Diese Information nennt man Header (Kopf), da sie den eigentlichen Daten vorangestellt wird. Jede Schicht betrachtet die gesamte Information, die sie von der darüberliegenden Schicht empfängt, als zu übertragende Daten. Bei dem Empfangen von Paketen wird der umgekehrte Weg genommen. Jede Schicht trennt ihren Header von dem Datenpaket ab und reicht, falls keine Fehler aufgetaucht sind, den restlichen Datenteil eine Schicht höher.