Определение простыми словами
TCP (Transmission Control Protocol) — это «надёжная почта» интернета. Перед отправкой данных устанавливает соединение, нумерует каждый байт, ждёт подтверждение получения и переотправляет потерянное. Для приложения это похоже на запись в файл: что отправил, то и приехало в нужном порядке.
В отличие от UDP, TCP даёт гарантии доставки и порядка ценой задержки и накладных расходов. Описан в RFC 793 (1981) и обновлён в RFC 9293 (2022). Любой запрос к сайту, SSH-сессия, отправка письма по SMTP — это поверх TCP.
Сравнение
| Параметр | TCP | UDP |
|---|---|---|
| Соединение | трёхэтапное рукопожатие | без соединения |
| Доставка | гарантированная | best effort |
| Порядок пакетов | сохраняется | не гарантирован |
| Контроль потока | sliding window | отсутствует |
| Заголовок | 20–60 байт | 8 байт |
| Задержка | выше | минимальная |
| Применение | HTTP, SSH, SMTP | DNS, VoIP, игры |
Кейсы использования
- HTTPS-запрос: TCP-соединение на порт 443, поверх него TLS-рукопожатие, потом полезные данные.
- SSH-доступ к серверу: устойчивая сессия, в которой важна каждая нажатая клавиша.
- Передача файлов через FTP/SFTP — нужны точность и порядок.
- Базы данных: PostgreSQL и MySQL принимают подключения по TCP.
- Негативный сценарий: реальная задержка = RTT × число потерь × 2. На каналах с высоким loss (мобильный 4G в роуминге) TCP проигрывает QUIC и UDP-протоколам в скорости открытия страницы.
Технические детали
# Посмотреть активные TCP-соединения
ss -tulnp
ss -t state established
# Понаблюдать за рукопожатием через tcpdump
sudo tcpdump -i any -n 'tcp port 443 and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
# Тюнинг для серверов с высокой нагрузкой
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# Проверка доступности порта
nc -zv example.com 443
Для глубокого разбора пакетов используют Wireshark и tcpdump. Современные альтернативы — QUIC и HTTP/3 поверх UDP.
🔥 Где это применяется
Частые вопросы
Что такое TCP-рукопожатие?
Это обмен тремя пакетами SYN, SYN-ACK, ACK перед началом передачи данных. Стороны договариваются о начальных номерах последовательностей и подтверждают готовность к обмену.
Чем TCP отличается от IP?
IP отвечает за маршрутизацию пакетов между узлами без гарантий. TCP работает поверх IP и обеспечивает надёжность: подтверждения, повторы, упорядочивание, контроль потока.
Зачем нужен TCP, если есть QUIC?
QUIC поверх UDP моложе и пока не везде: SSH, SMTP, БД, IRC по-прежнему живут на TCP. Браузеры и CDN постепенно переходят на QUIC для HTTP/3, но TCP остаётся стандартом большинства серверных протоколов.