UDP
Введение
UDP (User Datagram Protocol, протокол пользовательских дейтаграмм) – один из ключевых сетевых протоколов, используемых в компьютерных сетях.
Протокол UDP расположен на транспортном уровне модели OSI. Сообщения протокола UDP называются дейтаграммами (датаграммами). Протокол создан Дэвидом П. Ридом в 1980 году и описан в RFC 768.
К ключевым особенностям UDP относятся: отсутствие необходимости устанавливать соединение, отсутствие гарантии доставки данных, а также гарантии корректного порядка доставки. Это означает, что дейтаграммы могут достигать адресата в разном порядке, дублироваться или даже теряться, однако за счет наличия в UDP-заголовке поля «Контрольная сумма» дается гарантия того, что доставленные данные будут целыми. В UDP предполагается, что не нужно ни выявлять ошибки, ни исправлять их, либо эти действия будут выполнены другими протоколами.
Перечисленные особенности протокола приводят к существенной экономии сетевых ресурсов. Как результат, с помощью протокола UDP можно передавать данные быстрее, чем с помощью протокола TCP. Это делает UDP идеальным для приложений, которых задержки в доставке данных могут быть неприемлемы (например, для приложений, использующихся для передачи голосовых и видеоданных в режиме реального времени). Также UDP ценится за способность эффективно обслуживать большое количество запросов от множества клиентов, что делает его подходящим для серверов, обрабатывающих большое количество небольших запросов (например, DNS-запросы).
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
ИП Скоромнов Дмитрий Анатольевич, ИНН 331403723315
Порты
Чтобы отличать разные потоки данных, протокол UDP при передаче использует сокеты. Сокет представляет собой связку из IP-адреса отправителя и номера порта отправителя, либо из IP-адреса получателя и номера порта получателя.
Номер порта – это 16-битное двоичное число, которое в десятичном виде может иметь значение от 0 до 65 535.
IANA разделяет порты на три категории:
- Стандартные порты (0–1023): порты, зарезервированные за самыми распространенными сетевыми службами (FTP, SSH и др.).
- Зарегистрированные порты (1024–49 151): порты, зарезервированные за прочими часто используемыми службами (RDP и др.).
- Динамические порты (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.
ИП Скоромнов Дмитрий Анатольевич, ИНН 331403723315