Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800248

.pdf
Скачиваний:
4
Добавлен:
01.05.2022
Размер:
1.13 Mб
Скачать

возвращает квитанцию. Соединение считается установленным. Далее происходит обмен данными в рамках данного соединения.

Для подтверждения правильности приема сообщений используется механизм квитирования, который работает следующим образом. Для того чтобы можно было организовать повторную передачу искаженных данных, отправитель нумерует отправляемые единицы передаваемых данных (далее для простоты называемые кадрами). Для каждого кадра отправитель ожидает от приемника так называемую квитанцию

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

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

В качестве квитанции получатель сегмента отсылает ответное сообщение (сегмент), в которое помещает число, на единицу превышающее максимальный номер байта в полученном сегменте. Если размер окна равен W, а последняя квитанция содержала значение N, то отправитель может посылать новые сегменты до тех пор, пока в очередной сегмент не попадет байт с номером N+W. Этот сегмент выходит за рамки окна, и передачу в таком случае необходимо приостановить до прихода следующей квитанции.

Одним из наиболее тонких моментов в настройке работы протокола TCP, который влияет на его производительность, является выбор времени ожидания (тайм-аута) очередной квитанции. Тайм-аут не должен быть слишком коротким,

19

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

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

Формат ТСР-сообщения

Сообщения протокола TCP называются сегментами и состоят из заголовка и блока данных. Заголовок сегмента имеет следующие поля:

Порт источника (SOURCE PORT) занимает 2 байта, идентифицирует процесс-отправитель;

Порт назначения (DESTINATION PORT) занимает 2 байта, идентифицирует процесс-получатель;

Последовательный номер (SEQUENCE NUMBER) занимает 4 байта, указывает номер байта, который определяет смещение сегмента относительно потока отправляемых данных;

Подтвержденный номер (ACKNOWLEDGEMENT NUMBER) занимает 4 байта, содержит максимальный номер

20

байта в полученном сегменте, увеличенный на единицу; именно это значение используется в качестве квитанции;

Длина заголовка (HLEN) занимает 4 бита, указывает длину заголовка сегмента TCP, измеренную в 32-битовых словах. Длина заголовка не фиксирована и может изменяться в зависимости от значений, устанавливаемых в поле Опции;

Резерв (RESERVED) занимает 6 битов, поле зарезервировано для последующего использования;

Кодовые биты (CODE BITS) занимают 6 битов, содержат служебную информацию о типе данного сегмента, задаваемую установкой в единицу соответствующих бит этого

поля: URG - срочное сообщение; АСК - квитанция на принятый сегмент; PSH - запрос на отправку сообщения без ожидания заполнения буфера; RST - запрос на восстановление соединения; SYN - сообщение, используемое для синхронизации счетчиков переданных данных при установлении соединения; FIN - признак достижения передающей стороной последнего байта в потоке передаваемых данных.

Окно (WINDOW) занимает 2 байта, содержит объявляемое значение размера окна в байтах;

Контрольная сумма (CHECKSUM) занимает 2 байта, рассчитывается по сегменту;

Указатель срочности (URGENT POINTER) занимает 2 байта, используется совместно с кодовым битом URG, указывает на конец данных, которые необходимо срочно принять, несмотря на переполнение буфера;

Опции (OPTIONS) - это поле имеет переменную длину и может вообще отсутствовать, максимальная величина поля 3 байта; используется для решения вспомогательных задач, например, при выборе максимального размера сегмента;

Заполнитель (PADDING) может иметь переменную длину, представляет собой фиктивное поле, используемое для доведения размера заголовка до целого числа 32-битовых слов.

21

Модули для создания TCP соединения в среде

LabVIEW

ВП создает слушателя и ожидает принимаемое сетевое соединение по протоколу TCP с заданным портом (port) (рис.

12).

Рис. 12. Ожидание принимаемого сетевого соединения по протоколу TCP

Вход сетевой адрес (net address) определяет сетевой адрес. Определение адреса полезно, если имеется более одного сетевого интерфейса и желательно прослушать только один из них с заданным адресом. Если сетевой адрес не определен, то LabVIEW прослушивает все сетевые адреса. Для получения IP адреса текущего компьютера необходимо использовать функцию Строку в IP (String to IP).

Вход порт (port) определяет номер порта, который прослушивается для установления соединения.

Вход лимит времени ожидания, мс (timeout ms)

определяет время в миллисекундах, в течение которого должно быть установлено соединение. Если этого не произошло, то ВП завершается и возвращает ошибку. По умолчанию значение входа равно -1, что определяет неограниченное ожидание.

Выход ID соединения (connection ID) представляет идентификатор сетевого соединения, который однозначно определяет TCP соединение. Это значение используется в качестве ссылки при вызовах последующих ВП.

Выход удаленный адрес (remote address) отображает адрес удаленной машины, связанной с TCP соединением. Этот адрес представляется в формате точечной записи IP адреса.

22

Выход удаленный порт (remote port) отображает порт удаленной системы, используемый для соединения.

Функция открывает сетевое TCP-соединение с заданным

адресом (address) и портом (port) (рис. 13). Закрытие соединения производится с помощью функции Закрыть соединение TCP (TCP Close Connection).

Рис. 13. Открытие сетевое TCP-соединения

Вход адрес (address) задает адрес, с которым должно быть установлено соединение. Этот адрес может быть IPадресом, заданным в точечном формате, или DNS-именем машины. Если адрес не задан, то Lab VIEW осуществляет соединение с локальным компьютером.

Вход удаленный порт (remote port) определяет номер порта для заданного адреса (address), с которым осуществляется соединение.

Вход лимит времени ожидания, мс (timeout ms) задает время в миллисекундах, в течение которого должно осуществиться соединение. Если соединения за указанное время не произошло, то функция завершается и возвращает ошибку. По умолчанию значение времени равно 60,000 мс (1 минута). Установка значения -1 приводит к неограниченному ожиданию.

Вход локальный порт (local port) задает локальный порт соединения. Некоторые серверы разрешают соединения клиентам, которые используют номера портов из определенного диапазона, который зависит от сервера. Если значение на этом входе равно 0, то операционная система выбирает неиспользуемый порт.

23

Функция выхода ID соединения (connection ID) была рассмотрена в предыдущем разделе.

Функция читает заданное число байтов из сетевого соединения по протоколу TCP, возвращая результат на выходе данных (data out) (рис. 14).

Рис. 14. Чтение из ТСР-протокола

Вход режим (mode) устанавливает следующие режимы операции чтения.

0.стандартный (standard) (по умолчанию) - ожидается поступление всех запрошенных байтов или истечение времени, заданного на входе время ожидания, мс. Возвращаются все полученные байты. Если число поступивших байтов оказалось меньше запрошенного, то возвращается частичное количество байтов и сообщается об ошибке по времени ожидания.

1.буферизированный (buffered) - ожидается поступление всех запрошенных байтов или истечение времени. Если число поступивших байтов оказалось меньше запрошенного, то байты не возвращаются и сообщается об ошибке по времени ожидания.

2.CRLF - ожидается прием символа CR (возврат каретки) с последующим LF (перевод строки) с числом запрошенных байтов или истечение времени. Возвращаются все принятые байты и символы CR и LF. Если CR и LF не найдены, то байты не возвращаются и сообщается об ошибке по времени ожидания.

3.немедленный (immediate) - Ожидается прием любого числа байтов. Заданное время ожидается если только

24

отсутствуют принятые байты. Возвращается число принятых байтов. Сообщается об ошибке по времени ожидания при отсутствии принятых байтов.

Вход число считываемых байтов (bytes to read)

определяет число считываемых байтов.

Вход лимит времени ожидания, мс (timeout ms)

определяет время в миллисекундах, которое вход режим использует как максимальное время перед сообщением об ошибке по истечению времени ожидания. По умолчанию это время равно 25,000 мс.

Выход данных (data out) содержит данные, считанные из TCP соединения.

Функция записывает данные в сетевое ТСР-соединение

(рис. 15).

Рис. 15. Запись в ТСР

Вход данных (data in) содержит данные, записываемые в соединение.

Вход лимит времени ожидания, мс (timeout ms)

определяет время, в течение которого должна быть выполнена функция записи. Если за отведенное время не произошло записи байтов, функция завершается и возвращается сообщение об ошибке. Значение по умолчанию равно 25,000 мс.

Выход записанные байты (bytes written) отображает число байтов, записанных функцией в заданное соединение.

Функция закрывает сетевое TCP соединение (рис. 16).

25

Рис. 16. Закрытие ТСР-соединения

Функция преобразует строку в IР-адрес или массив IPадресов.

Рис. 17. Преобразование строки в IP-адрес

Если функция находится в режиме простого выхода, сетевой адрес (net address) содержит первый результат, возвращаемый распознавателем адреса по DNS-имени. Если эта функция находится в режиме множественного выхода (multiple output), то результат представляет массив всех IP адресов, возвращаемых распознавателем адреса по DNS-имени. Если узел не может преобразовать строку, результат принимает значение 0 в режиме простого выхода или пустой массив в режиме множественного выхода.

Для переключения между режимами простого и множественного выхода необходимо выбрать из контекстного меню узла строку множественный выход (multiple output).

Вход имя (name) представляет преобразуемую строку. Если строка пустая, то сетевой адрес будет содержать IP-адрес текущей машины.

Выход сетевой адрес (net address) отображает сетевой IP-адрес, соответствующий имени (name); он является числовым представлением записанного в точечной нотации IPадреса.

Функция преобразует сетевой адрес в строку (рис. 18).

26

Рис. 18. Преобразование сетевого адреса в строку

Вход сетевой адрес (net address) представляет сетевой IP адрес в виде набора целых чисел без знака, имеющих формат точечной записи.

Вход точечная запись (dot notation) определяет представление имени (name) в формате точечной записи. По умолчанию на входе установлено значение ЛОЖЬ.

Выход имя (name) представляет строковый эквивалент сетевого адреса.

Функция создает слушателя для сетевого TCP соединения (рис. 19). Подключение 0 к входу порта позволяет операционной системе динамически выбирать доступный порт для установки TCP соединения.

Рис. 19. Создание слушателя для сетевого TCP соединения

Назначение входов и выходов функции идентично одноименным входам и выходам рассмотренной выше функции TCP Listen.

Функция ожидает приема по сетевому TCP-соединению

(рис. 20).

Вход ID слушателя (listener ID in) представляет ссылку сетевого соединения, которая однозначно определяет слушателя.

Вход разрешить удаленный адрес (resolve remote address) определяет необходимость вызова функции D? to

27

String для удаленного адреса. По умолчанию состояние входа ИСТИНА.

Рис. 20. Ожидание приема по сетевому TCP соединению

Выход удаленный адрес (remote address) отображает адрес удаленного компьютера, связанного с TCP соединением. Этот адрес указывается в формате точечной записи.

Выход удаленный порт (remote port) представляет порт удаленной системы, используемый для соединения.

Примеры ВП и описание их работы

На рис. 21 и 22 приведены блок-диаграммы ВП Простой клиент данных (Simple Data Client) и Простой сервер данных

(Simple Data Server) из набора примеров N1 Example Finder,

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

28