Представьте: вы настроили сервер, развернули приложение, оно работает — локально. Открываете localhost:3000 — всё отлично. А потом коллега спрашивает: «Скинь ссылку, я хочу посмотреть». И тут вы понимаете, что понятия не имеете, как сделать так, чтобы ваш сервер был доступен кому-то кроме вас.
Или другая ситуация: сайт не открывается. Что сломалось — DNS, сервер, сеть, файрвол? Без понимания основ сетей вы даже не знаете, с чего начать диагностику.
Этот блок исправит обе проблемы. Начнём с фундамента. Когда вы отправляете письмо по почте, на конверте нужен адрес: город, улица, дом, квартира. В компьютерных сетях роль адреса выполняет IP-адрес.
Существует два формата:
# IPv4 — четыре числа от 0 до 255
192.168.1.10
8.8.8.8
# IPv6 — восемь групп шестнадцатеричных чисел
2001:0db8:85a3:0000:0000:8a2e:0370:7334
IPv4 — то, с чем вы будете работать в 99% случаев. IPv6 придумали, потому что адресов IPv4 на всех не хватает (их всего ~4.3 миллиарда, а устройств в мире — десятки миллиардов). Но пока IPv4 жив и здоров — так что сосредоточимся на нём.
Не все IP-адреса одинаковые. Есть два принципиально разных вида:
| Тип | Диапазоны | Где виден |
|---|---|---|
| Частный (private) | 10.x.x.x, 172.16–31.x.x, 192.168.x.x |
Только внутри вашей сети (дом, офис) |
| Публичный (public) | Все остальные | Виден из интернета |
Ваш домашний компьютер скорее всего имеет адрес вроде 192.168.1.10 — это частный адрес. Из интернета к нему напрямую обратиться нельзя. А сервер в облаке имеет публичный адрес — например, 84.201.175.42 — и доступен всему миру.
Окей, IP-адрес — это адрес дома. Но в доме может быть много квартир. Как почтальон узнает, кому именно письмо — nginx, PostgreSQL или вашему приложению? Для этого существуют порты.
Аналогия работает идеально: IP-адрес = дом, порт = номер квартиры. Адрес 84.201.175.42:443 означает: «машина 84.201.175.42, программа, слушающая на порту 443».
Некоторые порты зарезервированы за конкретными сервисами — это как «квартира №1 — всегда консьерж»:
| Порт | Сервис | Для чего |
|---|---|---|
| 22 | SSH | Удалённый доступ к серверу |
| 80 | HTTP | Веб-сайты (без шифрования) |
| 443 | HTTPS | Веб-сайты (с шифрованием) |
| 5432 | PostgreSQL | База данных |
| 3306 | MySQL | База данных |
| 6379 | Redis | Кеш / очередь |
| 3000, 8080 | — | Часто используются для dev-серверов |
Когда вы набираете https://google.com в браузере, он обращается к порту 443 — просто не показывает его, потому что для HTTPS это порт по умолчанию. А когда вы запускаете dev-сервер на localhost:3000 — порт 3000 нужно указать явно, потому что это нестандартный порт.
IP-адрес + порт — это «куда» доставить данные. Но как именно их доставить? Для этого нужен протокол — набор правил общения.
Два главных транспортных протокола, на которых строится всё остальное:
TCP (Transmission Control Protocol) — надёжная доставка. Гарантирует, что данные дойдут, дойдут в правильном порядке и без повреждений. Если пакет потерялся — отправит заново. Как заказное письмо с уведомлением о вручении.
UDP (User Datagram Protocol) — быстрая доставка без гарантий. Отправил и забыл. Пакет потерялся? Ну и ладно. Как бросить открытку в почтовый ящик — может дойдёт, может нет, но зато быстро.
| TCP | UDP | |
|---|---|---|
| Гарантия доставки | Да | Нет |
| Порядок пакетов | Гарантирован | Не гарантирован |
| Скорость | Медленнее (overhead на проверки) | Быстрее |
| Где используется | Веб, SSH, почта, файлы | Видеозвонки, игры, DNS-запросы |
Почему видеозвонки используют UDP? Потому что если один кадр потерялся — лучше показать следующий, чем ждать повторной отправки. Небольшие артефакты в видео лучше, чем подвисание на 2 секунды. Поверх TCP и UDP работают протоколы уровнем выше — те, с которыми вы сталкиваетесь каждый день:
| Протокол | Поверх | Для чего |
|---|---|---|
| HTTP / HTTPS | TCP | Веб-страницы, API |
| SSH | TCP | Удалённый доступ к серверу |
| DNS | UDP (обычно) | Перевод имён в IP-адреса |
| FTP / SFTP | TCP | Передача файлов |
| SMTP | TCP | Отправка электронной почты |
Это как матрёшка: ваш HTTP-запрос упакован в TCP-пакет, который упакован в IP-пакет, который отправляется по сети. Каждый уровень добавляет свою обёртку со служебной информацией.
Давайте соберём всё вместе и проследим, что происходит, когда вы набираете https://example.com в браузере. Это тот вопрос, который обожают задавать на собеседованиях — и теперь вы знаете ответ:
1. Браузер спрашивает DNS-сервер: «Какой IP у example.com?» Ответ: 93.184.216.34.
2. Браузер устанавливает TCP-соединение с 93.184.216.34 на порт 443 (HTTPS).
3. Поверх TCP устанавливается TLS-соединение (шифрование).
4. Браузер отправляет HTTP-запрос: GET / HTTP/1.1.
5. Сервер отвечает HTML-страницей.
6. Браузер отрисовывает страницу.
DNS → TCP → TLS → HTTP → ответ. Шесть шагов — и они происходят за доли секунды.
Подведём итог. Три кита сетей: IP-адрес (какая машина), порт (какая программа на машине), протокол (как общаться). Всё остальное в этом блоке — инструменты для работы с этими тремя вещами: диагностика, подключение, защита.
В следующем уроке — практика. Возьмём в руки ip, ping и curl и посмотрим, как выглядит сеть изнутри Linux.
IP-адрес — уникальный числовой адрес устройства в сети. Частные адреса (192.168.x.x, 10.x.x.x) видны только внутри локальной сети, публичные — из интернета. 127.0.0.1 — localhost, «сам себе».
Порт — номер (0–65535), определяющий программу на машине. IP = дом, порт = квартира. Стандартные: 22 (SSH), 80 (HTTP), 443 (HTTPS), 5432 (PostgreSQL).
TCP — надёжная доставка с гарантией порядка. UDP — быстрая доставка без гарантий.
HTTP/HTTPS, SSH, DNS — протоколы поверх TCP/UDP для конкретных задач (веб, удалённый доступ, преобразование имён).
Путь запроса в браузере: DNS → TCP → TLS → HTTP → ответ.