Перейти к содержимому

Лекция 2. Сетевые основы интернет-приложений (расширение) (расширение)

Лекция 2. Сетевые основы интернет-приложений (расширение)

  1. Введение

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

  1. Модель OSI и TCP/IP

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

2.1. Модель OSI (Open Systems Interconnection)

Модель OSI, разработанная Международной организацией по стандартизации (ISO) в 1984 году, представляет собой концептуальную основу для понимания сетевого взаимодействия. Модель состоит из семи уровней, каждый из которых выполняет специфические функции:

2.1.1. Физический уровень (Physical Layer)

  • Функции: Передача битов по физической среде передачи данных
  • Протоколы: Ethernet, Wi-Fi (802.11), Bluetooth, USB
  • Единицы данных: Биты
  • Оборудование: Сетевые адаптеры, кабели, повторители, концентраторы
  • Функции: Обеспечение надежной передачи данных между соседними узлами, обнаружение и исправление ошибок
  • Протоколы: Ethernet, Wi-Fi, PPP, HDLC
  • Единицы данных: Кадры (Frames)
  • Оборудование: Коммутаторы, мосты

2.1.3. Сетевой уровень (Network Layer)

  • Функции: Маршрутизация пакетов между различными сетями, логическая адресация
  • Протоколы: IP (IPv4/IPv6), ICMP, OSPF, BGP
  • Единицы данных: Пакеты (Packets)
  • Оборудование: Маршрутизаторы

2.1.4. Транспортный уровень (Transport Layer)

  • Функции: Обеспечение сквозной доставки данных, контроль потока, сегментация
  • Протоколы: TCP, UDP, SCTP
  • Единицы данных: Сегменты (Segments)
  • Функции: Управление соединениями, контроль ошибок, мультиплексирование

2.1.5. Сеансовый уровень (Session Layer)

  • Функции: Управление сессиями между приложениями, синхронизация
  • Протоколы: NetBIOS, RPC, SQL
  • Единицы данных: Данные сессии
  • Функции: Установка, поддержание и завершение сессий

2.1.6. Представительский уровень (Presentation Layer)

  • Функции: Преобразование данных, шифрование, сжатие
  • Протоколы: SSL/TLS, JPEG, MPEG, ASCII
  • Единицы данных: Данные представления
  • Функции: Кодирование, декодирование, шифрование

2.1.7. Прикладной уровень (Application Layer)

  • Функции: Интерфейс между пользователем и сетевыми службами
  • Протоколы: HTTP, HTTPS, FTP, SMTP, DNS, SSH
  • Единицы данных: Сообщения (Messages)
  • Функции: Сетевые службы, пользовательские интерфейсы

2.2. Модель TCP/IP

Модель TCP/IP, разработанная Министерством обороны США в 1970-х годах, является практической реализацией сетевого взаимодействия в Интернете. В отличие от модели OSI, TCP/IP имеет четыре уровня:

  • Соответствует: Физический и канальный уровни OSI
  • Протоколы: Ethernet, Wi-Fi, PPP, ARP
  • Функции: Физическая передача данных, управление доступом к среде

2.2.2. Сетевой уровень (Internet Layer)

  • Соответствует: Сетевой уровень OSI
  • Протоколы: IP, ICMP, IGMP, OSPF, BGP
  • Функции: Маршрутизация, логическая адресация, фрагментация

2.2.3. Транспортный уровень (Transport Layer)

  • Соответствует: Транспортный уровень OSI
  • Протоколы: TCP, UDP, SCTP
  • Функции: Сквозная доставка данных, контроль потока, мультиплексирование

2.2.4. Прикладной уровень (Application Layer)

  • Соответствует: Сеансовый, представительский и прикладной уровни OSI
  • Протоколы: HTTP, HTTPS, FTP, SMTP, DNS, SSH, WebSocket, gRPC
  • Функции: Сетевые службы, пользовательские интерфейсы

2.3. Принципы инкапсуляции данных

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

👉 В разработке интернет-приложений нас прежде всего интересуют два верхних уровня модели TCP/IP: • транспортный (TCP, UDP) - обеспечивает надежную доставку данных, • прикладной (HTTP, WebSocket, gRPC) - определяет формат и семантику обмена данными.

  1. Транспортные протоколы

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

3.1. TCP (Transmission Control Protocol)

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

3.1.1. Основные характеристики TCP

Надежность доставки:

  • Подтверждение получения данных (ACK)
  • Повторная передача потерянных пакетов
  • Контрольная сумма для обнаружения ошибок
  • Последовательная нумерация сегментов

Управление потоком:

  • Механизм скользящего окна (Sliding Window)
  • Адаптивное управление скоростью передачи
  • Предотвращение переполнения буферов получателя

Управление перегрузкой:

  • Алгоритм медленного старта (Slow Start)
  • Алгоритм предотвращения перегрузки (Congestion Avoidance)
  • Быстрое восстановление (Fast Recovery)

3.1.2. Установка соединения (Three-Way Handshake)

  1. SYN: Клиент отправляет пакет с флагом SYN и начальным номером последовательности
  2. SYN-ACK: Сервер отвечает пакетом с флагами SYN и ACK, подтверждая получение и отправляя свой номер последовательности
  3. ACK: Клиент подтверждает получение SYN-ACK пакета

3.1.3. Завершение соединения (Four-Way Handshake)

  1. FIN: Одна сторона отправляет пакет с флагом FIN
  2. ACK: Другая сторона подтверждает получение FIN
  3. FIN: Вторая сторона отправляет свой FIN
  4. ACK: Первая сторона подтверждает получение второго FIN

3.1.4. Области применения TCP

  • Веб-приложения (HTTP/HTTPS)
  • Электронная почта (SMTP, IMAP, POP3)
  • Файловые передачи (FTP)
  • Удаленный доступ (SSH, Telnet)
  • Базы данных (MySQL, PostgreSQL)

3.2. UDP (User Datagram Protocol)

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

3.2.1. Основные характеристики UDP

Простота:

  • Минимальный заголовок (8 байт)
  • Отсутствие установки соединения
  • Отсутствие управления потоком
  • Отсутствие контроля перегрузки

Скорость:

  • Низкая задержка передачи
  • Минимальная обработка на уровне протокола
  • Отсутствие буферизации

Ненадежность:

  • Отсутствие подтверждений доставки
  • Отсутствие повторной передачи
  • Возможная потеря пакетов
  • Возможное изменение порядка пакетов

3.2.2. Структура UDP-заголовка

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.2.3. Области применения UDP

  • Потоковое видео (RTP)
  • Видеоконференции (WebRTC)
  • Онлайн-игры
  • DNS-запросы
  • Системы мониторинга (SNMP)
  • Протоколы маршрутизации (RIP, OSPF)

3.3. SCTP (Stream Control Transmission Protocol)

SCTP - современный протокол транспортного уровня, сочетающий надежность TCP с возможностями UDP.

3.3.1. Особенности SCTP

  • Мультиплексирование потоков
  • Частичная упорядоченная доставка
  • Защита от атак типа SYN flooding
  • Поддержка множественных адресов

👉 Большинство интернет-приложений основано на TCP, так как корректность данных важнее скорости. Однако UDP находит применение в приложениях реального времени, где задержка критична.

  1. Прикладные протоколы

Прикладной уровень модели TCP/IP определяет протоколы и интерфейсы для взаимодействия между сетевыми приложениями. Эти протоколы определяют формат, семантику и правила обмена данными между клиентом и сервером.

4.1. HTTP (HyperText Transfer Protocol)

HTTP является основным протоколом прикладного уровня для передачи гипертекстовых документов в сети Интернет. Протокол был разработан Тимом Бернерсом-Ли в 1989 году и стандартизирован IETF.

4.1.1. Эволюция HTTP

HTTP/0.9 (1991):

  • Простейшая версия с поддержкой только GET-запросов
  • Отсутствие заголовков и кодов состояния
  • Только HTML-документы

HTTP/1.0 (1996, RFC 1945):

  • Добавлены заголовки запросов и ответов
  • Коды состояния HTTP
  • Поддержка различных типов контента
  • Методы POST, HEAD, PUT, DELETE

HTTP/1.1 (1997, RFC 2616, обновлен RFC 7230-7237):

  • Постоянные соединения (Keep-Alive)
  • Пайплайнинг запросов
  • Кэширование
  • Сжатие контента
  • Виртуальные хосты
  • Chunked transfer encoding

HTTP/2 (2015, RFC 7540):

  • Мультиплексирование потоков
  • Бинарный протокол
  • Сжатие заголовков (HPACK)
  • Server Push
  • Приоритизация потоков

HTTP/3 (2022, RFC 9114):

  • Основан на протоколе QUIC
  • Встроенное шифрование
  • Улучшенная производительность
  • Устойчивость к потере пакетов

4.1.2. Архитектура HTTP

HTTP следует модели клиент-сервер:

  • Клиент: Инициирует HTTP-запросы (браузеры, мобильные приложения)
  • Сервер: Обрабатывает запросы и отправляет ответы (веб-серверы)
  • Прокси: Промежуточные серверы для кэширования, фильтрации, балансировки нагрузки

4.1.3. Методы HTTP

МетодОписаниеИдемпотентностьБезопасность
GETПолучение ресурсаДаДа
POSTСоздание ресурсаНетНет
PUTОбновление/создание ресурсаДаНет
DELETEУдаление ресурсаДаНет
HEADПолучение заголовковДаДа
OPTIONSПолучение поддерживаемых методовДаДа
PATCHЧастичное обновлениеНетНет

4.1.4. Коды состояния HTTP

1xx - Информационные:

  • 100 Continue - продолжить запрос
  • 101 Switching Protocols - переключение протоколов

2xx - Успешные:

  • 200 OK - запрос выполнен успешно
  • 201 Created - ресурс создан
  • 202 Accepted - запрос принят к обработке
  • 204 No Content - нет содержимого

3xx - Перенаправления:

  • 301 Moved Permanently - постоянное перенаправление
  • 302 Found - временное перенаправление
  • 304 Not Modified - не изменено

4xx - Ошибки клиента:

  • 400 Bad Request - некорректный запрос
  • 401 Unauthorized - требуется аутентификация
  • 403 Forbidden - доступ запрещен
  • 404 Not Found - ресурс не найден
  • 429 Too Many Requests - превышен лимит запросов

5xx - Ошибки сервера:

  • 500 Internal Server Error - внутренняя ошибка сервера
  • 502 Bad Gateway - ошибка шлюза
  • 503 Service Unavailable - сервис недоступен
  • 504 Gateway Timeout - таймаут шлюза

4.2. HTTPS (HTTP Secure)

HTTPS обеспечивает защищенную передачу данных путем наложения протокола TLS (Transport Layer Security) поверх HTTP.

4.2.1. Принципы работы HTTPS

  1. Установка TLS-соединения:

    • Handshake для согласования параметров шифрования
    • Обмен сертификатами для аутентификации
    • Генерация общих ключей шифрования
  2. Шифрование данных:

    • Симметричное шифрование для HTTP-данных
    • Асимметричное шифрование для обмена ключами
    • Аутентификация целостности данных

4.2.2. Компоненты безопасности HTTPS

  • Конфиденциальность: Шифрование передаваемых данных
  • Целостность: Защита от несанкционированного изменения
  • Аутентификация: Подтверждение подлинности сервера
  • Неотрекаемость: Защита от отказа от отправки

4.3. WebSocket

WebSocket - протокол для двусторонней связи между клиентом и сервером поверх TCP-соединения.

4.3.1. Особенности WebSocket

  • Полнодуплексная связь: Одновременная передача в обе стороны
  • Низкая задержка: Отсутствие накладных расходов HTTP
  • Персистентное соединение: Поддержание соединения между запросами
  • Поддержка подпротоколов: Возможность использования различных протоколов поверх WebSocket

4.3.2. Установка WebSocket-соединения

  1. HTTP Upgrade: Клиент отправляет запрос с заголовком Upgrade: websocket
  2. Handshake: Сервер подтверждает переключение на WebSocket
  3. Данные: Обмен данными в формате WebSocket-фреймов

4.3.3. Области применения WebSocket

  • Чат-приложения
  • Онлайн-игры
  • Биржевые котировки в реальном времени
  • Совместная работа с документами
  • Системы мониторинга

4.4. gRPC (gRPC Remote Procedure Calls)

gRPC - современный фреймворк для создания распределенных систем, использующий HTTP/2 и Protocol Buffers.

4.4.1. Архитектура gRPC

  • IDL (Interface Definition Language): Protocol Buffers для описания сервисов
  • Code Generation: Автоматическая генерация клиентского и серверного кода
  • HTTP/2: Использование современных возможностей HTTP/2
  • Мультиязычность: Поддержка множества языков программирования

4.4.2. Типы gRPC-сервисов

  • Unary RPC: Один запрос - один ответ
  • Server streaming RPC: Один запрос - поток ответов
  • Client streaming RPC: Поток запросов - один ответ
  • Bidirectional streaming RPC: Поток запросов - поток ответов

4.4.3. Преимущества gRPC

  • Производительность: Бинарный формат, мультиплексирование
  • Типобезопасность: Строгая типизация через Protocol Buffers
  • Версионирование: Встроенная поддержка версионирования API
  • Плагины: Расширяемость через систему плагинов

4.4.4. Области применения gRPC

  • Микросервисная архитектура
  • Мобильные приложения
  • Системы реального времени
  • Облачные сервисы
  • Интернет вещей (IoT)

  1. HTTP-запросы и ответы

HTTP основан на модели запрос-ответ (Request-Response), где клиент инициирует запрос, а сервер отправляет соответствующий ответ. Каждый HTTP-обмен состоит из двух частей: запроса от клиента и ответа от сервера.

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

HTTP-запрос состоит из трех основных компонентов:

5.1.1. Строка запроса (Request Line)

GET /api/products HTTP/1.1

Строка запроса содержит:

  • HTTP-метод: GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH
  • URI (Uniform Resource Identifier): Путь к ресурсу (/api/products)
  • Версия протокола: HTTP/1.1, HTTP/2, HTTP/3

5.1.2. Заголовки запроса (Request Headers)

Заголовки предоставляют метаданные о запросе:

Обязательные заголовки:

  • Host: Доменное имя сервера
  • User-Agent: Информация о клиенте

Заголовки контента:

  • Content-Type: Тип передаваемых данных (application/json, text/html)
  • Content-Length: Размер тела запроса в байтах
  • Content-Encoding: Способ кодирования (gzip, deflate)

Заголовки кэширования:

  • Cache-Control: Директивы кэширования
  • If-Modified-Since: Условный запрос по дате модификации
  • If-None-Match: Условный запрос по ETag

Заголовки аутентификации:

  • Authorization: Учетные данные (Bearer token, Basic auth)
  • Cookie: Данные сессии

Заголовки CORS:

  • Origin: Источник запроса
  • Access-Control-Request-Method: Запрашиваемый метод
  • Access-Control-Request-Headers: Запрашиваемые заголовки

5.1.3. Тело запроса (Request Body)

Тело запроса содержит данные, передаваемые серверу:

  • GET, HEAD, DELETE: Обычно не содержат тело
  • POST, PUT, PATCH: Содержат данные в различных форматах

5.2. Структура HTTP-ответа

HTTP-ответ состоит из трех основных компонентов:

5.2.1. Строка состояния (Status Line)

HTTP/1.1 200 OK

Строка состояния содержит:

  • Версия протокола: HTTP/1.1, HTTP/2, HTTP/3
  • Код состояния: Трехзначный числовой код (200, 404, 500)
  • Фраза состояния: Текстовое описание кода (OK, Not Found, Internal Server Error)

5.2.2. Заголовки ответа (Response Headers)

Заголовки контента:

  • Content-Type: MIME-тип содержимого (text/html, application/json)
  • Content-Length: Размер тела ответа
  • Content-Encoding: Способ кодирования
  • Content-Disposition: Способ обработки содержимого

Заголовки кэширования:

  • Cache-Control: Директивы кэширования
  • ETag: Тег сущности для валидации кэша
  • Last-Modified: Дата последней модификации
  • Expires: Время истечения кэша

Заголовки безопасности:

  • Strict-Transport-Security: Принуждение HTTPS
  • Content-Security-Policy: Политика безопасности контента
  • X-Frame-Options: Защита от clickjacking

Заголовки CORS:

  • Access-Control-Allow-Origin: Разрешенные источники
  • Access-Control-Allow-Methods: Разрешенные методы
  • Access-Control-Allow-Headers: Разрешенные заголовки

5.2.3. Тело ответа (Response Body)

Тело ответа содержит запрашиваемые данные:

  • HTML-документы
  • JSON/XML-данные
  • Изображения, видео, файлы
  • Бинарные данные

5.3. Примеры HTTP-обмена

5.3.1. GET-запрос

Запрос:

GET /api/users/123 HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Ответ:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 156
Cache-Control: private, max-age=3600
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"created_at": "2023-01-15T10:30:00Z"
}

5.3.2. POST-запрос

Запрос:

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 89
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
{
"name": "Jane Smith",
"email": "jane@example.com",
"password": "securepassword123"
}

Ответ:

HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/124
Content-Length: 45
{
"id": 124,
"message": "User created successfully"
}

  1. Форматы передачи данных

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

6.1. HTML (HyperText Markup Language)

HTML является стандартным языком разметки для создания веб-страниц.

6.1.1. Структура HTML-документа

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Заголовок страницы</title>
</head>
<body>
<h1>Основной заголовок</h1>
<p>Параграф текста</p>
<div class="container">
<img src="image.jpg" alt="Описание изображения">
</div>
</body>
</html>

6.1.2. Версии HTML

  • HTML 4.01 (1999): Стандартная версия с поддержкой CSS и JavaScript
  • XHTML 1.0 (2000): XML-версия HTML с более строгим синтаксисом
  • HTML5 (2014): Современная версия с семантическими элементами, мультимедиа, API

6.1.3. Семантические элементы HTML5

  • <header>, <nav>, <main>, <section>, <article>, <aside>, <footer>
  • <figure>, <figcaption> для изображений и подписей
  • <time> для дат и времени
  • <mark> для выделения текста

6.2. JSON (JavaScript Object Notation)

JSON - легковесный формат обмена данными, основанный на синтаксисе JavaScript.

6.2.1. Структура JSON

{
"name": "John Doe",
"age": 30,
"isActive": true,
"address": {
"street": "123 Main St",
"city": "New York",
"zipCode": "10001"
},
"hobbies": ["reading", "swimming", "coding"],
"spouse": null
}

6.2.2. Типы данных JSON

  • String: Строки в двойных кавычках
  • Number: Целые и вещественные числа
  • Boolean: true или false
  • null: Пустое значение
  • Object: Коллекция пар ключ-значение в фигурных скобках
  • Array: Упорядоченная коллекция значений в квадратных скобках

6.2.3. Преимущества JSON

  • Читаемость: Легко читается человеком
  • Компактность: Меньший размер по сравнению с XML
  • Производительность: Быстрое парсинг и генерация
  • Универсальность: Поддержка всеми современными языками программирования
  • Веб-совместимость: Нативная поддержка в JavaScript

6.2.4. Ограничения JSON

  • Отсутствие комментариев
  • Отсутствие типов данных (даты, бинарные данные)
  • Ограниченная поддержка специальных символов
  • Отсутствие схемы данных

6.3. XML (eXtensible Markup Language)

XML - расширяемый язык разметки для структурированного хранения и передачи данных.

6.3.1. Структура XML-документа

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="123">
<name>John Doe</name>
<email>john@example.com</email>
<address>
<street>123 Main St</street>
<city>New York</city>
<zipCode>10001</zipCode>
</address>
<hobbies>
<hobby>reading</hobby>
<hobby>swimming</hobby>
<hobby>coding</hobby>
</hobbies>
</user>
</users>

6.3.2. Особенности XML

  • Самодокументируемость: Структура данных понятна из разметки
  • Расширяемость: Возможность создания собственных тегов
  • Валидация: Проверка структуры через DTD или XSD схемы
  • Пространства имен: Избежание конфликтов имен тегов
  • XPath/XQuery: Мощные языки запросов

6.3.3. Применение XML

  • Конфигурационные файлы
  • Обмен данными между системами (SOAP, RSS, Atom)
  • Документооборот
  • Научные и технические данные

6.4. Другие форматы данных

6.4.1. YAML (YAML Ain’t Markup Language)

YAML - формат сериализации данных, ориентированный на читаемость:

name: John Doe
age: 30
isActive: true
address:
street: 123 Main St
city: New York
zipCode: 10001
hobbies:
- reading
- swimming
- coding

Применение: Конфигурационные файлы, CI/CD пайплайны, документация.

6.4.2. Protocol Buffers (Protobuf)

Protobuf - бинарный формат сериализации от Google:

syntax = "proto3";
message User {
int32 id = 1;
string name = 2;
string email = 3;
Address address = 4;
repeated string hobbies = 5;
}
message Address {
string street = 1;
string city = 2;
string zip_code = 3;
}

Преимущества: Компактность, скорость, типизация, версионирование.

6.4.3. MessagePack

MessagePack - бинарный формат сериализации, совместимый с JSON:

Применение: Высокопроизводительные системы, мобильные приложения.

6.4.4. Мультимедиа форматы

Изображения:

  • JPEG: Сжатие с потерями, фотографии
  • PNG: Сжатие без потерь, графика с прозрачностью
  • SVG: Векторная графика, масштабируемость
  • WebP: Современный формат от Google

Видео:

  • MP4: Универсальный контейнер
  • WebM: Открытый формат для веба
  • AV1: Современный кодек с высокой эффективностью

Аудио:

  • MP3: Сжатие с потерями
  • AAC: Улучшенное сжатие
  • FLAC: Сжатие без потерь
  • Opus: Современный кодек для веба

👉 Наиболее распространённый стандарт обмена данными между клиентом и сервером сегодня — JSON, благодаря его простоте, производительности и универсальной поддержке. Однако выбор формата должен основываться на конкретных требованиях приложения.

  1. Жизненный цикл запроса в интернет-приложении

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

7.1. Детальный жизненный цикл запроса

7.1.1. Инициация запроса

Пример: Пользователь открывает страницу интернет-магазина.

  1. Пользовательское действие: Клик по ссылке или ввод URL
  2. DNS-резолюция: Преобразование доменного имени в IP-адрес
  3. Установка TCP-соединения: Three-way handshake
  4. TLS handshake (для HTTPS): Установка защищенного соединения

7.1.2. Формирование и отправка запроса

  1. Создание HTTP-запроса: Метод, URI, заголовки, тело
  2. Инкапсуляция: Добавление заголовков TCP/IP
  3. Передача по сети: Маршрутизация через промежуточные узлы
  4. Доставка на сервер: Обработка на веб-сервере

7.1.3. Обработка на сервере

  1. Парсинг запроса: Извлечение метода, URI, заголовков
  2. Маршрутизация: Определение обработчика запроса
  3. Аутентификация/авторизация: Проверка прав доступа
  4. Выполнение бизнес-логики: Обработка данных
  5. Обращение к базе данных: Получение/изменение данных
  6. Формирование ответа: Создание HTTP-ответа

7.1.4. Возврат ответа

  1. Инкапсуляция ответа: Добавление заголовков TCP/IP
  2. Передача по сети: Маршрутизация к клиенту
  3. Доставка клиенту: Обработка на клиентской стороне
  4. Парсинг ответа: Извлечение данных
  5. Отображение: Рендеринг пользовательского интерфейса

7.2. Пример полного жизненного цикла

Сценарий: Получение списка товаров из интернет-магазина

1. DNS Lookup: shop.example.com → 192.168.1.100
2. TCP Connection: SYN → SYN-ACK → ACK
3. TLS Handshake: ClientHello → ServerHello → Certificate → Finished
4. HTTP Request:
GET /api/products HTTP/1.1
Host: shop.example.com
Accept: application/json
Authorization: Bearer token123
5. Server Processing:
- Parse request
- Route to products controller
- Validate authentication
- Query database: SELECT * FROM products
- Format JSON response
6. HTTP Response:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1024
[{"id": 1, "name": "Laptop", "price": 999.99}, ...]
7. Client Processing:
- Parse JSON
- Update DOM
- Render product list

  1. Сетевая безопасность

Безопасность сетевого взаимодействия является критически важным аспектом современных интернет-приложений. Понимание принципов сетевой безопасности необходимо для защиты данных и обеспечения конфиденциальности пользователей.

8.1. Основные угрозы сетевой безопасности

8.1.1. Атаки на конфиденциальность

Перехват данных (Sniffing):

  • Пассивное прослушивание сетевого трафика
  • Перехват паролей и конфиденциальных данных
  • Анализ сетевого трафика для получения информации

Защита:

  • Шифрование данных (TLS/SSL)
  • Использование VPN
  • Сегментация сети

8.1.2. Атаки на целостность

Подмена данных (Spoofing):

  • Изменение передаваемых данных
  • Подделка IP-адресов
  • Man-in-the-Middle атаки

Защита:

  • Цифровые подписи
  • Хеширование данных
  • Сертификаты и PKI

8.1.3. Атаки на доступность

Отказ в обслуживании (DoS/DDoS):

  • Перегрузка сервера запросами
  • Исчерпание ресурсов
  • Блокирование доступа к сервису

Защита:

  • Балансировка нагрузки
  • Ограничение скорости запросов
  • Фильтрация трафика

8.2. Протоколы безопасности

8.2.1. TLS/SSL (Transport Layer Security)

Версии TLS:

  • SSL 3.0 (1996): Устаревший, небезопасный
  • TLS 1.0 (1999): Устаревший
  • TLS 1.1 (2006): Устаревший
  • TLS 1.2 (2008): Широко используемый
  • TLS 1.3 (2018): Современный стандарт

Алгоритмы шифрования:

  • Симметричные: AES-256, ChaCha20
  • Асимметричные: RSA, ECDSA, EdDSA
  • Хеширование: SHA-256, SHA-384, SHA-512

8.2.2. HTTPS (HTTP Secure)

Компоненты HTTPS:

  • Шифрование HTTP-данных
  • Аутентификация сервера
  • Целостность данных
  • Защита от перехвата

Сертификаты:

  • DV (Domain Validated): Проверка домена
  • OV (Organization Validated): Проверка организации
  • EV (Extended Validated): Расширенная проверка

8.2.3. Другие протоколы безопасности

IPSec:

  • Защита на сетевом уровне
  • Туннелирование VPN
  • Аутентификация и шифрование

DNSSEC:

  • Защита DNS-запросов
  • Предотвращение подделки DNS
  • Цифровые подписи DNS-записей

8.3. Практические меры безопасности

8.3.1. Заголовки безопасности HTTP

Strict-Transport-Security (HSTS):

Strict-Transport-Security: max-age=31536000; includeSubDomains

Content-Security-Policy (CSP):

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'

X-Frame-Options:

X-Frame-Options: DENY

X-Content-Type-Options:

X-Content-Type-Options: nosniff

8.3.2. Аутентификация и авторизация

JWT (JSON Web Tokens):

  • Стандарт для безопасной передачи информации
  • Самодостаточные токены
  • Цифровая подпись для проверки

OAuth 2.0:

  • Протокол авторизации
  • Делегированный доступ
  • Токены доступа и обновления

OpenID Connect:

  • Слой аутентификации для OAuth 2.0
  • Стандартизированная аутентификация
  • Identity Provider (IdP)

  1. Производительность сетевого взаимодействия

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

9.1. Метрики производительности

9.1.1. Временные характеристики

Latency (Задержка):

  • Время от отправки запроса до получения ответа
  • Включает время обработки и передачи
  • Измеряется в миллисекундах

Throughput (Пропускная способность):

  • Количество данных, передаваемых за единицу времени
  • Измеряется в битах/секунду или запросах/секунду
  • Зависит от пропускной способности канала

Bandwidth (Полоса пропускания):

  • Максимальная скорость передачи данных
  • Ограничивается физическими характеристиками канала
  • Измеряется в битах/секунду

9.1.2. Качественные характеристики

Reliability (Надежность):

  • Вероятность успешной доставки данных
  • Устойчивость к сбоям сети
  • Восстановление после ошибок

Scalability (Масштабируемость):

  • Способность обрабатывать растущую нагрузку
  • Горизонтальное и вертикальное масштабирование
  • Балансировка нагрузки

9.2. Оптимизация HTTP

9.2.1. HTTP/2 и HTTP/3

HTTP/2 преимущества:

  • Мультиплексирование потоков
  • Сжатие заголовков (HPACK)
  • Server Push
  • Бинарный протокол

HTTP/3 преимущества:

  • Основан на QUIC
  • Встроенное шифрование
  • Улучшенная производительность
  • Устойчивость к потере пакетов

9.2.2. Кэширование

Кэширование на клиенте:

  • Browser Cache
  • Service Workers
  • Local Storage

Кэширование на сервере:

  • CDN (Content Delivery Network)
  • Reverse Proxy
  • Application-level caching

Заголовки кэширования:

Cache-Control: public, max-age=3600
ETag: "abc123"
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

9.2.3. Сжатие данных

Gzip сжатие:

  • Сжатие текстовых данных
  • Экономия трафика до 70%
  • Поддержка всеми браузерами

Brotli сжатие:

  • Более эффективное сжатие
  • Лучше для текстовых данных
  • Поддержка современными браузерами

9.3. Оптимизация сети

9.3.1. CDN (Content Delivery Network)

Принципы работы:

  • Географически распределенные серверы
  • Кэширование контента
  • Ближайший сервер к пользователю

Преимущества:

  • Снижение задержки
  • Разгрузка основного сервера
  • Повышение надежности

9.3.2. Балансировка нагрузки

Алгоритмы балансировки:

  • Round Robin
  • Least Connections
  • Weighted Round Robin
  • IP Hash

Технологии:

  • Load Balancer
  • Reverse Proxy
  • DNS Load Balancing

9.3.3. Мониторинг производительности

Метрики для мониторинга:

  • Response Time
  • Throughput
  • Error Rate
  • Availability

Инструменты:

  • APM (Application Performance Monitoring)
  • Real User Monitoring (RUM)
  • Synthetic Monitoring

  1. Примеры кодов состояния HTTP

HTTP использует трехзначные коды состояния для информирования клиента о результате обработки запроса. Понимание этих кодов критически важно для правильной обработки ответов сервера.

10.1. Классификация кодов состояния

10.1.1. 1xx - Информационные коды

100 Continue:

  • Сервер готов принять тело запроса
  • Используется для больших POST-запросов
  • Клиент должен отправить тело после получения этого кода

101 Switching Protocols:

  • Сервер согласен переключить протокол
  • Используется для WebSocket handshake
  • Заголовок Upgrade указывает новый протокол

10.1.2. 2xx - Коды успеха

200 OK:

  • Запрос выполнен успешно
  • Наиболее распространенный код
  • Тело ответа содержит запрашиваемые данные

201 Created:

  • Ресурс успешно создан
  • Заголовок Location указывает на новый ресурс
  • Тело ответа может содержать данные созданного ресурса

202 Accepted:

  • Запрос принят к обработке
  • Обработка может быть асинхронной
  • Результат будет получен позже

204 No Content:

  • Запрос выполнен успешно
  • Тело ответа пустое
  • Используется для операций без возврата данных

10.1.3. 3xx - Коды перенаправления

301 Moved Permanently:

  • Ресурс перемещен навсегда
  • Браузер должен обновить закладки
  • Заголовок Location указывает новый URL

302 Found:

  • Ресурс временно перемещен
  • Браузер должен следовать перенаправлению
  • Исходный URL остается валидным

304 Not Modified:

  • Ресурс не изменился
  • Клиент может использовать кэшированную версию
  • Тело ответа пустое

10.1.4. 4xx - Коды ошибок клиента

400 Bad Request:

  • Некорректный синтаксис запроса
  • Сервер не может обработать запрос
  • Проблема на стороне клиента

401 Unauthorized:

  • Требуется аутентификация
  • Клиент должен предоставить учетные данные
  • Заголовок WWW-Authenticate указывает метод аутентификации

403 Forbidden:

  • Доступ запрещен
  • Клиент аутентифицирован, но не имеет прав
  • Различные причины: недостаточные права, блокировка IP

404 Not Found:

  • Ресурс не найден
  • Наиболее распространенная ошибка
  • Сервер не может найти запрашиваемый ресурс

429 Too Many Requests:

  • Превышен лимит запросов
  • Rate limiting активен
  • Заголовок Retry-After указывает время ожидания

10.1.5. 5xx - Коды ошибок сервера

500 Internal Server Error:

  • Внутренняя ошибка сервера
  • Неожиданная ошибка приложения
  • Проблема на стороне сервера

502 Bad Gateway:

  • Ошибка шлюза
  • Промежуточный сервер получил неверный ответ
  • Проблема с upstream сервером

503 Service Unavailable:

  • Сервис временно недоступен
  • Сервер перегружен или на техническом обслуживании
  • Заголовок Retry-After указывает время восстановления

504 Gateway Timeout:

  • Таймаут шлюза
  • Промежуточный сервер не получил ответ вовремя
  • Проблема с производительностью upstream сервера

10.2. Обработка кодов состояния

10.2.1. На клиентской стороне

fetch('/api/users')
.then(response => {
if (response.ok) {
return response.json();
} else if (response.status === 404) {
throw new Error('User not found');
} else if (response.status === 500) {
throw new Error('Server error');
} else {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
})
.then(data => console.log(data))
.catch(error => console.error(error));

10.2.2. На серверной стороне

from flask import Flask, jsonify
@app.route('/api/users/<int:user_id>')
def get_user(user_id):
try:
user = database.get_user(user_id)
if user:
return jsonify(user), 200
else:
return jsonify({'error': 'User not found'}), 404
except DatabaseError:
return jsonify({'error': 'Database error'}), 500
except Exception as e:
return jsonify({'error': str(e)}), 500

Заключение

Во второй лекции мы провели всестороннее изучение сетевых основ интернет-приложений, рассмотрев как теоретические аспекты, так и практические аспекты реализации сетевого взаимодействия.

Основные темы лекции

1. Архитектурные модели сетевого взаимодействия

Мы детально изучили многоуровневые модели сетевого взаимодействия:

  • Модель OSI с семью уровнями абстракции, каждый из которых выполняет специфические функции
  • Модель TCP/IP как практическую реализацию сетевого взаимодействия в Интернете
  • Принципы инкапсуляции данных и разделения ответственности между уровнями

2. Транспортные протоколы

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

  • TCP как надежный протокол с гарантированной доставкой, управлением потоком и перегрузкой
  • UDP как быстрый протокол для приложений реального времени
  • SCTP как современный протокол, сочетающий преимущества TCP и UDP

3. Прикладные протоколы

Изучили эволюцию и особенности основных прикладных протоколов:

  • HTTP от версии 0.9 до современного HTTP/3
  • HTTPS как защищенную версию HTTP с использованием TLS
  • WebSocket для двусторонней связи в реальном времени
  • gRPC как современный фреймворк для микросервисной архитектуры

4. Структура и обработка HTTP-сообщений

Детально разобрали:

  • Структуру HTTP-запросов и ответов
  • Заголовки и их функциональное назначение
  • Методы HTTP и их семантику
  • Коды состояния и правильную их обработку

5. Форматы передачи данных

Рассмотрели различные форматы данных:

  • HTML как язык разметки для веб-страниц
  • JSON как основной формат обмена данными
  • XML для структурированных данных
  • Бинарные форматы (Protobuf, MessagePack) для высокопроизводительных систем

6. Сетевая безопасность

Изучили аспекты безопасности:

  • Основные угрозы и методы защиты
  • Протоколы безопасности (TLS/SSL, IPSec, DNSSEC)
  • Практические меры защиты (заголовки безопасности, аутентификация)

7. Производительность сетевого взаимодействия

Рассмотрели оптимизацию производительности:

  • Метрики производительности (latency, throughput, reliability)
  • Техники оптимизации (кэширование, сжатие, CDN)
  • Мониторинг и измерение производительности

Практическая значимость

Полученные знания имеют критическое значение для:

Разработки интернет-приложений

  • Понимание жизненного цикла HTTP-запросов
  • Правильная обработка ошибок и кодов состояния
  • Выбор подходящих протоколов и форматов данных

Оптимизации производительности

  • Применение техник кэширования и сжатия
  • Использование современных протоколов (HTTP/2, HTTP/3)
  • Мониторинг и анализ производительности

Обеспечения безопасности

  • Реализация защищенных соединений (HTTPS)
  • Применение заголовков безопасности
  • Правильная аутентификация и авторизация

Архитектурных решений

  • Выбор подходящих протоколов для различных задач
  • Проектирование масштабируемых систем
  • Интеграция с внешними сервисами