Сочетание протоколов HTTP и TCP/IP
HTTP - это протокол уровня приложений, расположенный поверх протокола TCP, и применяемый для взаимодействий между клиентами и серверами в Web. Протокол HTTP определяет простое взаимодействие вида запрос-ответ, которое называется "Web-транзакцией". Каждое HTTP-взаимодействие состоит из запроса, посылаемого от клиента серверу, и следующего за ним ответа от сервера клиенту. HTTP-запрос состоит из нескольких частей: метода, указывающего на действие (GET, HEAD, PUT и POST), унифицированного указателя информационного ресурса (Uniform Resource Locator, URL), который идентифицирует имя запрашиваемой информации, а также другой информации, такой как тип требуемого документа, аутентификация и разрешение на оплату.
Когда сервер получает запрос, он выполняет его синтаксический разбор и реализует действия, указанные методом. Затем сервер отправляет клиенту ответ, состоящий из строки состояния, указывающей, успешным ли оказался запрос, мета-информации о типе возвращаемого объекта и запрашиваемой информации, а также файла или результатов, сгенерированных серверным приложением (т.е. CGI-приложением).
Главными этапами, из которых состоит HTTP-взаимодействие "запрос-ответ", являются:
· Установка соответствия между именем сервера и IP-адресом (например, между именем www.performance_book.com и адресом 199.333.111.0).
· Установка TCP-соединения с сервером.
· Передача запроса (URL + метод + другая информация).
· Получение ответа (HTML-текста, изображения либо другой информации).
· Закрытие TCP/IP-соединения (как будет показано далее, в случае HTTP 1.1 соединение остается открытым для получения вложенных изображений).
С каждым из указанных этапов связана присущая ему стоимость, которая зависит от производительности сервера и сети; это будет показано ниже в этом разделе.
HTTP еще называют "протоколом без запоминания состояния", поскольку он не поддерживает концепцию сеанса связи, но лишь только доставку запрошенного документа. В первой версии HTTP-протокола взаимодействие сводится к передаче одного документа или изображения. Каждая передача полностью изолирована от предыдущего или последующего запроса. Учитывая, что Web-сайт доступен миллионам клиентов, природа протокола без запоминания состояния привносит определенную эффективность в систему, т.к. серверам не нужно отслеживать ни клиентов, ни запросы, которые они могли отправлять в прошлом.
Существует и другая сторона медали для такого протокола, связанная со стоимостью производительности. Первая версия протокола, HTTP 1.0, имела несколько недостатков, касающихся производительности системы. Например, для каждого запроса устанавливалось новое соединение. Страница с текстом и большим количеством небольших изображений генерировала множество отдельньк соединений: одно для HTML-страницы и по одному на каждое изображение. Ввиду того, что большинство Web-объектов малы по размеру, то большая часть пакетов, которыми обмениваются клиент и сервер - это ни что иное, как управляющие пакеты TCP, обеспечивающие открытие и закрытие соединений (см. рис. 2.17а).
Ключевой элемент для понимания работы пары протоколов HTTP и TCP/IP связан с природой обязательных задержек, порождаемых протоколами. Эти задержки можно разложить на задержку соединения и задержку запроса. Первая - это время (измеряемое в RTT), необходимое на установку соединения. Вторая представляет собой время, необходимое на выполнение передачи данных через установленное соединение. Давайте проанализируем задержки, возникающие при выполнении Web-транзакции.
На рис. 2.17 показан обмен пакетами между клиентом и сервером во время HTTP-взаимодействия через протокол TCP [8, 30]. На рис. 2.17а) можно видеть обмен пакетами, происходящий в версии протокола HTTP 1.0, а на 2.176) — в его более поздней версии HTTP 1.1 (в которой поддерживается открытое ТСР-соединение в течение HTTP-запросов). Горизонтальные пунктирные линии со стороны клиента указывают на обязательные задержки сети (в RTT), вызванные совместным функционированием протоколов TCP/IP и HTTP. Пакеты, изображенные светло-серыми линиями, требуются для протокола TCP, но не влияют на задержку, т.к. получатель не обязан ждать их получения для продолжения выполнения своей работы. К обязательным задержкам, возникающим при HTTP-взаимодействии типа запрос-ответ, относятся:
· Клиент открывает ТСР-соединение, что приводит к обмену сегментами SYN (синхронизации) и АСК (подтверждения) (см. раздел 2.2.3.2).
· Клиент посылает HTTP-запрос на сервер, который выполняет его синтаксический разбор, предпринимает требуемые действия и отправляет обратно ответ. В случае поискового запроса сервер должен передать данные с диска
или кэша клиенту через сеть. После этого сервер отвечает за закрытие соединения. Сегменты FIN (сигнализирующие об окончании передачи), которыми должны обменяться сервер и клиент для закрытия соединения, на рис.2.17 не показаны, поскольку для продолжения своей работы клиент не обязан ждать закрытия соединения.
· Клиент проводит синтаксический разбор HTML-ответа для поиска URL-адресов встроенных изображений. Затем клиент открывает новое ТСР-соединение, для чего потребуется еще одно трехстороннее квитирование связи.
· Клиент снова отправляет HTTP-запрос для первого встроенного изображения, и весь процесс повторяется сначала.
Для каждого дополнительного запроса должно быть установлено новое ТСР-соединение, и система снова проходит через процесс установки соединения. Вследствие комбинации протоколов HTTP и TCP/IP клиент должен ждать отображения браузером документа с одним встроенным изображением в течение промежутка времени, равного, по меньшей мере, 4 RTT сети. Каждое дополнительное изображение требует, минимум, еще 2 RTT: одно - на установку TCP-соединения и одно - на получение изображения. Поскольку TCP-соединение проходит через фазу медленного старта, то большинство операций протокола HTTP 1.0 неэффективно используют возможности TCP, в результате чего получается низкая эффективность системы из-за перегрузки каналов связи и большого количества служебных сигналов.
В новой версии протокола HTTP (известной как HTTP 1.1, HTTP с устойчивым соединением, или HTTP-NG) решена часть проблем, ограничивающих производительность версии 1.0. HTTP 1.1 оставляет открытым TCP-соединение между двумя последовательными операциями (см. рис. 2.176). Этот метод, называемый "устойчивым соединением" ("permanent connection"), использует одно и то же ТСР-соединение для обслуживания множества HTTP-запросов, при этом исключаются расходы на открытие и закрытие других соединений, равно как и минимизируется влияние медленного старта. Итак, через единственное TCP-соединение можно обслуживать множество запросов и ответов. Это свойство позволяет также избежать многих задержек кругового обращения (на передачу и подтверждение приема), улучшить производительность и уменьшить количество пакетов при обмене. Из рис. 2.17 видно, как новый HTTP-протокол влияет на задержки сети. В случае запроса на HTML-документ и одно встроенное изображение, документ будет получен браузером через время 3 RTT вместо 4RTT (для протокола HTTP 1.0).
Еще одной особенностью протокола HTTP 1.1., влияющей на производительность, является конвейерная обработка запросов. Конвейерная обработка запросов позволяет послать сразу много запросов, не ожидая ответа на первый, второй и т.д. из них. Т.е. клиент отправляет множество запросов через ТСР-соединение до того, как получит ответ на свои предыдущие запросы. Экспериментальные данные [26] показывают, что использование конвейерной обработки в HTTP 1.1 позволяет намного улучшить производительность, даже по сравнению с HTTP1.0 со множеством параллельных TCP-соединений. Более детальный анализ задержек, возникающих при загрузке Web-страниц, будет проведен в главе 3.
Дата добавления: 2016-04-19; просмотров: 3180;