Как работает сеть

Введение

Понимание принципов работы сети критически важно для тестировщика. Это помогает:

  • Диагностировать проблемы с загрузкой страниц и API
  • Понимать причины медленной работы приложений
  • Тестировать приложения в различных сетевых условиях
  • Анализировать логи и сетевой трафик
  • Общаться с разработчиками на техническом языке

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

Уровни модели OSI (упрощенно)

Физический уровень (Layer 1):

  • Кабели, Wi-Fi сигналы
  • Передача битов данных

Канальный уровень (Layer 2):

  • Ethernet, Wi-Fi протоколы
  • MAC адреса устройств

Сетевой уровень (Layer 3):

  • IP протокол
  • Маршрутизация пакетов

Транспортный уровень (Layer 4):

  • TCP и UDP протоколы
  • Порты и соединения

Уровень приложений (Layer 7):

  • HTTP, HTTPS, FTP
  • Данные приложений

Практический пример

Когда вы открываете сайт google.com:

  1. Приложение (браузер) создает HTTP запрос
  2. TCP разбивает данные на пакеты и добавляет порты
  3. IP добавляет адреса отправителя и получателя
  4. Ethernet отправляет пакеты через сетевую карту
  5. Физический уровень передает сигналы по кабелю/Wi-Fi

TCP/IP - основа интернета

IP адреса

IPv4 (наиболее распространенный):

192.168.1.1     - локальный адрес роутера
8.8.8.8         - публичный DNS Google
127.0.0.1       - localhost (ваш компьютер)

IPv6 (новый стандарт):

2001:4860:4860::8888  - DNS Google в IPv6
::1                   - localhost в IPv6

Типы адресов:

  • Публичные - видны в интернете
  • Частные - используются в локальных сетях
  • Статические - не изменяются
  • Динамические - назначаются автоматически

TCP протокол

Характеристики TCP:

  • Надежный - гарантирует доставку данных
  • Упорядоченный - данные приходят в правильной последовательности
  • С установкой соединения - требует "рукопожатия"

TCP Handshake (рукопожатие):

Клиент → Сервер: SYN (синхронизация)
Сервер → Клиент: SYN-ACK (подтверждение синхронизации)
Клиент → Сервер: ACK (подтверждение)

Применение в тестировании:

  • Медленные соединения могут увеличить время handshake
  • Потеря пакетов вызывает повторные передачи
  • Тайм-ауты TCP влияют на производительность приложений

UDP протокол

Характеристики UDP:

  • Быстрый - нет проверки доставки
  • Без гарантий - данные могут потеряться
  • Без установки соединения - отправляет сразу

Использование:

  • DNS запросы
  • Видео-стримы
  • Онлайн игры
  • IoT устройства

Порты и сервисы

Стандартные порты

20/21    - FTP (передача файлов)
22       - SSH (безопасное подключение)
23       - Telnet (небезопасное подключение)
25       - SMTP (отправка email)
53       - DNS (преобразование доменов)
80       - HTTP (веб-сайты)
110      - POP3 (получение email)
143      - IMAP (получение email)
443      - HTTPS (безопасные веб-сайты)
993      - IMAPS (безопасный IMAP)
995      - POP3S (безопасный POP3)

Как работают порты

Пример соединения:

Ваш компьютер:     192.168.1.100:52847
↓
Сервер Google:     142.250.185.78:443

Где:
- 192.168.1.100 - ваш IP адрес
- 52847 - случайный порт вашего браузера
- 142.250.185.78 - IP адрес Google
- 443 - стандартный порт HTTPS

Проверка портов:

# Windows
netstat -an | findstr :80

# Linux/Mac
netstat -an | grep :80

# Проверка конкретного порта
telnet google.com 80

DNS - система доменных имен

Как работает DNS

Процесс разрешения домена:

  1. Браузер проверяет локальный кэш
  2. Запрос к DNS серверу провайдера
  3. Если не найден - запрос к корневым DNS серверам
  4. Поиск в иерархии: .com → google.com → www.google.com
  5. Возврат IP адреса браузеру

Практический пример:

Пользователь вводит: www.google.com
DNS возвращает: 142.250.185.78
Браузер подключается к 142.250.185.78:443

Типы DNS записей

A запись - связь домена с IPv4:

www.example.com    A    192.0.2.1

AAAA запись - связь домена с IPv6:

www.example.com    AAAA    2001:db8::1

CNAME запись - псевдоним домена:

blog.example.com    CNAME    www.example.com

MX запись - почтовые серверы:

example.com    MX    10 mail.example.com

Проверка DNS

Команды для диагностики:

# Windows
nslookup google.com
nslookup google.com 8.8.8.8

# Linux/Mac  
dig google.com
dig @8.8.8.8 google.com

# Проверка всех типов записей
dig google.com ANY

Очистка DNS кэша:

# Windows
ipconfig /flushdns

# Mac
sudo dscacheutil -flushcache

# Linux
sudo systemctl restart systemd-resolved

HTTP протокол

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

GET запрос:

GET /search?q=testing HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Connection: keep-alive

POST запрос:

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 45
Authorization: Bearer token123

{"name":"John","email":"john@example.com"}

HTTP методы

GET - получение данных:

GET /users/123      # Получить пользователя с ID 123

POST - создание новых данных:

POST /users         # Создать нового пользователя

PUT - полное обновление:

PUT /users/123      # Полностью обновить пользователя 123

PATCH - частичное обновление:

PATCH /users/123    # Обновить только некоторые поля

DELETE - удаление:

DELETE /users/123   # Удалить пользователя 123

HTTP статус-коды

2xx - Успех:

200 OK              - Запрос выполнен успешно
201 Created         - Ресурс создан
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       - Таймаут прокси/шлюза

HTTPS и безопасность

SSL/TLS шифрование

Как работает HTTPS:

  1. Клиент подключается к серверу на порт 443
  2. Сервер отправляет SSL сертификат
  3. Клиент проверяет сертификат
  4. Происходит обмен ключами шифрования
  5. Устанавливается зашифрованное соединение

SSL Handshake:

1. Client Hello       - клиент предлагает методы шифрования
2. Server Hello       - сервер выбирает метод и отправляет сертификат
3. Key Exchange       - обмен ключами для шифрования
4. Finished           - соединение установлено

Сертификаты

Проверка сертификата в браузере:

  • Нажмите на замок возле адресной строки
  • Просмотрите информацию о сертификате
  • Проверьте срок действия и издателя

Командная строка:

# Проверка сертификата
openssl s_client -connect google.com:443

# Информация о сертификате
openssl s_client -connect google.com:443 | openssl x509 -text

Практические сценарии для тестирования

1. Диагностика медленной загрузки

Возможные причины:

  • Медленный DNS
  • Проблемы с TCP handshake
  • Медленный SSL handshake
  • Большие размеры ресурсов
  • Много HTTP запросов

Инструменты диагностики:

# Трассировка маршрута
tracert google.com      # Windows
traceroute google.com   # Linux/Mac

# Проверка времени соединения
curl -w "@curl-format.txt" -o /dev/null https://google.com

# Где curl-format.txt содержит:
     time_namelookup:  %{time_namelookup}\n
      time_connect:  %{time_connect}\n
   time_appconnect:  %{time_appconnect}\n
     time_redirect:  %{time_redirect}\n
  time_pretransfer:  %{time_pretransfer}\n
     time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n

2. Тестирование в различных сетевых условиях

Имитация медленного соединения:

  • Используйте Charles Proxy с Throttling
  • Chrome DevTools → Network → Throttling
  • Тестируйте на 3G, 4G, Wi-Fi

Тестирование потери пакетов:

  • Используйте специализированные инструменты
  • Проверяйте поведение приложения при нестабильной сети

3. Анализ API запросов

Что проверять:

  • Правильность HTTP методов
  • Корректность заголовков
  • Размеры request/response
  • Время ответа
  • Статус-коды ответов

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

  • Chrome DevTools (Network tab)
  • Charles Proxy
  • Postman
  • curl команды

4. Тестирование безопасности

SSL/TLS проверки:

# Проверка поддерживаемых протоколов
nmap --script ssl-enum-ciphers -p 443 example.com

# Проверка SSL сертификата
sslyze --regular example.com

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

Strict-Transport-Security   - принудительное HTTPS
Content-Security-Policy     - защита от XSS
X-Frame-Options            - защита от clickjacking
X-Content-Type-Options     - защита от MIME sniffing

Сетевые проблемы и их решения

Типичные проблемы

DNS проблемы:

Симптомы: Сайт не открывается, ошибка "DNS_PROBE_FINISHED_NXDOMAIN"
Решение: Проверить DNS серверы, очистить DNS кэш

Проблемы с сертификатами:

Симптомы: "Your connection is not private", SSL ошибки
Решение: Проверить дату/время системы, обновить сертификаты

Проблемы с портами:

Симптомы: "Connection refused", "Connection timeout"
Решение: Проверить доступность портов, настройки firewall

Проблемы с прокси:

Симптомы: Медленная загрузка, ошибки соединения
Решение: Проверить настройки прокси, отключить если не нужен

Диагностические команды

# Проверка соединения
ping google.com

# Проверка маршрута
tracert google.com

# Проверка портов
telnet google.com 80
nc -zv google.com 80

# Информация о сети
ipconfig /all        # Windows
ifconfig            # Linux/Mac

# Активные соединения
netstat -an
ss -tuln            # Linux

Мониторинг и метрики

Ключевые метрики

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

  • Время до первого байта (TTFB)
  • Время загрузки страницы
  • Round-trip time (RTT)

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

  • Скорость загрузки/выгрузки
  • Количество запросов в секунду

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

  • Процент успешных запросов
  • Время доступности сервиса

Инструменты мониторинга

Браузерные инструменты:

  • Chrome DevTools Performance
  • Firefox Network Monitor
  • Safari Web Inspector

Специализированные инструменты:

  • Wireshark - анализ пакетов
  • tcpdump - захват трафика
  • iperf - тестирование пропускной способности

Заключение

Понимание сетевых принципов помогает тестировщику:

  • Быстрее диагностировать проблемы
  • Лучше понимать причины багов
  • Эффективнее тестировать производительность
  • Профессиональнее общаться с командой разработки

Изучение сетевых технологий - это инвестиция в вашу экспертизу как тестировщика, особенно при работе с веб и мобильными приложениями.