Как скользящие оконные протоколы обрабатывают повторяющиеся пакеты, вызванные крайними задержками в сети?

Предположим, что есть сеть, которая иногда доставляет данные с экстремальными задержками. И есть протокол, который использует алгоритм «скользящего окна» для отслеживания подтверждения пакетов. И представьте себе такую ​​ситуацию:

  1. Передатчик отправляет пакет, а затем повторно передает его, потому что он не получил подтверждение.
  2. Некоторые из этих повторно переданных пакетов задерживаются.
  3. Затем он, наконец, получает подтверждение, и передача продолжается.
  4. Окно приемника, наконец, совершает полное круговое движение и находится в положении, когда чрезмерная повторная передача выполнялась в 1..
  5. Наконец, возвращаются некоторые из повторно переданных пакетов, отложенных в 2..
  6. Приемник ошибочно полагает, что они принадлежат к текущему окну «цикл» и обрабатывают их, пока это не должно быть сделано, потому что они дублируются.

Таким образом, по существу возникает вопрос: как обнаружить повторяющиеся пакеты из предыдущих циклов окна? Какие обычно используются методы борьбы с такими ситуациями?

1 голос | спросил Gill Bates 7 +03002017-10-07T17:29:48+03:00312017bEurope/MoscowSat, 07 Oct 2017 17:29:48 +0300 2017, 17:29:48

1 ответ


3

Я также считаю, что это феноменально маловероятно и не представляет никакой реальной проблемы в любой сети, о которой я знаю. Поэтому ответ на «общепринятые методы» против него заключается в том, что его нет.

Однако вы можете создать вредоносный маршрутизатор, который бы сделал это: захватить (в полете где-нибудь) несколько пакетов, дождаться, пока порядковые номера будут округлены, а затем воспроизвести их, и мы будем запускать эту ситуацию. Что произойдет, это будет зависеть от протоколов верхнего уровня, которые в реальной жизни должны были бы быть чем-то вроде scp или rsync (копировать большой файл) или какой-либо потоковой службы (cctv навсегда?). Что еще будет держать TCP открытым для 4GByte? (Таким образом, возможно, ответ таков: «ситуация обычно предотвращается, потому что поток никогда не обертывает свои порядковые номера, потому что он слишком короткий».

В отношении проблем протокола я отмечаю, что RFC 7323 «Расширения TCP для высокой производительности» охватывает эту точную проблему с помощью «PAWS» (защита от завернутых последовательностей). https://tools.ietf.org/html/rfc7323#section-5

Быстрый поиск показывает, что в хайку-о и ядре Linux есть упоминание об этом, но я не знаю, сколько реально реализовано.

С уважением,

Джонатан.

ответил jonathanjo 7 +03002017-10-07T20:35:19+03:00312017bEurope/MoscowSat, 07 Oct 2017 20:35:19 +0300 2017, 20:35:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132