Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
Размер окна в протоколе TCP не является постоянным. В каждом сообщении, подтверждающем получение данных, которое присылает получатель, указывается количество принятых октетов и объявление окна. В этом объявлении определяется количество дополнительных октетов данных, которые сможет принять получатель. В данном контексте объявление окна можно рассматривать в качестве сообщения, присылаемого получателем потока данных, в котором говорится о текущем размере буфера данных.
В ответ на получение объявления окна, в котором говорится об увеличении размеров, отправитель данных соответствующим образом увеличивает размер своего скользящего окна, отправляя дополнительные данные еще до того, как будет получено подтверждение о приеме данных. Если же получено объявление окна, в котором сообщается об уменьшении размеров,
Экземпляр протокола TCP не обязан немедленно реагировать на прием объявления окна, в котором указаны уменьшенные размеры, смещая влево границу окна в потоке данных. Следует просто дождаться подтверждения приема данных, временно «замораживая» их отсылку. Поэтому спустя некоторое время размер окна уменьшится автоматически по мере смещения его левой границы вправо.
Благодаря окну переменного размера повышается надежность передачи данных и обеспечивается управление потоком данных. Чтобы не допустить переполнения буфера, следует по мере его заполнения отсылать объявления окон меньшего размера. Иногда в целях прекращения передачи данных получатель объявляет окно нулевого размера. Если же буфер памяти очистится, получатель отсылает объявление ненулевого окна для возобновления передачи данных.
Механизм управления потоком данных, используемый протоколом TCP, весьма важен для функционирования реальной сети, объединяющей множество других локальных сетей различной протяженности и пропускной способности. При этом возникают некоторые сложности. Первая проблема связана с различной производительностью компьютеров, подключенных к сети. В качестве решения этой проблемы используется сквозное управление потоком данных между компьютером-отправителем и компьютером-получателем. Следует обратить внимание на то, что применяемые в сети промежуточные устройства тоже должны уметь производить сквозной контроль данных. Если промежуточное устройство не справляется с поступающим потоком данных, наступает состояние перегрузки. В этом случае задействуются соответствующие механизмы устранения перегрузки.
Структура ТСР-сегментов
Выше уже отмечалось, что в протоколе TCP передаваемые данные реализованы в виде сегментов, которые применяются для установки соединения, передачи данных, отправки сигналов подтверждения приема, объявления размера окон и закрытия соединения. Формат сегмента протокола TCP приведен на рис. 4.5.
Рис. 4.5. Структура заголовка сегмента TCP
Каждый сегмент состоит из заголовка и раздела данных. В заголовке располагаются идентификационные данные и управляющая информация. Его структура подробно описана в списке.
– Поле Source port (Порт компьютера-отправителя). Это 16-разрядное поле применяется для идентификации порта, используемого приложением, отсылающим данные.
– Поле Destination port (Порт компьютера-получателя). Это 16-разрядное поле применяется для идентификации порта компьютера-приемника.
– Поле Sequence number (Последовательный номер). Это 32-разрядное поле применяется для повторной сборки фрагментов в одно большое сообщение после получения IP-пакета.
– Поле Acknowledgment number (Номер подтверждения). Это 32-разрядное поле хранит сведения о последовательном номере подтверждения приема IP-пакета.
– Поле Data offset (Смещение данных). В этом 4-разрядном поле указывается количество разделов данных, формирующих заголовок IP-пакета. Именно это поле позволяет определить место нахождения раздела данных в пакете.
– Поле Reserved (Зарезервировано). Это 6-разрядное поле зарезервировано для использования в будущем.
– Поле URG. Это битовое поле определяет «срочность» данных, содержащихся в пакете.
– Поле АСК. Это поле определяет передачу подтверждения (Acknowledgment) о приеме пакета.
– Поле PSH. Это поле определяет состояние «выталкивания» для данных, содержащихся в пакете.
– Поле RST. Это битовое поле определяет переустановку соединения, если ему присвоено единичное значение.
– Поле SYN. Это битовое поле определяет синхронизацию передаваемых последовательных номеров.
– Поле FIN. Данное поле определяет завершение передачи данных.
– Поле Window (Окно). Данное 16-разрядное поле
определяет количество блоков данных, принимаемых компьютером-получателем.– Поле Checksum (Контрольная сумма). Это 16-разрядное поле обеспечивает проверку целостности разделов, содержащих заголовок и данные пакета.
– Поле Urgent pointer (Указатель срочности). Совместно с полем URG данное поле определяет «срочность» передаваемых данных.
– Поле Options (Параметры). При помощи этого поля переменной длины производится определение максимального размера передаваемых сегментов данных.
Поскольку протокол TCP является потоково-ориентированным, приложение, которое выполняется на одном конце соединения, может потребовать внеочередной отправки данных другому приложению. В данном случае речь идет о том, чтобы программа на другом конце соединения получила их сразу, не ожидая приема октетов, которые были отправлены раньше. Например, если протокол TCP используется для установки сеанса связи с удаленным терминалом, пользователю иногда нужно послать удаленной программе специальный сигнал с клавиатуры, который прервет ее выполнение. Обычно подобные сигналы посылаются, если программа, выполняемая удаленным компьютером, зависла или претерпела фатальный сбой. В данном случае управляющие сигналы должны передаваться программе вне очереди, без ожидания, пока она считает из входного потока все посланные ранее октеты. В противном случае, если программа по какой-либо причине прекратит считывание потока данных, то управляющие сигналы никогда не попадут по месту назначения.
Для реализации режима передачи внеочередных сигналов в протоколе TCP для отправителя предусмотрена возможность задавать в сегменте метку срочности. Это означает, что программа-получатель должна быть извещена о поступлении таких данных насколько возможно быстро, вне зависимости от состояния входящего потока данных. В спецификации протокола указано, что после поступления срочных данных экземпляр протокола TCP должен уведомить приложение, открывшее соединение, о переходе в «срочный режим» работы. После того как набор срочных данных будет получен, экземпляр протокола TCP уведомляет приложение о переходе в обычный режим работы.
Естественно, все детали механизма уведомления прикладной программы о прибытии срочных данных зависят от используемой на компьютере операционной системы. Однако при отправке срочных данных этот механизм унифицирован. Для этого полю URG присваивается единица, а полю указателя срочных данных присваивается соответствующее значение. Если полю URG присвоена единица, поле указателя срочных данных определяет позицию в сегменте, где завершается раздел «срочных» данных.
Через открытое соединение отсылаются сегменты данных, имеющие различный размер. Естественно, обе стороны должны заранее «договориться» о максимально допустимой длине передаваемого сегмента. Для обмена информацией с модулем протокола TCP, запущенным на противоположной стороне соединения, используется поле параметров протокола (Options). Один из этих параметров позволяет определить максимальный размер сегмента (MSS, Maximum Segment Size). Например, если небольшой компьютер, оснащенный малым объемом оперативной памяти, подключается к мощному суперкомпьютеру, сначала требуется передать последнему сведения о максимальном размере сегмента. Иначе может сложиться такая ситуация, что получаемые от суперкомпьютера сегменты не поместятся в выделенном для этой цели буфере памяти.
Этот параметр играет важную роль, если компьютеры подключены к высокоскоростной локальной сети. Для увеличения пропускной способности сети максимальный размер сегмента должен быть таким, чтобы он целиком помещался в пакете данных. Поэтому, если отправитель и получатель находятся внутри одной физической сети, экземпляр протокола TCP обычно выбирает максимальный размер сегмента таким образом, чтобы результирующая IP-дейтаграмма соответствовала максимальному размеру модуля данных (MTU), который передается в физической сети. Если же отправитель и получатель находятся в разных физических сетях, то можно попытаться определить минимальный размер MTU сети, находящейся по пути передачи пакетов, или установить максимальный размер сегмента равным 536 байтам. Это значение получается путем вычитания из стандартного размера IP-дейтаграммы (576 байтов) значения стандартного размера заголовков пакетов IP и TCP.