Опубликован: 11.08.2008 | Уровень: специалист | Доступ: платный
Лекция 11:

Управление перегрузкой и основные алгоритмы работы TCP

Окончание соединения

Любые две стороны, включенные в обмен данными (клиент или сервер), могут завершить соединение. Когда соединение в одном направлении закончено, другая сторона может продолжить передачу данных в обратном направлении. Поэтому для завершения соединения в обоих направлениях нужны четыре действия:

  1. Хост A посылает сегмент, извещающий о его желании закончить соединение.
  2. Хост B посылает сегмент, подтверждающий запрос A. После этого завершает соединение в одном направлении, но не в другом. Хост B может продолжить послать данные к A.
  3. Когда хост B закончит передачу своих данных, он посылает сегмент, чтобы указать, что он желает завершить соединение.
  4. Хост A подтверждает запрос B.

Шаги 2 и 3 могут возникнуть одновременно, соединение может быть завершено в одном направлении, но остаться открытым для другого направления.

Метод взаимодействия в четыре шага

Окончание соединения, приведенное выше, называется методом взаимодействия в четыре шага. В этой процедуре прикладная программа, обычно клиент, хочет завершить соединение.

Процедура начинается с клиента. Программа клиента говорит TCP, что она оканчивает передачу данных и желает завершить соединение. Это – запрос на действия по окончанию.

После получения запроса на действия по окончанию клиент TCP закрывает связь в направлении клиент-сервер. Однако связь в другом направлении еще открыта.

Когда программа сервера закончит посылку данных в направлении сервер-клиент, он может запросить от TCP закрыть соединение в направлении сервер-клиент. Это обычно пассивное окончание. Метод взаимодействия в четыре шага показан на Рис. 11.12.

Метод взаимодействия в четыре шага

Рис. 11.12. Метод взаимодействия в четыре шага

Четыре шага – это:

  1. Клиент TCP посылает первый сегмент, FIN-сегмент.
  2. Сервер TCP посылает второй сегмент, ACK-сегмент, чтобы завершить получение FIN-сегмента от клиента. В этом сегменте он использует подтверждающий номер, который равен единице плюс порядковый номер, полученный в FIN-сегменте.
  3. TCP-сервер может продолжить передачу данных в направлении сервер-клиент. Когда он не имеет больше данных, он посылает третий сегмент. Этот сегмент – FIN-сегмент.
  4. TCP-клиент посылает четвертый сегмент, чтобы завершить получение FIN-сегмента от TCP-сервера. Этот сегмент содержит подтверждающий номер, который равен единице плюс порядковый номер, полученный в FIN-сегменте от сервера.
Переустановление соединения

TCP может запросить переустановление соединения для несуществующего порта. Переустановление здесь означает, что текущее соединение нарушено. Это случается в одном из трех случаев:

  1. TCP на одной стороне запросил соединение к не существующему порту. TCP на другой стороне может послать сегмент с RST(Reset — переустановление)-битом, установленным, чтобы аннулировать запрос.
  2. Один TCP может прервать соединение из-за ненормальной ситуации. Он может послать сегмент переустановления (RST), чтобы закончить соединение.
  3. TCP на одной стороне может обнаружить, что TCP на другой стороне свободен длительное время. Он может послать RST-сегмент для разрушения соединения.

Операции TCP

Проталкивание данных

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

Однако имеются случаи, в которых прикладной программе неудобна такая практика. Например, рассмотрим прикладную программу, которая взаимодействует с другой прикладной программой на другом конце. Прикладная программа на одной стороне хочет послать нажатие клавиши к приложению на другой стороне и получить немедленный отклик в конце. Задержка передачи и задержка в доставке данных может быть неприемлема для прикладной программы.

TCP может обработать такую ситуацию. Прикладная программа на передающей стороне может запросить операцию "протолкнуть" (push). Это означает, что передающий TCP не должен ждать заполнения окна. Он должен создать сегмент и послать его немедленно. Передающий TCP должен также установить push(PSH)-бит, чтобы сказать, что сегмент включает данные, которые должны быть доставлены к принимающей прикладной программе так быстро, как это возможно, и не ждать, пока поступят другие данные.

Хотя операция "проталкивание" может быть запрошена прикладной программой, сегодня большинство реализаций игнорируют такой запрос. TCP может выбирать или нет эту операцию.

Срочные данные

TCP — протокол, ориентированный на поток. Это означает, что данные представляются прикладной программой для TCP как поток символов. Каждый байт данных имеет позицию в потоке. Однако имеются случаи, в которых прикладной программе нужно послать срочный байт. Это означает, что передающая прикладная программа хочет передать вне очереди квант данных приемной программе. Предположим, что передающая прикладная программа посылает данные, обрабатываемые приемной программой. Когда обратно поступит результат обработки, передающая прикладная программа может обнаружить серьезные нарушения. Она захочет прервать процесс, но уже послано огромное количество данных. Если дать команду остановки процесса (Control + C), эти два символа будут накоплены в буфере TCP приемного конца и эта команда будет доставлена к приемной программе после того, как все эти данные будут обработаны, то есть слишком поздно.

Решение — послать сегмент с установленным битом URG. Передающая прикладная программа таким образом сообщит передающему TCP, что квант данных — срочный. Передающий TCP создаст сегмент и вставит срочные данные в начало сегмента. Остальной сегмент может содержать нормальные данные из буфера. Поле указателя срочности в заголовке определяет конец срочных данных и начало нормальных данных.

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

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989