UDP

Материал из wireshark.wiki

Введение

UDP (User Datagram Protocol, протокол пользовательских дейтаграмм) – один из ключевых сетевых протоколов, используемых в компьютерных сетях.

Протокол UDP расположен на транспортном уровне модели OSI. Сообщения протокола UDP называются дейтаграммами (датаграммами). Протокол создан Дэвидом П. Ридом в 1980 году и описан в RFC 768.

К ключевым особенностям UDP относятся: отсутствие необходимости устанавливать соединение, отсутствие гарантии доставки данных, а также гарантии корректного порядка доставки. Это означает, что дейтаграммы могут достигать адресата в разном порядке, дублироваться или даже теряться, однако за счет наличия в UDP-заголовке поля «Контрольная сумма» дается гарантия того, что доставленные данные будут целыми. В UDP предполагается, что не нужно ни выявлять ошибки, ни исправлять их, либо эти действия будут выполнены другими протоколами.

Перечисленные особенности протокола приводят к существенной экономии сетевых ресурсов. Как результат, с помощью протокола UDP можно передавать данные быстрее, чем с помощью протокола TCP. Это делает UDP идеальным для приложений, которых задержки в доставке данных могут быть неприемлемы (например, для приложений, использующихся для передачи голосовых и видеоданных в режиме реального времени). Также UDP ценится за способность эффективно обслуживать большое количество запросов от множества клиентов, что делает его подходящим для серверов, обрабатывающих большое количество небольших запросов (например, DNS-запросы).

Изучение сетевых протоколов «под микроскопом»

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и подробно изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.


Порты

Чтобы отличать разные потоки данных, протокол UDP при передаче использует сокеты. Сокет представляет собой связку из IP-адреса отправителя и номера порта отправителя, либо из IP-адреса получателя и номера порта получателя.

Номер порта – это 16-битное двоичное число, которое в десятичном виде может иметь значение от 0 до 65 535.

IANA разделяет порты на три категории:

  1. Стандартные порты (0–1023): порты, зарезервированные за самыми распространенными сетевыми службами (FTP, SSH и др.).
  2. Зарегистрированные порты (1024–49 151): порты, зарезервированные за прочими часто используемыми службами (RDP и др.).
  3. Динамические порты (49 152–65 535): порты, не привязанные к определенным службам. Такие порты и могут быть использованы протоколом по собственному усмотрению. Обычно они используются в качестве порта отправителя запроса. Этот же номер порта потом будет указан в качестве порта получателя запроса.


UDP-заголовок

Байты 0 1 2 3
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3 0–31 Порт отправителя (Source Port) Порт получателя (Destination Port)
4–7
32–63
Размер дейтаграммы (Length) Контрольная сумма (Checksum)
8–... 64–... Октеты с данными (Data Octets)


Порт отправителя (16 бит) – UDP-порт процесса-отправителя. Порт отправителя – необязательное поле, которое в случае отсутствия данных заполняется нулями.

Порт получателя (16 бит) – UDP-порт процесса-получателя.

Размер дейтаграммы (16 бит) – размер всей дейтаграммы в байтах, включая ее заголовок и полезные данные.

Контрольная сумма (16 бит) – данные, использующиеся для проверки целостности UDP-заголовка, UDP-псевдозаголовка и полезных данных.

При расчете контрольной суммы учитываются 16-битные слова. Если размер данных для проверки не кратен шестнадцати битам, то для получения нужного значения при расчете контрольной суммы в конце дейтаграммы добавляются виртуальные нули. При расчете контрольной суммы ее значение считается равным нулю.

UDP-псевдозаголовок

UDP-псевдозаголовок (96 бит) – виртуальный заголовок, состоящий из информации, которая берется из IP-заголовка.

Этот псевдозаголовок виртуально добавляется к реальному UDP-заголовку и используется для исключения некорректной маршрутизации.

Байты 0 1 2 3
Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0–3 0–31 IP-адрес отправителя
4–7
32–63
IP-адрес получателя
8–11 64–95 Нули Протокол Размер UDP-дейтаграммы
12–15 96–127 Порт отправителя (Source Port) Порт получателя (Destination Port)
16–19
128–159
Размер дейтаграммы (Length) Контрольная сумма (Checksum)
21–... 160–... Октеты с данными (Data Octets)


IP-адрес отправителя (32 бита) – IP-адрес отправителя пакета, который берется из IPv4-заголовка.

IP-адрес получателя (32 бита) – IP-адрес получателя пакета, который берется из IPv4-заголовка.

Нули (8 бит) – поле, у которого все биты всегда имеют нулевое значение.

Протокол (8 бит) – для UDP всегда 17.

Размер UDP-дейтаграммы (16 бит) – размер UDP-заголовка и данных дейтаграммы без учета размера UDP-псевдозаголовка.

Изучение сетевых протоколов «под микроскопом»

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и подробно изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.