Nad protokołem IP w warstwowym modelu architektonicznym znajduje się Internet Transmission Control Protocol (TCP), który jest przeznaczony do obsługi tego rodzaju problemów. Oczywiście komputery na obu końcach tej trasy nie chcą znać żadnych szczegółów dotyczących sposobu, w jaki pakiety przechodzą przez sieć. Jedyne, czego chcą, to zapewnienie między nimi niezawodnego transportu. W tym celu oba komputery nawiązują „połączenie”
Zakłada się, że komputer, który otrzyma dane, nasłuchuje w sieci żądań ustanowienia połączenia. Jeden jest wysyłany z drugiego komputera i potwierdza to. Oba komputery konfigurują teraz bufory transmisji i odbioru, liczniki/timery i sprawdzanie błędów. Następnie jeden komputer przesyła pewne dane, miejmy nadzieję, że odbiera je drugi host i ostatecznie przesyła „wiadomość z potwierdzeniem”. Pod warunkiem, że nastąpi to w określonym czasie, nadawca zakłada, że wszystko jest w porządku i w ten sam sposób prześle dalsze dane. Mówi się, że cała ta aktywność ma miejsce podczas „połączenia”. Podczas gdy połączenie jest na miejscu, dwa hosty nieustannie sprawdzają poprawność danych i wysyłają potwierdzenia i retransmisje, jeśli wystąpią problemy. Ciekawe rzeczy mogą się nie udać. Na przykład pakiety danych, które zostały utracone w buforach pamięci używanych przez podsieć, mogą nagle wyskakiwać po tym, jak nadawca zrezygnował z nich i ponownie przesłał dane, ale wszystko to jest załatwiane przez uzgadnianie TCP osiągnięte poprzez potwierdzenie protokół. TCP również dynamicznie kontroluje szybkość, z jaką dane mogą być wypompowywane z bufora hosta wysyłającego. Może ocenić wydajność trasy, monitorując postęp uzgadniania, a następnie dostosować przepływ danych, aby przesunąć go z maksymalną możliwą prędkością bez przeciążenia.
.