Серверы с установлением и без установления логического соединения

При разработке программного обеспечения клиент/сервер необходимо выбрать один из двух типов взаимодействия: с установлением или без установления логического соединения. Эти два типа взаимодействия соответствуют двум основным типам транспортных протоколов. В набор протоколов TCP/IP входят транспортные протоколы обоих типов, а прикладному программисту предоставляется возможность выбрать один из них. Если клиент и сервер обмениваются данными по протоколу UDP (User Datagram Protocol — Протокол пользовательских дейтаграмм), взаимодействие осуществляется без установления логического соединения, а если используется протокол TCP (Transmission Control Protocol — Протокол управления передачей), взаимодействие происходит с установлением логического соединения. Везде. Продается цветная капуста морковь и другие овощи. Статьи. Со склада паркетная доска орех.

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

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

Надежда на то, что протокол UDP успешно выполнит доставку всех отправленных пакетов, может оказаться неоправданной, поскольку он выполняет лишь все от него зависящее, но не более того. Сам протокол UDP не вносит ошибок, он просто полагается на протокол более низкого уровня, т.е. IP (Internet Protocol — Межсетевой протокол), который выполняет доставку пакетов. Успешное функционирование протокола IP, в свою очередь, зависит от работы базовых аппаратных сетей и промежуточных шлюзов. С точки зрения программиста, применение протокола UDP ведет к тому, что успешное функционирование разработанной им программы зависит от бесперебойной работы базовой объединенной сети. Например, протокол UDP хорошо работает в локальной сети, поскольку в ней редко возникают ошибки, которые приводят к снижению надежности. Ошибки обычно возникают, только если сетевое соединение проложено через глобальную объединенную сеть.

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

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

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

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

Похожие статьи Меню Опрос Фото Популярное