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 hierarchy.gif

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

Rdp data.gif

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

Форматы заголовков RDP и RUDP[править | править исходный текст]

Формат заголовка RDP[править | править исходный текст]

RDPv1 RDPv2
Rdpv1.gif Rdpv2.gif
  • Биты 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[править | править исходный текст]

Rudp head.gif

  • Биты 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  (англ.).

Жизненный цикл RDP-соединения[править | править исходный текст]

Rdp life.gif

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

См. также[править | править исходный текст]

Ссылки[править | править исходный текст]