Модель OSI
Модель взаимодействия открытых систем (OSI) — это концептуальная структура, которая разделяет сетевую коммуникацию на семь отдельных уровней. Для QA-инженеров эта модель предоставляет системный способ диагностировать, где возникают сетевые проблемы — вместо «не работает» вы можете точно указать уровень, вызывающий сбой.
Представьте модель OSI как почтовую систему. Когда вы отправляете письмо, оно проходит несколько этапов: вы пишете содержание (Прикладной), кладёте в конверт с адресом (Представления/Сеансовый), почта маршрутизирует его (Транспортный/Сетевой), почтовый грузовик доставляет (Канальный), а физическая дорога несёт грузовик (Физический). У каждого уровня своя задача.
Уровень 7: Прикладной
Уровень, ближайший к пользователю. Протоколы HTTP, HTTPS, FTP, SMTP и DNS работают здесь. Когда вы получаете 404 Not Found или 500 Internal Server Error, вы имеете дело с проблемой прикладного уровня.
Значение для QA: API-тестирование, веб-тестирование и большинство функционального тестирования происходят на этом уровне.
Уровень 6: Представления
Отвечает за форматирование данных, шифрование и сжатие. SSL/TLS-шифрование работает на этом уровне. Проблемы с кодировкой символов (UTF-8 vs. ASCII) — это проблемы уровня представления.
Значение для QA: Баги кодировки, ошибки SSL-сертификатов, несовпадения форматов данных.
Уровень 5: Сеансовый
Управляет сессиями между приложениями — установка, поддержание и завершение соединений. Токены сессий и сессии аутентификации относятся к этому уровню.
Значение для QA: Тестирование таймаута сессии, сохранение сессии между балансировщиками нагрузки.
Уровень 4: Транспортный
Обеспечивает сквозную коммуникацию между процессами. TCP и UDP — основные протоколы. Номера портов находятся здесь. Ошибки «Connection refused» и «connection timeout» возникают на этом уровне.
Значение для QA: Проблемы с подключением, доступность портов, настройки таймаутов.
Уровень 3: Сетевой
Управляет логической адресацией (IP-адреса) и маршрутизацией. Ping и traceroute работают здесь. «Destination unreachable» и ошибки маршрутизации — проблемы сетевого уровня.
Значение для QA: IP-связность, разрешение DNS (частично), проблемы сетевой маршрутизации.
Уровень 2: Канальный
Управляет физической адресацией (MAC-адреса) и доставкой фреймов в локальной сети. Ethernet и WiFi работают здесь.
Значение для QA: Проблемы WiFi-связности при мобильном тестировании, проблемы сетевых коммутаторов.
Уровень 1: Физический
Реальное оборудование — кабели, беспроводные сигналы, сетевые карты. Сила сигнала и проблемы физического подключения находятся здесь.
Значение для QA: Редко напрямую актуально, но важно при тестировании в аппаратных средах или IoT.
Модель TCP/IP
Если модель OSI — теоретическая основа, то модель TCP/IP отражает реальную работу интернета. Она сокращает семь уровней OSI до четырёх практических:
| Уровень TCP/IP | Уровни OSI | Ключевые протоколы |
|---|---|---|
| Прикладной | 7, 6, 5 | HTTP, DNS, FTP, SMTP |
| Транспортный | 4 | TCP, UDP |
| Межсетевой | 3 | IP, ICMP |
| Доступа к сети | 2, 1 | Ethernet, WiFi |
Модель TCP/IP — это то, что работает в каждой сети, с которой вы взаимодействуете. При отладке реальных проблем вы будете чаще встречать терминологию TCP/IP, чем OSI. Однако модель OSI обеспечивает более тонкую детализацию, полезную при объяснении проблем сетевым инженерам.
Ключевое различие: OSI — это справочная модель для понимания; TCP/IP — это реализация, которая приводит в действие интернет. Обе ценны для QA-инженеров — OSI для точной коммуникации о проблемах, TCP/IP для понимания того, что реально происходит в сети.
Сетевые уровни и QA
Как QA-инженеру, вам не нужна глубокая экспертиза по каждому уровню. Большая часть работы происходит на трёх уровнях:
Прикладной уровень (HTTP, API Testing)
Здесь происходит 80% сетевой отладки в QA. HTTP-коды состояния, тела API-ответов, значения заголовков и content types — всё это вопросы прикладного уровня. Инструменты Postman, curl и DevTools браузера инспектируют этот уровень.
Типичные симптомы: Неверные данные ответа, некорректные status codes, отсутствующие заголовки, сбои аутентификации.
Транспортный уровень (TCP/UDP, проблемы соединения)
Когда вы вообще не можете подключиться к сервису, проблема обычно на транспортном уровне. «Connection refused» означает, что порт не прослушивается. «Connection timed out» означает, что пакеты не проходят.
Типичные симптомы: Невозможно подключиться, обрывы соединений, медленная передача данных, конфликты портов.
Диагностические команды:
# Проверить, открыт ли порт
nc -zv hostname 8080
# Просмотреть активные соединения и прослушиваемые порты
ss -tlnp
# Проверить TCP-связность
telnet hostname 443
Сетевой уровень (IP-маршрутизация, DNS)
Когда хост полностью недоступен, проблема вероятно на сетевом уровне. Сбои ping, тупики traceroute и неудачное разрешение DNS указывают сюда.
Типичные симптомы: Хост недоступен, высокая задержка, пакеты теряются в пути.
Диагностические команды:
# Проверить базовую связность
ping hostname
# Отследить маршрут до хоста
traceroute hostname
# Проверить разрешение DNS
nslookup hostname
dig hostname
Продвинутый анализ уровней
Понимание блоков данных протокола (PDU) на каждом уровне помогает QA-инженерам читать сетевые дампы и диагностировать сложные проблемы:
| Уровень | Название PDU | Содержит |
|---|---|---|
| Прикладной | Данные | Полезная нагрузка приложения (тело HTTP, JSON, HTML) |
| Транспортный | Сегмент (TCP) / Датаграмма (UDP) | Порты источника/назначения, порядковые номера |
| Сетевой | Пакет | IP-адреса источника/назначения, TTL |
| Канальный | Фрейм | MAC-адреса источника/назначения, проверка ошибок |
Инкапсуляция и размер пакета
По мере прохождения данных вниз по уровням каждый уровень добавляет свой заголовок. Эта инкапсуляция увеличивает общий размер:
- Данные приложения: переменный размер
- Заголовок TCP: 20-60 байт
- Заголовок IP: 20-60 байт
- Заголовок Ethernet-фрейма: 14 байт + 4 байта трейлер
Максимальная единица передачи (MTU) — обычно 1500 байт для Ethernet — ограничивает размер одного фрейма. Когда пакет превышает MTU, он должен быть фрагментирован. Проблемы фрагментации вызывают загадочные частичные сбои, которые трудно диагностировать без понимания инкапсуляции.
Сценарий QA: Эндпоинт API работает для маленьких payload, но ломается для больших. Причина может быть в MTU-фрагментации, когда некоторые фрагменты отбрасываются файрволом, который не пересобирает фрагментированные пакеты.
Типичные баги по уровням, которые находит QA
Баги прикладного уровня:
- API возвращает неверный заголовок Content-Type
- Отсутствуют CORS-заголовки на определённых эндпоинтах
- Заголовки кеширования вызывают устаревшие данные
Баги транспортного уровня:
- Исчерпание пула соединений под нагрузкой
- Несовпадение таймаута TCP keepalive между клиентом и сервером
- Конфликты портов между сервисами в тестовых окружениях
Баги сетевого уровня:
- DNS-кеш возвращает устаревший IP после деплоя
- Таблицы маршрутизации не обновлены после изменения инфраструктуры
- Слишком низкий TTL, из-за чего пакеты истекают в пути
Практическое упражнение
Для пяти следующих сценариев сетевых ошибок определите уровень OSI, на котором возникает каждая, и диагностический инструмент, который вы бы использовали:
- Сценарий:
curl: (7) Failed to connect to api.example.com port 443: Connection refused - Сценарий:
ping: cannot resolve api.example.com: Unknown host - Сценарий:
curl: (60) SSL certificate problem: certificate has expired - Сценарий:
HTTP/1.1 502 Bad Gatewayвозвращает балансировщик нагрузки - Сценарий:
tracerouteпоказывает таймаут пакетов после 5-го хопа
Решения
Транспортный уровень (Уровень 4) — Порт 443 не прослушивается. Используйте
ss -tlnpилиnetstatдля проверки работы сервиса. Используйтеtelnet api.example.com 443для проверки связности.Прикладной/сетевой уровень (DNS) — Разрешение DNS не удалось. Используйте
dig api.example.comилиnslookupдля диагностики. Проверьте/etc/hostsи настройки DNS-сервера.Уровень представления (Уровень 6) — Проблема SSL/TLS-сертификата. Используйте
openssl s_client -connect api.example.com:443для проверки деталей сертификата и цепочки.Прикладной уровень (Уровень 7) — Балансировщик нагрузки получил невалидный ответ от upstream-сервера. Проверьте состояние бэкенд-сервера и логи. Используйте прокси-инструменты для инспекции реального ответа.
Сетевой уровень (Уровень 3) — Проблема маршрутизации на 5-м хопе. Пакет не может достичь назначения. Свяжитесь с сетевой командой, предоставив вывод traceroute, показывающий, где именно теряются пакеты.
Советы профессионала
- При отладке работайте снизу вверх: можете ли вы пропинговать хост? Можете ли подключиться к порту? Можете ли получить HTTP-ответ? Этот системный подход экономит время.
- Большая часть работы QA происходит на уровнях 4 (транспортный) и 7 (прикладной), но понимание нижних уровней помогает точно общаться с сетевыми инженерами и DevOps.
- «Connection refused» — это проблема транспортного уровня; «404 Not Found» — прикладного. Знание разницы сразу сужает область расследования.
- Проблемы MTU вызывают загадочные частичные сбои — когда большие API-ответы ломаются, а маленькие работают, подумайте о фрагментации.
- Используйте
tracerouteдля определения, на каком сетевом хопе возникает задержка — вывод показывает точно, где пакеты замедляются или теряются.
Ключевые выводы
- Модели OSI/TCP-IP предоставляют основу для системной диагностики сетевых проблем при тестировании
- Большинство проблем, актуальных для QA, возникают на прикладном (ошибки HTTP) и транспортном (проблемы соединения) уровнях
- Диагностика снизу вверх (ping, затем подключение, затем запрос) — самый эффективный подход
- Понимание сетевых уровней помогает QA эффективно общаться с сетевыми инженерами и DevOps-командами