← Назад к вопросам

Что такое UDP?

2.0 Middle🔥 251 комментариев
#API и сетевые протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

UDP — User Datagram Protocol

UDP (User Datagram Protocol) — это протокол транспортного слоя (Layer 4 в модели OSI), который предоставляет быстрое, но ненадёжное доставку данных между приложениями в сети.

Основные характеристики UDP

1. Без установления соединения UDP отправляет данные сразу, без предварительного рукопожатия, как это делает TCP.

2. Ненадёжная доставка UDP не гарантирует:

  • Доставку пакетов (пакеты могут быть потеряны)
  • Порядок доставки (пакеты могут прийти в другом порядке)
  • Отсутствие дубликатов (пакеты могут дублироваться)

3. Низкие задержки (Low Latency) Без overhead соединения UDP работает быстрее, чем TCP.

4. Меньший размер заголовка UDP заголовок 8 байт, TCP заголовок 20+ байт.

UDP vs TCP

ПараметрTCPUDP
СоединениеС установлениемБез установления
НадёжностьГарантирует доставкуНе гарантирует
ПорядокГарантирует порядокНе гарантирует
СкоростьМедленнееБыстрее
OverheadБольшеМеньше
ИспользованиеHTTP, FTP, EmailDNS, VoIP, Gaming, Streaming

Практическое использование UDP в Node.js

1. UDP сервер (слушает сообщения)

const dgram = require('dgram');

const server = dgram.createSocket('udp4');

server.on('message', (msg, rinfo) => {
  console.log(`Сообщение от ${rinfo.address}:${rinfo.port}: ${msg}`);
  
  server.send('Пинг получен!', rinfo.port, rinfo.address);
});

server.on('error', (err) => {
  console.error('Ошибка сервера:', err);
  server.close();
});

server.bind(41234, 'localhost');
console.log('UDP сервер слушает на localhost:41234');

2. UDP клиент (отправляет сообщения)

const dgram = require('dgram');

const client = dgram.createSocket('udp4');
const message = Buffer.from('Привет, сервер!');

client.send(message, 41234, 'localhost', (err) => {
  if (err) {
    console.error('Ошибка отправки:', err);
  } else {
    console.log('Сообщение отправлено');
  }
});

client.on('message', (msg) => {
  console.log('Ответ от сервера:', msg.toString());
});

Реальные примеры использования UDP

1. DNS запросы DNS использует UDP для быстрого разрешения имён (порт 53).

const dns = require('dns');

dns.resolve4('google.com', (err, addresses) => {
  console.log('IP addresses:', addresses);
});

2. VoIP и видеоконференции

  • Skype, Zoom, WebRTC используют UDP для низколатентного общения
  • Потеря нескольких пакетов звука не критична

3. Онлайн игры

  • Позиции игроков обновляются через UDP
  • Быстрота важнее абсолютной надёжности

4. Потоковое видео и аудио

  • YouTube, Netflix используют UDP (через QUIC)
  • Потеря нескольких кадров менее критична, чем задержка

5. IoT и телеметрия

  • Отправка метрик с множества устройств
  • Потеря одного пакета не критична

Пример: Simple UDP Ping-Pong

// ping.js
const dgram = require('dgram');
const client = dgram.createSocket('udp4');

const message = Buffer.from('PING');
client.send(message, 3000, 'localhost', () => {
  console.log('PING отправлен');
});

client.on('message', (msg) => {
  console.log('Получено:', msg.toString());
  client.close();
});

// pong.js
const dgram = require('dgram');
const server = dgram.createSocket('udp4');

server.on('message', (msg, rinfo) => {
  console.log('Получено:', msg.toString());
  server.send(Buffer.from('PONG'), rinfo.port, rinfo.address);
});

server.bind(3000);
console.log('Слушаю на порту 3000');

Когда выбирать UDP

Выбирай UDP когда:

  • Нужна минимальная задержка (real-time приложения)
  • Потеря отдельных пакетов приемлема
  • Объём данных большой (потоковое видео)

Выбирай TCP когда:

  • Надёжность критична (финансовые транзакции)
  • Нужна гарантия доставки всех данных в правильном порядке
  • Данные структурированные (HTTP запросы)

UDP — это выбор для приложений, где скорость и минимальная задержка критичнее, чем гарантия доставки каждого пакета.