Является ли протокол TCP синхронным?

«Является ли протокол TCP синхронным?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TCP — это протокол транспортного уровня, и термин "синхронный" к нему применяется некорректно в классическом понимании (как в синхронном/асинхронном программировании).

Ключевые характеристики TCP:

  • Установка соединения (handshake): TCP использует трёхэтапное рукопожатие (SYN, SYN-ACK, ACK) для установки логического, двунаправленного соединения перед обменом данными. Это можно считать синхронной фазой установки.
  • Передача данных: После установки соединения передача данных происходит в дуплексном режиме. Отправитель и получатель обмениваются сегментами, используя подтверждения (ACK) и механизмы контроля потока и перегрузок. Это не блокирующая операция на уровне сети — узел может продолжать работу, ожидая ACK.
  • На уровне сокетов: При работе с TCP-сокетами в коде, вызовы вроде read() или accept() могут быть блокирующими (синхронными) или неблокирующими (асинхронными) в зависимости от настроек сокета.

Вывод: TCP сам по себе — протокол с установкой соединения и гарантированной доставкой. Его «синхронность» — это характеристика этапа установки соединения и часто — модель программирования сокетов, а не внутреннего протокола передачи данных.