ДУП.03 Основы информационных технологий
Лекция 12 · 2 академических часа
Разработчик постоянно работает с сетью: API, базы данных, Docker, Git, деплой. Понимание сетей — это базовый навык для программиста. Сегодня разберём, как данные путешествуют по сети и как отлаживать сетевые проблемы.
Современная разработка — это почти всегда сетевое взаимодействие. Даже простое приложение обращается к API.
Если вы не понимаете сеть — вы не сможете починить «сайт не открывается», «API возвращает 500» или «Docker не видит базу». Это базовый навык, без которого невозможно работать.
Компьютерная сеть — это группа устройств, соединённых каналами связи для обмена данными.
Аналогия: LAN — это разговор в одной комнате. WAN — это телефонный звонок в другой город. Данные передаются, но способы разные.
Модель OSI — это способ описать, как данные проходят по сети, разбив процесс на уровни.
Разработчик чаще всего работает с уровнями 4 и 7: TCP/UDP (транспорт) и HTTP/DNS (приложение). Но понимание всех уровней помогает при отладке.
IP-адрес — уникальный номер устройства в сети. По нему данные находят получателя.
192.168.1.10.2001:0db8::1.Адреса вида 192.168.x.x, 10.x.x.x, 172.16–31.x.x — локальные. Они работают только внутри вашей сети. Для выхода в интернет используется NAT — преобразование адресов.
127.0.0.1 или localhost — это ваш компьютер. Если сервер запущен локально, он доступен по этому адресу.
Порт — это число, которое указывает, какой программе предназначены данные.
Если приложение «не подключается к базе» — первым делом проверьте порт. PostgreSQL на 5432, MySQL на 3306. Если порт занят или неверный — соединения не будет.
Транспортный уровень отвечает за доставку данных. Два основных протокола:
Аналогия: TCP — это заказное письмо с уведомлением. UDP — это открытка: быстро, но может потеряться.
Для API и баз данных — всегда TCP. Для стриминга или игр — UDP. Если данные нельзя терять, используйте TCP.
DNS (Domain Name System) — система, которая превращает имена в IP-адреса.
8.8.8.8 (Google), 1.1.1.1 (Cloudflare).Если «сайт не открывается, а ping по IP работает» — проблема в DNS. Проверьте nslookup google.com или dig google.com.
HTTP (HyperText Transfer Protocol) — протокол передачи данных в вебе. Работает по модели «запрос → ответ».
Понимание HTTP-методов — основа REST API. Клиент говорит серверу, что делать, через метод. Ответ содержит статус-код (200, 404, 500).
Сервер отвечает числом — статус-кодом. Он говорит, что произошло.
Коды 4xx — ошибка клиента. 5xx — ошибка сервера. Если видите 500 — смотрите логи сервера. Если 404 — проверьте URL.
HTTPS — это HTTP с шифрованием (TLS/SSL). Данные передаются в зашифрованном виде.
Сертификат — это «паспорт» сайта. Его выдают центры сертификации (Let's Encrypt, GlobalSign). Браузер проверяет сертификат и показывает замок, если всё в порядке.
При разработке локально можно использовать самоподписанный сертификат. Но браузер будет ругаться — это нормально. Для продакшена — только настоящий сертификат (Let's Encrypt бесплатно).
Клиент-сервер — архитектура, где клиент отправляет запросы, а сервер их обрабатывает.
Backend — это сервер. Frontend — это клиент. Между ними — HTTP и API. Понимание этой модели — основа веб-разработки.
API (Application Programming Interface) — это «контракт» между программами. Одна программа говорит другой, что делать.
GET /api/users/42 → получить пользователя с id 42.POST /api/users → создать нового пользователя.DELETE /api/users/42 → удалить пользователя.
API — это то, как ваш frontend общается с backend, и как ваш backend общается с внешними сервисами (погода, платежи, карты).
JSON (JavaScript Object Notation) — текстовый формат данных. Почти все API используют его.
{}.[].JSON — универсальный язык обмена данными. Его понимают все языки: Python, JS, Java, C#, Go. Если умеете читать JSON — сможете работать с любым API.
ping — проверяет, доступен ли хост по сети.
Если ping google.com не работает — проблема с сетью или DNS. Если работает по IP, но не по имени — проблема с DNS.
tracert (Windows) или traceroute (Linux/macOS) показывает, через какие узлы проходит пакет.
Если API работает медленно — tracert поможет понять, на каком этапе задержка. Возможно, проблема не в вашем коде, а в сети.
netstat (Windows) или ss (Linux) показывает открытые порты и соединения.
Если приложение не стартует — проверьте, не занят ли порт. Например, PORT 8080 already in use. Найдите процесс через netstat -ano и убейте его.
curl — универсальный инструмент для работы с HTTP из командной строки.
curl — обязательный инструмент. Он есть на любом сервере. Если API не работает — curl покажет, что именно возвращает сервер.
nslookup (Windows) или dig (Linux) — проверка DNS.
Если «сайт не открывается», а по IP работает — проблема с DNS. Проверьте nslookup. Если не отвечает — смените DNS-сервер (например, на 8.8.8.8).
Большинство ошибок расшифровываются по названию. Connection refused — сервер выключен. Timeout — сеть не пропускает. 500 — баг в коде.
Docker создаёт изолированные сети для контейнеров. Это важно понимать разработчику.
-p (порт хост → контейнер).localhost внутри контейнера — это сам контейнер, а не хост.Разработчик пишет в коде localhost:5432 для подключения к базе. Локально работает. В Docker — не работает, потому что localhost внутри контейнера — это сам контейнер. Нужно использовать имя сервиса (например, db:5432).
Frontend не может получить данные с backend. Браузер пишет «CORS error». Разработчик не понимает, в чём дело.
Диагностика:
CORS — это защита браузера. Если frontend на localhost:3000, а backend на localhost:8080 — это разные источники. Нужно настроить CORS на backend: разрешить запросы с фронтенда.
Приложение в Docker не может подключиться к PostgreSQL. Ошибка: Connection refused.
Диагностика:
docker-compose.yml приложение подключается к localhost:5432.localhost внутри контейнера — это сам контейнер, а не база.Нужно использовать имя сервиса из docker-compose.yml. Если база называется db — подключаться к db:5432.
Разработчик должен понимать базовые риски.
Никогда не доверяйте пользовательскому вводу. Всё, что приходит из сети, нужно проверять и экранировать. Это основа безопасной разработки.
Что делать, если «не работает»:
ping до хоста.nslookup — работает ли DNS.curl — что возвращает сервер.netstat — слушает ли порт.Задание для самостоятельной работы:
ipconfig (Windows) или ip a (Linux).ping.tracert / traceroute.nslookup.curl к любому публичному API.curl -I.Скриншоты команд + краткое описание того, что вы увидели. Особое внимание — curl и nslookup.
Ответьте на вопросы:
Мы рассмотрели:
Сеть — это среда, в которой работает ваш код. Понимание сетей превращает вас из «программиста-одиночки» в специалиста, который может создавать полноценные веб-приложения и диагностировать проблемы.
Вопросы?
Следующая тема — прикладное сетевое взаимодействие.