Реализация скользящего окна в протоколе tcp
В рамках установленного соединения правильность передачи каждого сегмента должна подтверждаться квитанцией получателя. Квитирование - это один из традиционных методов обеспечения надежной связи. В протоколе TCP используется частный случай квитирования - алгоритм скользящего окна.
Особенность использования алгоритма скользящего окна в протоколе TCP состоит в том, что, хотя единицей передаваемых данных является сегмент, окно определено на множестве нумерованных байтов неструктурированного потока данных, поступающих с верхнего уровня и буферизуемых протоколом TCP. Получающий модуль TCP отправляет "окно" посылающему модулю TCP. Данное окно задает количество байтов (начиная с номера байта, о котором уже была выслана квитанция), которое принимающий модуль TCP готов в настоящий момент принять.
Квитанция (подтверждение) посылается только в случае правильного приема данных, отрицательные квитанции не посылаются. Таким образом, отсутствие квитанции означает либо прием искаженного сегмента, либо потерю сегмента, либо потерю квитанции. В качестве квитанции получатель сегмента отсылает ответное сообщение (сегмент), в которое помещает число, на единицу превышающее максимальный номер байта в полученном сегменте. Это число часто называют номером очереди.
На рис. 14.13 показан поток байтов, поступающий на вход протокола TCP. Из потока байтов модуль TCP нарезает последовательность сегментов. Для определенности на рисунке принято направление перемещения данных справа налево. В этом потоке можно указать несколько логических границ. Первая граница отделяет сегменты, которые уже были отправлены и на которые уже пришли квитанции. Следующую часть потока составляют сегменты, которые также уже отправлены, так как входят в границы, определенные окном, но квитанции на них пока не получены. Третья часть потока - это сегменты, которые пока не отправлены, но могут быть отправлены, так как входят в пределы окна. И наконец, последняя граница указывает на начало последовательности сегментов, ни один из которых не может быть отправлен до тех пор, пока не придет очередная квитанция и окно не будет сдвинуто вправо.
Рис. 14.13. Особенности реализации алгоритма скользящего окна в протоколе TCP
Если размер окна равен W, а последняя по времени квитанция содержала значение N, то отправитель может посылать новые сегменты до тех пор, пока в очередной сегмент не попадет байт с номером N+W. Этот сегмент выходит за рамки окна, и передачу в таком случае необходимо приостановить до прихода следующей квитанции.
Надежность передачи достигается благодаря подтверждениям и номерам очереди. Концептуально каждому байту данных присваивается номер очереди. Номер очереди для первого байта данных в сегменте передается вместе с этим сегментом и называется номером очереди для сегмента. Сегменты также несут номер подтверждения, который является номером для следующего ожидаемого байта данных, передаваемого в обратном направлении. Когда протокол TCP передает сегмент с данными, он помещает его копию в очередь повторной передачи и запускает таймер. Когда приходит подтверждение для этих данных, соответствующий сегмент удаляется из очереди. Если подтверждение не приходит до истечения срока, то сегмент посылается повторно.
Выбор времени ожидания (тайм-аута) очередной квитанции является важной задачей, результат решения которой влияет на производительность протокола TCP. Тайм-аут не должен быть слишком коротким, чтобы по возможности исключить избыточные повторные передачи, которые снижают полезную пропускную способность системы. Но он не должен быть и слишком большим, чтобы избежать длительных простоев, связанных с ожиданием несуществующей или "заблудившейся" квитанции.
При выборе величины тайм-аута должны учитываться скорость и надежность физических линий связи, их протяженность и многие другие подобные факторы. В протоколе TCP тайм-аут определяется с помощью достаточно сложного адаптивного алгоритма, идея которого состоит в следующем. При каждой передаче засекается время от момента отправки сегмента до прихода квитанции о его приеме (время оборота). Получаемые значения времени оборота усредняются с весовыми коэффициентами, возрастающими от предыдущего замера к последующему. Это делается с тем, чтобы усилить влияние последних замеров. В качестве тайм-аута выбирается среднее время оборота, умноженное на некоторый коэффициент. Практика показывает, что значение этого коэффициента должно превышать 2. В сетях с большим разбросом времени оборота при выборе тайм-аута учитывается и дисперсия этой величины.
Поскольку каждый байт пронумерован, то каждый из них может быть опознан. Приемлемый механизм опознавания является накопительным, поэтому опознавание номера Х означает, что все байты с предыдущими номерами уже получены. Этот механизм позволяет регистрировать появление дубликатов в условиях повторной передачи. Нумерация байтов в пределах сегмента осуществляется так, чтобы первый байт данных сразу вслед за заголовком имел наименьший номер, а следующие за ним байты имели номера по возрастающей.
Окно, посылаемое с каждым сегментом, определяет диапазон номеров очереди, которые отправитель окна (он же получатель данных) готов принять в настоящее время. Предполагается, что такой механизм связан с наличием в данный момент места в буфере данных.
Варьируя величину окна, можно влиять на загрузку сети. Чем больше окно, тем большую порцию неподтвержденных данных можно послать в сеть. Но если пришло большее количество данных, чем может быть принято программой TCP, данные будут отброшены. Это приведет к излишним пересылкам информации и ненужному увеличению нагрузки на сеть и программу TCP.
С другой стороны, указание окна малого размера может ограничить передачу данных скоростью, которая определяется временем путешествия по сети каждого посылаемого сегмента. Чтобы избежать применения малых окон, получателю данных предлагается откладывать изменение окна до тех пор, пока свободное место не составит 20-40 % от максимально возможного объема памяти для этого соединения. Но и отправителю не стоит спешить с посылкой данных, пока окно не станет достаточно большим. Учитывая эти соображения, разработчики протокола TCP предложили схему, согласно которой при установлении соединения заявляется большое окно, но впоследствии его размер существенно уменьшается.
Если сеть не справляется с нагрузкой, то возникают очереди в промежуточных узлах-маршрутизаторах и в конечных узлах-компьютерах.
При переполнении приемного буфера конечного узла "перегруженный" протокол TCP, отправляя квитанцию, помещает в нее новый, уменьшенный размер окна. Если он совсем отказывается от приема, то в квитанции указывается окно нулевого размера. Однако даже после этого приложение может послать сообщение на отказавшийся от приема порт. Для этого сообщение должно сопровождаться пометкой "срочно". В такой ситуации порт обязан принять сегмент, даже если для этого придется вытеснить из буфера уже находящиеся там данные. После приема квитанции с нулевым значением окна протокол-отправитель время от времени делает контрольные попытки продолжить обмен данными. Если протокол-приемник уже готов принимать информацию, то в ответ на контрольный запрос он посылает квитанцию с указанием ненулевого размера окна.
Другим проявлением перегрузки сети является переполнение буферов в маршрутизаторах. В таких случаях они могут централизованно изменить размер окна, посылая управляющие сообщения некоторым конечным узлам, что позволяет им дифференцированно управлять интенсивностью потока данных в разных частях сети.
- Раздел I. Общие принципы построения вычислительных сетей 3
- Многотерминальные системы – прообраз сети
- Появление глобальных сетей
- Первые локальные сети
- Создание стандартных технологий локальных сетей
- Современные тенденции
- 1.2. Вычислительные сети - частный случай распределенных систем
- Мультипроцессорные компьютеры
- Многомашинные системы
- Вычислительные сети
- Распределенные программы
- 1.3. Что дает предприятию использование сетей
- 2. Основные проблемы построения сетей
- 2.1. Проблемы физической передачи данных по линиям связи
- 2.2. Проблемы объединения нескольких компьютеров
- Топология физических связей
- Организация совместного использования линий связи
- Адресация компьютеров
- 2.3. Ethernet - пример стандартного решения сетевых проблем
- 2.4. Структуризация как средство построения больших сетей
- Физическая структуризация сети
- Логическая структуризация сети
- 2.5. Сетевые службы
- 3. Модель взаимодействия открытых систем и проблемы стандартизации
- 3.1. Многоуровневый подход. Протокол. Интерфейс. Стек протоколов
- 3.2. Модель osi
- 3.3. Уровни модели osi Физический уровень
- Канальный уровень
- Сетевой уровень
- Транспортный уровень
- Сеансовый уровень
- Представительный уровень
- Прикладной уровень
- Сетезависимые и сетенезависимые уровни
- 3.4. Стандартные стеки коммуникационных протоколов
- Стек tcp/ip
- Стек ipx/spx
- Стек NetBios/smb
- 4. Локальные и глобальные сети. Требования, предъявляемые к современным вычислительным сетям
- 4.1. Локальные и глобальные сети
- 4.2 Требования, предъявляемые к современным вычислительным сетям
- Производительность
- Надежность и безопасность
- Расширяемость и масштабируемость
- Прозрачность
- Поддержка разных видов трафика
- Управляемость
- Совместимость
- Раздел II. Основы передачи дискретных данных
- 5. Линии связи
- 5.1. Типы линий связи
- 5.2. Аппаратура линий связи
- 5.3. Характеристики линий связи
- Амплитудно-частотная характеристика, полоса пропускания и затухание
- Пропускная способность линии
- Связь между пропускной способностью линии и ее полосой пропускания
- Помехоустойчивость и достоверность
- 10 Log Рвых/Рнав ,
- 5.4. Стандарты кабелей
- Кабели на основе неэкранированной витой пары
- Кабели на основе экранированной витой пары
- Коаксиальные кабели
- Волоконно-оптические кабели
- 6. Методы передачи дискретных данных на физическом уровне
- 6.1. Аналоговая модуляция
- Методы аналоговой модуляции
- Спектр модулированного сигнала
- 6.2. Цифровое кодирование
- Требования к методам цифрового кодирования
- Потенциальный код без возвращения к нулю
- Метод биполярного кодирования с альтернативной инверсией
- Потенциальный код с инверсией при единице
- Биполярный импульсный код
- Манчестерский код
- Потенциальный код 2b1q
- 6.3. Логическое кодирование
- Избыточные коды
- Скрэмблирование
- 6.4. Дискретная модуляция аналоговых сигналов
- 6.5. Асинхронная и синхронная передачи
- 7. Методы передачи данных канального уровня. Методы коммутации
- 7.1. Методы передачи данных канального уровня
- Асинхронные протоколы
- Синхронные символьно-ориентированные и бит-ориентированные протоколы
- Символьно-ориентированные протоколы
- Бит-ориентированные протоколы
- Протоколы с гибким форматом кадра
- Передача с установлением соединения и без установления соединения
- Обнаружение и коррекция ошибок
- Методы обнаружения ошибок
- Методы восстановления искаженных и потерянных кадров
- Компрессия данных
- 7.2. Методы коммутации
- Коммутация каналов
- Коммутация каналов на основе частотного мультиплексирования
- Коммутация каналов на основе разделения времени
- Общие свойства сетей с коммутацией каналов
- Обеспечение дуплексного режима работы на основе технологий fdm, tdm и wdm
- Коммутация пакетов. Принципы коммутации пакетов
- Виртуальные каналы в сетях с коммутацией пакетов
- Пропускная способность сетей с коммутацией пакетов
- Коммутация сообщений
- Раздел III. Базовые технологии локальных сетей
- 10. Технологии Token Ring, fddi, Fast Ethernet
- 10.1. Технология Token Ring (802.5) Основные характеристики технологии
- Маркерный метод доступа к разделяемой среде
- Форматы кадров Token Ring
- Кадр данных и прерывающая последовательность
- Приоритетный доступ к кольцу
- Физический уровень технологии Token Ring
- Раздел IV. Построение локальных сетей по стандартам физического и канального уровней
- 11. Кабельная система. Концентраторы и сетевые адаптеры
- 11.1. Структурированная кабельная система
- Иерархия в кабельной системе
- Выбор типа кабеля для горизонтальных подсистем
- Выбор типа кабеля для вертикальных подсистем
- Выбор типа кабеля для подсистемы кампуса
- 11.2. Концентраторы и сетевые адаптеры
- Сетевые адаптеры
- Классификация сетевых адаптеров
- Концентраторы
- Поддержка резервных связей
- Защита от несанкционированного доступа
- Многосегментные концентраторы
- Управление концентратором по протоколу snmp
- Конструктивное исполнение концентраторов
- Раздел V. Сетевой уровень как средство построения больших сетей
- 13.Ip-сети. Адресация в ip-сетях
- 13.1. Принципы объединения сетей на основе протоколов сетевого уровня
- Ограничения мостов и коммутаторов
- Понятие internetworking
- Функции маршрутизатора
- Реализация межсетевого взаимодействия средствами tcp/ip
- Многоуровневая структура стека tcp/ip
- Уровень межсетевого взаимодействия
- Основной уровень
- Прикладной уровень
- Уровень сетевых интерфейсов
- Соответствие уровней стека tcp/ip семиуровневой модели iso/osi
- 13.2. Адресация в ip-сетях Типы адресов стека tcp/ip
- Классы ip-адресов
- Особые ip-адреса
- Использование масок в ip-адресации
- Порядок распределения ip-адресов
- Автоматизация процесса назначения ip-адресов
- Отображение ip-адресов на локальные адреса
- Отображение доменных имен на ip-адреса
- Система доменных имен dns
- 14. Протокол ip
- 14.1. Основные функции протокола ip
- 14.2. Структура ip-пакета
- 14.3. Таблицы маршрутизации в ip-сетях
- Примеры таблиц различных типов маршрутизаторов
- Назначение полей таблицы маршрутизации
- Источники и типы записей в таблице маршрутизации
- 14.4. Маршрутизация без использования масок
- 14.5. Маршрутизация с использованием масок Использование масок для структуризации сети
- Использование масок переменной длины
- Технология бесклассовой междоменной маршрутизации cidr
- 14.6. Фрагментация ip-пакетов
- 14.7. Протокол надежной доставки tcp-сообщений
- Сегменты и потоки
- Соединения
- Реализация скользящего окна в протоколе tcp