Найти тему
Александр Крафтмург

Веб-протоколы: правила обмена данными в интернете

Устройства обмениваются данными между собой в интернете. Представьте что интернет это почта, то компьютеры это отправители, а сайты почтовые отделения, куда запросы попадают в виде писем. Чтобы быстро и безопасно добирались письма до адресата, нужны почтовые-службы, т.е веб-протоколы. А как работают веб-протоколы? Предлагаю вам разобраться в этом.

✅ Подписывайся на канал, чтобы не пропустить новые публикации!

Веб-протоколы работают в рамках сетевой модели TCP/IP. TCP/IP (Transmission Control Protocol / Internet Protocol) - это целая сетевая модель, описывающая способ передачи данных в цифровом виде. Он состоит из нескольких уровней, как слоенный пирог (прикладной, канальный, межсетевой и транспортный). Сюда входит формирование пакетов, способ их отправки, получения, машрутизации, распаковки для передачи программному обеспечению.

Прикладной уровень

На прикладном уровне происходит взаимодействие конечных пользователей и приложений. Здесь располагаются прикладные протоколы, такие как HTTP (Hypertext Transfer Protocol), FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol), DNS (Domain Name System) и т.д. Каждый из этих протоколов выполняет специфические функции для обеспечения передачи данных между приложениями на разных узлах сети. Например, HTTP используется для передачи веб-страниц и других ресурсов в сети Интернет, а SMTP – для отправки и доставки электронной почты.

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

HTTP

HTTP (HyperText Transfer Protocol — протокол передачи гипертекста) - это сетевой протокол прикладного уровня, созданный поверх TCP прикладного уровня без сохранения состояния, используемый World Wide Web. HTTP представляет стандартные правила для взаимодействия веб-браузеров и сервисов. По умолчанию данный протокол использует 80-порт.

HTTPS (Hyper Text Transfer Protocol Secure) - это защищенный протокол передачи гипертекста. Это продвинутая и безопасная версия HTTP. Для коммуникации данных используется 443-порт. Данный протокол позволяет обеспечить безопасность транзакций путем шифрования всего трафика с помощью SSL. Это комбинация протокола SSL/TLS и HTTP.

Структура HTTP-запроса

  • Стартовая строка (метод, например GET, POST или PUT),
  • Адрес (/index.htm)
  • Версию протокола HTTP (HTTP/1.1).
  • Заголовок, состоящая из имени и значения, которая описывает того, кто обращается обращается к серверу (Host: ru.wikipedia.org).
  • Тело обращения. Если сам запрос подрузомевает их передачу, то тело может содержать различные данные.

Пример:

  • Стартовая строка: GET /index.html НТТР / 1. 1
    Содержит метод GET, чтобы получить документ index.html, используя протокол НТТР 1.1
  • Заголовки: Server: Apache/2.2.14 (Ubuntu) Content-Туре: text/html Строка заголовока (заголовок) Server предоставляет информацию о программном обеспечении веб-сервера, а заголовок Content-Туре указывает МIМЕ-тип данных, содержащихся в ответе.
  • Ответ от Веб-сервера: НТТР/1.1 200 ОК Эта строка указывает версию протокола, код состояния и описание этого кода состояния. В нашем случае код состояния - 200, он означает, что запрос был успешен, о чем свидетельствует описание "ОК".

Методы протокола

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

  • OPTIONS - используется для определения возможностей веб-сервера или параметров соединения для конкретного ресурса. Предполагается, что запрос клиента может содержать тело сообщения для указания интересующих его сведений. Формат тела и порядок работы с ним в настоящий момент не определён. Сервер пока должен его игнорировать. Аналогичная ситуация и с телом в ответе сервера. Для того чтобы узнать возможности всего сервера, клиент должен указать в URI звёздочку — «*». Запросы «OPTIONS * HTTP/1.1» могут также применяться для проверки работоспособности сервера (аналогично «пингованию») и тестирования на предмет поддержки сервером протокола HTTP версии 1.1. Результат выполнения этого метода не кэшируется.
  • GET - используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. В этом случае в тело ответного сообщения следует включить информацию о ходе выполнения процесса. Клиент может передавать параметры выполнения запроса в URI целевого ресурса после символа «?»: GET /path/resource?param1=value1¶m2=value2 HTTP/1.1Согласно стандарту HTTP, запросы типа GET считаются идемпотентными[4] — многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет кэшировать ответы на запросы GET.Кроме обычного метода GET, различают ещё условный GET и частичный GET. Условные запросы GET содержат заголовки If-Modified-Since, If-Match, If-Range и подобные. Частичные GET содержат в запросе Range. Порядок выполнения подобных запросов определён стандартами отдельно.
  • HEAD - аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Запрос HEAD обычно применяется для извлечения метаданных, проверки наличия ресурса (валидация URL) и чтобы узнать, не изменился ли он с момента последнего обращения.Заголовки ответа могут кэшироваться. При несовпадении метаданных ресурса с соответствующей информацией в кэше копия ресурса помечается как устаревшая.
  • POST - применяется для передачи пользовательских данных заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. Аналогично с помощью метода POST обычно загружаются файлы.В отличие от метода GET, метод POST не считается идемпотентным[4], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).При результатах выполнения 200 (Ok) и 204 (No Content) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.Сообщение ответа сервера на выполнение метода POST не кэшируется.
  • PUT - применяется для загрузки содержимого запроса на указанный в запросе URI. Если по заданному URI не существовало ресурса, то сервер создаёт его и возвращает статус 201 (Created). Если же был изменён ресурс, то сервер возвращает 200 (Ok) или 204 (No Content). Сервер не должен игнорировать некорректные заголовки Content-* передаваемые клиентом вместе с сообщением. Если какой-то из этих заголовков не может быть распознан или не допустим при текущих условиях, то необходимо вернуть код ошибки 501 (Not Implemented).Фундаментальное различие методов POST и PUT заключается в понимании предназначений URI ресурсов. Метод POST предполагает, что по указанному URI будет производиться обработка передаваемого клиентом содержимого. Используя PUT, клиент предполагает, что загружаемое содержимое соответствуют находящемуся по данному URI ресурсу.Сообщения ответов сервера на метод PUT не кэшируются.
  • PATCH - аналогично PUT, но применяется только к фрагменту ресурса.
  • DELETE - удаляет указанный ресурс.
  • TRACE - возвращает полученный запрос так, что клиент может увидеть, что промежуточные сервера добавляют или изменяют в запросе.
  • LINK - устанавливает связь указанного ресурса с другими.
  • UNLINK - убирает связь указанного ресурса с другими.

Заголовки HTTP

Заголовок HTTP  - это строка в HTTP-сообщении, содержащая разделённую двоеточием пару вида «параметр-значение». Формат заголовка соответствует общему формату заголовков текстовых сетевых сообщений ARPA (RFC 822). Как правило, браузер и веб-сервер включают в сообщения более чем по одному заголовку. Заголовки должны отправляться раньше тела сообщения и отделяться от него хотя бы одной пустой строкой (CRLF).

  • Allow - список методов, применимых к запрашиваемому ресурсу.
  • Content-Encoding - применяется при необходимости перекодировки содержимого (например, gzip/deflated).
  • Content-Language - локализация содержимого (язык(и))
  • Content-Length - размер тела сообщения (в октетах)
  • Content-Range - диапазон (используется для поддержания многопоточной загрузки или дозагрузки)
  • Content-Type - указывает тип содержимого (mime-type, например text/html).Часто включает указание на таблицу символов локали (charset)
  • Expires - дата/время, после которой ресурс считается устаревшим. Используется прокси-серверами
  • Last-Modified - дата/время последней модификации сущности
  • Cache-Control - определяет директивы управления механизмами кэширования. Для прокси-серверов.
  • Connection - задает параметры, требуемые для конкретного соединения.
  • Date - дата и время формирования сообщения
  • Pragma - используется для специальных указаний, которые могут (опционально) применяется к любому получателю по всей цепочке запросов/ответов (например, pragma: no-cache).
  • Transfer-Encoding - задает тип преобразования, применимого к телу сообщения. В отличие от Content-Encoding этот заголовок распространяется на все сообщение, а не только на сущность.
  • Via - используется шлюзами и прокси для отображения промежуточных протоколов и узлов между клиентом и веб-сервером.
  • Warning - дополнительная информация о текущем статусе, которая не может быть представлена в сообщении.
  • Accept - определяет применимые типы данных, ожидаемых в ответе.
  • Accept-Charset - определяет кодировку символов (charset) для данных, ожидаемых в ответе.
  • Accept-Language - применимые языки. Используется для согласования передачи.
  • Authorization - учетные данные клиента, запрашивающего ресурс.
  • From - электронный адрес отправителя
  • Host - имя/сетевой адрес [и порт] сервера. Если порт не указан, используется 80.
  • If-Modified-Since - используется для выполнения условных методов (Если-Изменился...). Если запрашиваемый ресурс изменился, то он передается с сервера, иначе - из кэша.
  • Max-Forwards - Представляет механиз ограничения количества шлюзов и прокси при использовании методов TRACE и OPTIONS.
  • Proxy-Authorization - используется при запросах, проходящих через прокси, требующие авторизации
  • Referer - адрес, с которого выполняется запрос. Этот заголовок отсутствует, если переход выполняется из адресной строки или, например, по ссылке из js-скрипта.
  • User-Agent - информация о пользовательском агенте (клиенте)
  • Location - адрес перенаправления
  • Proxy-Authenticate - сообщение о статусе с кодом 407.
  • Server - информация о программном обеспечении сервера, отвечающего на запрос (это может быть как веб- так и прокси-сервер).

FTP

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

FTPS

FTPS - расширение стандартного протокола передачи файлов, добавляющее в его базовый функционал создание шифрованных сессий с помощью протокола SSL (Secure Sockets Layer — уровень защищены сокетов).

SFTP

SFTP (Secure File Transfer Protocol) - это протокол прикладного уровня прикладного уровня передачи файлов, работающий поверх безопасного канала. Если FTPS является просто расширением FTP, то SFTP это отдельный и никак не связанный с ним протокол, который в качестве основы использует SSH (Secure Shell – безопасная оболочка).

SSH

SSH – это протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов).

SMTP (Simple Mail Transfer Protocol) - используется для отправки и приема электронной почты. SMTP отвечает за передачу электронных писем от почтовых клиентов к почтовым серверам и между почтовыми серверами.

POP3

POP3 (Post Office Protocol version 3) и IMAP (Internet Message Access Protocol) - эти протоколы используются для доступа к электронной почте на почтовых серверах. POP3 загружает электронные письма на локальный компьютер, в то время как IMAP позволяет просматривать письма непосредственно на сервере.

DNS

DNS (Domain Name System) - отвечает за преобразование доменных имен (например, example.com) в IP-адреса и наоборот. DNS используется для разрешения имен хостов в IP-адреса, что позволяет устройствам в сети найти друг друга по имени.

DHCP

DHCP (Dynamic Host Configuration Protocol) - используется для автоматической настройки IP-адресов и других параметров сети для компьютеров в локальной сети.

Канальный уровень

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

Ключевые аспекты:

  1. Физическое и логическое соединение: Канальный уровень обеспечивает физическое соединение между устройствами в сети через средства передачи данных, такие как Ethernet-кабели, Wi-Fi или оптоволокно. Он также предоставляет логическое соединение для передачи данных между устройствами с использованием адресации на канальном уровне, такой как MAC-адреса.
  2. Методы доступа к среде: Протоколы на канальном уровне определяют методы доступа к среде передачи данных, например, CSMA/CD (Carrier Sense Multiple Access with Collision Detection) для Ethernet или CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance) для Wi-Fi. Эти методы контролируют доступ устройств к среде передачи данных и управляют конфликтами при одновременной передаче данных.
  3. Управление фреймами данных: Канальный уровень разбивает данные на фреймы (или кадры), которые могут быть переданы по сети. Фреймы содержат заголовок с адресами устройств-отправителей и получателей, а также служебную информацию, необходимую для передачи данных.
  4. Обнаружение и исправление ошибок: Протоколы на канальном уровне обеспечивают методы обнаружения и, в некоторых случаях, исправления ошибок, возникающих при передаче данных. Например, CRC (Cyclic Redundancy Check) используется для обнаружения ошибок в данных, передаваемых по сети.
  5. Управление потоком данных: Некоторые протоколы на канальном уровне могут предоставлять механизмы управления потоком данных между устройствами, чтобы предотвратить переполнение буферов или потерю данных.

Ethernet

Это одна из наиболее распространенных технологий локальной сети (LAN). Ethernet использует метод CSMA/CD (Carrier Sense Multiple Access with Collision Detection) для управления доступом к среде и обнаружения коллизий во время передачи данных. Различные стандарты Ethernet, такие как 10BASE-T, 100BASE-TX и 1000BASE-T, определяют физические характеристики и скорость передачи данных.

Wi-Fi

Представляет собой беспроводную технологию локальной сети, позволяющую устройствам подключаться к сети через радиоволновую связь. Протоколы Wi-Fi определяются стандартом IEEE 802.11 и включают различные версии (например, 802.11a/b/g/n/ac/ax), которые определяют частотный диапазон, скорость передачи данных и другие характеристики.

Point-to-Point Protocol

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

Это сетевой протокол, который часто используется в сетях WAN (Wide Area Network). HDLC предоставляет надежную и управляемую передачу данных между устройствами, поддерживая методы обнаружения и исправления ошибок.

Asynchronous Transfer Mode

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

Межсетевой уровень

Отвечает за передачу данных между различными сетями в рамках Интернета. Важными протоколами, работающими на межсетевом уровне, являются IP (Internet Protocol) и ICMP (Internet Control Message Protocol).

Ключевые аспекты межсетевого уровня:

  • IP-адресация: IP протокол используется для назначения и идентификации устройств в сети с помощью IP-адресов. IP-адреса позволяют маршрутизаторам и другим сетевым устройствам определить, как доставить данные от отправителя к получателю.
  • Маршрутизация: Межсетевой уровень включает в себя процесс маршрутизации, который определяет наилучший путь для доставки пакетов данных от отправителя к получателю через сеть. Маршрутизация основана на анализе IP-адресов пакетов и таблицах маршрутизации, которые содержат информацию о доступных путях и их характеристиках.
  • Фрагментация и сборка пакетов: IP может фрагментировать (разбивать) большие пакеты данных на более мелкие фрагменты для передачи по сети с ограниченным размером MTU (Maximum Transmission Unit). Получатель затем собирает эти фрагменты обратно в исходный пакет.
  • ICMP: Протокол ICMP используется для передачи уведомлений об ошибках и контрольных сообщений между устройствами в сети. Например, ICMP может использоваться для передачи сообщений об отсутствии маршрута до назначения (ICMP Destination Unreachable) или об ошибке TTL (Time to Live).
  • IPv4 и IPv6: Существует две основные версии протокола IP - IPv4 и IPv6. IPv4 - это наиболее распространенная версия, использующая 32-битные адреса. IPv6, в свою очередь, представляет более современную версию протокола IP, использующую 128-битные адреса и разработанную для решения проблем исчерпания адресного пространства IPv4.
  • Туннелирование: Межсетевой уровень также поддерживает технику туннелирования, которая позволяет упаковывать пакеты одного протокола внутрь другого протокола для передачи через сеть, несмотря на различия в их поддержке на промежуточных устройствах.

IP

Internet Protocol (IP) - основной протокол межсетевого уровня, который обеспечивает адресацию и маршрутизацию пакетов данных в сети. IP разделяет данные на пакеты и обеспечивает их доставку от отправителя к получателю.

ICMP

Internet Control Message Protocol (ICMP): Протокол, используемый для отправки сообщений об ошибках и контрольных сообщений между устройствами в сети. ICMP может использоваться для диагностики сетевых проблем и отправки сообщений о недоступности маршрутов и других сетевых условиях.

IGMP

Internet Group Management Protocol (IGMP) - протокол, используемый для управления мультикастовой коммуникацией в IP-сетях. IGMP позволяет устройствам в сети регистрироваться для получения мультикастовых потоков данных и управлять группами мультикастовой коммуникации.

IPsec

Internet Protocol Security (IPsec) - набор протоколов и стандартов для обеспечения безопасности IP-сетей путем шифрования и аутентификации данных, передаваемых через сеть. IPsec обеспечивает конфиденциальность, целостность и аутентификацию данных на уровне IP.

Транспортный уровень

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

TCP

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

Ключевые особенности TCP:

  • Надёжность передачи данных: TCP обеспечивает надежную передачу данных, гарантируя, что данные будут доставлены в нужном порядке и без потерь. Для этого TCP использует механизм подтверждений (acknowledgements) и повторной передачи (retransmission) в случае возникновения ошибок.
  • Управление потоком: TCP контролирует скорость передачи данных между отправителем и получателем, чтобы избежать переполнения буферов и потери данных. Это достигается с помощью механизмов управления потоком, таких как оконные механизмы (windowing).
  • Установка соединения и завершение: Прежде чем начать передачу данных, TCP устанавливает соединение между отправителем и получателем. Это происходит через процесс, называемый "three-way handshake". После передачи данных соединение завершается, используя процесс "four-way handshake".
  • Сегментация данных: TCP разбивает передаваемые данные на сегменты определенного размера для передачи по сети. Эти сегменты содержат заголовок, включающий информацию о портах отправителя и получателя, а также управляющую информацию.
  • Нумерация последовательности: Каждый байт данных в потоке TCP нумеруется, что позволяет получателю восстановить правильный порядок байтов и обнаруживать потерянные или повторенные сегменты.
  • Низкая латентность: В отличие от протокола UDP (User Datagram Protocol), TCP обеспечивает надежную и упорядоченную передачу данных, что делает его более подходящим для приложений, где важна низкая вероятность ошибок и минимальная задержка.

UDP

UDP (User Datagram Protocol) - это простой протокол передачи данных в компьютерных сетях, который предоставляет основные функции доставки без гарантий надежности и упорядоченности, характерные для TCP.

Ключевые особенности UDP:

  • Отсутствие управления потоком: В отличие от TCP, UDP не предоставляет механизмы управления потоком данных, такие как контроль за скоростью передачи или повторная передача потерянных сегментов. Это означает, что UDP может быть более быстрым и менее нагруженным протоколом, но при этом менее надежным.
  • Отсутствие установления соединения: UDP не требует установления соединения между отправителем и получателем перед передачей данных. Это делает UDP более легковесным в использовании и подходящим для приложений, где не требуется надежная передача данных или гарантированная доставка.
  • Простота и эффективность: За счет отсутствия механизмов управления потоком и установления соединения UDP обычно более эффективен в сравнении с TCP. Он требует меньше ресурсов сети и вычислительной мощности, что особенно важно для приложений с высокими требованиями к скорости и низкой задержке.
  • Использование в приложениях реального времени: UDP широко используется в приложениях реального времени, таких как видеотрансляции, потоковое аудио и онлайн-игры, где некоторые потери данных могут быть допустимы, а скорость и минимальная задержка являются приоритетными.
  • Броадкаст и мультикаст: UDP поддерживает рассылку (broadcast) и мультикаст (multicast) передачу данных, что позволяет отправлять сообщения одновременно нескольким получателям или всем устройствам в сети без установления индивидуального соединения с каждым из них.
  • Примеры применения: UDP используется в различных приложениях, таких как DNS (Domain Name System) для разрешения доменных имен, DHCP (Dynamic Host Configuration Protocol) для динамической настройки сетевых параметров устройств, а также в многих других протоколах и приложениях, где требуется быстрая и эффективная передача данных без гарантий надежности.

🤔 А с каким протоколом ты часто работаешь?

👇 Напиши в комментариях.

✅ Подписывайся на канал, чтобы не пропустить новые публикации!