Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация Вычислительных Систем / Computer System Organization - Part2-Computer Networks.doc
Скачиваний:
51
Добавлен:
01.05.2014
Размер:
3.45 Mб
Скачать

Механизм тайм-аута ожидания подтверждения

Когда протокол TCP передает сегмент с данными, он помещает его копию в очередь повторной передачи и запускает таймер. Когда приходит подтверждение (на данный сегмент) – сегмент стирается, а таймер выключается. Если таймер истек, а подтверждение не получено – сегмент передается повторно.

Выбор тайм-аута

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

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

  • При каждой передаче засекается время до прихода квитанции (время оборота).

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

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

  • При большом разбросе времени оборота в алгоритме выбора тайм-аута учитывается также и дисперсия этой величины.

Приостановка передачи

При полном заполнении входного буфера перегруженный узел-приемник указывает в своей квитанции нулевое окно. Даже после этого его партнер по соединению может направить на этот порт сообщение. Для этого оно должно сопровождаться пометкой «срочно» (в поле заголовка — «указатель срочности»). При поступлении такого срочного пакета порт обязан принятьего даже путем вытеснения из буфера уже находящихся там данных.

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

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

Протокол TCP описан в документе RFC 793.

Формат заголовка

Как показано на рисунке сегмент TCP состоит из заголовка и поля данных. Минимальная длина заголовка составляет 20 байт. Для определения назначения большинства полей предназначены специальные управляющие биты заголовка.

Формат и значения поля «управляющие биты» показаны в таблице.

  • URG — (Urgent) – сигнализация о срочных данных

  • ASK — (Acknowledgment) – указывает на то, что используется поле «подтверждения».

  • PSH — (Push) – включена функция проталкивания потока данных. Обычно используется для передачи последнего сегмента в потоке данных и этот сегмент будет без очереди доставлен к приложению-получателю.

  • RST — (Reset) – указывает на сброс и последующую перезагрузку данного соединения.

  • SYN — (Synchronization) – флаг синхронизации. Когда он установлен, поле «номер в последовательности» содержит начальный номер байта в последовательности.

  • FIN — (Final) – указывает на отсутствие данных для передачи.

Основные поля заголовка

    • «Номер в последовательности» (Sequence number) – номер первого байта в текущем сегменте.

    • «Номер подтверждения» (Acknowledgment number) – номер следующего байта, который ожидает приемник. Тем самым подтверждается получение байтов с номерами до {AN-1}.

    • «Смещение данных» (Data offset) – указывает количество 32-битных слов в заголовке TCP.

Номер

бита

1

2

3

4

5

6

Название

URG

ASK

PSH

RST

SYN

FIN

Назначение

Поле

«указатель срочности» задейство-вано

Поле «номер подтвер-ждения» задейст-вовано

Включена функция протал-кивания

Перезаг-рузка данного соедине-ния

Синхро-низация номеров в очереди

Данных для передачи нет

    • «Резерв» (Reserved) – заполнено нулями и предназначено для будущего расширения протокола.

    • «Окно» (Window) – объявляет размер W окна в байтах.

    • «Контрольная сумма» (Checksum) – сумма всех 16 битовых слов заголовка и поля данных.

    • «Опции» (Options) – имеет переменную длину и может отсутствовать. Его размер всегда кратен 8 байтам. Здесь могут, к примеру, указываться: максимальный размер сегмента, дополнительные услуги и т.д.

Процедура установления соединения

В связи с крайней ненадежностью нижележащих протокольных уровней TCP использует процедуру троекратного рукопожатия для установления соединения (см. рис.).

На рисунке ПВУ – это один из протоколов вышележащего уровня (HTTP, FTP и т.д.). Последовательность следующая:

  1. ПВУ А посылает в свой объект TCP примитив «Открыть», указав адрес и параметры.

  2. TCP А посылает TCP B сегмент SYN с номером, к примеру, 55 (флаг SYN=1, «номер в последовательности» = 55). Этот начальный номер будет затем использоваться в процедуре передачи данных. Начальный порядковый номер устанавливается с помощью специального генератора случайных чисел, который увеличивает свои значения каждые 4 мкс, работая по модулю 232. Это значит, что следующий раз такой номер встретится через 4,5 часа.

  1. TCP B подтверждает получение запроса на соединение посылкой пакета SYN-ACK (SYN=1, ACK-1) с собственным начальным номером (например, 202) и с установленным в поле подтверждения номером 56 (следующий ожидаемый на приеме номер).

  1. TCP A посылает сегмент ACK с номером 203 (номер следующего ожидаемого байта).

  2. TCP A уведомляет ПВУ А об открытии соединения.

  3. Получив ACK 203 TCP B уведомляет примитивом «успешное открытие» ПВУ В.

Процедура передачи данных

Рассмотрим простейший случай. Из А в В передается 30 байт, а из В в А посылается 100 байт. Соединение является дуплексным. Последовательность обмена следующая:

  1. ПВУ А выдает в TCP A примитив «Передать» и сообщение длиной 30 байт.

  2. TCP A помещает 30 байт в сегмент. В заголовке указывается порядковый номер первого байта в сегменте — 56.

  3. TCP B получает сегмент, передает его ПВУ В и посылает сегмент подтверждения (ACK 86). Последний полученный байт будет иметь номер 85 (55+50). Так как в ACK указывается номер следующего ожидаемого байта, то это будет 86.

  4. ПВУ В выдает TCP B примитив «Передать» и сообщение длиной 100 байт.

  5. TCP B отправляет сегмент с порядковым номером 203 (202+1) — номером первого байта в этом сегменте.

  6. TCP A передает сообщение ПВУ А и посылает подтверждение ACK (303), т.е. с указанием номера следующего ожидаемого байта.

Так как протокол дуплексный и подтверждения могут включаться в состав передаваемого сегмента, то этапы 9 и 11 могут быть объединены (посылкой сегмента данных с N=203, ACK=86).

Завершение соединения

На рисунке показаны этапы процедуры разъединения.

  • ПВУ А посылает TCP A примитив «Завершить».

  1. TCP A выдает пакет FIN (с порядковым номером 86, без данных).

  2. О закрытии сообщается ПВУ В (примитивом «Закрытие») и посылается ACK (87).

  3. ПРУ В посылает примитив «Завершить» и посылается FIN (303)

  4. О закрытии извещается ПВУ А и выдается подтверждение ACK 304/

  5. Об окончании процедуры извещается ПВУ В.

Особенности протокола TCP

  • С помощью флага URG могут передаваться срочные данные.

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

  • Управление потоком путем использования окна передачи W.