Управление потоком данных с дублированным подтверждением

Иллюстрации

Показать все

Описан способ управления потоком некоего количества данных от передающего однорангового узла до принимающего однорангового узла предопределенного протокола связи. Технический результат заключается в улучшении возможностей оперирования повторной передачей сегментов в передающем одноранговом узле. Для этого упомянутый способ содержит этапы, на которых разделяют упомянутое количество данных на множество сегментов данных, при этом сегменты данных упорядочиваются в последовательность. Эти сегменты передаются принимающему одноранговому узлу в порядке упомянутой последовательности. Принимающий одноранговый узел подтверждает корректный прием сегмента данных и указывает последний корректно принятый сегмент данных последовательности, который был принят в правильном порядке последовательности. Передающий одноранговый узел устроен так, чтобы, если им принято пороговое количество дублированных подтверждений, он выполнял повторную передачу. Пороговое количество, которое инициирует повторную передачу, является адаптивным параметром, определенным, исходя из размера окна приема, причем упомянутый размер окна приема представляет собой количество сегментов данных, которые могут быть сохранены в буферном пространстве принимающего однорангового узла. 3 н. и 12 з.п. ф-лы, 7 ил.

Реферат

Область техники, к которой относится изобретение

Настоящее изобретение имеет отношение к способу управления потоком некоего количества данных от передающего однорангового узла до принимающего однорангового узла заданного протокола связи.

Описание предшествующего уровня техники

В области связи известны методики передачи данных, где некое количество данных, которое должно быть передано, разделяется на множество сегментов данных, при этом сегменты данных упорядочиваются в последовательность. Эти сегменты затем передаются в порядке упомянутой последовательности.

Эта процедура имеет место в так называемом передающем одноранговом узле связи, регламентируемой предопределенным протоколом связи, который содержит правила обработки таких сегментов данных. Принимающий объект, ассоциированный с упомянутым предопределенным протоколом, упоминается как принимающий одноранговый узел. Концепции протоколов, иерархий протоколов, многоуровневого представления и одноранговых узлов протоколов общеизвестны в данной области техники, см., например, "TCP/IP Illustrated Volume 1, The Protocols", написанную W. Richard Stevens, Addison Wesley 1994 [D1]. Общеизвестный Протокол Управления Передачей (TCP) из набора протоколов TCP/IP является примером такого протокола, в котором данные, которые должны быть переданы, компонуются в последовательность сегментов.

В типичном случае для того, чтобы быть переданными, отдельные сегменты будут помещены в блоки данных, имеющие структуру, определенную заданным протоколом. Эти блоки в контексте отличающихся протоколов могут называться по-разному, например пакеты, кадры, протокольные блоки данных, ячейки и т.д. В настоящем описании термин “блок данных” будет использован, в общем, чтобы охватить любые подобные описанные структуры данных. В настоящем подробном описании будут попеременно использоваться термины “сегмент” и “блок данных”.

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

Можно отметить, что в соответствии с многоуровневой концепцией OSI не имеет значения, как блоки данных, пересланные на нижерасположенный уровень, обрабатываются на нем и транспортируются на него. То есть заданный передающий одноранговый узел передает поток битов по нисходящей, а принимающий одноуровневый узел принимает поток битов, причем этот поток битов содержит определенные идентифицирующие элементы, такие как указатели границы кадра, с помощью которых принимающий одноранговый узел может идентифицировать отдельные блоки данных и отдельные сегменты.

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

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

Еще один такой механизм соответствует подсчету дублированных подтверждений. Дублированным подтверждением является подтверждение, которое указывает, что последний корректно принятый сегмент данных - это сегмент данных, который уже был подтвержден ранее. То есть многие протоколы, такие как, например, TCP, имеют механизм формирования подтверждений для принимающих одноранговых узлов, который функционирует для отсылки сообщения подтверждения для каждого корректно принятого сегмента последовательности, при этом подтверждение идентифицирует последний корректно принятый сегмент данных в порядке последовательности. Другими словами, если, например, сегменты данных с первого до четвертого приняты и подтверждены, а затем принимается пятый сегмент данных, принимающий одноранговый узел будет отсылать подтверждение для этого пятого сегмента. Если после этого седьмой и восьмой сегменты корректно приняты, то принимающий одноранговый узел будет вновь отсылать одно или два сообщения подтверждения, но эти сообщения подтверждения будут идентифицировать только пятый сегмент, потому что пятый был последним сегментом, который был корректно принят в порядке последовательности. То есть принимающий одноранговый узел ожидает шестой сегмент и даже если он корректно принимает сегменты, следующие за шестым сегментом, он будет продолжать подтверждать пятый сегмент. Следовательно, прием дублированных подтверждений передающим одноранговым узлом дает передающему одноранговому узлу указание, что блок данных был потерян.

Как следствие, в протоколах, которые используют описанный выше механизм подтверждения, в соответствии с которым сообщения подтверждения подтверждают только последний блок данных, который был корректно принят в порядке последовательности, даже если приняты блоки данных, которые находятся дальше в упомянутой последовательности, может быть реализован механизм повторной передачи, который выполняет повторную передачу, если предопределенное количество дублированных подтверждений принято передающим одноранговым узлом. В TCP соответствующий механизм известен как “быстрая повторная передача”, в котором повторная передача происходит после приема трех дублированных подтверждений. Подробное описание механизма быстрой повторной передачи в TCP может быть найдено, например, в вышеупомянутой книге [D1], глава 21.7.

Проблема, лежащая в основе настоящего изобретения

Для всех алгоритмов, подобных вышеописанным, которые предназначены для приема указания, что блок данных был потерян, характерна проблема, заключающаяся в том, что передающий одноранговый узел принимает только непрямое указание, что блок данных был потерян, а в действительности появление предопределенного инициирующего события (истечение лимита времени ожидания или предопределенное число дублированных подтверждений) не обязательно означает, что блок данных действительно был потерян. Эти инициирующие события также могут быть вызваны ложно, например, если блок данных задерживается в сети передачи, в то время как блоки данных, ассоциированные с сегментами, следующими далее в последовательности, доставляются упомянутой сетью. Такое явление еще упоминается как переупорядочивание.

Задача настоящего изобретения

Задачей настоящего является общее улучшение возможностей оперирования повторной передачей сегментов в передающем одноранговом узле.

Сущность изобретения

Эта задача настоящего изобретения решается посредством способа управления потоком последовательности сегментов данных от передающего однорангового узла до принимающего однорангового узла, содержащего этапы, на которых передают сегменты данных от передающего однорангового узла до принимающего однорангового узла в порядке последовательности; принимают сообщения подтверждения от принимающего однорангового узла, при этом сообщение подтверждения указывает корректный прием сегмента данных в правильном порядке последовательности; принимают дублированное сообщение подтверждения от принимающего однорангового узла в передающем одноранговом узле, если сегмент данных был принят, но не в правильном порядке последовательности, причем упомянутое дублированное сообщение подтверждения принимается ассоциированным с последним корректно принятым пакетом в порядке последовательности сегментов данных; принимают решение, что сегмент данных, который был передан, но не подтвержден, был потерян, если количество дублированных сообщений подтверждения, принятых передающим одноранговым узлом, достигает порогового показателя дублированного подтверждения, определенного, исходя из размера окна приема, причем размер окна приема соответствует количеству сегментов данных, которые могут быть сохранены в буферном пространстве принимающего однорангового узла; и повторно передают сегмент данных, определенный как потерянный.

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

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

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

Кроме того, пороговый показатель дублированного подтверждения может быть определен, исходя из разности между размером используемого окна и размером неподтвержденных данных.

В соответствии с еще одним вариантом осуществления настоящего изобретения пороговый показатель дублированного подтверждения определяется в момент времени, предшествующий приему первого дублированного сообщения, как большее значение из значения 1 и значения, полученного с помощью вычисления

(размер окна приема - (k × размер неподтвержденных данных)),

где k - варьируемый параметр. Преимущественно k = 2.

Кроме того, пороговый показатель дублированного подтверждения может быть определен как

размер окна приема - (2 × размер неподтвержденных данных) + N,

где N представляет собой параметр настройки, удовлетворяющий условию

(2 × размер неподтвержденных данных) - размер окна приема + 1<N<3.

В соответствии с еще одним вариантом осуществления настоящего изобретения пороговый показатель дублированного подтверждения обновляется при определении изменения размера окна приема.

В качестве альтернативы, пороговый показатель дублированного подтверждения может быть обновлен, по меньшей мере, каждый первый раз, когда принимается дублированное сообщение подтверждения для одного из сегментов данных. В этом случае параметру N настройки может быть присвоено значение 5, что предпочтительно.

В качестве еще одной альтернативы, пороговый показатель дублированного подтверждения обновляется каждый раз, когда принято сообщение подтверждения.

В соответствии с еще одним вариантом осуществления настоящего изобретения сегмент данных, определенный как потерянный, повторно передается, если передающий одноранговый узел блокирован от передачи не переданного ранее сегмента данных.

В этом варианте осуществления настоящего изобретения передающий одноранговый узел считается блокированным, если выполняется одно из следующих условий: количество не переданных ранее сегментов данных превышает размер окна приема; количество не переданных ранее сегментов данных превышает размер окна передачи; приложение, представляющее собой источник сегментов данных, не подает сегменты данных для передачи.

Компьютерная программа может быть приспособлена для выполнения, по меньшей мере, одной из вышеупомянутых операций при ее исполнении на компьютере.

Машиночитаемое устройство памяти может хранить такую компьютерную программу.

Кроме того, задача настоящего изобретения решается посредством устройства связи, управляющего потоком последовательности сегментов данных от передающего однорангового узла до принимающего однорангового узла и содержащего средство для передачи сегментов данных от передающего однорангового узла до принимающего однорангового узла в порядке последовательности, средство для приема сообщений подтверждения от принимающего однорангового узла, при этом сообщение подтверждения указывает корректный прием сегмента данных в правильном порядке последовательности, средство для приема дублированного сообщения подтверждения от принимающего однорангового узла в передающем одноранговом узле, если сегмент данных был принят, но не в правильном порядке последовательности, причем дублированное сообщение подтверждения принимается ассоциированным с последним корректно принятым пакетом в порядке последовательности сегментов данных, средство для принятия решения, что сегмент данных, который был передан, но не подтвержден, был потерян, если количество дублированных сообщений подтверждения достигает порогового показателя дублированного подтверждения, определенного, исходя из размера окна приема, причем размер окна приема соответствует количеству сегментов данных, которые могут быть сохранены в буферном пространстве принимающего однорангового узла; и средство для повторной передачи сегмента данных, определенного как потерянный.

Перечень фигур чертежей

Фиг.1 - иллюстрация операций способа управления потоком последовательности в соответствии с вариантом осуществления настоящего изобретения.

Фиг.2 - иллюстрация операций для определения порогового показателя дублированного подтверждения в соответствии с вариантом осуществления настоящего изобретения.

Фиг.3 - иллюстрация операций для управления потоком сегментов данных от передающего однорангового узла до принимающего однорангового узла в соответствии с еще одним вариантом осуществления настоящего изобретения, конкретно отображающая последовательность операций для повторной передачи неподтвержденного сегмента данных.

Фиг.4 - иллюстрация действий для обновления порогового показателя дублированного подтверждения в соответствии с вариантом осуществления настоящего изобретения.

Фиг.5 - иллюстрация действий для обновления порогового показателя дублированного подтверждения в соответствии с вариантом осуществления настоящего изобретения.

Фиг.6 - иллюстрация устройства связи для управления потоком сегментов данных, причем данное устройство связи, по меньшей мере, выступает в роли передающего однорангового узла.

Фиг.7 - подробная иллюстрация, показывающая поток сегментов данных и сообщений подтверждения между передающим одноранговым узлом и принимающим одноранговым узлом для того, чтобы иллюстрировать определение порогового показателя дублированного подтверждения.

Описание предпочтительных вариантов осуществления

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

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

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

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

Фиг.1 иллюстрирует операции для управления потоком сегментов данных между передающим одноранговым узлом и принимающим одноранговым узлом (не показан) в соответствии с вариантом осуществления настоящего изобретения.

В первой операции 101 передающий одноранговый узел считается осуществляющим обычную процедуру передачи сегментов данных на принимающий одноранговый узел в некоторой заданной последовательности. Например, сегменты данных последовательно нумеруются, как 01, 02, 03, 04, 05, 06, …, и планируются для передачи передающим одноранговым узлом в порядке последовательной нумерации. Последовательная нумерация может быть соответствующим образом поставлена в соответствие выходным сегментам данных источника данных, как, например, известно в данной области техники. Понятно, что сегменты данных могут переносить любые типы данных полезной нагрузки, то есть данных, относящихся к любому типу приложения или формата, такие как голосовые данные, данные обмена между вычислительными устройствами во время сеанса связи, видеоданные, аудиоданные и им подобные.

Принимающий одноранговый узел (не показан на Фиг.1) принимает сегменты данных и подтверждает прием сегментов данных посредством сообщения подтверждения, возвращаемого одноранговому узлу передачи. Эти сообщения подтверждения от принимающего однорангового узла принимаются передающим одноранговым узлом в операции 102. Если операция прошла нормально и сегменты данных, переданные в последовательности, принимаются в такой же последовательности принимающим одноранговым узлом, каждый пакет данных подтверждается посредством сообщения подтверждения и передающий одноранговый узел знает, что сегменты данных приняты в правильном порядке последовательности. Сегменты данных, которые были переданы от передающего однорангового узла и правильно подтверждены, могут быть сброшены, например, удалены из буфера передачи передающего однорангового узла, так как повторная передача переданных сегментов данных не потребуется.

Обычно, каждый корректно принятый сегмент данных, то есть без ошибок и порядке последовательности, инициирует сообщение подтверждения в принимающем одноранговом узле, которое возвращается передающему одноранговому узлу. Если после корректно принятого сегмента данных принимается сегмент данных, который не находится в порядке последовательности, то есть произошла задержка или ошибка в передаче сегмента данных, то сообщение подтверждения для последнего корректно принятого сегмента данных повторяется, и это повторяемое сообщение подтверждения называется дублированным сообщением подтверждением.

В вышеупомянутом примере, если по той или иной причине сегмент данных не принят в правильном порядке передаваемой последовательности, например, если сегмент 05 данных принят после сегментов 01, 02, 03, но перед сегментом 04 данных, соответственно, принимающий одноранговый узел не возвращает сообщение подтверждения одноранговому узлу передачи. Вместо этого, принимающий одноранговый узел передает передающему одноранговому узлу дублированное сообщение подтверждения, указывающее, что сегмент данных был принят, но не в порядке последовательности. Это дублированное сообщение подтверждения ассоциировано с последним корректно принятым пакетом в порядке последовательности сегментов данных. В вышеупомянутом примере приема сегмента 05 данных перед сегментом 04 данных дублированное сообщение подтверждения будет указывать, что последним сегментом данных, который был корректно принят в порядке последовательности, был сегмент 03 данных.

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

Однако передающий одноранговый узел продолжает передавать принимающему одноранговому узлу сегменты данных, и, тем самым предполагая, что в вышеупомянутом примере сегмент 04 данных еще не принят принимающим одноранговым узлом в течение длительного периода времени, принимающий одноранговый узел продолжает передавать дублированные сообщения подтверждения для каждого принятого сегмента данных. Таким образом, передающий одноранговый узел принимает увеличивающееся количество дублированных сообщений подтверждения, и с каждым дублированным сообщением подтверждения вероятность того, что неподтвержденный сегмент данных действительно был потерян, увеличивается.

Теперь в операции 104 передающий одноранговый узел принимает решение в отношении того, достигло ли или превысило ли количество дублированных сообщений подтверждения надлежащим образом установленный (как будет описано позже) пороговый показатель дублированного подтверждения, установленный в передающем одноранговом узле. Если в операции 104 решение - “НЕТ”, что указывает, что еще не достигнут пороговый показатель дублированного подтверждения, последовательность операций возвращается к операции 101, то есть передающий одноранговый узел продолжает передавать сегменты данных в порядке последовательности.

Однако если в операции 104 решение - “ДА”, что указывает, что достигнут или превышен пороговый показатель дублированного подтверждения, в операции 105 передающий одноранговый узел принимает решение, что сегмент данных, который был передан, но не подтвержден, был потерян. Продолжая вышеупомянутый пример, посредством дублированных сообщений подтверждения, указывающих, что последним корректно принятым сегментом данных в порядке последовательности был сегмент 03 данных, передающий одноранговый узел примет решение, что сегмент 04 данных действительно был потерян.

В операции 106 сегмент данных, определенный как потерянный, то есть в упомянутом примере сегмент 04 данных, повторно передается. Повторная передача может быть осуществлена, например, посредством быстрой повторной передачи в соответствии с протоколом TCP.

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

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

Точнее, этот пороговый показатель должен быть установлен так, чтобы передача сегментов данных не прекращалась в какой-то момент времени из-за достижения в передающем одноранговом узле максимально допустимого количества переданных, но не подтвержденных сегментов данных, причем это максимальное количество равно размеру окна приема. Отметим, что в соответствии с протоколом скользящего окна, сегмент данных от передающего однорангового узла, в соответствии с протоколом связи, может быть запланирован для передачи, только если разность порядковых номеров наиболее давно подтвержденного сегмента данных и очередного сегмента данных для передачи не превышает размера окна приема.

Выше проиллюстрирован вариант осуществления настоящего изобретения, в котором при вычислении порогового показателя дублированного подтверждения используется размер окна приема. Отметим, что хотя далее здесь не описано, пороговый показатель дублированного подтверждения может вдобавок ко всему быть дополнительно адаптирован, исходя из ситуации в передающем одноранговом узле, например, размера окна в передающем одноранговом узле, для того, чтобы дополнительно усовершенствовать установку порогового показателя дублированного подтверждения.

Ниже, со ссылкой на Фиг.2, будет описан дальнейший вариант осуществления настоящего изобретения. Фиг.2 иллюстрирует операции для установки порогового показателя дублированного подтверждения соответствующим образом.

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

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

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

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

Со ссылкой на Фиг.2, в операции 201 принимается решение, должен ли быть обновлен пороговый показатель дублированного подтверждения, в соответствии с условиями, которые будут описаны позже. Если решение - “ДА”, в операции 202, в соответствии с вышеупомянутым, пороговый показатель дублированного подтверждения устанавливается в соответствии с размером окна приема так, чтобы сегмент данных, определенный как потерянный, повторно передавался в или до момента времени в последовательности сегментов данных, выбранного так, чтобы сообщение подтверждения, указывающее правильный прием сегмента данных, определенного как потерянный, предположительно было принято принимающим одноранговым узлом до того, как сегмент данных с порядковым номером, превышающим порядковый номер сегмента данных, определенного как потерянный, будет запланирован для передачи. Следовательно, можно избежать того, что передающий одноранговый узел будет ограничен от дальнейшей передачи сегментов данных.

В этом случае можно избежать обусловленной окном остановки в передаче данных и, кроме того, можно избежать переполнения буфера приема.

На Фиг.3 показана блок-схема последовательности операций, которая описывает вариант осуществления настоящего изобретения. Левая сторона блок-схемы относится к обычному управлению потоком, а из-за того обстоятельства, что настоящее изобретение не связано с обычным типом управления потоком, например, который предоставлен TCP или любым другим протоколом управления потоком, эта часть показана лишь схематически, в виде пунктирной линии. Правая сторона Фиг.3 раскрывает процедуру обработки дублированных подтверждений. А именно, если в ходе обычного управления потоком принимаются подтверждения (АСК), смотри операцию 301, то инициируется процедура обработки дублированных подтверждений.

В операции 302 определяется, является ли подтверждение дублированным подтверждением. А именно определяется количество раз N, которое было принято конкретное подтверждение, идентифицирующее последний корректно принятый сегмент данных последовательности, который был принят в правильном порядке последовательности, и оценивается, является ли это количество больше чем 1. Если нет, то это АСК не является дублированным АСК, и процедура возвращается к обычному управлению потоком.

Если результат операции 302 указывает, что данное подтверждение является дублированным подтверждением, процедура переходит к операции 303, в которой определяется, достигло ли N(АСК) порогового показателя Th дублированного подтверждения. В зависимости от реализации, пороговый показатель дублированного подтверждения можно считать достигнутым, если N(АСК) равно пороговому показателю дублированного подтверждения. В качестве альтернативы, пороговый показатель дублированного подтверждения можно считать достигнутым, если N(АСК) больше, чем пороговый показатель дублированного подтверждения.

Эта операция может быть осуществлена любым подходящим методом, например, посредством простого сохранения записи последнего подтвержденного сегмента и установления ассоциированного счетчика так, чтобы если вновь принятое подтверждение идентично предыдущему подтверждению (то есть дублированное подтверждение), счетчик увеличивался на единицу, а если новое подтверждение идентифицирует сегмент, который является следующим за сегментом, идентифицированным в последнем принятом подтверждении, то счетчик сбрасывается на 1.

В примере на Фиг.3 N(АСК) указывает количество раз, которое передающий одноранговый узел принял данное подтверждение АСК. Другими словами, N = 1 означает, что подтверждение для данного сегмента принято первый раз, а количество N > 1 указывает, что это дублированное подтверждение.

Если операция 303 определяет, что количество подтверждений достигло порогового показателя, то самый давний неподтвержденный сегмент повторно передается в операции 305. Самый давний неподтвержденный сегмент, в таком случае, сразу следует за сегментом, идентифицированным в дублированном подтверждении. С другой стороны, если результат операции 303 отрицателен, последовательность операций возвращается к операции 304 для того, чтобы также рассмотреть ситуацию в передающем одноранговом узле.

В операции 304 определяется, блокирован ли передающий одноранговый узел от передачи сегментов данных из-за условия, возникающего в передающем одноранговом узле. “Блокирован” в этом контексте означает, что передающему одноранговому узлу запрещается или же он неспособен передавать сегменты данных принимающему одноранговому узлу.

В соответствии с примером, передающий одноранговый узел считается блокированным, если количество не переданных ранее сегментов данных превышает размер окна приема. Например, вследствие ошибки или непредвиденной ситуации пороговый показатель дублированного подтверждения может быть выбран слишком большим и может быть достигнут размер окна приема. Эта ситуация может быть названа как “ограничение по приемной стороне”.

В соответствии с еще одним примером, передающий одноранговый узел считается блокированным, если количество не переданных ранее сегментов данных превышает размер окна передачи. Например, буфер передачи передающего однорангового узла может быть совместно используемой областью памяти с пространством, предоставленным для хранения сегментов данных сокращенного размера, например, меньше размера окна приема. Эта ситуация может быть названа как “ограничение по передающей стороне”.

В соответствии с еще одним примером, передающий одноранговый узел считается блокированным, если приложение, представляющее собой источник сегментов данных, не подает сегменты данных для передачи. Например, сегменты данных могут формироваться динамически, например для web-страницы, и приложение может временно приостанавливать формирование новых сегментов данных. Кроме того, приложение может просто не иметь сейчас дальнейших сегментов данных для передачи. Эта ситуация может быть названа как “ограничение по приложению”.

Если в операции 304 определяется, что передающий одноранговый узел блокирован от передачи сегментов данных, то самый давний неподтвержденный сегмент повторно передается в операции 305.

Если в операции 304 определяется, что передающий одноранговый узел не блокирован от передачи сегментов данных, то очередной сегмент в последовательности, следующий за сегментом, который следует сразу за сегментом, идентифицированным в дублированном подтверждении, передается в операции 306.

После операции 305 или 306 процедура возвращается к обычному управлению потоком.

О