Как мы уже говорили, Интернет — комбинация сетей и устройств связи, например, таких как маршрутизаторы. Пакет, стартующий от передатчика, может пройти через несколько маршрутизаторов, прежде чем достигнет своего конечного пункта назначения. Маршрутизатор имеет буфер, который накапливает входящие пакеты, обрабатывает их и передает их вперед. Если пакеты поступают к маршрутизатору быстрее, чем он может их обработать, может возникнуть перегрузка и некоторые пакеты могут быть потеряны. Если пакет не принят конечным пунктом, то конечный пункт не присылает подтверждения. Передатчик не имеет выбора, кроме как передать повторно потерянный пакет. Это может привести к перегрузке и увеличению пропадания пакетов, которое означает снова повторную передачу и большую перегрузку. Затем может быть достигнута точка, в которой система не сможет больше передавать данные. Поэтому TCP нуждается в механизмах, позволяющих избежать этой ситуации.
Выше рассматривалась ситуация управления потоком, когда в обмене участвуют только передатчик и приемник. В этом случае размер окна передатчика определяется доступным пространством буфера в приемнике. При этом полностью игнорируются другие устройства сети. Если сеть не может доставить данные так быстро, как они создаются передатчиком, она должна передать соответствующий сигнал передатчику, чтобы он замедлился. Другими словами, сеть может рассматриваться как одно из устройств, которое определяет размер окон передатчиков.
Сегодня размер окна передатчика определяется не только приемником, но также перегрузкой в сети. Передатчик имеет два кванта информации: размер окна, объявленный приемником, и размер окна перегрузки. Действующий размер окна – минимальный из этих двух размеров.
Чтобы избежать перегрузки, передатчик TCP использует две стратегии. Мы называем одну медленный старт и дополнительное увеличение и вторую — мультипликативное уменьшение.
Это – комбинация двух стратегий: медленного старта и дополнительного увеличения.
Медленный старт. В начале соединения TCP устанавливает размер окна перегрузки на максимальный размер сегмента. Для каждого сегмента, который подтвержден, TCP увеличивает размер окна перегрузки по одному максимальному размеру сегмента, пока он не достигнет порога половины разрешенного размера окна. Это называется медленным стартом, который полностью обманчив, потому что этот процесс не такой медленный. Размер окна перегрузки увеличивается экспоненциально. Передатчик посылает один сегмент, получает одно подтверждение, увеличивает размер до двух сегментов, посылает два сегмента, получает два сегмента, увеличивает размер до четырех сегментов, посылает четыре сегмента, получает подтверждение для четырех сегментов, увеличивает размер до восьми сегментов и так далее. Другими словами, после получения третьего подтверждения размер окна увеличивается до восьми сегментов. Скорость роста окна — экспоненциальная 23 = 8.
Увеличение прибавлением. Чтобы избежать перегрузки, прежде чем она возникнет, нужно замедлить этот экспоненциальный рост. После того как размер достигает порога, размер окна увеличивается на единицу для каждого подтверждения, даже если подтверждаются последовательные сегменты. Стратегия дополнительного увеличения продолжается, пока подтверждения прибывают прежде срабатывания их соответствующих тайм-аутов или пока размер окна перегрузки не достигнет значения окна приемника.
Если возникнет перегрузка, окно перегрузки должно быть уменьшено. Передатчик может единственным путем предположить, что возникла перегрузка из-за потерянного сегмента. Если передатчик не получит подтверждение, прежде чем сработает его таймер повторной передачи, он предполагает, что это перегрузка. Поскольку сети сегодня имеют сравнительно малый уровень шума, более вероятно, что сегмент потерян, чем искажен. Стратегия гласит: если окончилось контрольное время, размер текущего окна должен быть установлен на величину половины размера последнего окна перегрузки, размер окна перегрузки должен опять начинаться с единицы. Другими словами, передатчик возвращается медленно к начальной фазе. Заметим, что размер порога уменьшается экспоненциально (мультипликативное уменьшение). Рис. 11.1. показывает идею мультипликативного уменьшения.
(рис 11.1) Мультипликативное уменьшение
На Рис. 11.1. максимальный размер окна — 32 сегмента, а порог установлен до 16 сегментов (половина максимального значения размера окна). При процедуре медленный старт размер окна начинается от 1 и растет экспоненциально, пока не достигнет порога 16 при условии, что не истечет время тайм-аута.
После достижения порога процедура дополнительного увеличения позволяет наращивать линейно по 1 байту, пока не сработает тайм-аут или размер не достигнет максимального окна (32). На рисунке возник таймаут, когда был послан сегмент 8. В этот момент вступает в действие процедура мультипликативного уменьшения и уменьшает порог до половины предыдущего размера окна; предыдущий размер окна был 20, когда появился тайм-аут, так что новый порог теперь 10.
Этот цикл (медленный старт, дополнительное увеличение, мультиплексное уменьшение) продолжается с этим размером окна опять с единицы. Рис. 11.2. показывает ту же самую идею.
(рис 11.2) Стратегия предотвращения перегрузки
Сегмент – это единица данных, передаваемых между устройствами, которые используют TCP ( Рис. 11.3.). Формат сегмента TCP состоит из 20–60-байтных заголовков и следующих за ними данных для прикладной программы. Заголовок – это 20 байт, если не имеет опций, и 60 байт, если состоит из нескольких опций.
(рис 11.3) Формат заголовка TCP сегментаОбсудим некоторые поля заголовков. Смысл и цель их должны быть ясными, поскольку эти поля уже неоднократно рассматривались по всей книге, правда, в других приложениях.
Адрес порта источника. Это поле длиною 16 бит, определяющее номер порта прикладной программы в хосте, в который посылает сегмент. Это обслуживание имеет ту же самую цель, что адрес источника в заголовке UDP, обсуждавшемся ранее (см. рис. 9.1.).
Адрес порта пункта назначения. Это поле длиною 16 бит, определяющее номер порта прикладной программы в хосте, который получает сегмент. Это поле имеет ту же самую цель, что и адрес порта назначения в заголовке UDP, рассмотренном ранее (см. рис. 9.1.). В течение соединения каждая сторона использует случайный номер, чтобы создать начальный порядковый номер (ISN – initial
Порядковый номер. Это поле на 32 бита определяет номер, назначенный от первого бита данных, которые содержатся в этом сегменте. Как мы уже говорили прежде, TCP — протокол транспортного уровня. Чтобы гарантировать возможность взаимодействия, каждый байт должен быть передан нумерованным. Порядковый номер говорит пункту назначения, каков байт в этой последовательности по сравнению с первым байтом сегмента.
Номер подтверждения. Это поле занимает 32 бита и определяет номер байта, который ожидает приемник сегмента от другой стороны. Если приемник сегмента успешно принял байт с номером x от другой стороны, он определяет номер подтверждения как x+1.
Длина заголовка. Это поле длиной 4 бита указывает номер 4-байтного слова в TCP заголовке. Эта длина заголовка может быть между 20 и 60 байтами. Поэтому значение этого поля может быть между 5 (5 x 4 = 20) и 15 (15 x 4 = 60).
Зарезервировано. Это поле 6 бит, зарезервировано для будущего использования.
Управление. Это поле определяет 6 различных управляющих бит, или флагов, как это показано на Рис. 11.3.
Эти биты способны управлять потоком, установлением соединения и оконечными устройствами, а также
| Флаг | Описание |
|---|---|
| Срочно | Указатель срочности сообщения |
| Подтверждение | Подтверждает правильность действия |
| Запуск | Запуск данных |
| Повтор | Соединение должно быть переустановлено |
| Синхронизация | Порядковый номер синхронизации в течение соединения |
| Конечное | Оконечное соединение |
Размер окна. Это поле определяет размер окна в байтах, который может использовать другая сторона. Заметим, что длина этого поля – 16 бит, что означает максимальный размер окна – 65 535 байт.
Контрольная сумма. Это поле на 16 бит, которое действительно, только если установлен срочный флаг, и используется, когда сегмент содержит срочные данные. Оно определяет, что должно быть дополнено к порядковому номеру, чтобы получить номер последнего и срочного байта в секции данных сегмента. Это будет обсуждаться позднее.
Опция. В ТСР-заголовке может быть до 40 байт информации опций. Мы обсудим различные опции, используемые в TCP-заголовках, в следующей секции.
Заголовок TCP может содержать до 40 байт информации опций. Опции передают дополнительную информацию для пункта назначения или выравнивают другие опции. Определены две категории опций: однобайтовая и многобайтовая опция. Первая категория имеет два типа опций: оконечная опция и нет операции. Вторая категория содержит три типа опций: размер максимального сегмента, коэффициент масштаба, а также метку времени ( Рис. 11.4.).
(рис 11.4) ОпцииКонец опции. Это опция в 1 байт используется для заполнения поля опции, чтобы выровнять формат. Она должна быть использована только как последняя опция и только с одного конца. После этой опции приемник ищет полезную нагрузку. Иногда поле опции может содержать более чем один байт. Это означает, что необходимо выровнять поле опции, используя несколько опций типа "нет операции" (ничего не делать), после чего поставить конец опции ( Рис. 11.5.). Конец опции несет три значения информации для конечного пункта, она указывает, что:
(рис 11.5) Конец опцииНет операций. Эта опция ( Рис. 11.6.) в один байт используется как разделитель между опциями. Например, она может применяться для выравнивания следующей опции до 32-битовой границы.
(рис 11.6) Опция "нет операции"Максимальный размер сегмента (MSS – Maximum segment size). Эта опция определяет размер наибольшего куска данных, который может быть получен пунктом назначения сегмента TCP. Вопреки своему имени она определяет максимальный размер данных, но не максимальный размер сегмента. В то же время, поле длиной 16 бит может быть значением 65 535 байт. Значение по умолчанию — 536.
Максимальный размер данных определяется в течение фазы установления соединения. Размер определяется пунктом назначения сегмента, но не источником. Так, сторона 1 определяет
Эта опция применяется только в сегментах, которые осуществляют соединение. Она не может использоваться в сегментах в течение передачи. Рис. 11.7. показывает формат этой опции. Он содержит код опции, общую длину опции и
(рис 11.7) Опция "максимальный размер сегмента"Масштабный коэффициент окна. Поле размера окна в заголовке определяет размер
Возьмем, например, канал оптического кабеля (
Для того чтобы увеличить размер окна, используется масштабный коэффициент окна. Новый размер окна находится повышением в 2 раза числа, заданного масштабным коэффициентом окна. Затем этот результат умножается на значение размера окна в заголовке.
Размер нового окна = размер окна, определенный в заголовке x 2масштабный элемент окна.
Например, если значение масштабного коэффициента окна равно 3, действующий размер окна есть восьмикратное значение размера окна. Масштабный коэффициент может иметь значение не более 16 — наибольшее из позволяемых TCP/IP, то есть максимальный размер окна может быть 216 x 216 = 232 и совпадать с максимальным значением порядкового номера. Заметим, что размер окна не может быть больше, чем максимальное значение порядкового номера.
Масштабный коэффициент окна может быть определен только во время фазы установления соединения. Во время передачи данных размер окна (заданный заголовком) может изменяться, но он может быть умножен на тот же самый масштабный коэффициент. Формат опции масштабного коэффициента показан на Рис. 11.8. Он содержит код опции, общую длину опции и значение масштабного коэффициента.
(рис 11.8) Опция "масштабный коэффициент окна"Масштабный коэффициент иногда называют сдвигающим счетчиком, потому что умножение числа на величину 2 – это то же самое, что операция побитового сдвига влево.
Метка времени. Это 10-битовая опция с форматом, показанным на Рис. 11.9. Поле метки времени заполняется источником, когда сегмент покидает источник. Пункт назначения получает сегмент и накапливает значение метки времени. Когда пункт назначения посылает подтверждение байтов в этом сегменте, он вводит накопленное предыдущее значение в поле "эхо ответа". Источник, когда получает подтверждение, проверяет текущее время по сравнению с этим значением. Разность – это время прохождения "туда и обратно". Время "туда и обратно" может быть использовано TCP динамически для определения времени повторной передачи, как это уже обсуждалось.
(рис 11.9) Опция "метка времени"
Вычисление контрольной суммы TCP следует той же самой процедуре, что была описана для UDP в предыдущем разделе. Однако включение контрольной суммы в дейтаграмму UDP необязательно, в то время как включение контрольной суммы для TCP обязательно.
Тот же самый псевдозаголовок, предназначенный для тех же самых целей, дополняет сегмент. Для псевдозаголовка TCP значение поля протокола – 6 ( Рис. 11.10.).
(рис 11.10) Псевдозаголовок, дополняемый к TCP дейтаграммеTCP — это протокол, ориентированный на соединение. Протокол, ориентированный на соединение, устанавливает виртуальное соединение между источником и пунктом назначения. Все сегменты, принадлежащие сообщению, затем посылаются этим виртуальным путем. Он используется для ввода сообщений оборудования, процесса подтверждения, а также для повторной передачи поврежденных или потерянных кадров.
В TCP передача, ориентированная на соединение, требует двух процедур: установления соединения и окончания соединения.
TCP передает данные в нормальном дуплексном режиме. Когда два TCP в двух компьютерах соединены, они могут послать друг другу данные одновременно. Это предполагает, что каждая сторона может инициализировать коммутацию и получить одобрение другой стороны перед каждой передачей данных. Предпринимаются четыре действия, прежде чем названные здесь хост A и хост B смогут послать данные.
Это установление соединения достигается в четыре шага. Однако шаги 2 и 3 могут возникнуть одновременно, они могут быть скомбинированы в один шаг. Хост B может завершить запрос хоста A и послать свой собственный запрос в одно и то же время.
Установление соединения, рассмотренное выше, называется методом взаимодействия в три шага. В этой процедуре прикладная программа, называемая "клиент", желает установить связь с другой прикладной программой, называемой "сервер", используя TCP как транспортный протокол.
Процедура тройного подтверждения связи начинается с сервера. Программа сервера говорит ему, что TCP готов принять соединение. Это называется запросом пассивного открытия. Хотя сервер TCP готов принять любое соединение от любого компьютера в мире, но он не может сам установить это соединение.
Программа клиента делает запрос на активное открытие. Клиент, который хочет подключиться к серверу, сообщает своему TCP, что ему надо подсоединится к конкретному серверу. TCP может теперь начинать процесс взаимодействия в три шага, как это показано на Рис. 11.11.
Имеются следующие шаги этого процесса:
(рис 11.11) Метод взаимодействия в три шагаНестандартная ситуация может возникнуть, когда оба процесса создадут активное открытие. В этом случае оба TCP пошлют друг другу сегмент
Любые две стороны, включенные в обмен данными (клиент или сервер), могут завершить соединение. Когда соединение в одном направлении закончено, другая сторона может продолжить передачу данных в обратном направлении. Поэтому для завершения соединения в обоих направлениях нужны четыре действия:
Шаги 2 и 3 могут возникнуть одновременно, соединение может быть завершено в одном направлении, но остаться открытым для другого направления.
Окончание соединения, приведенное выше, называется методом взаимодействия в четыре шага. В этой процедуре прикладная программа, обычно клиент, хочет завершить соединение.
Процедура начинается с клиента. Программа клиента говорит TCP, что она оканчивает передачу данных и желает завершить соединение. Это – запрос на действия по окончанию.
После получения запроса на действия по окончанию клиент TCP закрывает связь в направлении клиент-сервер. Однако связь в другом направлении еще открыта.
Когда программа сервера закончит посылку данных в направлении сервер-клиент, он может запросить от TCP закрыть соединение в направлении сервер-клиент. Это обычно пассивное окончание. Метод взаимодействия в четыре шага показан на Рис. 11.12.
(рис 11.12) Метод взаимодействия в четыре шагаЧетыре шага – это:
TCP может запросить переустановление соединения для несуществующего порта. Переустановление здесь означает, что текущее соединение нарушено. Это случается в одном из трех случаев:
Как уже обсуждалось, передающий TCP использует буфер, чтобы накопить поток данных, поступивших от передающих прикладных программ; а передающий TCP может выбрать размер сегментов. Принимающий TCP также применяет
Однако имеются случаи, в которых прикладной программе неудобна такая практика. Например, рассмотрим прикладную программу, которая взаимодействует с другой прикладной программой на другом конце. Прикладная программа на одной стороне хочет послать нажатие клавиши к приложению на другой стороне и получить немедленный отклик в конце.
TCP может обработать такую ситуацию. Прикладная программа на передающей стороне может запросить операцию "протолкнуть" (push). Это означает, что передающий TCP не должен ждать заполнения окна. Он должен создать сегмент и послать его немедленно. Передающий TCP должен также установить push(PSH)-бит, чтобы сказать, что сегмент включает данные, которые должны быть доставлены к принимающей прикладной программе так быстро, как это возможно, и не ждать, пока поступят другие данные.
Хотя операция "проталкивание" может быть запрошена прикладной программой, сегодня большинство реализаций игнорируют такой запрос. TCP может выбирать или нет эту операцию.
TCP — протокол, ориентированный на поток. Это означает, что данные представляются прикладной программой для TCP как поток символов. Каждый байт данных имеет позицию в потоке. Однако имеются случаи, в которых прикладной программе нужно послать срочный байт. Это означает, что передающая прикладная программа хочет передать вне очереди квант данных приемной программе. Предположим, что передающая прикладная программа посылает данные, обрабатываемые приемной программой. Когда обратно поступит результат обработки, передающая прикладная программа может обнаружить серьезные нарушения. Она захочет прервать процесс, но уже послано огромное количество данных. Если дать команду остановки процесса (Control + C), эти два символа будут накоплены в буфере TCP приемного конца и эта команда будет доставлена к приемной программе после того, как все эти данные будут обработаны, то есть слишком поздно.
Решение — послать сегмент с установленным битом URG. Передающая прикладная программа таким образом сообщит передающему TCP, что квант данных — срочный. Передающий TCP создаст сегмент и вставит срочные данные в начало сегмента. Остальной сегмент может содержать нормальные данные из буфера. Поле указателя срочности в заголовке определяет конец срочных данных и начало нормальных данных.
Когда принимающий TCP получает сегмент с установленным битом URG, он извлекает срочные данные из сегмента, используя значение указателя срочности, и доставляет их вне очереди к приемной прикладной программе.
TCP — очень сложный протокол. Он обслуживает поток, он ориентирован на соединение со сложной диаграммой переходов состояний. Он использует управление потоком и контроль ошибок. Он также сложен потому, что действующие коды составляют десятки тысяч строк.
В этом разделе мы представим простейшую блок-схему TCP. Наша цель — показать, как мы можем имитировать основу TCP, представленную
Совокупность модулей включает таблицу, называемую блоком управления передачей (transmission control block – TCB), установку таймера и три программных модуля. На Рис. 11.13. показаны 5 компонентов и их взаимодействие.
(рис 11.13) Блок-схема TCPПоскольку в любой момент времени мы можем иметь несколько соединений,
(рис 11.14) Общий вид таблицы TCB
Алгоритм работы главного модуля TCP показан на Рис. 11.15.
Этот алгоритм нарисован с помощью символов SDL, которые уже применялись при описании алгоритмов UDP. Такой подход называется автоматным и позволяет отображать алгоритмы в виде переходов от состояния к состоянию конечных автоматов. В дальнейшем при рассмотрении программного обеспечения телефонных станций будет продемонстрировано, как такой подход упрощает программирование. Там же будет рассмотрен подробно порядок задания конечного автомата.
Ниже приводятся таблицы, в которых перечисляются состояния ( таблице 11.2.), входы ( таблице 11.3.), выходы ( таблице 11.4.), используемые в данном алгоритме.
| СОСТОЯНИЕ | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| CLOSED | ЗАКРЫТО | Нет соединения |
| LISTEN | СЛУШАЮ | Сервер ожидает вызова от клиента |
| ПЕРЕДАЧА | Соединение запрашивает передачу; ожидание подтверждения | |
| ПРИЕМ | Состояние ожидания приема | |
| ESTABILISHED | УСТАНОВЛЕНО | Соединение установлено |
| FIN-WAIT1 | ОЖИДАНИЕ ОКОНЧАНИЯ1 | Клиент запросил закрытие соединения |
| FIN-WAIT2 | ОЖИДАНИЕ ОКОНЧАНИЯ2 | Другая сторона принимает закрытие соединения |
| CLOSING | ЗАВЕРШАЮЩЕЕ | Обе стороны решили закрыть соединение одновременно |
| TIME-WAIT | ВРЕМЯ ОЖИДАНИЯ | Ожидание повторной передачи |
| CLOSE-WAIT | ОЖИДАНИЕ ЗАКРЫТИЯ | Сервер ожидает закрытия приложения |
| LAST-ASK | ПОСЛЕДНЕЕ ПОДТВЕРЖДЕНИЕ | Сервер ожидает последнего подтверждения |
| ВХОД | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| Активное открытие | Заявка процесса на передачу данных | |
| Пассивное открытие | Заявка на входящую связь (ожидается заявка от процесса соединения для приема) | |
| Повторная передача | Запрос на переустановление соединения | |
| Send | Передача | Запрос на передачу |
| Запрос | Запрос на соединение | |
| Подтверждение запроса | Подтверждение запроса на соединение | |
| ACK | Подтверждение | Подтверждение сигнала |
| FIN | Отбой | Запрос на завершение соединения |
| FIN+ACK | Подтверждение отбоя | Подтверждение сигнала на окончательное соединение |
| Close | Закончить | Сигнал, о том, что данная сторона закончила соединение |
| Time-out | Контрольное время | Окончание установленного контрольного времени |
| ВЫХОД | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| Заявка на передачу | Сегмент, который посылается другой стороне, как заявка на передачу | |
| Подтверждение заявки | Подтверждение заявки на передачу | |
| ACK | Подтверждение | Подтверждение сигнала |
| FIN | Отбой | Сигнал, на окончательное завершение |
| Запрос на прием | Заявка на соединение для приема | |
| FIN | Отбой | Сигнал, на окончательное завершение |
| Time-out | Контрольное время | Окончание установленного контрольного времени |
Рассмотрим работу алгоритма на Рис. 11.15. (стр. 1-3).

(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.1)(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.2)
(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.3)(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.4)Алгоритм находится в начальном состоянии ЗАКРЫТО (Оператор 1). В данном случае инициатор (клиент) вырабатывает команду для TCP активное открытие (Оператор 10); клиент подключается к прикладной программе и посылает сегмент
Если алгоритм не получает сигнала подтверждения запроса
В состоянии ESTABLSHED (УСТАНОВЛЕНО) — Оператор 20 (стр.2) — алгоритм может получать данные (Операторы 30-32) или информацию от приложения (Операторы 33-35).
Клиент остается в этом состоянии столько времени, сколько он посылает и получает данные.
В этом состоянии клиент TCP может принять запрос на окончание от прикладной программы клиента. Он посылает сегмент Отбой (FIN) к другому TCP и переходит в состояния ОЖИДАНИЕ ОКОНЧАНИЯ1 – (FIN-WAIT1) — Оператор 36 (стр.3).
В этом состоянии клиент TCP ожидает получить ACK (Оператор 52, стр.3) от сервера TCP. ACK получен, клиент переходит в состояние FIN-WAIT2 (ОЖИДАНИЕ ОКОНЧАНИЯ2) — Оператор 54 (стр.3). Он не посылает ничего. Теперь соединение закрыто в одном направлении.
Клиент остается в этом состоянии, ожидая окончания соединения с другого конца. Если клиент получает сегмент FIN (Отбой) с другого конца — Оператор 55 (стр.3), он посылает сегмент ACK — Оператор 56 (стр.3) и переходит в состояние TIME-WAIT (ВРЕМЯ ОЖИДАНИЯ) — Оператор 42 (стр.3). Когда клиент в этом состоянии, он включает таймер контрольного времени и ждет, пока этот таймер закончится. Значение этого времени устанавливается равным двойному времени передачи максимального размера сегмента. Клиент остается еще некоторое в состоянии неполного закрытия, чтобы дублировать пакет, если какой-либо пакет достигает своего пункта назначения и будет отклонен. После тайм-аута клиент переходит в состояние CLOSED (ЗАКРЫТО) и алгоритм переходит в начальное состояние.
Кроме того, на Рис. 11.15.(стр.3) показаны еще два возможных случая завершения соединения: когда в этом состоянии приходит отбой с другого конца (одновременный отбой) либо отбой приходит вместе с подтверждением.
Алгоритм начинает работу в состоянии CLOSED (ЗАКРЫТО) – Оператор 1. В этом состоянии TCP алгоритм может получить запрос на пассивное открытие (Оператор 2). Он переходит в состояние LISTEN (СЛУШАЮ) – Оператор 4. Во время этого состояния TCP-сервер может получить сегмент
В этом состоянии TCP-сервер может получить сегмент ACK от клиента TCP (Оператор 58 на стр.4). Он переходит в состояние ESTABILISHED (УСТАНОВЛЕНО) – Оператор 20 (стр.2). Это состояние передачи данных. Алгоритм остается в этом состоянии на время получения и передачи данных, после чего выполняется алгоритм, указанный на Рис. 11.15.(стр.2)
В этом состоянии TCP-сервер может получить сегмент CLOSE (оператор 24) от клиента — это означает, что клиент желает завершить соединение. Он может послать сегмент FIN клиенту и перейти к состоянию FIN-WAIT1(ОЖИДАНИЕ ОКОНЧАНИЯ1). Далее выполняется алгоритм по Рис. 11.15.(стр.3)
По правилам составления спецификаций в каждом состоянии предусматривается поступление сигналов, которые отличаются от перечисленных для данного входа. Это ситуация сбоя или ошибки. В этом случае формируется сообщение об ошибке. На Рис. 11.15. эта часть алгоритма не показана.
05320017 00000001 00000000 500207АА 00000000
Дополнительный материал для прохождения тестирования к лекции, Вы можете скачать здесь.
Как мы уже говорили, Интернет — комбинация сетей и устройств связи, например, таких как маршрутизаторы. Пакет, стартующий от передатчика, может пройти через несколько маршрутизаторов, прежде чем достигнет своего конечного пункта назначения. Маршрутизатор имеет буфер, который накапливает входящие пакеты, обрабатывает их и передает их вперед. Если пакеты поступают к маршрутизатору быстрее, чем он может их обработать, может возникнуть перегрузка и некоторые пакеты могут быть потеряны. Если пакет не принят конечным пунктом, то конечный пункт не присылает подтверждения. Передатчик не имеет выбора, кроме как передать повторно потерянный пакет. Это может привести к перегрузке и увеличению пропадания пакетов, которое означает снова повторную передачу и большую перегрузку. Затем может быть достигнута точка, в которой система не сможет больше передавать данные. Поэтому TCP нуждается в механизмах, позволяющих избежать этой ситуации.
Выше рассматривалась ситуация управления потоком, когда в обмене участвуют только передатчик и приемник. В этом случае размер окна передатчика определяется доступным пространством буфера в приемнике. При этом полностью игнорируются другие устройства сети. Если сеть не может доставить данные так быстро, как они создаются передатчиком, она должна передать соответствующий сигнал передатчику, чтобы он замедлился. Другими словами, сеть может рассматриваться как одно из устройств, которое определяет размер окон передатчиков.
Сегодня размер окна передатчика определяется не только приемником, но также перегрузкой в сети. Передатчик имеет два кванта информации: размер окна, объявленный приемником, и размер окна перегрузки. Действующий размер окна – минимальный из этих двух размеров.
Чтобы избежать перегрузки, передатчик TCP использует две стратегии. Мы называем одну медленный старт и дополнительное увеличение и вторую — мультипликативное уменьшение.
Это – комбинация двух стратегий: медленного старта и дополнительного увеличения.
Медленный старт. В начале соединения TCP устанавливает размер окна перегрузки на максимальный размер сегмента. Для каждого сегмента, который подтвержден, TCP увеличивает размер окна перегрузки по одному максимальному размеру сегмента, пока он не достигнет порога половины разрешенного размера окна. Это называется медленным стартом, который полностью обманчив, потому что этот процесс не такой медленный. Размер окна перегрузки увеличивается экспоненциально. Передатчик посылает один сегмент, получает одно подтверждение, увеличивает размер до двух сегментов, посылает два сегмента, получает два сегмента, увеличивает размер до четырех сегментов, посылает четыре сегмента, получает подтверждение для четырех сегментов, увеличивает размер до восьми сегментов и так далее. Другими словами, после получения третьего подтверждения размер окна увеличивается до восьми сегментов. Скорость роста окна — экспоненциальная 23 = 8.
Увеличение прибавлением. Чтобы избежать перегрузки, прежде чем она возникнет, нужно замедлить этот экспоненциальный рост. После того как размер достигает порога, размер окна увеличивается на единицу для каждого подтверждения, даже если подтверждаются последовательные сегменты. Стратегия дополнительного увеличения продолжается, пока подтверждения прибывают прежде срабатывания их соответствующих тайм-аутов или пока размер окна перегрузки не достигнет значения окна приемника.
Если возникнет перегрузка, окно перегрузки должно быть уменьшено. Передатчик может единственным путем предположить, что возникла перегрузка из-за потерянного сегмента. Если передатчик не получит подтверждение, прежде чем сработает его таймер повторной передачи, он предполагает, что это перегрузка. Поскольку сети сегодня имеют сравнительно малый уровень шума, более вероятно, что сегмент потерян, чем искажен. Стратегия гласит: если окончилось контрольное время, размер текущего окна должен быть установлен на величину половины размера последнего окна перегрузки, размер окна перегрузки должен опять начинаться с единицы. Другими словами, передатчик возвращается медленно к начальной фазе. Заметим, что размер порога уменьшается экспоненциально (мультипликативное уменьшение). Рис. 11.1. показывает идею мультипликативного уменьшения.
(рис 11.1) Мультипликативное уменьшение
На Рис. 11.1. максимальный размер окна — 32 сегмента, а порог установлен до 16 сегментов (половина максимального значения размера окна). При процедуре медленный старт размер окна начинается от 1 и растет экспоненциально, пока не достигнет порога 16 при условии, что не истечет время тайм-аута.
После достижения порога процедура дополнительного увеличения позволяет наращивать линейно по 1 байту, пока не сработает тайм-аут или размер не достигнет максимального окна (32). На рисунке возник таймаут, когда был послан сегмент 8. В этот момент вступает в действие процедура мультипликативного уменьшения и уменьшает порог до половины предыдущего размера окна; предыдущий размер окна был 20, когда появился тайм-аут, так что новый порог теперь 10.
Этот цикл (медленный старт, дополнительное увеличение, мультиплексное уменьшение) продолжается с этим размером окна опять с единицы. Рис. 11.2. показывает ту же самую идею.
(рис 11.2) Стратегия предотвращения перегрузки
Сегмент – это единица данных, передаваемых между устройствами, которые используют TCP ( Рис. 11.3.). Формат сегмента TCP состоит из 20–60-байтных заголовков и следующих за ними данных для прикладной программы. Заголовок – это 20 байт, если не имеет опций, и 60 байт, если состоит из нескольких опций.
(рис 11.3) Формат заголовка TCP сегментаОбсудим некоторые поля заголовков. Смысл и цель их должны быть ясными, поскольку эти поля уже неоднократно рассматривались по всей книге, правда, в других приложениях.
Адрес порта источника. Это поле длиною 16 бит, определяющее номер порта прикладной программы в хосте, в который посылает сегмент. Это обслуживание имеет ту же самую цель, что адрес источника в заголовке UDP, обсуждавшемся ранее (см. рис. 9.1.).
Адрес порта пункта назначения. Это поле длиною 16 бит, определяющее номер порта прикладной программы в хосте, который получает сегмент. Это поле имеет ту же самую цель, что и адрес порта назначения в заголовке UDP, рассмотренном ранее (см. рис. 9.1.). В течение соединения каждая сторона использует случайный номер, чтобы создать начальный порядковый номер (ISN – initial
Порядковый номер. Это поле на 32 бита определяет номер, назначенный от первого бита данных, которые содержатся в этом сегменте. Как мы уже говорили прежде, TCP — протокол транспортного уровня. Чтобы гарантировать возможность взаимодействия, каждый байт должен быть передан нумерованным. Порядковый номер говорит пункту назначения, каков байт в этой последовательности по сравнению с первым байтом сегмента.
Номер подтверждения. Это поле занимает 32 бита и определяет номер байта, который ожидает приемник сегмента от другой стороны. Если приемник сегмента успешно принял байт с номером x от другой стороны, он определяет номер подтверждения как x+1.
Длина заголовка. Это поле длиной 4 бита указывает номер 4-байтного слова в TCP заголовке. Эта длина заголовка может быть между 20 и 60 байтами. Поэтому значение этого поля может быть между 5 (5 x 4 = 20) и 15 (15 x 4 = 60).
Зарезервировано. Это поле 6 бит, зарезервировано для будущего использования.
Управление. Это поле определяет 6 различных управляющих бит, или флагов, как это показано на Рис. 11.3.
Эти биты способны управлять потоком, установлением соединения и оконечными устройствами, а также
| Флаг | Описание |
|---|---|
| Срочно | Указатель срочности сообщения |
| Подтверждение | Подтверждает правильность действия |
| Запуск | Запуск данных |
| Повтор | Соединение должно быть переустановлено |
| Синхронизация | Порядковый номер синхронизации в течение соединения |
| Конечное | Оконечное соединение |
Размер окна. Это поле определяет размер окна в байтах, который может использовать другая сторона. Заметим, что длина этого поля – 16 бит, что означает максимальный размер окна – 65 535 байт.
Контрольная сумма. Это поле на 16 бит, которое действительно, только если установлен срочный флаг, и используется, когда сегмент содержит срочные данные. Оно определяет, что должно быть дополнено к порядковому номеру, чтобы получить номер последнего и срочного байта в секции данных сегмента. Это будет обсуждаться позднее.
Опция. В ТСР-заголовке может быть до 40 байт информации опций. Мы обсудим различные опции, используемые в TCP-заголовках, в следующей секции.
Заголовок TCP может содержать до 40 байт информации опций. Опции передают дополнительную информацию для пункта назначения или выравнивают другие опции. Определены две категории опций: однобайтовая и многобайтовая опция. Первая категория имеет два типа опций: оконечная опция и нет операции. Вторая категория содержит три типа опций: размер максимального сегмента, коэффициент масштаба, а также метку времени ( Рис. 11.4.).
(рис 11.4) ОпцииКонец опции. Это опция в 1 байт используется для заполнения поля опции, чтобы выровнять формат. Она должна быть использована только как последняя опция и только с одного конца. После этой опции приемник ищет полезную нагрузку. Иногда поле опции может содержать более чем один байт. Это означает, что необходимо выровнять поле опции, используя несколько опций типа "нет операции" (ничего не делать), после чего поставить конец опции ( Рис. 11.5.). Конец опции несет три значения информации для конечного пункта, она указывает, что:
(рис 11.5) Конец опцииНет операций. Эта опция ( Рис. 11.6.) в один байт используется как разделитель между опциями. Например, она может применяться для выравнивания следующей опции до 32-битовой границы.
(рис 11.6) Опция "нет операции"Максимальный размер сегмента (MSS – Maximum segment size). Эта опция определяет размер наибольшего куска данных, который может быть получен пунктом назначения сегмента TCP. Вопреки своему имени она определяет максимальный размер данных, но не максимальный размер сегмента. В то же время, поле длиной 16 бит может быть значением 65 535 байт. Значение по умолчанию — 536.
Максимальный размер данных определяется в течение фазы установления соединения. Размер определяется пунктом назначения сегмента, но не источником. Так, сторона 1 определяет
Эта опция применяется только в сегментах, которые осуществляют соединение. Она не может использоваться в сегментах в течение передачи. Рис. 11.7. показывает формат этой опции. Он содержит код опции, общую длину опции и
(рис 11.7) Опция "максимальный размер сегмента"Масштабный коэффициент окна. Поле размера окна в заголовке определяет размер
Возьмем, например, канал оптического кабеля (
Для того чтобы увеличить размер окна, используется масштабный коэффициент окна. Новый размер окна находится повышением в 2 раза числа, заданного масштабным коэффициентом окна. Затем этот результат умножается на значение размера окна в заголовке.
Размер нового окна = размер окна, определенный в заголовке x 2масштабный элемент окна.
Например, если значение масштабного коэффициента окна равно 3, действующий размер окна есть восьмикратное значение размера окна. Масштабный коэффициент может иметь значение не более 16 — наибольшее из позволяемых TCP/IP, то есть максимальный размер окна может быть 216 x 216 = 232 и совпадать с максимальным значением порядкового номера. Заметим, что размер окна не может быть больше, чем максимальное значение порядкового номера.
Масштабный коэффициент окна может быть определен только во время фазы установления соединения. Во время передачи данных размер окна (заданный заголовком) может изменяться, но он может быть умножен на тот же самый масштабный коэффициент. Формат опции масштабного коэффициента показан на Рис. 11.8. Он содержит код опции, общую длину опции и значение масштабного коэффициента.
(рис 11.8) Опция "масштабный коэффициент окна"Масштабный коэффициент иногда называют сдвигающим счетчиком, потому что умножение числа на величину 2 – это то же самое, что операция побитового сдвига влево.
Метка времени. Это 10-битовая опция с форматом, показанным на Рис. 11.9. Поле метки времени заполняется источником, когда сегмент покидает источник. Пункт назначения получает сегмент и накапливает значение метки времени. Когда пункт назначения посылает подтверждение байтов в этом сегменте, он вводит накопленное предыдущее значение в поле "эхо ответа". Источник, когда получает подтверждение, проверяет текущее время по сравнению с этим значением. Разность – это время прохождения "туда и обратно". Время "туда и обратно" может быть использовано TCP динамически для определения времени повторной передачи, как это уже обсуждалось.
(рис 11.9) Опция "метка времени"
Вычисление контрольной суммы TCP следует той же самой процедуре, что была описана для UDP в предыдущем разделе. Однако включение контрольной суммы в дейтаграмму UDP необязательно, в то время как включение контрольной суммы для TCP обязательно.
Тот же самый псевдозаголовок, предназначенный для тех же самых целей, дополняет сегмент. Для псевдозаголовка TCP значение поля протокола – 6 ( Рис. 11.10.).
(рис 11.10) Псевдозаголовок, дополняемый к TCP дейтаграммеTCP — это протокол, ориентированный на соединение. Протокол, ориентированный на соединение, устанавливает виртуальное соединение между источником и пунктом назначения. Все сегменты, принадлежащие сообщению, затем посылаются этим виртуальным путем. Он используется для ввода сообщений оборудования, процесса подтверждения, а также для повторной передачи поврежденных или потерянных кадров.
В TCP передача, ориентированная на соединение, требует двух процедур: установления соединения и окончания соединения.
TCP передает данные в нормальном дуплексном режиме. Когда два TCP в двух компьютерах соединены, они могут послать друг другу данные одновременно. Это предполагает, что каждая сторона может инициализировать коммутацию и получить одобрение другой стороны перед каждой передачей данных. Предпринимаются четыре действия, прежде чем названные здесь хост A и хост B смогут послать данные.
Это установление соединения достигается в четыре шага. Однако шаги 2 и 3 могут возникнуть одновременно, они могут быть скомбинированы в один шаг. Хост B может завершить запрос хоста A и послать свой собственный запрос в одно и то же время.
Установление соединения, рассмотренное выше, называется методом взаимодействия в три шага. В этой процедуре прикладная программа, называемая "клиент", желает установить связь с другой прикладной программой, называемой "сервер", используя TCP как транспортный протокол.
Процедура тройного подтверждения связи начинается с сервера. Программа сервера говорит ему, что TCP готов принять соединение. Это называется запросом пассивного открытия. Хотя сервер TCP готов принять любое соединение от любого компьютера в мире, но он не может сам установить это соединение.
Программа клиента делает запрос на активное открытие. Клиент, который хочет подключиться к серверу, сообщает своему TCP, что ему надо подсоединится к конкретному серверу. TCP может теперь начинать процесс взаимодействия в три шага, как это показано на Рис. 11.11.
Имеются следующие шаги этого процесса:
(рис 11.11) Метод взаимодействия в три шагаНестандартная ситуация может возникнуть, когда оба процесса создадут активное открытие. В этом случае оба TCP пошлют друг другу сегмент
Любые две стороны, включенные в обмен данными (клиент или сервер), могут завершить соединение. Когда соединение в одном направлении закончено, другая сторона может продолжить передачу данных в обратном направлении. Поэтому для завершения соединения в обоих направлениях нужны четыре действия:
Шаги 2 и 3 могут возникнуть одновременно, соединение может быть завершено в одном направлении, но остаться открытым для другого направления.
Окончание соединения, приведенное выше, называется методом взаимодействия в четыре шага. В этой процедуре прикладная программа, обычно клиент, хочет завершить соединение.
Процедура начинается с клиента. Программа клиента говорит TCP, что она оканчивает передачу данных и желает завершить соединение. Это – запрос на действия по окончанию.
После получения запроса на действия по окончанию клиент TCP закрывает связь в направлении клиент-сервер. Однако связь в другом направлении еще открыта.
Когда программа сервера закончит посылку данных в направлении сервер-клиент, он может запросить от TCP закрыть соединение в направлении сервер-клиент. Это обычно пассивное окончание. Метод взаимодействия в четыре шага показан на Рис. 11.12.
(рис 11.12) Метод взаимодействия в четыре шагаЧетыре шага – это:
TCP может запросить переустановление соединения для несуществующего порта. Переустановление здесь означает, что текущее соединение нарушено. Это случается в одном из трех случаев:
Как уже обсуждалось, передающий TCP использует буфер, чтобы накопить поток данных, поступивших от передающих прикладных программ; а передающий TCP может выбрать размер сегментов. Принимающий TCP также применяет
Однако имеются случаи, в которых прикладной программе неудобна такая практика. Например, рассмотрим прикладную программу, которая взаимодействует с другой прикладной программой на другом конце. Прикладная программа на одной стороне хочет послать нажатие клавиши к приложению на другой стороне и получить немедленный отклик в конце.
TCP может обработать такую ситуацию. Прикладная программа на передающей стороне может запросить операцию "протолкнуть" (push). Это означает, что передающий TCP не должен ждать заполнения окна. Он должен создать сегмент и послать его немедленно. Передающий TCP должен также установить push(PSH)-бит, чтобы сказать, что сегмент включает данные, которые должны быть доставлены к принимающей прикладной программе так быстро, как это возможно, и не ждать, пока поступят другие данные.
Хотя операция "проталкивание" может быть запрошена прикладной программой, сегодня большинство реализаций игнорируют такой запрос. TCP может выбирать или нет эту операцию.
TCP — протокол, ориентированный на поток. Это означает, что данные представляются прикладной программой для TCP как поток символов. Каждый байт данных имеет позицию в потоке. Однако имеются случаи, в которых прикладной программе нужно послать срочный байт. Это означает, что передающая прикладная программа хочет передать вне очереди квант данных приемной программе. Предположим, что передающая прикладная программа посылает данные, обрабатываемые приемной программой. Когда обратно поступит результат обработки, передающая прикладная программа может обнаружить серьезные нарушения. Она захочет прервать процесс, но уже послано огромное количество данных. Если дать команду остановки процесса (Control + C), эти два символа будут накоплены в буфере TCP приемного конца и эта команда будет доставлена к приемной программе после того, как все эти данные будут обработаны, то есть слишком поздно.
Решение — послать сегмент с установленным битом URG. Передающая прикладная программа таким образом сообщит передающему TCP, что квант данных — срочный. Передающий TCP создаст сегмент и вставит срочные данные в начало сегмента. Остальной сегмент может содержать нормальные данные из буфера. Поле указателя срочности в заголовке определяет конец срочных данных и начало нормальных данных.
Когда принимающий TCP получает сегмент с установленным битом URG, он извлекает срочные данные из сегмента, используя значение указателя срочности, и доставляет их вне очереди к приемной прикладной программе.
TCP — очень сложный протокол. Он обслуживает поток, он ориентирован на соединение со сложной диаграммой переходов состояний. Он использует управление потоком и контроль ошибок. Он также сложен потому, что действующие коды составляют десятки тысяч строк.
В этом разделе мы представим простейшую блок-схему TCP. Наша цель — показать, как мы можем имитировать основу TCP, представленную
Совокупность модулей включает таблицу, называемую блоком управления передачей (transmission control block – TCB), установку таймера и три программных модуля. На Рис. 11.13. показаны 5 компонентов и их взаимодействие.
(рис 11.13) Блок-схема TCPПоскольку в любой момент времени мы можем иметь несколько соединений,
(рис 11.14) Общий вид таблицы TCB
Алгоритм работы главного модуля TCP показан на Рис. 11.15.
Этот алгоритм нарисован с помощью символов SDL, которые уже применялись при описании алгоритмов UDP. Такой подход называется автоматным и позволяет отображать алгоритмы в виде переходов от состояния к состоянию конечных автоматов. В дальнейшем при рассмотрении программного обеспечения телефонных станций будет продемонстрировано, как такой подход упрощает программирование. Там же будет рассмотрен подробно порядок задания конечного автомата.
Ниже приводятся таблицы, в которых перечисляются состояния ( таблице 11.2.), входы ( таблице 11.3.), выходы ( таблице 11.4.), используемые в данном алгоритме.
| СОСТОЯНИЕ | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| CLOSED | ЗАКРЫТО | Нет соединения |
| LISTEN | СЛУШАЮ | Сервер ожидает вызова от клиента |
| ПЕРЕДАЧА | Соединение запрашивает передачу; ожидание подтверждения | |
| ПРИЕМ | Состояние ожидания приема | |
| ESTABILISHED | УСТАНОВЛЕНО | Соединение установлено |
| FIN-WAIT1 | ОЖИДАНИЕ ОКОНЧАНИЯ1 | Клиент запросил закрытие соединения |
| FIN-WAIT2 | ОЖИДАНИЕ ОКОНЧАНИЯ2 | Другая сторона принимает закрытие соединения |
| CLOSING | ЗАВЕРШАЮЩЕЕ | Обе стороны решили закрыть соединение одновременно |
| TIME-WAIT | ВРЕМЯ ОЖИДАНИЯ | Ожидание повторной передачи |
| CLOSE-WAIT | ОЖИДАНИЕ ЗАКРЫТИЯ | Сервер ожидает закрытия приложения |
| LAST-ASK | ПОСЛЕДНЕЕ ПОДТВЕРЖДЕНИЕ | Сервер ожидает последнего подтверждения |
| ВХОД | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| Активное открытие | Заявка процесса на передачу данных | |
| Пассивное открытие | Заявка на входящую связь (ожидается заявка от процесса соединения для приема) | |
| Повторная передача | Запрос на переустановление соединения | |
| Send | Передача | Запрос на передачу |
| Запрос | Запрос на соединение | |
| Подтверждение запроса | Подтверждение запроса на соединение | |
| ACK | Подтверждение | Подтверждение сигнала |
| FIN | Отбой | Запрос на завершение соединения |
| FIN+ACK | Подтверждение отбоя | Подтверждение сигнала на окончательное соединение |
| Close | Закончить | Сигнал, о том, что данная сторона закончила соединение |
| Time-out | Контрольное время | Окончание установленного контрольного времени |
| ВЫХОД | Описание | |
|---|---|---|
| Английское обозначение | Русское обозначение | |
| Заявка на передачу | Сегмент, который посылается другой стороне, как заявка на передачу | |
| Подтверждение заявки | Подтверждение заявки на передачу | |
| ACK | Подтверждение | Подтверждение сигнала |
| FIN | Отбой | Сигнал, на окончательное завершение |
| Запрос на прием | Заявка на соединение для приема | |
| FIN | Отбой | Сигнал, на окончательное завершение |
| Time-out | Контрольное время | Окончание установленного контрольного времени |
Рассмотрим работу алгоритма на Рис. 11.15. (стр. 1-3).

(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.1)(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.2)
(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.3)(рис 11.15) Алгоритм работы главного модуля совокупности программ управления TCP (стр.4)Алгоритм находится в начальном состоянии ЗАКРЫТО (Оператор 1). В данном случае инициатор (клиент) вырабатывает команду для TCP активное открытие (Оператор 10); клиент подключается к прикладной программе и посылает сегмент
Если алгоритм не получает сигнала подтверждения запроса
В состоянии ESTABLSHED (УСТАНОВЛЕНО) — Оператор 20 (стр.2) — алгоритм может получать данные (Операторы 30-32) или информацию от приложения (Операторы 33-35).
Клиент остается в этом состоянии столько времени, сколько он посылает и получает данные.
В этом состоянии клиент TCP может принять запрос на окончание от прикладной программы клиента. Он посылает сегмент Отбой (FIN) к другому TCP и переходит в состояния ОЖИДАНИЕ ОКОНЧАНИЯ1 – (FIN-WAIT1) — Оператор 36 (стр.3).
В этом состоянии клиент TCP ожидает получить ACK (Оператор 52, стр.3) от сервера TCP. ACK получен, клиент переходит в состояние FIN-WAIT2 (ОЖИДАНИЕ ОКОНЧАНИЯ2) — Оператор 54 (стр.3). Он не посылает ничего. Теперь соединение закрыто в одном направлении.
Клиент остается в этом состоянии, ожидая окончания соединения с другого конца. Если клиент получает сегмент FIN (Отбой) с другого конца — Оператор 55 (стр.3), он посылает сегмент ACK — Оператор 56 (стр.3) и переходит в состояние TIME-WAIT (ВРЕМЯ ОЖИДАНИЯ) — Оператор 42 (стр.3). Когда клиент в этом состоянии, он включает таймер контрольного времени и ждет, пока этот таймер закончится. Значение этого времени устанавливается равным двойному времени передачи максимального размера сегмента. Клиент остается еще некоторое в состоянии неполного закрытия, чтобы дублировать пакет, если какой-либо пакет достигает своего пункта назначения и будет отклонен. После тайм-аута клиент переходит в состояние CLOSED (ЗАКРЫТО) и алгоритм переходит в начальное состояние.
Кроме того, на Рис. 11.15.(стр.3) показаны еще два возможных случая завершения соединения: когда в этом состоянии приходит отбой с другого конца (одновременный отбой) либо отбой приходит вместе с подтверждением.
Алгоритм начинает работу в состоянии CLOSED (ЗАКРЫТО) – Оператор 1. В этом состоянии TCP алгоритм может получить запрос на пассивное открытие (Оператор 2). Он переходит в состояние LISTEN (СЛУШАЮ) – Оператор 4. Во время этого состояния TCP-сервер может получить сегмент
В этом состоянии TCP-сервер может получить сегмент ACK от клиента TCP (Оператор 58 на стр.4). Он переходит в состояние ESTABILISHED (УСТАНОВЛЕНО) – Оператор 20 (стр.2). Это состояние передачи данных. Алгоритм остается в этом состоянии на время получения и передачи данных, после чего выполняется алгоритм, указанный на Рис. 11.15.(стр.2)
В этом состоянии TCP-сервер может получить сегмент CLOSE (оператор 24) от клиента — это означает, что клиент желает завершить соединение. Он может послать сегмент FIN клиенту и перейти к состоянию FIN-WAIT1(ОЖИДАНИЕ ОКОНЧАНИЯ1). Далее выполняется алгоритм по Рис. 11.15.(стр.3)
По правилам составления спецификаций в каждом состоянии предусматривается поступление сигналов, которые отличаются от перечисленных для данного входа. Это ситуация сбоя или ошибки. В этом случае формируется сообщение об ошибке. На Рис. 11.15. эта часть алгоритма не показана.
05320017 00000001 00000000 500207АА 00000000
Дополнительный материал для прохождения тестирования к лекции, Вы можете скачать здесь.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.