TCP (Transmission Control Protocol) to protokół sterowania transmisją służący do przesyłania danych między procesami w różnych maszynach. Należy do modelu TCP/IP. Jest to protokół połączeniowy, który wykorzystuje protokół IP do wysyłania i odbierania danych. W przeciwieństwie do UDP gwarantuje transmisję z zachowaniem właściwej kolejności dostarczanych pakietów i zapobiega duplikatom. TCP działa w trybie klient-serwer. Połączenie jest inicjowane przez klienta i kończone przez dowolną ze stron.
Do weryfikacji wysyłania i odbierania pakietów używane są sumy kontrolne i numery sekwencyjne. Host odbierający potwierdza odbiór pakietów o określonych numerach sekwencyjnych, ustawiając flagę ACK. Jeśli jakieś pakiety nie dotarły do odbiorcy, nadawca wysyła je ponownie.
Stany połączenia:
LISTEN – oznacza gotowość do nawiązania połączenia.
SYN-SENT – wskazuje, że połączenie jest nawiązywane. Pakiet z flagą SYN został już wysłany i oczekuje na pakiet SYN+ACK.
SYN-RECEIVED – oznacza, że pakiet SYN został odebrany i wysłany pakiet SYN+ACK. Trwa oczekiwanie na pakiet ACK.
ESTABLISHED – oznacza, że połączenie zostało poprawnie nawiązane.
FIN-WAIT-1 – oznacza, że został wysłany pakiet FIN. Dane mogą być nadal odbierane, ale wysyłanie nie jest już możliwe.
FIN-WAIT-2 – potwierdzenie odebrania własnego pakietu z flagą FIN i oczekiwanie na pakiet FIN od serwera.
CLOSE-WAIT – pakiet FIN został odebrany i wysłane zostało ACK. Oczekuje na wysłanie własnego pakietu FIN.
CLOSING – oznacza, że połączenie jest zamykane.
LAST-ACK – oznacza, że pakiet FIN został odebrany i wysłany oraz że oczekuje się na ACK dla ostatniego pakietu z flagą ACK.
TIME-WAIT – oznacza, że użytkownik oczekuje na potwierdzenie rozłączenia przez drugą stronę. W tym stanie połączenie nie może trwać dłużej niż 4 minuty.
CLOSED – oznacza, że połączenie zostało zamknięte.