TCP — протокол транспортного уровня¶
TCP (Transmission Control Protocol, протокол управления передачей данных) — транспортный протокол набора интернет-протоколов (TCP/IP), обеспечивающий надёжную, упорядоченную и проверяемую доставку данных между приложениями на разных хостах. Работает поверх сетевого уровня (обычно IP) и предоставляет приложениям абстракцию потока байтов с гарантией доставки, контролем порядка и обнаружением ошибок.
¶История
Протокол разработан в 1970-х годах Винтоном Серфом и Бобом Каном. Первая спецификация опубликована в 1974 году в статье «A Protocol for Packet Network Intercommunication». В 1981 году TCP включён в набор протоколов TCP/IP, ставший стандартом ARPANET, а затем и основой глобального Интернета. В 1983 году ARPANET перешёл на TCP/IP. RFC 793 (1981) задал базовую спецификацию, позднее уточнённую в RFC 9293 (2022).
¶Основные характеристики
TCP относится к транспортному уровню модели OSI и обеспечивает:
- Надёжную доставку — с помощью подтверждений (ACK), повторной передачи при потере и таймеров.
- Упорядоченную передачу — данные передаются в виде потока байтов, порядок восстанавливается по номерам сегментов.
- Контроль потока (flow control) — механизм окна, согласованный между отправителем и получателем, предотвращает перегрузку принимающей стороны.
- Контроль перегрузки (congestion control) — алгоритмы (Reno, CUBIC, BBR и др.) адаптируют скорость отправки к пропускной способности сети.
- Мультиплексирование — порты источника и назначения позволяют нескольким приложениям использовать одно соединение IP.
- Полудуплексная логика соединения — каждый поток данных управляется отдельно, возможна одновременная передача в обе стороны.
¶Устройство и формат сегмента
Данные в TCP разбиваются на сегменты. Заголовок TCP содержит 10 обязательных полей (минимум 20 байт) и опциональные расширения:
| Поле | Назначение |
|---|---|
| Порт источника / назначения | Идентификация приложений (0–65535) |
| Номер последовательности | Позиция первого байта данных в потоке |
| Номер подтверждения | Ожидаемый следующий байт от собеседника |
| Размер окна | Объём данных, который готов принять получатель |
| Контрольные флаги | SYN, ACK, FIN, RST, PSH, URG |
| Контрольная сумма | Проверка целостности заголовка и данных |
¶Установление соединения
TCP-соединение устанавливается трёхсторонним рукопожатием (three-way handshake):
- Клиент отправляет сегмент с флагом SYN и начальным номером последовательности.
- Сервер отвечает SYN-ACK со своим номером последовательности и подтверждением.
- Клиент отправляет ACK; соединение считается установленным.
Завершение соединения обычно четырёхстороннее: каждая сторона посылает FIN и получает подтверждение. Возможен альтернативный механизм TCP Fast Open, сокращающий установление.
¶Потеря и восстановление данных
Потерянные сегменты обнаруживаются по тайм-ауту или дублированным подтверждениям. Используются алгоритмы повторной передачи: таймер передачи (RTO), быстрое восстановление (fast retransmit) и быстрое восстановление (fast recovery). Порядок данных восстанавливается по номерам последовательности, дубликаты отбрасываются.
¶Контроль перегрузки
Перегрузка сети — основная причина потерь в современном Интернете. TCP реализует аддитивное увеличение и мультипликативное уменьшение (AIMD): при отсутствии потерь размер окна растёт линейно, при потере — уменьшается. Классические алгоритмы — Tahoe, Reno, NewReno, SACK. Современные — CUBIC (по умолчанию в Linux) и BBR (разработан Google), оценивающий пропускную способность и задержку.
¶Порты и адресация
Приложения идентифицируются 16-битными номерами портов. Зарезервированы порты 0–1023 (well-known): HTTP — 80, HTTPS — 443, SSH — 22, DNS — 53 (обычно UDP), SMTP — 25. Диапазон 1024–49151 используется приложением, 49152–65535 — динамические (ephemeral).
¶Альтернативы и развитие
Для приложений, где важнее скорость, чем гарантии, используется UDP. Для ускорения в условиях высоких задержек и потерь разработаны TCP Fast Open, MPTCP (мультипатчный TCP, RFC 6824), а также протокол QUIC, построенный поверх UDP. В России разработаны и применяются протоколы транспортного уровня ГОСТ Р (например, семейство ТСПУ), однако TCP остаётся доминирующим решением.
¶Применение
TCP является базой для большинства прикладных протоколов: HTTP/HTTPS, FTP, SMTP, SSH, Telnet, базы данных, стриминга. По оценкам, подавляющее большинство соединений в глобальной сети используют TCP.
¶Источники
- RFC 793 — Transmission Control Protocol (1981)
- RFC 9293 — Transmission Control Protocol (2022)
- RFC 5681 — TCP Congestion Control
- RFC 7413 — TCP Fast Open
- RFC 6824 — Multipath TCP
- V. Cerf, R. Kahn. A Protocol for Packet Network Intercommunication (1974)
- К. Росс. Компьютерные сети: подход снизу вверх
