В чем разница между протоколами TCP и UDP?

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

Ответ

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

TCP — надежный, с установкой соединения.

  • Гарантии: Гарантирует доставку, целостность и порядок пакетов. Использует подтверждения (ACK), повторные передачи и контроль перегрузки.
  • Соединение: Перед обменом данными устанавливается соединение (three-way handshake).
  • Использование в Node.js: Модуль net для создания TCP-серверов и клиентов. Это основа для HTTP, WebSocket, баз данных (PostgreSQL, Redis протоколы).
  • Пример TCP-сервера:
    const net = require('net');
    const server = net.createServer((socket) => {
      socket.write('Echo serverrn');
      socket.pipe(socket); // Эхо-ответ
    });
    server.listen(1337, '127.0.0.1');

UDP — быстрый, без установки соединения.

  • Гарантии: Не гарантирует доставку, порядок или целостность. Пакеты могут быть потеряны, продублированы или прийти в неправильном порядке.
  • Соединение: Отправляет датаграммы без предварительного соединения.
  • Использование в Node.js: Модуль dgram. Идеален для сценариев, где скорость важнее надежности.
  • Пример UDP-сервера:
    const dgram = require('dgram');
    const server = dgram.createSocket('udp4');
    server.on('message', (msg, rinfo) => {
      console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
    });
    server.bind(41234);

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

  • TCP: Веб-серверы (HTTP/HTTPS), API, электронная почта (SMTP), передача файлов (FTP), когда важна полная и точная доставка данных.
  • UDP: Стриминг видео/аудио (VoIP, онлайн-игры), DNS-запросы, широковещательные рассылки, системы мониторинга в реальном времени, где допустима некоторая потеря пакетов.

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