TCP (Transmission Control Protocol)
TCP (Transmission Control Protocol) — протокол транспортного уровня, который обеспечивает надёжную, упорядоченную доставку потока байтов между приложениями с предварительной установкой соединения. Актуальная спецификация — RFC 9293, заменившая в 2022 году исходный RFC 793.

Установка и завершение соединения
Соединение открывается трёхэтапным рукопожатием. Клиент отправляет сегмент с флагом SYN, сервер отвечает SYN-ACK, клиент подтверждает приём флагом ACK. На этом этапе стороны согласуют начальные порядковые номера и параметры: максимальный размер сегмента (MSS), масштабирование окна, выборочные подтверждения (SACK). Закрытие выполняется обменом сегментами FIN и ACK в каждом направлении. Флаг RST разрывает соединение немедленно, например при обращении к закрытому порту.
Надёжность и управление потоком
Каждый байт потока имеет порядковый номер. Получатель подтверждает принятые данные, а неподтверждённые сегменты отправитель передаёт повторно по тайм-ауту или после трёх дублирующих подтверждений. Контрольная сумма выявляет искажения данных. Скользящее окно не даёт отправителю переполнить буфер получателя. Алгоритмы управления перегрузкой — медленный старт, предотвращение перегрузки, CUBIC, BBR — подстраивают скорость под пропускную способность сети.
Порты, заголовок и область применения
Приложения различаются по 16-битным номерам портов; соединение однозначно определяют адреса и порты двух сторон. Заголовок TCP занимает от 20 до 60 байт. Протокол используют там, где потеря данных недопустима: веб (HTTP и HTTPS, порты 80 и 443), почта (SMTP, IMAP), SSH, передача файлов по FTP и SFTP, базы данных. Платой за надёжность служат задержки: на установку соединения и повторные передачи тратится время.
Вопросы и ответы
Вопрос 1: Чем TCP отличается от UDP?
TCP устанавливает соединение, подтверждает доставку,
восстанавливает порядок данных и регулирует скорость.
UDP отправляет датаграммы без соединения и гарантий,
зато с минимальными задержками и накладными расходами.
Вопрос 2: Что такое SYN-flood?
Это атака на отказ в обслуживании: злоумышленник
отправляет множество сегментов SYN и не завершает
рукопожатие, заполняя очередь полуоткрытых соединений
сервера. Для защиты применяют SYN cookies и фильтрацию
на межсетевых экранах.
Вопрос 3: Что означает состояние TIME_WAIT?
Сторона, первой закрывшая соединение, некоторое время
хранит запись о нём, чтобы корректно обработать
запоздавшие сегменты и не спутать их с новым
соединением на тех же портах.

