Реализация метода скользящего окна в протоколе TCP

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

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

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

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

1) Отделяет сегменты, которые уже были отправлены и на которые уже пришли квитанции.

2) Располагается вслед за 1-ой границей и определяется размером окна, т.е. количеством байт, составляющих сегменты, которые отправлены, но квитанции на которые ещё не получены

3) Это сегменты, которые не отправлены, но могут быть отправлены, т.к. входят в пределы окна

4) Указывает на начало последовательности сегментов, ни один из которых не может быть отправлен до тех пор, пока не придёт очередная квитанция и окно не будет сдвинуто.








Дата добавления: 2015-11-28; просмотров: 1535;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.