Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
– Поле Encapsulating Security Payload (Инкапсуляция раздела данных, связанного с обеспечением безопасности). Применяется для обеспечения безопасности.
– Поле Upper layer header (Заголовок верхнего уровня). Здесь описываются данные, которые находятся в разделе данных IP-пакета.
Дополнительные заголовки, связанные с протоколом IPv6, приводят к уменьшению полезных данных, «переносимых» IP-пакетом. Эта особенность должна учитываться протоколами верхнего уровня, реализующими управление передачей данных.
Теперь настала очередь протокола TCP, который тоже является одним из базовых сетевых протоколов.
Протокол TCP
Как и протокол IP, протокол TCP отвечает за передачу данных между сетевыми
Протокол TCP логически располагается на более высоком уровне, чем протокол IP. Он позволяет нескольким приложениям параллельно и независимо обмениваться данными с приложениями, запущенными на других машинах. Так же, как и UDP, протокол TCP демультиплексирует входной трафик между несколькими приложениями. Поэтому по аналогии с протоколом UDP, в протоколе TCP также используется понятие номеров портов, позволяющих идентифицировать конкретный компьютер-получатель информации. Каждому из портов для идентификации присваивается соответствующее целое число.
При описании протокола TCP используется понятие абстрактного соединения, осуществляемого с применением виртуальных каналов связи. Для каждого соединения назначаются конечные точки соединения. В данном случае под конечной точкой понимается целочисленная пара чисел вида узел, порт, где параметр узел определяет IP-адрес узла сети, а параметр порт определяет номер порта TCP для данного узла. Например, запись (139.15.1.5, 13) определяет конечную точку, которая характеризуется TCP-портом с номером 13, относящимся к компьютеру с IP-адресом 139.15.1.5.
Теперь, после формулирования понятия конечной точки, несложно определить термин «соединение». Поскольку любое соединение идентифицируется парой определяющих его конечных точек, достаточно указать IP-адреса и ТСР-порты для этих точек.
На самом деле это упрощенная модель соединения, поскольку в данном случае номера портов для соединений уникальны. На практике же бывает так, что одна и та же конечная точка используется несколькими соединениями. При этом неоднозначности не возникает, поскольку в протоколе TCP все соединения связаны с открытым соединением, определяемым парой конечных точек, а вовсе не с номерами портов.
Концепция абстрактного соединения играет важную роль в программировании. В частности, разработчик может создать программу, выполняющую один и тот же набор функций с несколькими открытыми соединениями. При этом нет необходимости использовать для каждого соединения уникальный номер локального порта. Например, в большинстве операционных систем поддерживается возможность одновременного доступа нескольких клиентов к службе электронной почты. Благодаря этому несколько клиентских компьютеров могут одновременно отправлять почтовые сообщения, а необходимость в этом возникает достаточно часто. Поскольку программа, принимающая входящие сообщения, использует для связи протокол TCP, для ее работы достаточно назначить лишь один локальный порт, несмотря на то, что могут одновременно обрабатываться несколько соединений.
Для реализации передачи данных при использовании протокола TCP требуется предварительная установка соединения. На практике это означает предварительную «договоренность» между конечными точками, участвующими в соединении. При этом «переговоры»
ведутся приложениями, функционирующими на компьютерах, между которыми устанавливается соединение. Одно из приложений реализует функцию пассивного открытия соединения. Вызов подобной функции сигнализирует о том, что данная сторона готова к приему входящих соединений. После этого операционная система назначает номер TCP-порта для собственной конечной точки текущего соединения.Приложение, которое выполняется на другом конце виртуального канала, обращается к операционной системе с запросом на активное открытие соединения. При этом два экземпляра протокола TCP взаимодействуют друг с другом. В ходе этого взаимодействия проверяется возможность установки соединения.
После того как соединение будет установлено, приложения могут начать процесс обмена данными. При этом экземпляры протокола TCP в фоновом режиме обмениваются служебными сообщениями, гарантирующими надежность доставки данных. Подробнее процесс установки соединения будет рассмотрен после изучения формата сообщения протокола TCP.
В протоколе TCP поток данных разбивается на сегменты, состоящие из последовательности байтов (октетов). Как правило, каждый сегмент данных передается в сети в виде единственной IP-дейтаграммы. Для повышения эффективности передачи данных и управления потоком данных в протоколе TCP используется специальный механизм скользящих окон. В этом случае экземпляр протокола TCP может отправлять сразу несколько сегментов данных еще до того, как будет получено соответствующее сообщение относительно их доставки. Благодаря этому увеличивается общая пропускная способность сети, поскольку сокращается время ее простоя. Также становится реальной «голубая мечта разработчиков» – сквозное управление потоком данных. Получатель может использовать средства, позволяющие ограничить поток передаваемых данных в случае нехватки буферной памяти, используемой для хранения промежуточных данных.
Благодаря использованию скользящих окон протокол TCP оперирует октетами (байтами) данных (рис. 4.4, а), а не сегментами или пакетами. При этом октеты потока данных нумеруются последовательно, а компьютер-отправитель запоминает три указателя для каждого открытого соединения. Именно по этим указателям определяется скользящее окно (рис. 4.4, б).
Первый указатель обозначает левую границу скользящего окна. Он разделяет октеты на успешно доставленные получателю и те, которые отправлены в сеть, но подтверждение их успешной доставки еще не получено. Второй указатель обозначает правую границу скользящего окна. Он определяет номер старшего октета последовательности, который может быть передан в сеть до получения подтверждения о доставке других октетов, находящихся в окне. Третий указатель обозначает границу внутри окна, разделяющую последовательность октетов на уже отправленные в сеть и те, которые еще только предстоит отправить. Модуль протокола отправляет в сеть все октеты, находящиеся в окне, без задержки. Поэтому граница внутри окна, определяемая третьим указателем, обычно перемещается слева направо очень быстро.
Рис. 4.4. Скользящее окно протокола TCP
Экземпляр протокола TCP, выполняемый на компьютере-отправителе, перемещает окно вдоль последовательности октетов. Экземпляр протокола TCP, выполняемый на компьютере-получателе, формирует точно такое же окно для того, чтобы собрать поток получаемых данных. Следует учитывать, что соединения, устанавливаемые протоколом TCP, являются дуплексными. Это означает, что одновременно по каждому из виртуальных каналов можно передавать два потока данных в противоположных направлениях. Поэтому экземпляры протокола TCP, выполняемые на обоих концах соединения, поддерживают для каждого соединения по два окна. Одно окно в этой паре применяется для передачи потока данных, а второе – для их приема.