UDP в Node.js — модуль dgram

Пакетный протокол без гарантии доставки и порядка — быстрее TCP, для игр, видео/аудио стриминга, DNS.

Что это

UDP (User Datagram Protocol) — посылает датаграммы (пакеты) без установления соединения. Нет handshake, нет упорядочивания, нет повтора потерянных. Зато минимальный overhead — быстрее TCP.

В ноде доступен через модуль dgram (datagram).

API / Пример

const dgram = require('dgram');

// Сервер
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
  console.log(`from ${rinfo.address}:${rinfo.port} -> ${msg}`);
  server.send('pong', rinfo.port, rinfo.address);
});
server.bind(41234);

// Клиент
const client = dgram.createSocket('udp4');
client.send('ping', 41234, 'localhost', () => client.close());

TCP vs UDP

TCP UDP
гарантия доставки без гарантии
порядок пакетов пакеты могут прийти не по порядку
connection (handshake) connectionless
streaming байтов datagrams
backpressure нет управления потоком
HTTP, SSH, SMTP DNS, VoIP, игры, видео

Broadcast и Multicast

UDP умеет рассылать один пакет нескольким получателям:

  • broadcast — всем в подсети (шлюз не пропускает наружу)
  • multicast — списку адресов, подписавшихся на группу
socket.setBroadcast(true);
socket.addMembership('224.0.0.114'); // multicast группа

Производительность / Подводные камни

  • Клиентский порт меняется на каждый send — ОС выбирает свободный эфемерный порт.
  • Пакет может не дойти — не факт что сервер получит. По сети UDP теряется регулярно.
  • Свой протокол надёжности — если нужны гарантии, придумывать NACK/ACK поверх UDP вручную (как QUIC, RUDP).
  • MTU ~1500 байт — большие сообщения фрагментируются и теряются чаще.
  • Когда применяют — радио/видео-стриминг (потеря фрейма терпима), игры (latency важнее точности), discovery (mDNS, SSDP).

🎓 Источники

  • 🎓 Клиент-сервер на Node.js TCP и UDP, DNS · 2018-10-03
    • Тезисы: модуль dgram; клиентский порт UDP каждый раз новый; UDP быстрее TCP, но без гарантий; broadcast по подсети, multicast — списку адресов; для надёжности приходится писать свой протокол поверх.
    • Цитата: «Очень часто UDP используется когда перепосылка не нужна — интернет-радио, телевидение: потеряются какие-то фреймы — не страшно.»

См. также