Предупреждение о ненадежности протокола UDP

В приведенном выше упрощенном алгоритме работы клиента UDP игнорируется неотъемлемая характеристика UDP, а именно то, что принцип его работы предусматривает ненадежную доставку (по принципу выполнения этим протоколом всего от него зависящего, но не более того). Хотя Простейший клиент UDP может работать в локальной сети, характеризующейся низкими потерями, небольшими задержками и отсутствием переупорядочения пакетов, клиенты, в которых реализован описанный алгоритм, не смогут работать в сложной объединенной сети. Для работы в среде объединенной сети клиентская программа должна обеспечить надежную работу с использованием тайм-аута и повторной передачи. В клиентской программе необходимо также решить проблему дублирования пакетов или их доставки с нарушением исходного порядка. Задача повышения надежности может оказаться сложной, и для ее решения необходимо иметь опыт проектирования протоколов. Благоустройство и асфальтирование территории Краны мостовые консольные тали кран балка. Балка в ассортименте. .

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

6.25. Резюме

Клиентские программы относятся к категории наиболее простых сетевых программ. Клиент должен получить IP-адрес и номер порта протокола сервера, прежде чем он сможет вступить с ним во взаимодействие; для расширения области применения клиентской программы часто возникает необходимость определить требование, согласно которому пользователь при ее вызове должен указывать сервер. Затем клиентская программа преобразует адрес сервера из точечного десятичного обозначения в двоичное или использует систему доменных имен для преобразования символического имени компьютера в IP-адрес.

Алгоритм работы клиента TCP является несложным: клиент TCP распределяет сокет и подключает его к серверу. Затем в клиентской программе используется функция send для передачи запросов на сервер и функция recv для получения ответов. Закончив использование соединения, либо клиент, либо сервер вызывает функцию close для его закрытия.

Хотя клиент должен явно указать адрес оконечной точки сервера, с которым он должен вступить во взаимодействие, он может позволить программному обеспечению TCP/IP выбрать неиспользуемый номер порта протокола и заполнить в дескрипторе сокета поле локального IP-адреса, автоматически выбрав правильное значение. Это позволяет избежать проблем, которые могут возникнуть в маршрутизаторе или в многоадресном хосте, если клиентской программой будет ошибочно выбран IP-адрес, отличный от IP-адреса интерфейса, по которому протокол IP отправляет трафик в нужном направлении.

В клиентской программе используется функция connect для задания адреса удаленной оконечной точки для сокета. При использовании с протоколом TCP функция connect инициирует трехэтапное квитирование и проверяет возможность связи. При использовании с протоколом UDP функция connect просто регистрирует адрес оконечной точки сервера для последующего использования.

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

Материал для дальнейшего изучения

Во многих документах RFC, в которых определены протоколы, наряду с этим предложены алгоритмы или методы реализации клиентских программ. Обзор методов реализации клиентских программ приведен также в литературе.

Упражнения
  1. Прочитайте литературу о вызовах сокетов sendto и recvfrom. Применяются ли они с сокетами, в которых используется протокол TCP или UDP? Объясните ваш ответ.
  2. Напишите на языке C программу, которая без получения или отправки каких-либо пакетов определяет, используется ли в компьютере сетевой порядок байтов.
  3. После преобразования имени компьютера система доменных имен возвращает набор из одного или нескольких IP-адресов. Почему?
  4. Разработайте клиентское программное обеспечение, в котором применяется функция gethostbyname для поиска имен компьютеров на сетевом узле, а затем выполняется вывод всей полученной информации. Вас не удивляют некоторые полностью определенные доменные имена, если они имеются? Используются ли на вашем узле полностью определенные доменные имена или псевдонимы? Опишите возможные обстоятельства, при которых псевдонимы могут неправильно преобразовываться в IP-адреса.
  5. Определите, сколько времени потребуется для поиска имени компьютера (функция gethostbyname) и службы (функция getservent). Выполните эту проверку для действительных и недействительных имен. Требует ли поиск недействительного имени намного больше времени, чем действительного? Объясните обнаруженную разницу.
  6. Воспользуйтесь сетевым монитором для наблюдения за сетевым трафиком, который вырабатывается компьютером при поиске IP-адреса по имени с помощью функции gethostbyname. Проведите этот эксперимент несколько раз для каждого искомого имени компьютера. Объясните, с чем связаны различия в сетевом трафике при первой и последующей попытках поиска.
  7. Для определения того, совпадает ли локальный порядок байтов компьютера с сетевым порядком, напишите программу, в которой используется функция getservbyname для поиска номера порта службы ECHO протокола UDP, а затем выполняется вывод полученного номера порта протокола. Если локальный и сетевой порядок байтов совпадают, это значение будет равно 7.
  8. Напишите программу, которая распределяет локальный порт протокола, закрывает сокет, ожидает несколько секунд, а затем распределяет другой локальный порт. Выполните эту программу на простаивающем компьютере и на компьютере с интенсивно функционирующей системой с разделением времени. Какие номера портов получает программа на каждом из этих компьютеров? Если они не совпадают, объясните почему.
  9. При каких обстоятельствах в клиентской программе можно использовать функцию close вместо shutdown?
  10. Должен ли с началом работы клиентской программы каждый раз использоваться один и тот же номер порта протокола? Объясните ваш ответ.
Похожие статьи Меню Опрос Фото Популярное
rss