Model TCP/IP (ang. Transmission Control Protocol/Internet Protocol) – teoretyczny model warstwowej struktury protokołów komunikacyjnych. Model TCP/IP stał się zbudowany w latach 70. XX wieku w DARPA, aby pomóc w tworzeniu odpornych na atak sieci komputerowych. Potem stał się on podstawą struktury Internetu.
Historia
Protokół internetowy stał się zbudowany przez Agencję Zaawansowanych Projektów Badawczych Departamentu Obrony Stanów Zjednoczonych (DARPA) we wczesnych latach 70. Po utworzeniu pionierskiego projektu ARPANET (pierwsza na świecie rozległa sieć internetowa), DARPA rozpoczęła wielokierunkowe prace nad technologiami przesyłu danych.
W 1972 Robert E. Kahn stał się zatrudniony w DARPA Information Processing Technology Office (Biuro Technologii Przetwarzania Danych), gdzie pracował nad dwoma projektami: satelitarnym przesyłaniu pakietów internetowych oraz radiowym przesyłaniu pakietów internetowych. Dostrzegł wówczas możliwości, jakie kryły się w komunikowaniu się za pomocą tych pakietów. Wiosną 1973 roku Vinton Cerf, który rozwijał pierwotny protokół sieci ARPANET (NCP), dołączył się do Kahna, by wraz z nim pracować nad modelem otwartej architektury łączeniowej oraz opracowaniem nowego protokołu dla ARPANET.
W lecie 1973 roku Kahn oraz Cerf opracowali zręby nowego systemu, w którym użyto jednego tylko wspólnego protokołu internetowego. Cerf był też inspirowany przez Huberta Zimmermana oraz Louisa Pouzina, który stworzył francuską sieć CYCLADES, podobną do amerykańskiej.
Stało się przy tym możliwe połączenie niemalże wszystkich sieci, także nie opartych o TCP/IP, a więc rozwiązano początkowy problem Kahna. Komputer zwany bramą sieciową (później tę nazwę zmieniono na router, by uniknąć nieporozumień w przypadku innych typów bram sieciowych) jest podpięty do każdej z łączonych sieci oraz dokonuje tłumaczenia pakietów pomiędzy nimi.
Pomysł TCP/IP stał się znacząco rozwinięty przez grupę Cerfa w Stanford w latach 1973-74. Ośrodek badawczy firmy Xerox, Xerox PARC, we wczesnych latach badań nad Internetem wyprodukował Uniwersalny Pakiet PARC, posiadających wiele wspólnych cech z TCP/IP. Protokół ten był także bardzo popularny oraz przez pewien czas koegzystował z TCP/IP.
DARPA następnie rozpoczęła współpracę z BBN Technologies, na Uniwersytecie Stanforda oraz z londyńskim College University, w celu rozwinięcia innych wersji protokołu dla wielorakich urządzeń. Stworzono cztery wersje protokołu: TCP v1, TCP v2, w wiosnę 1978 roku rozdzieloną wersję TCP v3 oraz IP v3, a następnie stabilną wersję TCP/IP v4- standard, który jest stosowany w Internecie do dziś.
W 1975 roku przeprowadzono test komunikacyjny dwóch sieci TCP/IP pomiędzy uniwersytetami Stanforda, a College London (UCL). W listopadzie 1977 roku dokonano trójstronnego połączenia na bazie protokołów TCP/IP pomiędzy Stanami Zjednoczonymi, Wielką Brytanią oraz Norwegią. Między 1978, a 1983 rokiem, parę innych prototypów TCP/IP było wynalezionych w centrach naukowych. 1 stycznia 1983 roku ARPANET w całości przełączyła się na TCP/IP.
W marcu 1982 roku Amerykański Departament Obrony uznał protokoły TCP/IP za standard w całej sieci należącej do wojska. W 1985 roku Internet Architecture Board (dawniej Internet Activities Board – techniczne ciało zarządzające Internetem) zorganizowało trzydniowe warsztaty na temat TCP/IP dla przemysłu komputerowego oraz korzystając z sił swoich 250 specjalistów pomogło przeistoczenie protokoły TCP/IP do szerszego, komercyjnego użytku.
9 listopada 2005 roku Kahn oraz Cerf otrzymali Prezydencki Medal Wolności za ich wkład w kulturę amerykańską.
Model
Podstawowym założeniem modelu TCP/IP jest podział całego zagadnienia komunikacji sieciowej na szereg współpracujących ze sobą warstw (ang. layers). Każda z nich bywa tworzona przez programistów całkowicie niezależnie, jeżeli narzucimy pewne protokoły wedle których wymieniają się one informacjami. Założenia modelu TCP/IP są pod względem organizacji warstw zbliżone do modelu OSI. Jednak liczba warstw jest mniejsza oraz bardziej odzwierciedla prawdziwą strukturę Internetu. Model TCP/IP składa się z czterech warstw.
Warstwa aplikacji
Warstwa procesowa czy warstwa aplikacji (ang. process layer) to najwyższy poziom, w którym pracują użyteczne dla człowieka aplikacje takie jak np. serwer WWW czy przeglądarka internetowa. Zawiera w sobie ona zestaw gotowych protokołów, które aplikacje wykorzystują do przesyłania różnego typu informacji w sieci. Wykorzystywane protokoły to m.in.: HTTP, Telnet, FTP, TFTP, SNMP, DNS, SMTP, X Windows.
Warstwa transportowa
Warstwa transportowa (ang. host-to-host layer) gwarantuje pewność przesyłania danych oraz kieruje właściwe informacje do odpowiednich aplikacji. Opiera się to na wykorzystaniu portów określonych dla każdego połączenia. W jednym komputerze może istnieć wiele aplikacji wymieniających dane z tym samym komputerem w sieci oraz nie nastąpi wymieszanie się przesyłanych przez nie danych. To właśnie ta warstwa nawiązuje oraz zrywa połączenia pomiędzy komputerami oraz zapewnia pewność transmisji.
Warstwa Internetu
Warstwa Internetu albo warstwa protokołu internetowego (ang. internet protocol layer) to sedno działania Internetu. W tej warstwie przetwarzane są datagramy posiadające adresy IP. Ustalana jest odpowiednia droga do docelowego komputera w sieci. Pewne urządzenia sieciowe posiadają tę warstwę jako najwyższą. Są to routery, które zajmują się kierowaniem ruchu w Internecie, bo znają topologię sieci. Proces odnajdywania przez routery właściwej drogi wyznacza się jako trasowanie.
Warstwa dostępu do sieci
Warstwa dostępu do sieci albo warstwa fizyczna (ang. network access layer) jest najniższą warstwą oraz to ona zajmuje się przekazywaniem danych przez fizyczne połączenia pomiędzy urządzeniami sieciowymi. Najczęściej są to karty sieciowe albo modemy. Dodatkowo warstwa ta jest czasami wyposażona w protokoły do dynamicznego określania adresów IP.
Aplikacje oraz protokoły
W warstwie transportowej może istnieć wiele protokołów, które współegzystują w jednej sieci. Ich algorytmy powinny być optymalizowane, aby zapewnić:
- niezawodny transfer danych,
- dużą przepustowość,
- krótki czas reakcji.
Niezawodny transfer danych oznacza zapewnienie, że jeżeli tylko istnieje taka możliwość, każdy komunikat dotrze do odbiorcy. Duża przepustowość wyznacza ilość informacji jaką da się przesłać w zadanych czasie. Czas reakcji (ping) musi być jak najmniejszy, co jest niezbędne, aby ograniczyć opóźnienie w komunikacji. W praktyce nie da się pogodzić wszystkich trzech wymogów względem warstwy transportowej. Zwykle postęp jednego z nich dokonuje się kosztem pozostałych. Aby rozwiązać ten problem w sieciach komputerowych zaprojektowano szereg protokołów warstw transportowych. Projektant tworzący aplikację musi w takiej sytuacji wybrać, który protokół najlepiej sprawdzi się w jego oprogramowaniu oraz sieci.
Niezawodny transfer danych
Pewne zastosowania, takie jak poczta elektroniczna, przesyłanie wiadomości błyskawicznych, transfer plików, terminale sieciowe, pobieranie stron internetowych oraz transakcje finansowe wymagają niezawodnego przesyłania danych, czyli bez utraty danych. Utrata danych pliku albo danych transakcji finansowej może posiadać przecież fatalne konsekwencje (w drugim przypadku dla banku albo klienta!). Zastosowania tolerujące utratę danych, wśród których najbardziej wyróżniają się media strumieniowe, potrafią pozwolić sobie na przepadnięcie określonej ilości danych. W przypadku zastosowań multimedialnych utrata danych może spowodować niewielkie zakłócenia podczas odtwarzania danych obrazu albo dźwięku, które nie wpłyną znacząco na jakość. Wpływ utraty danych na jakość pracy aplikacji oraz rzeczywista liczba pakietów danych, które potrafią przepaść, w dużym stopniu zależy od aplikacji oraz zastosowanego schematu kodowania.
Przepustowość
Aby efektywnie działać, pewne aplikacje muszą być w stanie transmitować dane z określoną szybkością. Jeśli dla przykładu aplikacja telefonii internetowej koduje głos z szybkością 32 kb/s, z taką samą szybkością musi posiadać możliwość przesyłania danych w sieci oraz dostarczania ich do aplikacji odbiorczej. Jeśli wymagana przepustowość nie jest dostępna, aplikacja zależna od przepustowości będzie zmuszona do kodowania z inną szybkością (i uzyskania przepustowości wystarczającej do kontynuowania procesu) albo powinna przerwać operację, albowiem np. połowa żądanej przepustowości to zdecydowanie za mało dla tego typu aplikacji. Wiele aktualnie istniejących aplikacji multimedialnych jest zależnych od przepustowości. Jednak aplikacje multimedialne, które powstaną w przyszłości, w celu kodowania z szybkością dostosowaną do aktualnie dostępnej przepustowości potrafią stosować adaptacyjne metody kodowania. Aplikacje zależne od przepustowości wymagają określonej przepustowości, natomiast aplikacje elastyczne są w stanie skorzystać z takiej przepustowości, jaka w danej chwili będzie dostępna. Przykładami takich aplikacji są programy pocztowe, służące do przesyłania plików oraz stron internetowych. Naturalnie im większa przepustowość, tym lepiej.
Czas reakcji
Ostatnim z wymagań dotyczących aplikacji jest czas. Aby efektywnie funkcjonować, interaktywne zastosowania czasu rzeczywistego, takie jak telefonia internetowa, wirtualne środowiska, telekonferencje oraz gry dla wielu osób (MMO), żądają dostarczania danych w czasie o niewielkim zakresie tolerancji. Przykładowo, wiele z tych zastosowań wymaga, aby opóźnienia międzywęzłowe miały wartość kilkuset milisekund albo mniejszą. Duże opóźnienia w przypadku telefonii internetowej powodują zwykle nienaturalne przerwy w rozmowie. Znaczne opóźnienie pomiędzy wykonaną czynnością oraz uzyskaną odpowiedzią (na przykład od innego gracza znajdującego się na drugim końcu połączenia) występujące w przypadku gier dla wielu osób albo w interaktywnym środowisku wirtualnym sprawiają, że aplikacja wydaje się działać nie do końca w czasie rzeczywistym.
Właściwości
Protokoły te posiadają następujące cechy charakterystyczne:
- dobrą odtwarzalność po awarii
- możliwość dodawania nowych sieci bez przerywania pracy istniejących
- wysoki współczynnik korekcji błędów
- niezależność od platformy
- mały stopień obciążenia danych własnymi strukturami
- dużą wydajność
Protokoły TCP oraz IP łącznie zarządzają przepływem większości danych przez sieć. IP odpowiada za przesyłanie dowolnych danych z punktu do punktu oraz zawiera w sobie dla przykładu TCP albo UDP. Zadaniem TCP jest:
- uzgadnianie tożsamości (handshake)
- zarządzanie pakietami (które potrafią docierać do adresata w innej kolejności niż były wysłane)
- sterowanie przepływem
- wykrywanie oraz obsługę błędów
Para TCP+IP jest stosowana do tzw. transmisji połączeniowej, gdzie zagwarantowany jest przepływ danych dowolnej długości w obydwie strony, albo zwrotne poinformowanie nadawcy o nieusuwalnym błędzie.
Para protokołów UDP+IP jest najczęściej używanym standardem do tzw. transmisji bezpołączeniowej, czyli przesyłania w jedną stronę, bez potwierdzania odbioru, niewielkich paczek danych zwanych datagramami.
Związek z Internetem
Każdy protokół sieciowy da się przyporządkować do określonej warstwy modelu TCP/IP. Pewną wybitną cechą rodziny protokołów TCP/IP używanej w Internecie jest podział protokołów z warstwy aplikacyjnej oraz połączeniowej. Pewne protokoły z warstwy aplikacji wykorzystują tylko pewne protokoły z warstwy transportowej.
Protokoły DNS, NTP wykorzystują tylko protokół UDP z warstwy transportowej. Protokoły FTP, SMTP, POP3, SSH, IRC posługują się tylko TCP. Natomiast SMB używa obu protokołów.
Protokół SSL ma wybitną rolę. Może zostać umieszczony pomiędzy każdym połączeniowym protokołem warstwy aplikacji, a TCP. Dzięki jego wykorzystaniu dane przesyłane przez aplikacje potrafią zostać zaszyfrowane.
Pewne protokoły z warstwy aplikacji, jak np. SMB nie działają zwykle w Internecie. Są wykorzystane w sieciach lokalnych do udostępniania usług, jak np. zdalne drukarki czy dyski.
W systemie Linux oraz innych klonach Uniksa dokładną listę protokołów transportowych da się znaleźć w pliku:
/etc/protocols
a listę protokołów z warstwy aplikacji w pliku
/etc/services
W systemach z rodziny Windows NT, odpowiednie pliki leżą w katalogu
%WINDIR%\system32\drivers\etc
gdzie %WINDIR% to katalog z systemem, domyślnie C:\WINDOWS.
Od ogólnego modelu TCP/IP są w Internecie wyjątki. Przykładem bywa tutaj usługa ping, w której aplikacja wysyła bezpośrednio pakiety ICMP w celu ustalenia jakości połączenia z innym komputerem.