01 Принципы организации сетей

ДУП.03 Основы информационных технологий

Лекция 12 · 2 академических часа

Разработчик постоянно работает с сетью: API, базы данных, Docker, Git, деплой. Понимание сетей — это базовый навык для программиста. Сегодня разберём, как данные путешествуют по сети и как отлаживать сетевые проблемы.

IP HTTP TCP DNS API curl
Курс 2026 · для специальности «Разработчик ПО»
02Зачем разработчику разбираться в сетях?

Современная разработка — это почти всегда сетевое взаимодействие. Даже простое приложение обращается к API.

Где нужны сети
  • Веб-приложения (frontend + backend).
  • REST API и GraphQL.
  • Базы данных (клиент-сервер).
  • Docker-контейнеры.
  • Git (push/pull).
  • Деплой (сервер, облако).
Что нужно понимать
  • Как данные доходят от клиента к серверу.
  • Что такое IP и порт.
  • Как работает HTTP.
  • Как отладить «connection refused».
  • Что такое DNS и почему он важен.
  • Основы безопасности (HTTPS).
Для разработчика

Если вы не понимаете сеть — вы не сможете починить «сайт не открывается», «API возвращает 500» или «Docker не видит базу». Это базовый навык, без которого невозможно работать.

03Что такое компьютерная сеть?

Компьютерная сеть — это группа устройств, соединённых каналами связи для обмена данными.

Локальная сеть (LAN)
  • В пределах офиса, дома.
  • Высокая скорость.
  • Пример: Wi-Fi дома, офисная сеть.
Глобальная сеть (WAN)
  • Объединяет города и страны.
  • Интернет — крупнейшая WAN.
  • Скорость зависит от провайдера.

Аналогия: LAN — это разговор в одной комнате. WAN — это телефонный звонок в другой город. Данные передаются, но способы разные.

04Модель OSI: 7 уровней

Модель OSI — это способ описать, как данные проходят по сети, разбив процесс на уровни.

УровеньЧто делаетПример 7. ПрикладнойСвязь с программойHTTP, DNS, SSH 6. ПредставленияКодировка, шифрованиеTLS, JPEG 5. СеансовыйУправление сессиейСокеты 4. ТранспортныйДоставка данныхTCP, UDP 3. СетевойМаршрутизацияIP 2. КанальныйПередача по кабелюEthernet, Wi-Fi 1. ФизическийСигналыКабель, радиоволны
Для разработчика

Разработчик чаще всего работает с уровнями 4 и 7: TCP/UDP (транспорт) и HTTP/DNS (приложение). Но понимание всех уровней помогает при отладке.

05IP-адрес: адрес устройства в сети

IP-адрес — уникальный номер устройства в сети. По нему данные находят получателя.

IPv4
  • 4 числа от 0 до 255.
  • Пример: 192.168.1.10.
  • Всего ~4 млрд адресов.
  • Уже заканчиваются.
IPv6
  • 8 групп по 4 hex-цифры.
  • Пример: 2001:0db8::1.
  • Огромное количество адресов.
  • Постепенно внедряется.
Локальные IP

Адреса вида 192.168.x.x, 10.x.x.x, 172.16–31.x.x — локальные. Они работают только внутри вашей сети. Для выхода в интернет используется NAT — преобразование адресов.

Для разработчика

127.0.0.1 или localhost — это ваш компьютер. Если сервер запущен локально, он доступен по этому адресу.

06Порты: двери в компьютере

Порт — это число, которое указывает, какой программе предназначены данные.

IP-адрес : Порт → Программа
ПортПротоколЧто использует 80HTTPВеб-сайты (без шифрования) 443HTTPSВеб-сайты (с шифрованием) 22SSHУдалённое управление 3306MySQLБаза данных 5432PostgreSQLБаза данных 6379RedisКэш 8080HTTP-altЛокальные серверы
Для разработчика

Если приложение «не подключается к базе» — первым делом проверьте порт. PostgreSQL на 5432, MySQL на 3306. Если порт занят или неверный — соединения не будет.

07TCP и UDP: два транспорта

Транспортный уровень отвечает за доставку данных. Два основных протокола:

TCP
  • Надёжный: гарантирует доставку.
  • Порядок пакетов сохраняется.
  • Медленнее из-за проверок.
  • HTTP, SSH, базы данных.
UDP
  • Быстрый: без гарантий.
  • Пакеты могут теряться.
  • Порядок не гарантируется.
  • Видео, игры, DNS, VoIP.

Аналогия: TCP — это заказное письмо с уведомлением. UDP — это открытка: быстро, но может потеряться.

Для разработчика

Для API и баз данных — всегда TCP. Для стриминга или игр — UDP. Если данные нельзя терять, используйте TCP.

08DNS: телефонная книга интернета

DNS (Domain Name System) — система, которая превращает имена в IP-адреса.

google.com → DNS-сервер → 142.250.74.14
  • Человеку удобно запоминать имена, компьютеру — числа.
  • DNS-серверы хранят соответствие «имя → IP».
  • Обычно DNS-сервер предоставляет провайдер.
  • Можно использовать публичные: 8.8.8.8 (Google), 1.1.1.1 (Cloudflare).
Для разработчика

Если «сайт не открывается, а ping по IP работает» — проблема в DNS. Проверьте nslookup google.com или dig google.com.

09HTTP: протокол веба

HTTP (HyperText Transfer Protocol) — протокол передачи данных в вебе. Работает по модели «запрос → ответ».

Клиент → запрос → Сервер
Клиент ← ответ ← Сервер
МетодЧто делаетПример GETПолучить данныеОткрыть страницу POSTСоздатьОтправить форму PUTОбновитьИзменить запись DELETEУдалитьУдалить запись
Для разработчика

Понимание HTTP-методов — основа REST API. Клиент говорит серверу, что делать, через метод. Ответ содержит статус-код (200, 404, 500).

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

Сервер отвечает числом — статус-кодом. Он говорит, что произошло.

КодЗначениеКогда 200 OKУспехВсё хорошо 301 / 302РедиректПереадресация 400 Bad RequestОшибка клиентаНеверный запрос 401 UnauthorizedНе авторизованНужен логин 403 ForbiddenЗапрещеноНет прав 404 Not FoundНе найденоНет такой страницы 500 Internal Server ErrorОшибка сервераБаг в коде 502 Bad GatewayПлохой шлюзПроблема с прокси
Для разработчика

Коды 4xx — ошибка клиента. 5xx — ошибка сервера. Если видите 500 — смотрите логи сервера. Если 404 — проверьте URL.

11HTTPS и сертификаты

HTTPS — это HTTP с шифрованием (TLS/SSL). Данные передаются в зашифрованном виде.

  • Защищает от прослушивания (пароли, токены).
  • Защищает от подмены данных.
  • Работает через сертификаты.
  • Порт 443 (вместо 80 для HTTP).
Сертификат

Сертификат — это «паспорт» сайта. Его выдают центры сертификации (Let's Encrypt, GlobalSign). Браузер проверяет сертификат и показывает замок, если всё в порядке.

Для разработчика

При разработке локально можно использовать самоподписанный сертификат. Но браузер будет ругаться — это нормально. Для продакшена — только настоящий сертификат (Let's Encrypt бесплатно).

12Модель клиент-сервер

Клиент-сервер — архитектура, где клиент отправляет запросы, а сервер их обрабатывает.

Клиент (браузер, приложение) → запрос → Сервер (API, БД)
Клиент ← ответ ← Сервер
  • Клиент — программа, которая запрашивает данные.
  • Сервер — программа, которая обрабатывает запросы.
  • Один сервер может обслуживать тысячи клиентов.
Для разработчика

Backend — это сервер. Frontend — это клиент. Между ними — HTTP и API. Понимание этой модели — основа веб-разработки.

13API: как программы общаются

API (Application Programming Interface) — это «контракт» между программами. Одна программа говорит другой, что делать.

Тип APIКак работаетПример RESTHTTP + JSONБольшинство веб-API GraphQLОдин запрос — всё сразуGitHub API SOAPXML, старыйБанки, госуслуги WebSocketПостоянное соединениеЧаты, игры
Пример REST API:
GET /api/users/42 → получить пользователя с id 42.
POST /api/users → создать нового пользователя.
DELETE /api/users/42 → удалить пользователя.
Для разработчика

API — это то, как ваш frontend общается с backend, и как ваш backend общается с внешними сервисами (погода, платежи, карты).

14JSON: формат обмена данными

JSON (JavaScript Object Notation) — текстовый формат данных. Почти все API используют его.

{ "id": 42, "name": "Иван Петров", "email": "ivan@example.com", "roles": ["admin", "developer"], "active": true }
  • Объект — в фигурных скобках {}.
  • Массив — в квадратных [].
  • Ключ-значение — пары через двоеточие.
  • Типы: строка, число, boolean, null, объект, массив.
Для разработчика

JSON — универсальный язык обмена данными. Его понимают все языки: Python, JS, Java, C#, Go. Если умеете читать JSON — сможете работать с любым API.

15Отладка: ping

ping — проверяет, доступен ли хост по сети.

# Проверить доступность сайта ping google.com # Ответ: # PING google.com (142.250.74.14): 56 data bytes # 64 bytes from 142.250.74.14: icmp_seq=0 ttl=115 time=12.3 ms
  • Если ответ есть — хост доступен.
  • Если нет — либо хост выключен, либо сеть недоступна, либо ICMP заблокирован.
  • Время (ms) показывает задержку.
Для разработчика

Если ping google.com не работает — проблема с сетью или DNS. Если работает по IP, но не по имени — проблема с DNS.

16Отладка: tracert / traceroute

tracert (Windows) или traceroute (Linux/macOS) показывает, через какие узлы проходит пакет.

# Windows tracert google.com # Linux / macOS traceroute google.com
  • Показывает маршрут пакета.
  • Помогает найти, где проблема: у вас, у провайдера или у сервера.
  • Если на каком-то узле — «звёздочки», там блокировка ICMP.
Для разработчика

Если API работает медленно — tracert поможет понять, на каком этапе задержка. Возможно, проблема не в вашем коде, а в сети.

17Отладка: netstat / ss

netstat (Windows) или ss (Linux) показывает открытые порты и соединения.

# Windows netstat -ano # Linux ss -tulpn
  • Какие порты слушают программы.
  • Какие соединения установлены.
  • Какой процесс занимает порт.
Для разработчика

Если приложение не стартует — проверьте, не занят ли порт. Например, PORT 8080 already in use. Найдите процесс через netstat -ano и убейте его.

18Отладка: curl

curl — универсальный инструмент для работы с HTTP из командной строки.

# GET-запрос curl https://api.github.com/users/octocat # POST-запрос с JSON curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d '{"name":"Иван"}' # Посмотреть заголовки curl -I https://google.com
  • Проверить API без Postman.
  • Посмотреть статус-код и заголовки.
  • Отправить запрос с данными.
Для разработчика

curl — обязательный инструмент. Он есть на любом сервере. Если API не работает — curl покажет, что именно возвращает сервер.

19Отладка: nslookup / dig

nslookup (Windows) или dig (Linux) — проверка DNS.

# Windows nslookup google.com # Linux dig google.com # Указать конкретный DNS nslookup google.com 8.8.8.8
  • Узнать IP по имени.
  • Проверить, работает ли DNS.
  • Посмотреть MX-записи (почта), TXT-записи (проверки).
Для разработчика

Если «сайт не открывается», а по IP работает — проблема с DNS. Проверьте nslookup. Если не отвечает — смените DNS-сервер (например, на 8.8.8.8).

20Типичные ошибки и что они значат
ОшибкаПричинаЧто делать Connection refusedСервер не слушает портПроверить, запущен ли сервер Connection timed outНет ответаПроверить сеть, firewall DNS resolution failedDNS не работаетПроверить DNS, nslookup 404 Not FoundНеверный URLПроверить путь в API 500 Internal Server ErrorБаг в коде сервераСмотреть логи сервера CORS errorБраузер блокируетНастроить CORS на сервере SSL certificate errorПлохой сертификатОбновить сертификат
Для разработчика

Большинство ошибок расшифровываются по названию. Connection refused — сервер выключен. Timeout — сеть не пропускает. 500 — баг в коде.

21Docker и сети

Docker создаёт изолированные сети для контейнеров. Это важно понимать разработчику.

  • Каждый контейнер получает свой IP внутри Docker-сети.
  • Контейнеры общаются по именам сервисов, а не по IP.
  • Порты пробрасываются через -p (порт хост → контейнер).
  • localhost внутри контейнера — это сам контейнер, а не хост.
# Запуск контейнера с пробросом порта docker run -p 8080:80 nginx # 8080 на хосте → 80 внутри контейнера
Частая ошибка

Разработчик пишет в коде localhost:5432 для подключения к базе. Локально работает. В Docker — не работает, потому что localhost внутри контейнера — это сам контейнер. Нужно использовать имя сервиса (например, db:5432).

22Кейс: API не отвечает
Практическая ситуация

Frontend не может получить данные с backend. Браузер пишет «CORS error». Разработчик не понимает, в чём дело.

Диагностика:

  1. Открыть DevTools → Network.
  2. Посмотреть, что именно блокируется.
  3. Проверить, что backend запущен.
  4. Проверить, что URL правильный.
  5. Проверить заголовки CORS в ответе.
Решение

CORS — это защита браузера. Если frontend на localhost:3000, а backend на localhost:8080 — это разные источники. Нужно настроить CORS на backend: разрешить запросы с фронтенда.

# Пример для Express.js app.use(cors({ origin: 'http://localhost:3000' }));
23Кейс: Docker не видит базу
Практическая ситуация

Приложение в Docker не может подключиться к PostgreSQL. Ошибка: Connection refused.

Диагностика:

  • В docker-compose.yml приложение подключается к localhost:5432.
  • Но localhost внутри контейнера — это сам контейнер, а не база.
Решение

Нужно использовать имя сервиса из docker-compose.yml. Если база называется db — подключаться к db:5432.

# docker-compose.yml services: app: environment: DATABASE_URL: postgres://user:pass@db:5432/mydb db: image: postgres:16
24Основы безопасности в сети

Разработчик должен понимать базовые риски.

УгрозаЧто этоЗащита Перехват трафикаПрослушиваниеHTTPS SQL-инъекцииВредоносный вводПараметризованные запросы XSSВставка скриптовЭкранирование CSRFПодделка запросовТокены, SameSite DDoSПерегрузкаRate limiting, CDN
Главное правило

Никогда не доверяйте пользовательскому вводу. Всё, что приходит из сети, нужно проверять и экранировать. Это основа безопасной разработки.

25Чек-лист отладки сетевых проблем

Что делать, если «не работает»:

  • Проверить, запущен ли сервер (процесс, контейнер).
  • Проверить ping до хоста.
  • Проверить nslookup — работает ли DNS.
  • Проверить curl — что возвращает сервер.
  • Проверить netstat — слушает ли порт.
  • Проверить логи сервера.
  • Проверить firewall (порт не заблокирован).
  • Проверить CORS (если браузер).
  • Проверить сертификат (если HTTPS).
26Практическое задание

Задание для самостоятельной работы:

  1. Проверьте свой IP-адрес через ipconfig (Windows) или ip a (Linux).
  2. Проверьте доступность сайта через ping.
  3. Посмотрите маршрут до сайта через tracert / traceroute.
  4. Проверьте DNS через nslookup.
  5. Сделайте GET-запрос через curl к любому публичному API.
  6. Посмотрите заголовки ответа через curl -I.
  7. Найдите, какой процесс занимает порт 8080 (если он занят).
  8. Опишите разницу между TCP и UDP на примере.
Формат отчёта

Скриншоты команд + краткое описание того, что вы увидели. Особое внимание — curl и nslookup.

27Вопросы для самопроверки

Ответьте на вопросы:

  1. Зачем разработчику понимать сети?
  2. Чем LAN отличается от WAN?
  3. Что такое IP-адрес и порт?
  4. Чем TCP отличается от UDP?
  5. Что делает DNS?
  6. Какие HTTP-методы вы знаете?
  7. Что означают коды 200, 404, 500?
  8. Чем HTTP отличается от HTTPS?
  9. Что такое API?
  10. Что такое JSON?
  11. Для чего нужны ping, tracert, curl?
  12. Почему в Docker нельзя использовать localhost для базы?
28Итоги лекции

Мы рассмотрели:

  • Зачем разработчику разбираться в сетях.
  • Что такое сеть: LAN и WAN.
  • Модель OSI: 7 уровней.
  • IP-адреса и порты.
  • TCP и UDP.
  • DNS — телефонная книга интернета.
  • HTTP: методы, статус-коды.
  • HTTPS и сертификаты.
  • Клиент-сервер и API.
  • JSON как формат обмена данными.
  • Инструменты отладки: ping, tracert, netstat, curl, nslookup.
  • Docker и сети: частая ошибка с localhost.
  • Основы безопасности в сети.
Главная мысль

Сеть — это среда, в которой работает ваш код. Понимание сетей превращает вас из «программиста-одиночки» в специалиста, который может создавать полноценные веб-приложения и диагностировать проблемы.

29Спасибо за внимание!

Вопросы?

Следующая тема — прикладное сетевое взаимодействие.

IP HTTP DNS API curl