Передача данных по протоколу TCP. Механизм скользящего окна.

6 июля, 2011

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

______________________________________

Реализация надёжной доставки сообщений транспортного протокола TCP на основе не надёжного сетевого протокола IP в любом случае основана на подтверждении доставки отправленных сообщений. В самом простом случае процесс выглядит так:
1. Отправитель отсылает сообщение получателю.
2. Отправитель устанавливает таймер, который фиксирует максимальный промежуток времени, в течение которого отправитель должен получить подтверждение от получателя об успешной доставке.
3. Если подтверждение за отведенный промежуток времени получено не было, выполняется повторная передача, иначе передаётся следующее сообщение.
Такая организация приводит к низкой пропускной способности, поскольку имеют место временные задержки, связанные с ожиданием подтверждения каждого переданного сообщения. Для решения этой проблемы ввели понятие «окна передачи», а механизм назвали механизмом «скользящего окна» .
Окно определяет какое количество информации м.б. передано отправителем без ожидания подтверждения. При этом передаваемая информация представляется в виде потока сообщений, для которого транспортная служба гарантирует сохранение на стороне получателя порядка следования сообщений.

image

На стороне отправителя поддерживаются системные указатели: a, b, c. Указатель b перемещается в пределах окна очень быстро. Сдвиг окна вправо происходит при получении подтверждения. При этом необходимо чтобы при получении очередного подтверждения в потоке подтверждённых данных не происходило разрыва. Такие подтверждения не учитываются.
В простейшем случае размер окна м.б. неизменным, но на практике используются только окна переменной длины. Новый размер окна передаётся получателем отправителю при отправке подтверждения (в поле Window). Это так называемое анонсированное окно. Оно характеризует состояние буфера приёма на стороне получателя. Отправитель вычисляет доступную часть окна, уменьшая анонсированное окно на количество переданных, но на подтверждённых данных.
Если анонсированное окно меньше предыдущего, то правая граница окна не сдвигается левая вправо по мере поступления подтверждений, уменьшая размер окна до нужного.
В протоколе TCP принято нумеровать не сегменты, а октеты данных. С каждым отправляемым сегментом в его заголовке передаётся тот номер в потоке передаваемой информации, который соответствует первому октету блока данных данного сегмента (этот номер указывается в поле Sequence number).
Сегмент, служащий сигналом подтверждения принятых данных имеет в заголовке установленный флаг ASK и в поле Acknowledgement number содержит номер первого неподтверждённого октета в потоке данных отправителя.
Протокол TCP является дуплексным, т.е. оба участника соединения м. передавать и получать данные. При этом имеют место 2 потока данных, текущих в противоположных направлениях. Установка на-чальных значений порядковых номеров в октетах этих потоков происходит на этапе установки соединения в ходе так называемой процедуры «тройного рукопожатия».