Встречается на 25% собеседований по Go

В чем разница TCP и UDP

TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) — это два основных транспортных протокола стека TCP/IP, которые различаются прежде всего наличием установки соединения и гарантией доставки данных. TCP — это протокол с установлением соединения, обеспечивающий надежную, упорядоченную и проверяемую доставку потока байтов. UDP — это протокол без установления соединения, который отправляет независимые датаграммы без подтверждения получения, что делает его быстрее, но менее надежным.

Как это работает

TCP перед передачей данных устанавливает логическое соединение между отправителем и получателем через трехэтапное рукопожатие (SYN, SYN-ACK, ACK). После установки соединения данные передаются сегментами, каждый из которых нумеруется, и получатель отправляет подтверждения (ACK) о получении. Если подтверждение не приходит, отправитель повторяет передачу. TCP также управляет потоком и перегрузкой, регулируя скорость передачи в зависимости от загруженности сети.

UDP, напротив, не устанавливает соединение: отправитель просто формирует датаграмму с адресами и портами и отправляет ее в сеть. Получатель, если он слушает соответствующий порт, принимает датаграмму, но не отправляет подтверждения. Потери, дублирование и изменение порядка датаграмм возможны, и протокол не предпринимает попыток их исправить. Единственная проверка, которую выполняет UDP, — контрольная сумма для обнаружения ошибок в самой датаграмме.

Сравнение характеристик

ХарактеристикаTCPUDP
Установка соединенияДа (трехэтапное рукопожатие)Нет
НадежностьВысокая: гарантирует доставку, порядок, отсутствие дублейНизкая: возможны потери, дубли, перемешивание
СкоростьНиже из-за накладных расходов на подтверждения и контрольВыше, так как нет подтверждений и контроля перегрузки
Контроль потока и перегрузкиДаНет
ИспользованиеВеб, почта, файловые передачи, SSHСтриминг, VoIP, онлайн-игры, DNS

Когда использовать UDP

UDP предпочтителен в приложениях, где скорость критичнее надежности, а потеря отдельных пакетов не критична. Например:

  • Потоковое видео и аудио (IPTV, видеоконференции, VoIP): потеря кадра или доли секунды звука не заметна, а задержка из-за повторной передачи была бы разрушительна.
  • Онлайн-игры: быстрый обмен позициями и действиями игроков; потеря пакета может привести к небольшому «телепорту», но повторная передача создала бы лаги.
  • DNS-запросы: один запрос — один ответ, повторная передача при потере выполняется на уровне приложения.

TCP, в свою очередь, незаменим для передачи файлов, электронной почты, веб-страниц и любых данных, где целостность и порядок критичны.

Подводные камни

  • Не путайте «ненадежность» UDP с отсутствием контроля целостности: контрольная сумма в UDP проверяет только повреждение датаграммы, но не гарантирует доставку.
  • В высоконагруженных системах на основе UDP часто добавляют механизмы надежности на прикладном уровне (например, QUIC, который работает поверх UDP, но предоставляет надежность, подобную TCP).
  • При ответе на собеседовании упомяните, что выбор протокола зависит от требований приложения: если нужна гарантированная доставка — TCP, если скорость и низкая задержка — UDP.

Коротко

  • TCP: соединение, надежность, порядок, контроль перегрузки — для веба, почты, файлов.
  • UDP: без соединения, быстрее, но возможны потери — для стриминга, игр, VoIP.
  • Ключевое отличие — гарантия доставки: TCP гарантирует, UDP — нет.
  • Выбор протокола определяется компромиссом между скоростью и надежностью.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы