TCP, протокол управления передачей
Для обеспечения надежной доставки данных на уровне транспортного протокола в приложениях используется протокол TCP, проверяющий факт доставки данных по сети в нужном порядке. TCP - надежный, потоковый протокол, требующий создания логических соединений. Рассмотрим боле е подробно каждую из этих характеристик. Надежность в TCP обеспечивает механизм подтверждения приема с повторной передачей (Positive Acknowledgment with Retransmission, PAR) . Система, в которой применяется PAR, повторяет отправку данных до тех пор, пока не получит от системы-адресата подтверждение, что данные успешно получены. Единицей обмена данными для взаимодействующих модулей TCP является сегмент. Каждый сегмент содержит контрольную сумму, посредством которой получатель определяет целостность данных. Если сегмент данных получен в целости и сохранности, получатель отправляет источнику подтверждение. Поврежденные сегменты данных просто игнорируются получателем. По истечении установленного интервала ожидания модуль-источник TCP повторно выполняет передачу всех сегментов, для которых не были получены подтверждения.
111
TCP ориентирован на работу с соединениями. В целях обмена данными между двумя узлами образуется сквозное логическое соединение. Перед началом передачи данных (беседы) узлы обмениваются управляющей информацией (рукопожатием). Управляющий статус сегмента TCP отражается посредством соответствующего флага поля Флаги в четвертом слове заголовка сегмента.
В TCP применяется установление соединения с помощью тройного рукопожатия; производится обмен тремя сегментами. Простейший вариант тройного рукопожатия показан на рис. 1.10. Узел А открывает соединение, посылая узлу В сегмент с установленным битом «синхронизации порядковых номеров» (Synchronize sequence numbers, SYN). Сегмент сообщает узлу В, что А желает создать соединение и уведомляет о том, какой порядковый номер будет использоваться в качестве начального в сегментах А. (Порядковые номера применяются для сохранения порядка следования данных.) Узел В отвечает узлу А сегментом с установленными битами «подтверждения» (Acknowledgment, АСК) и синхронизации (SYN). Сегмент В подтверждает получение сегмента от А, а также уведомляет, какой порядковый номер станет начальным для сегментов А. Наконец, узел А передает сегмент, подтверждающий получение сегмента от В, а также первый блок непосредственно данных.
После такого обмена TCP-модуль узла А обладает всеми свидетельствами того, что удаленный TCP-модуль функционирует и готов принимать данные. Как только соединение установлено, передача данных получает зеленый свет. После завершения передачи данных взаимодействующие модули обмениваются тройным рукопожатием, содержащим сегменты с так называемым битом FIN (No more data from sender, у источника больше нет данных), в целях закрытия соединения. Именно сквозной обмен данными становится логическим соединением между двумя системами.
В TCP данные считаются непрерывным потоком байтов, а не набором независимых пакетов. Следовательно, TCP предпринимает меры для сохранения последовательности отправки и получения байтов. Этой цели служат поля заголовк а сегмент а TCP - Порядковый номер и Номер подтверждения.
Стандарт TCP не определяет конкретных чисел, с которых должна начинаться нумерация; каждая система самостоятельно выбирает точку начала отсчета. Чтобы корректно отслеживать порядок в потоке данных, каждая из взаимодействующих сторон должна знать исходный номер второй стороны. Две стороны соединения синхронизируют системы нумерации байтов, обмениваясь SYN-сегментами в ходе рукопожатия. Поле Порядковый номер SYN-сегмент а содержи т исходный порядковый номер (Initial Sequence Number, ISN), который является точкой отсчета для системы нумерации байтов. Из соображений безопасности ISN следует быть случайным числом.
Каждый байт данных нумеруется последовательно, начиная с номера ISN, так что первый байт непосредственно данных имеет порядковый номер ISN+1. Порядковый номер в заголовке сегмента с данными указывает на порядковое положение в потоке данных первого байта данных сегмента. Например, если первый байт потока данных имел порядковый номер 1 (при ISN = 0), а 4000 байт данных уже получены адресатом, первый байт данных текущего сегмента является байтом 4001, и будет иметь порядковый номер 4001. Подтверждающий сегмент (Acknowledgment Segment, АСК) выполняет две функции : подтверждения приема и управления потоком. Подтверждение сообщает источнику, какой объем данных получен и сколько еще данных адресат способен принять. Номер подтверждения - это порядковый номер следующего байта, ожидаемый адресатом. Стандарт не требует создания подтверждения для каждого пакета. Номер подтверждения является подтверждением получения всех байтов, вплоть до этого номера. Например, если первый отправленный байт имел номер 1 и 2 ООО байт данных уже получены адресатом, номер подтверждения будет иметь значение 2001.
Поле Окно содержит значение окна, то есть количество байт, которое способен принять адресат. Если адресат способен принять еще 6000 байт, окно имеет значение 6000. Окно является указанием источнику, что можно продолжать передачу сегментов, если общий объем передаваемых байт меньше байтового окна адресата. Адресат управляет потоком байтов источника, изменяя размер окна. Нулевое окно предписывает отправителю прекратить передачу, пока не будет получено ненулевое значение окна.
На рисунке приведен поток данных TCP с нулевым значением исходного порядкового номера. Адресат получил и подтвердил получение 2000 байт, поэтому текущий номер подтверждения - 2001. Кроме того, адресат обладает возможностью принять еще 6000 байт, а потому предъявляет окно со значением 6000. Источник отправляет сегмент размером в 1000 байт с порядковым номером 4001. Для байтов 2001 и последующих еще не были получены подтверждения, однако источник продолжает передачу данных, пока не ис- черпаны ресурсы окна. Если на момент заполнения окна источником для уже отправленных данных не получены подтверждения, по истечении определенного интервала ожидания источник повторно передает данные, начиная с первого неподтвержденного байта.
В отсутствие последующих подтверждений повторная передача начнется с байта 2001. Данный метод гарантирует надежность доставки данных адресату.
Кроме того, TCP отвечает за доставку полученных от IP данных соответствующему приложению. Приложение, которому предназначаются данные, обозначаетс я 16-битным числом, номером порта. Значени я Исходный порт
111
и Целевой порт содержатся в первом слове заголовка сегмента. Корректный обмен данными с прикладным уровнем - это важная составляющая функциональности служб транспортного уровня.