Сергеев Александр
Шрифт:
Кроме того, получателю может быть доставлена некая часть потока в виде полученных вне очереди дейтаграмм. Несмотря на это, получатель всегда посылает сигналы подтверждения приема только на самую большую и непрерывную часть потока, которая была корректно получена. В каждом подтверждении приема указывается порядковый номер, который соответствует положению самого старшего байта в непрерывной части доставленного потока. Таким образом, по мере передачи потока данных отправитель постоянно получает сигналы подтверждения, отражающие состояние принятого потока данных.
Принятую в протоколе TCP систему подтверждения приема называют накопительной, поскольку она отражает количество байтов потока данных, накопленных получателем. Следует отметить, что накопительная система подтверждения приема имеет как преимущества, так и недостатки. Одно из преимуществ заключается в том, что сигналы подтверждения приема легко генерируются и являются однозначными. Их просто невозможно истолковать неправильно. Еще одно преимущество заключается в том, что в случае утери сигналов подтверждения приема не требуется повторно передавать ни сами сигналы, ни соответствующие им сегменты данных. Недостатком накопительного метода является то, что отправитель не обладает сведениями о том, что передача данных завершилась успешно. Ему только известно, какая часть потока данных была успешно доставлена получателю.
Описанную технологию может иллюстрировать простой пример. Предположим, имеется окно, расположенное в потоке данных начиная с позиции 201 и включающее 3000 байтов. Предположим также, что отправитель передал все находящиеся в окне данные в виде трех сегментов. Что произойдет в том случае, когда первый сегмент в процессе передачи данных был утерян, а остальные успешно достигли места назначения? Во время получения сегментов, получатель будет отсылать сигналы подтверждения. В каждом из них будет указан порядковый номер байта (201), то есть номер следующего по порядку старшего байта, относящегося к непрерывному потоку данных, который ожидает получить принимающая сторона. При этом получатель лишен возможности сообщить отправителю, что большая часть данных, принадлежащих текущему окну, уже получена.
Как только истечет время ожидания сигнала подтверждения приема, отправитель попытается выйти из сложившейся ситуации, используя один из следующих двух методов. Он может передать либо один сегмент данных, либо все три. Очевидно, что последний метод весьма неэффективен. После того как первый сегмент данных будет успешно доставлен, в распоряжении получателя окажутся данные, образующие окно. Поэтому он подтвердит прием байта с порядковым номером 3001. Таким образом, если отправитель будет действовать согласно принятым стандартам и выполнит повторную передачу первого непринятого сегмента данных, то прежде чем предпринимать дальнейшие шаги, он должен дождаться подтверждения приема этого сегмента. При этом не ощущается преимущество, предоставляемое большим окном.
Метод обработки истекшего времени ожидания и выполнение повторной передачи данных являются основными технологиями протокола TCP. Как и в других надежных протоколах, в протоколе TCP предполагается, что получатель пришлет сигнал подтверждения приема, успешно получив байты из потока данных. Каждый раз при отправке сегмента в модуле протокола TCP устанавливается значение таймера ожидания, определяющего получение сигнала подтверждения приема данных. Если время ожидания истечет прежде, чем будет подтвержден прием отправленного сегмента, экземпляр протокола TCP полагает, что сегмент данных не достиг компьютера-получателя, либо соответствующие данные были искажены в процессе передачи. После этого передача сегмента производится повторно.
Протокол TCP изначально предназначался для применения в межсетевой среде. Пакет данных может передаваться по сетям, обладающими различными скоростными характеристиками, в связи с чем невозможно заранее предсказать, как быстро отправитель получит сигнал подтверждения приема. Ситуация усугубляется еще и тем, что задержка прохождения сигнала через маршрутизаторы зависит от величины трафика в конкретной сети. Поэтому суммарное время задержки на передачу сегмента и получение отправителем подтверждения его приема может колебаться в очень широких пределах.
В целях определения времени задержки сигнала в протоколе TCP используется адаптивный алгоритм повторной передачи. Принцип его работы заключается в том, что отслеживается производительность каждого сетевого соединения, а затем на основании полученных результатов выбирается подходящее время задержки. По мере изменения значения производительности соединения соответственно изменяется и величина задержки.
В процессе сбора данных, требуемых для работы адаптивного алгоритма, экземпляр протокола TCP фиксирует время отправки каждого сегмента, а также время получения сигналов подтверждения приема данных, находящихся в этих сегментах. Затем определяется разность этих значений, соответствующая времени доставки каждого пакета. Этот алгоритм также называется оценкой полного времени доставки пакета. После выполнения очередной оценки экземпляр протокола TCP пересчитывает среднее время доставки для данного соединения. При этом также оценивается средневзвешенная величина полного времени доставки пакетов (RTT, Round Trip Time).
В процессе отправки пакета экземпляр протокола TCP вычисляет величину задержки в виде функции от предполагаемой величины полного времени доставки.
Оценка полного времени доставки пакета не составляет особого труда. Для этого следует из значения времени получения сигнала подтверждения доставки сегмента вычесть значение времени отправки сегмента. В этом случае могут возникать определенные затруднения, поскольку в протоколе TCP используется накопительная система подтверждения приема сегментов данных. Ее суть заключается в том, что сигнал подтверждения приема отражает факт успешного получения данных, но не той дейтаграммы, в которой эти данные находятся.