Экстернат |
Управление перегрузкой и основные алгоритмы работы TCP
Контрольная сумма
Вычисление контрольной суммы TCP следует той же самой процедуре, что была описана для UDP в предыдущем разделе. Однако включение контрольной суммы в дейтаграмму UDP необязательно, в то время как включение контрольной суммы для TCP обязательно.
Тот же самый псевдозаголовок, предназначенный для тех же самых целей, дополняет сегмент. Для псевдозаголовка TCP значение поля протокола – 6 ( Рис. 11.10.).
Соединение
TCP — это протокол, ориентированный на соединение. Протокол, ориентированный на соединение, устанавливает виртуальное соединение между источником и пунктом назначения. Все сегменты, принадлежащие сообщению, затем посылаются этим виртуальным путем. Он используется для ввода сообщений оборудования, процесса подтверждения, а также для повторной передачи поврежденных или потерянных кадров.
В TCP передача, ориентированная на соединение, требует двух процедур: установления соединения и окончания соединения.
Установление соединения
TCP передает данные в нормальном дуплексном режиме. Когда два TCP в двух компьютерах соединены, они могут послать друг другу данные одновременно. Это предполагает, что каждая сторона может инициализировать коммутацию и получить одобрение другой стороны перед каждой передачей данных. Предпринимаются четыре действия, прежде чем названные здесь хост A и хост B смогут послать данные.
- Хост A посылает сегмент, чтобы известить о своем желании установить связь, и включает в сообщение начальную информацию о трафике от A к B.
- Хост B посылает сегмент для подтверждения запроса A.
- Хост B посылает сегмент, который включает его начальную информацию о трафике между A и B.
- Хост A посылает сегмент, чтобы подтвердить запрос B.
Это установление соединения достигается в четыре шага. Однако шаги 2 и 3 могут возникнуть одновременно, они могут быть скомбинированы в один шаг. Хост B может завершить запрос хоста A и послать свой собственный запрос в одно и то же время.
Метод взаимодействия в три шага
Установление соединения, рассмотренное выше, называется методом взаимодействия в три шага. В этой процедуре прикладная программа, называемая "клиент", желает установить связь с другой прикладной программой, называемой "сервер", используя TCP как транспортный протокол.
Процедура тройного подтверждения связи начинается с сервера. Программа сервера говорит ему, что TCP готов принять соединение. Это называется запросом пассивного открытия. Хотя сервер TCP готов принять любое соединение от любого компьютера в мире, но он не может сам установить это соединение.
Программа клиента делает запрос на активное открытие. Клиент, который хочет подключиться к серверу, сообщает своему TCP, что ему надо подсоединится к конкретному серверу. TCP может теперь начинать процесс взаимодействия в три шага, как это показано на Рис. 11.11.
Имеются следующие шаги этого процесса:
- Клиент посылает первый сегмент — SYN-сегмент. Этот сегмент включает номера источника и пункта назначения. Пункт назначения явно определяет сервер, к которому клиент хочет подсоединиться. Сегмент, содержащий начальный порядковый номер клиента (ISN – Initialization Sequence Number), в примере он равен 1200, также используется для нумерации байтов данных, посылаемых от клиента к серверу. Если клиент хочет определить максимальный размер сегмента (MSS — Maximum Segment Size), который он может принимать от сервера, он может дополнить тут же соответствующую опцию. Также если клиенту надо большее окно, он задает масштабный коэффициент окна, используя соответствующую опцию. Этот сегмент определяется желанием клиента сделать соединение с определенного рода параметрами. Заметим, что этот сегмент не содержит никаких номеров подтверждения. Он не определяет размера окна; размер окна передается, только когда сегмент содержит подтверждение.
- Сервер посылает второй сегмент, SYN + ACK. Этот сегмент имеет двойную цель. Первая: подтверждение получения первого сегмента, использующего флаг ACK и поле подтверждающего номера. Подтверждающий номер – это начальный номер клиента плюс один (1201). Сервер должен также определить размер окна клиента. Второй сегмент воспринимается как начальный сегмент для сервера. Он содержит начальный порядковый номер (4800), используя номер байта, посланного от сервера к клиенту. Он также содержит опцию масштабного коэффициента окна (если это надо) для использования сервером и MSS, определенный сервером. Как мы говорили раньше, это два сегмента, скомбинированные в один.
- Клиент посылает третий сегмент. Это только сегмент ACK. Он подтверждает сообщение второго сегмента, использующего ACK. Он содержит поле подтверждающего порядкового номера: это начальный порядковый номер сервера плюс единица (4801). Клиент должен также определить размер окна сервера. Заметим, что данные могут быть посланы с третьим пакетом.
Нестандартная ситуация может возникнуть, когда оба процесса создадут активное открытие. В этом случае оба TCP пошлют друг другу сегмент SYN + ACK, и между ними будет установлено одно-единственное соединение.