Сетевые протоколы

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

Протоколы действуют по принципу многоуровневой модели (например, OSI или TCP/IP), где каждый уровень отвечает за определенную задачу:

  • Физический (Ethernet, Wi-Fi) — передаёт биты по кабелю или радиоволнам;
  • Канальный (MAC-адресация) — контролирует доступ к среде передачи и исправляет ошибки;
  • Сетевой (IP, ICMP) — отвечает за маршрутизацию и логическую адресацию;
  • Транспортный (TCP, UDP) — гарантирует (или не гарантирует) доставку данных;
  • Прикладной (HTTP, FTP, DNS) — обеспечивает работу конкретных сервисов, например, веб-страниц или файловых загрузок

Основные виды сетевых протоколов

1. Протоколы маршрутизации, определяющие пути передачи данных между сетями:

  • IP (Internet Protocol)
    • Назначение: логическая адресация (IPv4/IPv6) и доставка пакетов в глобальных сетях;
    • Принцип работы: присваивает устройствам уникальные IP-адреса и направляет трафик через маршрутизаторы
  • OSPF, BGP
    • Назначение: динамический выбор оптимального маршрута в крупных сетях (например, между провайдерами)

2. Протоколы передачи данных, отвечающие за непосредственную пересылку информации между устройствами:

  • TCP (Transmission Control Protocol)
    • Назначение: надежная доставка данных с подтверждением получения;
    • Принцип работы: разбивает данные на сегменты, нумерует их и восстанавливает порядок на стороне получателя. При потере пакета запрашивает повторную отправку;
    • Где используется: веб-страницы (HTTP/HTTPS), электронная почта (SMTP), файловые передачи (FTP)
  • UDP (User Datagram Protocol)
    • Назначение: быстрая, но ненадежная передача без подтверждения;
    • Принцип работы: отправляет пакеты без гарантии доставки. Подходит для потоковых сервисов, где важнее скорость, чем целостность данных;
    • Где используется: видеозвонки, онлайн-игры, DNS-запросы

3. Прикладные протоколы, обеспечивающие работу конкретных сервисов:

  • HTTP/HTTPS
    • Назначение: загрузка веб-страниц (HTTPS добавляет шифрование)
  • FTP (File Transfer Protocol)
    • Назначение: передача файлов между клиентом и сервером
  • DNS (Domain Name System)
    • Назначение: преобразование доменных имён (например, google.com) в IP-адреса

4. Протоколы безопасности, защищающие данные от перехвата и подделки:

  • TLS/SSL
    • Назначение: шифрование трафика (используется в HTTPS, VPN)
  • IPsec
    • Назначение: защита IP-пакетов на сетевом уровне

Применения сетевых протоколов в современных технологиях

1. Интернет и веб-технологии:

  • QUIC (на базе UDP) — ускоряет загрузку контента в Chrome и YouTube за счёт уменьшения задержек;
  • HTTP/HTTPS — обеспечивают загрузку веб-страниц (браузер ↔ сервер);
  • DNS — преобразует удобные доменные имена (например, youtube.com) в IP-адреса

2. Облачные вычисления и удаленные сервисы

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

  • TCP/IP — основа передачи данных между клиентом и облаком (AWS, Google Cloud);
  • SFTP/SCP — безопасная пересылка файлов в облачные хранилища;
  • gRPC — высокоскоростное взаимодействие микросервисов в распределённых системах

Архитектурные стили

Что такое REST API

REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия между клиентом и сервером через HTTP. Он определяет принципы построения API, обеспечивая стандартизированный и эффективный обмен данными между различными системами

REST API широко используется в веб-разработке для интеграции сервисов и приложений. Его главная особенность — использование принципов REST, которые делают взаимодействие логичным, простым и масштабируемым. REST API позволяет приложениям обмениваться данными независимо от языков программирования и платформ. Сервер предоставляет ресурсы в виде данных, а клиент получает к ним доступ с помощью стандартных HTTP-запросов. Каждый ресурс в REST API имеет уникальный идентификатор (URI) и управляется с помощью методов HTTP. Это делает взаимодействие между клиентом и сервером понятным и предсказуемым

Основные принципы REST API

REST API строится на нескольких ключевых принципах, которые обеспечивают его эффективность и удобство в использовании. Эти принципы помогают создавать гибкие, масштабируемые и простые в поддержке веб-сервисы:

  • Клиент-серверная архитектура. REST API подразумевает чёткое разделение между клиентом и сервером. Клиент запрашивает данные, а сервер их предоставляет. Такое разделение улучшает масштабируемость системы и позволяет клиентам работать независимо от серверной логики;
  • Отсутствие состояния (stateless). Каждый запрос от клиента к серверу обрабатывается независимо от предыдущих запросов. Сервер не хранит информацию о состоянии клиента, что упрощает обработку запросов и повышает отказоустойчивость системы;
  • Единообразие интерфейса. Все ресурсы REST API должны иметь чёткую структуру и единообразные URL-адреса. Запросы к API выполняются с использованием стандартных методов HTTP, а данные передаются в предсказуемых форматах, таких как JSON или XML;
  • Система уровней (Layered System). REST API может включать несколько уровней, таких как балансировщики нагрузки, прокси-серверы и системы аутентификации. Каждый уровень выполняет свою функцию и не зависит от других, что повышает надёжность и гибкость системы;
  • Возможность выполнения кода по требованию. Хотя этот принцип не является обязательным, REST API может поддерживать загрузку и выполнение кода на стороне клиента, например в виде скриптов или небольших программ

Основные принципы REST API

REST API строится на нескольких ключевых принципах, которые обеспечивают его эффективность и удобство в использовании. Эти принципы помогают создавать гибкие, масштабируемые и простые в поддержке веб-сервисы:

  • Клиент-серверная архитектура. REST API подразумевает чёткое разделение между клиентом и сервером. Клиент запрашивает данные, а сервер их предоставляет. Такое разделение улучшает масштабируемость системы и позволяет клиентам работать независимо от серверной логики;
  • Отсутствие состояния (stateless). Каждый запрос от клиента к серверу обрабатывается независимо от предыдущих запросов. Сервер не хранит информацию о состоянии клиента, что упрощает обработку запросов и повышает отказоустойчивость системы;
  • Единообразие интерфейса. Все ресурсы REST API должны иметь чёткую структуру и единообразные URL-адреса. Запросы к API выполняются с использованием стандартных методов HTTP, а данные передаются в предсказуемых форматах, таких как JSON или XML;
  • Система уровней (Layered System). REST API может включать несколько уровней, таких как балансировщики нагрузки, прокси-серверы и системы аутентификации. Каждый уровень выполняет свою функцию и не зависит от других, что повышает надёжность и гибкость системы;
  • Возможность выполнения кода по требованию. Хотя этот принцип не является обязательным, REST API может поддерживать загрузку и выполнение кода на стороне клиента, например в виде скриптов или небольших программ

Ключевые компоненты REST API

REST API основан на нескольких ключевых компонентах, которые определяют его структуру и поведение. Каждый из них играет важную роль в организации взаимодействия между клиентом и сервером:

  • Ресурсы (Resources). Ресурс — это любая сущность, к которой можно получить доступ через API. Это могут быть пользователи, заказы, товары или любые другие объекты системы. Каждый ресурс имеет уникальный идентификатор (URI), например: https://api.example.com/users/123
    Здесь users — это коллекция пользователей, а 123 — уникальный идентификатор конкретного пользователя
  • Методы HTTP. Для взаимодействия с ресурсами используются стандартные методы HTTP:
    • GET
      Что делает: получает представление ресурса. По определению безопасен и идемпотентен. Идеальный выбор для страниц сайта и чтения данных через API;
      Особенности: прекрасно кешируется при правильных заголовках (Cache-Control, ETag, Last-Modified). Главное правило — никогда не передавайте секретные данные в строке запроса, потому что они попадут в логи сервера и историю браузера
    • POST
      Что делает: создаёт ресурсы или выполняет операции с побочными эффектами: отправка формы, запуск обработки, авторизация пользователя;
      Особенности: не идемпотентен по своей природе. Требует защиты от CSRF, валидации входных данных и ограничений размера. POST — это как швейцарский нож среди HTTP-методов: может всё, но каждое применение нужно продумать
    • PUT
      Что делает: заменяет ресурс целиком по известному адресу. Идемпотентен: можете слать один и тот же PUT хоть сто раз — результат будет одинаковый;
      Особенности: подходит для случаев, когда клиент отправляет полную новую версию объекта. Требует строгого контроля прав доступа и валидации тела запроса;
    • PATCH
      Что делает: частично обновляет ресурс. Спасение для случаев, когда пересылать весь объект неэффективно или просто глупо;
      Особенности: по умолчанию может быть неидемпотентным, хотя идемпотентная реализация тоже возможна
    • DELETE
      Что делает: удаляет ресурс. Идемпотентен по результату: повторное удаление уже несуществующего ресурса не должно ломать систему;
      Особенности: обязательны аутентификация, авторизация и аудит всех операций удаления. В продакшене часто применяют «мягкое» удаление — помечают записи как удалённые вместо физического стирания
    • Идемпотентность в методах HTTP — это свойство, при котором повторный идентичный запрос имеет один и тот же эффект, не изменяющий состояние сервера. Другими словами, многократное выполнение идемпотентной операции приводит к тому же результату, что и однократное
  • Запросы и ответы. Обмен данными между клиентом и сервером происходит через HTTP-запросы и ответы. В большинстве случаев используется формат JSON, поскольку он удобен для чтения и поддерживается большинством языков программирования
  • Заголовки HTTP. Заголовки используются для передачи дополнительной информации, такой как тип контента (Content-Type), параметры аутентификации (Authorization), кодировки и кеширования (Cache-Control)
  • Коды ответа HTTP. Каждый HTTP-запрос получает ответ с определённым кодом состояния:
    • 200 OK — успешный запрос;
    • 400 Bad Request — ошибка в запросе клиента;
    • 401 Unauthorized — отсутствие прав доступа;
    • 403 Forbidden — сервер понял запрос и идентифицировал пользователя, но всё равно отказывается предоставить доступ;
    • 404 Not Found — ресурс не найден;
    • 500 Internal Server Error — ошибка на стороне сервера

Как работает RESTful API

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

  • Инициация запроса клиентом. Клиент (веб-приложение, мобильное приложение или другая система) отправляет HTTP-запрос к серверу. Запрос содержит:
    • метод HTTP (например, GET, POST);
    • URI запрашиваемого ресурса;
    • заголовки (например, Authorization, Content-Type);
    • тело запроса (если требуется, например при POST или PUT)
  • Обработка запроса сервером. Сервер получает запрос, идентифицирует запрашиваемый ресурс и выполняет соответствующее действие. Например, при GET /users сервер извлекает список пользователей из базы данных и подготавливает ответ Формирование ответа. Сервер отправляет клиенту HTTP-ответ, который включает:
    • код состояния (например, 200 OK, 404 Not Found);
    • заголовки (Content-Type, Cache-Control);
    • тело ответа (обычно в формате JSON)
  • Клиент получает и обрабатывает данные. Получив ответ, клиент анализирует его и отображает данные пользователю или выполняет дальнейшие операции (например, кеширование или отправку последующих запросов)
  • Возможные ошибки и их обработка. Если запрос содержит некорректные данные или сервер не может обработать его, возвращается код ошибки
  • Реакция клиента на ошибку. Клиент должен обработать ошибку и предпринять соответствующие действия — например, запросить у пользователя корректные данные

Безопасность в REST API

Безопасность REST API играет ключевую роль, так как API может передавать конфиденциальные данные и управлять важными системами. Для защиты API используются несколько механизмов:

  • Аутентификация и авторизация
    • Аутентификация проверяет, кто делает запрос;
    • Авторизация определяет, какие действия разрешены пользователю
    Популярные методы аутентификации:
    • Basic Authentication — передача логина и пароля в заголовке запроса (небезопасно без HTTPS);
    • OAuth 2.0 — стандарт для безопасной авторизации через токены доступа;
    • JWT (JSON Web Token) — токены, которые позволяют передавать данные о пользователе между клиентом и сервером;
    • HTTPS и шифрование. Использование HTTPS (TLS/SSL) защищает передаваемые данные от перехвата и атак типа «человек посередине» (MITM). Любой API, работающий с чувствительными данными, должен использовать HTTPS по умолчанию;
  • Ограничение запросов (Rate Limiting). Защищает API от перегрузок и атак, таких как DDoS. Пример политики:
    • не более 100 запросов в минуту с одного IP;
    • возврат 429 Too Many Requests при превышении лимита
  • Валидирование данных и защита от атак
    • Проверка входных данных предотвращает SQL-инъекции и XSS-атаки;
    • Использование Content-Type и CORS защищает API от несанкционированных межсайтовых запросов
  • Логирование и мониторинг. Запись всех запросов, ошибок и подозрительной активности помогает выявлять атаки и анализировать работу API
  • Ограничение доступа к данным. Не все данные должны быть доступны всем пользователям. Для этого используются ролевые модели доступа (RBAC) и политики защиты конфиденциальности

Что такое SOAP

SOAP (Simple Object Access Protocol) — это протокол обмена данными в виде XML. В отличие от REST, у SOAP есть четкий набор правил и протоколов, которому должны следовать все участники обмена данными. Такой подход ценится в корпоративной среде и решениях, где важно обеспечить высокую безопасность

Отличия REST и SOAP

Если опустить детали и попытаться объяснить простыми словами, в чем заключается разница между REST и SOAP, то все сводится к тому, что REST — архитектура для построения API, а SOAP — протокол обмена данными. Сходство заключается лишь в том, что обе технологии стандартизирует процесс обмена данными, но со своими особенностями:

  • SOAP требует строгого формата XML, тогда как REST может работать с xml, JSON, HTML, CSV и другими форматами;
  • REST подходит для быстрого развертывания и масштабирования, SOAP — для сложных интеграций, требующих формализации и безопасности;
  • SOAP поддерживает множество транспортных протоколов (HTTP, SMTP, FTP), REST работает исключительно через HTTP;
  • SOAP строго валидирует данные на основе XSD-схем, REST обеспечивает гибкую валидацию через бизнес-логику на стороне сервера;
  • В REST используются стандартные HTTP-методы, SOAP реализует вызовы удалённых процедур с помощью собственного механизма;
  • REST легче воспринимается и проще реализуется, особенно для чайников, а SOAP требует более глубокого погружения в спецификации и стандарты;
  • SOAP имеет встроенные механизмы надёжной доставки и обработки ошибок, REST оставляет эти задачи на усмотрение разработчика;
  • REST выигрывает в производительности и легкости внедрения, SOAP — в стабильности, безопасности и чёткости структуры
Smartomato