Лекция 2. Сетевые основы интернет-приложений (расширение) (расширение)
Лекция 2. Сетевые основы интернет-приложений (расширение)
⸻
- Введение
Любое интернет-приложение строится на взаимодействии клиента и сервера через компьютерные сети. Чтобы понимать работу приложений, необходимо знать базовые принципы передачи данных, протоколы и форматы обмена.
⸻
- Модель OSI и TCP/IP
Для описания сетевого взаимодействия используются многоуровневые модели, основанные на принципе инкапсуляции данных и разделения ответственности между различными уровнями абстракции.
2.1. Модель OSI (Open Systems Interconnection)
Модель OSI, разработанная Международной организацией по стандартизации (ISO) в 1984 году, представляет собой концептуальную основу для понимания сетевого взаимодействия. Модель состоит из семи уровней, каждый из которых выполняет специфические функции:
2.1.1. Физический уровень (Physical Layer)
- Функции: Передача битов по физической среде передачи данных
- Протоколы: Ethernet, Wi-Fi (802.11), Bluetooth, USB
- Единицы данных: Биты
- Оборудование: Сетевые адаптеры, кабели, повторители, концентраторы
2.1.2. Канальный уровень (Data Link Layer)
- Функции: Обеспечение надежной передачи данных между соседними узлами, обнаружение и исправление ошибок
- Протоколы: 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 имеет четыре уровня:
2.2.1. Канальный уровень (Link Layer)
- Соответствует: Физический и канальный уровни 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) - определяет формат и семантику обмена данными.
⸻
- Транспортные протоколы
Транспортный уровень обеспечивает сквозную доставку данных между приложениями, работающими на различных хостах. Основными протоколами транспортного уровня являются 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)
- SYN: Клиент отправляет пакет с флагом SYN и начальным номером последовательности
- SYN-ACK: Сервер отвечает пакетом с флагами SYN и ACK, подтверждая получение и отправляя свой номер последовательности
- ACK: Клиент подтверждает получение SYN-ACK пакета
3.1.3. Завершение соединения (Four-Way Handshake)
- FIN: Одна сторона отправляет пакет с флагом FIN
- ACK: Другая сторона подтверждает получение FIN
- FIN: Вторая сторона отправляет свой FIN
- 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 находит применение в приложениях реального времени, где задержка критична.
⸻
- Прикладные протоколы
Прикладной уровень модели 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
-
Установка TLS-соединения:
- Handshake для согласования параметров шифрования
- Обмен сертификатами для аутентификации
- Генерация общих ключей шифрования
-
Шифрование данных:
- Симметричное шифрование для HTTP-данных
- Асимметричное шифрование для обмена ключами
- Аутентификация целостности данных
4.2.2. Компоненты безопасности HTTPS
- Конфиденциальность: Шифрование передаваемых данных
- Целостность: Защита от несанкционированного изменения
- Аутентификация: Подтверждение подлинности сервера
- Неотрекаемость: Защита от отказа от отправки
4.3. WebSocket
WebSocket - протокол для двусторонней связи между клиентом и сервером поверх TCP-соединения.
4.3.1. Особенности WebSocket
- Полнодуплексная связь: Одновременная передача в обе стороны
- Низкая задержка: Отсутствие накладных расходов HTTP
- Персистентное соединение: Поддержание соединения между запросами
- Поддержка подпротоколов: Возможность использования различных протоколов поверх WebSocket
4.3.2. Установка WebSocket-соединения
- HTTP Upgrade: Клиент отправляет запрос с заголовком
Upgrade: websocket - Handshake: Сервер подтверждает переключение на WebSocket
- Данные: Обмен данными в формате 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)
⸻
- 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: Принуждение HTTPSContent-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.1Host: api.example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)Accept: application/jsonAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Ответ:
HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: 156Cache-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.1Host: api.example.comContent-Type: application/jsonContent-Length: 89Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
{ "name": "Jane Smith", "email": "jane@example.com", "password": "securepassword123"}Ответ:
HTTP/1.1 201 CreatedContent-Type: application/jsonLocation: /api/users/124Content-Length: 45
{ "id": 124, "message": "User created successfully"}⸻
- Форматы передачи данных
Современные интернет-приложения используют различные форматы для передачи данных между клиентом и сервером. Выбор формата зависит от требований к производительности, читаемости, размеру данных и совместимости.
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 Doeage: 30isActive: trueaddress: street: 123 Main St city: New York zipCode: 10001hobbies: - 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, благодаря его простоте, производительности и универсальной поддержке. Однако выбор формата должен основываться на конкретных требованиях приложения.
⸻
- Жизненный цикл запроса в интернет-приложении
Жизненный цикл HTTP-запроса представляет собой последовательность этапов обработки запроса от момента его инициации клиентом до получения ответа. Понимание этого процесса критически важно для разработки эффективных интернет-приложений.
7.1. Детальный жизненный цикл запроса
7.1.1. Инициация запроса
Пример: Пользователь открывает страницу интернет-магазина.
- Пользовательское действие: Клик по ссылке или ввод URL
- DNS-резолюция: Преобразование доменного имени в IP-адрес
- Установка TCP-соединения: Three-way handshake
- TLS handshake (для HTTPS): Установка защищенного соединения
7.1.2. Формирование и отправка запроса
- Создание HTTP-запроса: Метод, URI, заголовки, тело
- Инкапсуляция: Добавление заголовков TCP/IP
- Передача по сети: Маршрутизация через промежуточные узлы
- Доставка на сервер: Обработка на веб-сервере
7.1.3. Обработка на сервере
- Парсинг запроса: Извлечение метода, URI, заголовков
- Маршрутизация: Определение обработчика запроса
- Аутентификация/авторизация: Проверка прав доступа
- Выполнение бизнес-логики: Обработка данных
- Обращение к базе данных: Получение/изменение данных
- Формирование ответа: Создание HTTP-ответа
7.1.4. Возврат ответа
- Инкапсуляция ответа: Добавление заголовков TCP/IP
- Передача по сети: Маршрутизация к клиенту
- Доставка клиенту: Обработка на клиентской стороне
- Парсинг ответа: Извлечение данных
- Отображение: Рендеринг пользовательского интерфейса
7.2. Пример полного жизненного цикла
Сценарий: Получение списка товаров из интернет-магазина
1. DNS Lookup: shop.example.com → 192.168.1.1002. TCP Connection: SYN → SYN-ACK → ACK3. TLS Handshake: ClientHello → ServerHello → Certificate → Finished4. 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⸻
- Сетевая безопасность
Безопасность сетевого взаимодействия является критически важным аспектом современных интернет-приложений. Понимание принципов сетевой безопасности необходимо для защиты данных и обеспечения конфиденциальности пользователей.
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; includeSubDomainsContent-Security-Policy (CSP):
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'X-Frame-Options:
X-Frame-Options: DENYX-Content-Type-Options:
X-Content-Type-Options: nosniff8.3.2. Аутентификация и авторизация
JWT (JSON Web Tokens):
- Стандарт для безопасной передачи информации
- Самодостаточные токены
- Цифровая подпись для проверки
OAuth 2.0:
- Протокол авторизации
- Делегированный доступ
- Токены доступа и обновления
OpenID Connect:
- Слой аутентификации для OAuth 2.0
- Стандартизированная аутентификация
- Identity Provider (IdP)
⸻
- Производительность сетевого взаимодействия
Оптимизация производительности сетевого взаимодействия критически важна для обеспечения быстрого отклика интернет-приложений и улучшения пользовательского опыта.
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=3600ETag: "abc123"Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT9.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
⸻
- Примеры кодов состояния 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)
- Применение заголовков безопасности
- Правильная аутентификация и авторизация
Архитектурных решений
- Выбор подходящих протоколов для различных задач
- Проектирование масштабируемых систем
- Интеграция с внешними сервисами