Надежная передача данных (RDT) 2.1

Опубликовано: 21 Января, 2023

Протокол RDT 2.1 является преемником протокола RDT 2.0. При передаче данных на транспортном уровне сохраняется проблема надежной передачи данных, проблема надежности не только на транспортном уровне, но и на прикладном уровне. Когда надежный протокол используется на ненадежном уровне, могут возникнуть проблемы с надежностью, например, TCP является надежным протоколом и реализуется через IP, который является ненадежным протоколом.

Фатальный недостаток RDT 2.0 и потребность в RDT 2.1

Протокол RDT 2.0 учитывает работу в канале с битовыми ошибками. Он ввел положительные и отрицательные подтверждения, если получатель получает поврежденный пакет, получатель отправляет отрицательное подтверждение, и наоборот в правильном случае. Это терпит неудачу, когда подтверждение действительно было повреждено. RDT 2.1 решает эту проблему.

Способы обработки поврежденных подтверждений

  1. Добавление дополнительных битов контрольной суммы для обнаружения поврежденного пакета, а также для восстановления пакета. Это хорошо, но требует дополнительных данных и обработки этих заголовков пакетов.
  2. Повторная отправка данных с поврежденными подтверждениями отправителя. Но этот метод вводит дубликаты пакетов на стороне получателя. Это будет недостатком, поскольку на стороне получателя нет дублирующей обработки.
  3. Добавляя дополнительное поле, которое представляет собой бит последовательности, получатель может проверить, является ли это дублированным пакетом или повторно переданным.

Метод «3» кажется возможным, он отслеживает дубликаты и не требует большого количества данных. RDT 2.1 использует этот механизм для обработки повторяющихся пакетов.

Представление в конечном автомате

ФСМ отправителя:

Как это работает:

Логика порядкового номера заключается в том, что отправитель поочередно отправляет пакеты с порядковыми номерами «0» и «1», поскольку можно отслеживать непрерывную передачу одного и того же пакета.

Состояние-1: На рисунке вверху слева состояние, называемое «Ожидание 0», является началом, состояние «Пуск» ожидает, пока не будет получено сообщение от верхнего прикладного уровня. После того, как он получен в качестве транспортного уровня, он добавляет заголовок транспортного уровня с порядковым номером «0», отправляемый в сеть.

Состояние-2: (вверху справа) После того, как пакет попал в сеть, он переходит в следующее состояние. Если полученное подтверждение повреждено или в случае отрицательного подтверждения, он повторно отправляет пакет. В противном случае состояние переходит к следующему.

Состояние-3 и состояние-4 такие же, как 1 и 2, но он отправляет пакет с порядковым номером «0».

FSM приемника:

Как это работает:

Состояние-1 (слева): если он получает поврежденный пакет, он отправляет отрицательное подтверждение для запроса на повторную отправку. В противном случае, если он получает неповрежденный пакет с порядковым номером «1», он отправляет положительное подтверждение. В противном случае, если он получает неповрежденный пакет с порядковым номером «0», он переходит в следующее состояние.

Состояние-2 (справа): если он получает поврежденный пакет, он отправляет отрицательное подтверждение для запроса на повторную отправку. В противном случае, если он получает неповрежденный пакет с порядковым номером «0», он отправляет положительное подтверждение. В противном случае, если он получает неповрежденный пакет с порядковым номером «1», он переходит в следующее состояние.

Минусы в RDT 2.1:

  • Нет управления дубликатами пакетов.
  • Не работает в канале с потерей пакетов.