RUDP

Из Википедии, бесплатной энциклопедии

Протокол RDP (англ. Reliable Data Protocol) разработан для обеспечения надёжной передачи данных между пакетно-ориентированными приложениями. Изначально он был разработан для приложений, реализующих удалённую загрузку данных и удалённое устранение неполадок, однако его можно использовать и в других приложениях, требующих надёжной передачи сообщений. Существуют две версии RDP, описанные в спецификациях RFC 908 и RFC 1151 соответственно.

Протокол RUDP (англ.  Reliable User Datagram Protocol), основанный на протоколе RDP, разработан для передачи телефонных сигналов через IP-сети. Этот протокол не стандартизирован, он не имеет официальной спецификации.

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

В отличие от UDP, RDP и RUDP поддерживают следующие функции:

  • подтверждение доставки пакетов
  • повторная отправка потерянных пакетов
  • управление потоками передачи данных

Взаимодействие RDP с протоколами других уровней

[править | править код]

Место RDP в иерархии протоколов:

Обмен данными между уровнями:

RDP обеспечивает прикладной уровень надёжной службой передачи сообщений. Интерфейс протокола преобразует данные пользователя в сообщения. Сообщения, в свою очередь, в ходе обмена данными между RDP и IP преобразуются в сегменты данных и далее в дейтаграммы.

Форматы заголовков RDP и RUDP

[править | править код]

Формат заголовка RDP

[править | править код]
RDPv1 RDPv2
  • Биты 0-4 — флаговые
  • Они определяют, является ли сегмент сегментом соответствующего типа.
  • Сегмент SYN используется для установления и синхронизации соединения.
  • Сегмент ACK — для подтверждения получения сегмента, входящего в последовательность.
  • Сегмент EACK — для передачи номеров сегментов с правильной контрольной суммой, но полученных вне последовательности.
  • Сегмент RST — для перезагрузки или закрытия соединения.
  • Сегмент NUL — для проверки активности получателя.
  • Бит после NUL всегда имеет значение 0.
  • Биты V — версия протокола.
  • Поле Header Length — длина заголовка.
  • Поле Source Ports служит для идентификации процесса, инициировавшего соединение.
  • Поле Destination Ports — для идентификации второго процесса.
  • Комбинации этих полей позволяют RDP устанавливать несколько соединений между двумя узлами сети.
  • Поле Data Length — длина пересылаемого сегмента без учёта заголовков протоколов, то есть длина пользовательских данных в пересылаемом сегменте.
  • Поле Sequence Number — порядковый номер сегмента.
  • Поле Acknowledgement Number — содержит порядковый номер последнего сегмента, полученного отправителем текущего сегмента.
  • Поле Checksum — контрольная сумма.
  • Variable Header Area используется для передачи параметров сегментов SYN и EACK.

Формат заголовка RUDP

[править | править код]

  • Биты 0-6 — флаговые
  • Назначение флагов SYN, ACK, EAK, RST, NUL — аналогично соответствующим флагам в заголовке RDP
  • CHK — определяет, содержится в поле Checksum контрольная сумма только заголовка, или заголовка и данных.
  • TCS — определяет, является ли сегмент сегментом TCS, используемым для передачи сведений о состоянии соединения.
  • Бит после TCS всегда равен 0.
  • Поле Header Length — длина заголовка.
  • Поле Sequence Number — номер сообщения.
  • Поле Checksum — контрольная сумма.

Более подробно о сегментах SYN, ACK, EAK, RST, NUL, их структуре и параметрах можно почитать в RFC 908 Архивная копия от 13 ноября 2007 на Wayback Machine (англ.).

Жизненный цикл RDP-соединения

[править | править код]

Изначально соединение пребывает в состоянии CLOSED, то есть не существует. Выход из этого состояния осуществляется по запросу на открытие соединения. Запрос может быть активным либо пассивным. После запроса на открытие и успешного обмена сегментами SYN и ACK между узлами соединение переходит в состояние OPEN. В этом состоянии осуществляется пересылка пользовательских данных. Выход из него происходит при получении запроса на закрытие соединения или сегмента RST. При получении сегмента RST соединение после некоторой задержки закрывается. При получении запроса на закрытие узел отправляет сегмент RST, и только после этого происходят задержка и закрытие соединения.