Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
Механизм управления потоком данных, используемый протоколом 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.
Ранее уже упоминалось, что проблема выбора оптимального размера сегмента данных TCP достаточно сложна, поскольку пропускная способность сети падает при передаче как очень больших, так и слишком малых сегментов. При небольшом размере сегмента эффективность сети будет невысокой. Следует помнить, что сегменты данных TCP в процессе передачи встраиваются в 1Р-дейтаграммы, а они, в свою очередь инкапсулируются во фреймы данных, передаваемые в сети. Поэтому, помимо раздела данных, каждый сегмент содержит, как минимум еще 40 байтов для заголовков TCP-сегмента и IP-дейтаграммы. Из-за этого при передаче дейтаграммы, содержащей только один байт данных, передача пользовательских данных занимает незначительную часть выделенной полосы пропускания сети. А если учесть минимальный межпакетный промежуток и биты синхронизации фреймов, автоматически добавляемые сетевым оборудованием, то это соотношение будет еще меньше.