УДК 004.7

Сетевые протоколы прикладного уровня

Круглов Анатолий Михайлович – ассистент кафедры Телекоммуникаций МИРЭА – Российского технологического университета

Агарков Алексей Вячеславович – студент МИРЭА – Российского технологического университета

Бондарчук Даниил Олегович – студент МИРЭА – Российского технологического университета 

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

Ключевые слова: сети, сетевые протоколы, информационная инфраструктура, веб-сервис.

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

HTTP (HyperText Transfer Protocol) – основной протокол передачи данных, разработанный в марте 1991 года Тимом Бернерсом-Ли во время становления Всемирной паутины (World Wide Web) Тимом Бернерсом-Ли, работавшим в Европейской организации по ядерным исследованиям (CERN). С 2015 года разработкой протокола занимается HTTP Working Group, входящая в состав IETF (Internet Engineering Task Force).

HTTP функционирует как протокол запроса-ответа на клиент – серверной вычислительной машине. HTTP/1.0 – первая ревизия этого протокола, была выпущена в 1996 году, а затем была представлена улучшенная версия протокола – HTTP/1.1. Клиент отправляет HTTP-запрос на сервер, а сервер отвечает на него. Запрос и ответ состоят из заголовков и, опционально, тела сообщения. Заголовки содержат метаинформацию о запросе или ответе, такую как тип содержимого, код состояния, токен аутентификации и другие параметры.

К достоинствам протокола можно отнести простоту реализации и понимания, широкую поддержку на практически всех веб-серверах и клиентских приложениях, возможность использования в различных типах и приложений и сервисов. В то же время в протоколе наблюдается множество погрешностей, которые замедляют время загрузки страницы в браузере [1]. HTTP/1 не так эффективно использует сетевые ресурсы из-за необходимости открывать новое TCP-соединение для каждого запроса. Помимо этого, присутствует возможность возникновения уязвимостей безопасности. В большинстве случаев типы уязвимостей, которым подвержен HTTP, совпадают с уязвимостями для веб-серверов, но в то же время из-за некоторой специфики подвержен следующим типам атак: Cache Poisoning (компрометирование кэша), Man-in-the-middle (перехват и подмена данных), DoS (отказ в обслуживании) [2].

HTTP/1 используется повсеместно в веб-разработке для передачи гипертекстовых документов и медиа-ресурсов. Он используется во всех видах веб-приложений, начиная от статических сайтов и блогов до сложных веб-приложений и электронной коммерции.

Практически все веб-сайты и веб-приложения, доступные в Интернете, работают с использованием HTTP: Google, YouTube, X, Amazon – самые известные из них [3]. Кроме того, большинство мобильных приложений, взаимодействующих с сервером, тоже используют HTTP для обмена данными.

HTTP/2 – это вторая версия протокола HTTP, разработанная с целью улучшения производительности и эффективности в сравнении с предыдущей версией. Она была разработана в 2015 году на основе протокола SPDY, созданного компанией Google. Основной идеей стала замена последовательной обработки запросов на мультиплексирование, что позволило бы браузерам и серверами обмениваться данными более эффективно и, соответственно, снизить время загрузки веб-страниц и их элементов [4].

Главным особенностями HTTP/2 можно назвать мультиплексирование и сжатие заголовков. Таким образом, вместо последовательной передачи данных через отдельные TCP-соединения, протокол позволяет одному соединению передавать несколько запросов и ответов параллельно. Это снижает задержку и увеличивает скорость загрузки страниц. Заголовки сжимаются с помощью алгоритма HPACK, что позволяет уменьшить объем передаваемых в запросе данных.

Помимо перечисленных нововведений, HTTP/2 получил поддержку Server Push – опцию, позволяющую серверу отправлять данные на клиент до того, как клиент запросил их, что должно было привести к улучшению производительности. Однако в 2020 году поддержка этой функции была удалена из браузеров Chrome из-за недостаточной популярности и сомнительного прироста скорости.

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

HTTP/2 активно используется во всех видах веб-приложений и сервисов, для которых важна высокая производительность и снижение нагрузки на сеть, например: магазины, социальные сети, блоги и многие другие. Большинство современных браузеров поддерживают HTTP/2. Помимо перечисленных примеров, HTTP/2 является транспортом для gRPC, протокола удаленного вызова процедур, используемого такими компаниями, как Spotify, Netflix, IBM, Cisco [5].

HTTP/3 – последняя, на текущий момент, версия протокола HTTP, разработанная для обеспечения ещё большей надёжности. Помимо повышенной безопасности и гибкости, он обещает преимущества с точки зрения производительности. HTTP/3 использует более эффективную схему сжатия заголовков и заменяет TCP на QUIC (Quick UDP Internet Connections), транспортный протокол переносимый поверх UDP, первоначально предложенный Google и в настоящее время также стандартизированный [6]. HTTP/3 включен по умолчанию в браузере Chrome с 2020 года, а в Firefox с 2021 года.

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

HTTP/3 используется в современных веб-приложениях с высокими требованиями к производительности и задержке: видео-стриминге,  онлайн-играх, мессенджерах. Из крупных компаний, перешедших на этот протокол, можно назвать Cloudflare, специализирующаяся на услугах CDN и защиты от DDoS-атак [7].

image001

Рисунок 1. Прирост скорости загрузки страницы HTTP/2 и HTTP/3 в сравнении с HTTP/1 [8].

WebSocket – протокол, обеспечивающий возможность установления постоянного двустороннего канала связи между клиентом и сервером через одного TCP-соединение. Этот протокол позволяет веб-приложениям и серверами обмениваться данными в реальном времени без необходимости постоянно инициировать новые HTTP-запросы. Протокол был опубликован в 2011 году и представлен как расширение HTTP.

Протокол WebSocket начинает с обычного HTTP-запроса, включающего заголовок “Upgrade: websocket”. Затем на сервере и клиенте создается постоянное TCP-соединение, через которое можно обмениваться данными в обоих направлениях. Такой подход обеспечивает возможность передачи сообщений в реальном времени без задержек, которые характерны для HTTP-запросов.

Этот протокол обеспечивает мгновенную доставку сообщений между клиентом и сервером, что идеально подходит для приложений, где важно получать обновления в реальном времени. Также он позволяет обмениваться данными без лишней нагрузки на сеть в виде постоянного установления новых соединений. Но у протокола есть и недостатки: не все браузеры поддерживают данный протокол, а также не регламентируемый срок жизни пакета [9]. К тому же масштабирование обработки большого количества одновременных соединений может требовать дополнительных усилий, особенно при разработке высоконагруженных приложений.

WebSocket широко используется в веб-разработке мессенджеров, онлайн-игр, финансовых торговых платформ и платформ потокового вещания. Наиболее известные приложения, использующие этот протокол, включают в себя: Slack, Discord, Google Docs [10].

MQTT (Message Queuing Telemetry Transport) – это основанный на стандартах протокол, или набор правил, обмена сообщениями, используемый для взаимодействия между компьютерами [11]. Интеллектуальные датчики, носимые устройства и другие компоненты Интернета вещей (IoT) часто передают и получают данные через сети с ограниченными ресурсами и пропускной способностью. Для передачи данных такие устройства IoT широко используют MQTT из-за его простоты в реализации и эффективности передачи информации.

Протокол MQTT работает поверх протокола TCP и поддерживает как передачу сообщений от устройств в облако, так и обратное направление передачи данных.

Система связи, базирующаяся на протоколе MQTT, включает в себя сервер-издателя, сервер-брокера и один или несколько клиентов. Издатель не требует конфигурации относительно количества и местоположения подписчиков, получающих сообщения. Подписчики, в свою очередь, не привязаны к определенному издателю.

Когда издатель желает опубликовать сообщение, он формирует пакет данных MQTT, содержащий заголовок с определенным топиком. Это сообщение затем направляется на сервер MQTT, который организует их обработку, создавая структуру иерархии тем. В то же время сервер распространяет сообщения среди всех подписчиков.

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

К преимуществам можно отнести легкость протокола – в данных содержится мало служебной информации. MQTT-сервер выполняет в сети обмена данными все основные функции ядра коммуникации:

  • устранение уязвимых и небезопасных клиентских подключений;
  • простое масштабирование до тысяч устройств;
  • управление состояниями клиентских подключений, отслеживание их учетных данных и сертификатов безопасности;
  • снижение нагрузки на сеть без ущерба для безопасности;
  • надежное резервирование ресурсов сети на случай сбоя [12].

В то же время у MQTT есть некоторые недостатки, поскольку он работает поверх протокола TCP, при увеличении каналов обмена сообщениями, ему требуется отправка дополнительных “рукопожатий” (handshaking), что приводит к увеличению времени установки нового канала связи [13].

В настоящее время, несколько крупных компаний предоставляют свои услуги по использованию облачных MQTT-серверов, например, Amazon Web Services и Yandex Cloud.

FTP (File Transfer Protocol) – это протокол передачи файлов по сети, который был разработан задолго в 1971 году, до появления HTTP. Этот протокол считается одним из старейших прикладных протоколов и изначально функционировал поверх протокола NCP, но затем стал использовать TCP.

FTP широко применяется для распространения программного обеспечения и доступа к удаленным хостам, так как обеспечивает гарантированную передачу данных за счет использования квотируемого протокола.

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

Преимуществом данного протокола является возможность управление и доступ к любым форматам файлов на сервере, а также устранение различий в представлении данных между узлами сети различных архитектур. Однако FTP содержит в себе несколько критических недостатков. Один из них – крайне слабая защита, что исключает возможность передачи конфиденциальной информации. В протоколе не определены действия, противодействующие подбору паролей, после неправильного пароля клиенту предоставляется возможность ввести его повторно, а соединение не разрывается, также не существует ограничений на количество повторов. В результате атака, направленная на подбор паролей, может продолжаться сколь угодно долго, а отсутствие задержек при ответах сервера повышает эффективность [14]. Также данный протокол подвержен DoS-атакам.

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

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

Список литературы

  1. Расторгуева Е.А., Багаева А.П. Интернет-технологии будущего от HTTP к HTTP2 // Актуальные проблемы авиации и космонавтики. 2015. №11. URL: https://cyberleninka.ru/article/n/internet-tehnologii-buduschego-ot-http-k-http2 (дата обращения: 16.03.2024).
  2. Изюмов А.Е. Исследование безопасности протокола http // Научно-технический вестник информационных технологий, механики и оптики. 2005. №19. URL: https://cyberleninka.ru/article/n/issledovanie-bezopasnosti-protokola-http (дата обращения: 16.03.2024).
  3. Android Authority - For shame: You’ll never believe the sites still on HTTP [Электронный ресурс] - URL: https://www.androidauthority.com/sites-still-on-http-889265/ (дата обращения: 16.03.2024).
  4. HTTP/2 GitHub - HTTP/2 [Электронный ресурс] - URL: https://http2.github.io/ (дата обращения: 16.03.2024).
  5. W3Techs - Usage Statistics of HTTP/2 for Websites, March 2024 [Электронный ресурс] - URLЖ https://w3techs.com/technologies/details/ce-http2 (дата обращения: 16.03.2024).
  6. Симачев Антон Юрьевич СРАВНИТЕЛЬНЫЙ АНАЛИЗ ЭФФЕКТИВНОСТИ АЛГОРИТМОВ ОБНАРУЖЕНИЯ СКРЫТЫХ КАНАЛОВ В ПРОТОКОЛЕ HTTP/3 // StudNet. 2022. №7. URL: https://cyberleninka.ru/article/n/sravnitelnyy-analiz-effektivnosti-algoritmov-obnaruzheniya-skrytyh-kanalov-v-protokole-http-3 (дата обращения: 16.03.2024).
  7. CloudFlare - What is HTTP/3? [Электронный ресурс] - URL: https://www.cloudflare.com/learning/performance/what-is-http3/ (дата обращения: 16.03.2024).
  8. Performance Comparison of HTTP/1.1, HTTP/2, and QUIC [Электронный ресурс] - URL: https://www3.cs.stonybrook.edu/~arunab/course/2017-1.pdf (дата обращения: 17.03.2024)
  9. Шестаков В.С., Сагидуллин А.С. Применение технологии websocket в web-приложениях технологического назначения // Приборостроение. 2015. №4. URL: https://cyberleninka.ru/article/n/primenenie-tehnologii-websocket-v-web-prilozheniyah-tehnologicheskogo-naznacheniya (дата обращения: 16.03.2024).
  10. Wappalyzer - Websites using Websocket [Электронный ресурс] - URL: https://www.wappalyzer.com/technologies/miscellaneous/websocket/ (дата обращения: 16.03.2024).
  11. AWS - Что такое MQTT? [Электронный ресурс] - URL: https://aws.amazon.com/ru/what-is/mqtt/ (дата обращения: 16.03.2024).
  12. Yandex Cloud - Протокол MQTT и MQTT сервер: особенности коммуникации [Электронный ресурс] - URL: https://cloud.yandex.ru/ru/docs/glossary/mqtt-server/ (дата обращения: 16.03.2024).
  13. Якупов Д.Р. ОБЗОР И СРАВНЕНИЕ ПРОТОКОЛОВ ИНТЕРНЕТА ВЕЩЕЙ: MQTT И AMQP // International Journal of Open Information Technologies. 2022. №9. URL: https://cyberleninka.ru/article/n/obzor-i-sravnenie-protokolov-interneta-veschey-mqtt-i-amqp (дата обращения: 16.03.2024).
  14. Иванов А.В. Исследование безопасности протокола FTP // Научно-технический вестник информационных технологий, механики и оптики. 2005. №19. URL: https://cyberleninka.ru/article/n/issledovanie-bezopasnosti-protokola-ftp (дата обращения: 16.03.2024).

Интересная статья? Поделись ей с другими: