Ответ
UDP (User Datagram Protocol) – это простой, ненадёжный протокол транспортного уровня модели OSI/TCP-IP, ориентированный на дейтаграммы (независимые пакеты).
| Ключевые характеристики (vs TCP): | Характеристика | UDP | TCP |
|---|---|---|---|
| Надёжность | Нет гарантий доставки, порядка, целостности. | Гарантированная, упорядоченная доставка. | |
| Установка соединения | Без соединения (connectionless). Нет handshake. | С установкой соединения (3-way handshake). | |
| Контроль перегрузки | Отсутствует. Может «затопить» сеть. | Присутствует (алгоритмы наподобие slow start). | |
| Заголовок | Маленький (8 байт). | Большой (20+ байт). | |
| Скорость | Быстрее, меньше накладных расходов. | Медленнее из-за накладных расходов. | |
| Гарантии | Best-effort delivery («по возможности»). | Гарантированная доставка. |
Структура UDP-датаграммы:
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source Port | Destination Port | // Порт отправителя и получателя (по 16 бит)
+--------+--------+--------+--------+
| Length | Checksum | // Длина и контрольная сумма (по 16 бит)
+--------+--------+--------+--------+
| |
| Data (Payload) | // Полезная нагрузка
| |
+-----------------------------------+
Пример создания UDP-клиента на Java:
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws Exception {
// 1. Создать сокет без привязки к конкретному порту
DatagramSocket socket = new DatagramSocket();
// 2. Подготовить данные и адрес назначения
String message = "Hello, UDP Server!";
byte[] buffer = message.getBytes();
InetAddress serverAddress = InetAddress.getByName("localhost");
int serverPort = 9876;
// 3. Создать и отправить пакет
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, serverAddress, serverPort);
socket.send(packet);
System.out.println("Packet sent to " + serverAddress + ":" + serverPort);
socket.close(); // Ресурс освобождён
}
}
Типичные сферы применения UDP:
- Мультимедиа и стриминг: Видеоконференции (Zoom, Teams), онлайн-видео (где потеря нескольких пакетов менее критична, чем задержка).
- Голосовая связь (VoIP): Skype, Discord.
- DNS-запросы: Быстрый обмен короткими запросами/ответами.
- Онлайн-игры: Передача частых обновлений состояния (позиция игрока).
- Трансляция (Broadcast/Multicast): Рассылка данных множеству получателей.
Вывод: UDP выбирают, когда скорость и низкая задержка важнее надёжности, а потеря части данных допустима.