В чем ключевые различия между протоколами TCP и UDP?

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

Ответ

TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) — это транспортные протоколы уровня L4 модели OSI/TCP-IP. Их основное различие — в подходе к надежности доставки данных.

Критерий TCP (Надежный, с установкой соединения) UDP (Быстрый, без установки соединения)
Соединение Требует установки соединения (3-way handshake). Работает без установки соединения (датаграммы).
Гарантии Гарантирует доставку, порядок пакетов и контроль целостности. Не гарантирует доставку, порядок или отсутствие дубликатов.
Контроль перегрузки Есть. Динамически регулирует скорость передачи. Нет. Отправляет данные с максимально возможной скоростью.
Накладные расходы Высокие (заголовок 20+ байт, подтверждения, повторные передачи). Низкие (заголовок 8 байт).
Использование HTTP(S), FTP, SSH, SMTP — где важна надежность. DNS, VoIP (Zoom, Skype), онлайн-игры, стриминг — где важна скорость и низкая задержка.

Пример сокета UDP в PHP (отправка):

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$message = 'Данные для быстрой отправки';
$targetIp = '192.168.1.100';
$targetPort = 9000;

// sendto — отправка без установки соединения
socket_sendto($socket, $message, strlen($message), 0, $targetIp, $targetPort);
socket_close($socket);

Выбор протокола:

  • Выбирайте TCP, когда критически важна полнота и точность данных (веб-страницы, файлы, команды).
  • Выбирайте UDP, когда важнее минимальная задержка (latency) и потеря отдельных пакетов некритична (видеозвонок, игровая позиция).

Видео-ответы