Вы нажимаете «Оформить», страница крутит спиннер и показывает «Что-то пошло не так». Разработчик открывает логи сервиса — там пусто: запроса не было. Дефект заведён на оплату, а встало всё на шаг раньше.
Между кнопкой и кодом приложения лежит цепочка: имя превращается в адрес, до адреса встаёт соединение, по нему уходит запрос. Знать её нужно, чтобы называть шаг, на котором всё встало.
Успешный путь: имя превращается в адрес, до пары «адрес и порт» встаёт TCP-соединение, по нему уходит запрос и возвращается ответ со статусом. Во второй половине обрыв на третьем шаге: пакеты уходят, ответа нет — и на экране «сайт недоступен», а во вкладке «Сеть» пусто. Логи сервиса в этом случае тоже чисты: запроса там не было.
Что уходит с вашей машины
«У меня не работает» — это два разных дефекта с разными исполнителями: приложение посчитало неверно или до приложения ничего не доехало.
Между клиентом (браузер, мобильное приложение, Postman) и сервером — процессом на другой машине, который слушает соединения и отвечает, — нет прямого провода: запрос идёт через роутер, корпоративный прокси и балансировщик, и любой может ответить вместо сервера или промолчать. Поэтому первый вопрос перед баг-репортом: ответ был? Ответил сервер хоть чем-нибудь, даже ошибкой 500, — причина в коде; ответа нет — чинить доступность. Сам обмен разбирает клиент-сервер и HTTP, здесь мы уровнем ниже.
Адрес, порт и имя
Компьютеры не соединяются по именам: shop.test — для людей, пакету нужен номер.
IP-адрес — адрес машины: 10.2.14.7 (IPv4, четыре числа от 0 до 255) или длинный IPv6. Порт — число от 0 до 65535, номер квартиры в доме: какой программе на машине отдать пакет. За частью портов закреплены привычные сервисы: 80 у HTTP, 443 у HTTPS, 5432 у PostgreSQL, 22 у SSH. Порт в браузере не пишут: для https:// подставляется 443.
Имя в адрес превращает DNS. Сначала система смотрит файл hosts (/etc/hosts, на Windows — в System32\drivers\etc): строчка оттуда перебивает всё. Не нашла — спрашивает сервер имён и запоминает ответ на TTL из записи, обычно минуты или часы. Из-за кэша переехавший стенд ещё какое-то время открывается по старому адресу.
«Не резолвится домен» — это ровно тот шаг: nslookup shop.test (или dig) возвращает пусто, и приложение тут ни при чём.
Из чего состоит адрес: URI, URL, URN
Ссылка из задачи ломается на параметре, а объяснить, где именно, нечем: «ссылка» не разобрана на части.
URI — общее название идентификатора ресурса, видов у него два. URL говорит, где ресурс лежит и как его взять. URN называет ресурс, не говоря о месте: urn:isbn:9785446104222 — книга, но не адрес, откуда её скачать. В работе почти всегда URL, а URI встречается в документации API.
https://shop.test:8443/orders/42?status=paid&page=2#items
схема хост порт путь параметры якорь
Параметры после ? — источник половины проверок: фильтры, постраничность, сортировка. А якорь после # на сервер не уходит вообще — его обрабатывает браузер, и дефект по ссылке с якорем ищут там же.
TCP и UDP: гарантия против скорости
Страница грузится десять секунд, звонок рассыпается на куски: жалобы одинаковые, а протоколы разные.
TCP — соединение с гарантией. До первого полезного байта стороны обмениваются тремя сообщениями (рукопожатие), дальше каждый кусок нумеруется и подтверждается: потерялся — уйдёт заново, пришли вперемешку — соберутся по порядку. Платят временем: рукопожатие стоит оборота «туда-обратно», поэтому «первый запрос медленный, дальше быстро» — часто не дефект. UDP — ни рукопожатия, ни подтверждений: отправил и забыл, зато мгновенно.
Делят по одному признаку: ценен каждый байт — TCP, данные быстро устаревают — UDP. Страницы, API, файлы и оплата идут по TCP; голос, видео, игры и телеметрия — по UDP: ждать переотправку уехавшего кадра бессмысленно. По UDP уходит и DNS-запрос.
Для проверок: рассыпавшийся звук в видеозвонке — штатное поведение UDP при потерях, воспроизводить его надо на плохой сети, а не на офисном Wi-Fi. Зависшая на минуту страница — это TCP ждёт переотправок; время ожидания в баг-репорте пишут числом.
Слои: на каком уровне искать причину
Причин у «не работает» десяток, и лежат они на разных уровнях, поэтому сеть описывают слоями: учебная модель OSI делит её на семь, рабочая TCP/IP — на четыре. Заучивать названия незачем, вся польза — отнести симптом к уровню:
- прикладной — HTTP и DNS: 404, 500, неверные данные в ответе;
- транспортный — TCP, UDP и порты: «соединение сброшено», таймауты;
- сетевой — IP и маршруты: «хост недоступен»;
- канальный и физический — Wi-Fi и кабель: пропал интернет.
Правило одно: не чините верх, пока не проверен низ. Отсюда и жаргон: L4-балансировщик работает с портами, L7 — с URL.
Прокси и VPN
У вас «сайт недоступен», у коллеги тот же адрес открывается — разница в том, как машина выходит в сеть.
Прокси — посредник, через которого идут запросы: корпоративный выпускает наружу по правилам, а на той стороне соединение принимает балансировщик. Поэтому часть ошибок в браузере пишет не приложение: 500 — приложение упало внутри; 502 и 504 обычно от посредника: «тот, кто должен был ответить, не ответил».
VPN — зашифрованный туннель в другую сеть. Встречается дважды: без него нет маршрута до стенда во внутренней сети; и как способ проверить гео — язык и валюту приложение выбирает по адресу выхода. Обратная сторона — забытый включённый VPN: половина «плавающих» дефектов с ценой и языком идёт отсюда.
Чем смотреть
Угадывать ничего не нужно — всё это видно.
- Вкладка «Сеть» в DevTools — первая остановка: есть ли строка запроса, какой статус, сколько заняла.
ping адрес— доходят ли до машины пакеты. Тишина не приговор: служебные пакеты часто запрещены правилами, а сервис жив.curl -v telnet://10.2.14.7:8080(илиtelnet 10.2.14.7 8080) — принимает ли кто-то соединения на порту. Исходов три:Connected— порт открыт;Connection refused— слушать некому, приложение не поднялось; тишина до таймаута — пакеты роняет межсетевой экран.- Снифферы — Wireshark показывает сам трафик, Fiddler встаёт посередине HTTP-обмена и подменяет запросы.
Где теряют полдня
- Дефект заводят на приложение, которое запроса не видело. Строки во вкладке «Сеть» нет или у неё нет статуса — чинить надо доступность стенда.
- Смотрят не на тот стенд. Адрес в закладке остался с прошлой задачи, признак — «дефект не воспроизводится»: у вас сборка недельной давности.
- Кэш имени. Стенд переехал, а машина ходит по старому адресу: у вас старая версия, у всех новая. Лечится
nslookupи взглядом вhosts. - 502 принимают за 500. «Сервер не отвечает» на экране часто написано посредником, а не приложением.
Коротко
- Соединение встаёт до пары «адрес и порт»; имя в адрес превращает DNS, а до DNS — файл
hosts. - TCP гарантирует доставку и порядок ценой рукопожатия; UDP быстрый и без обещаний — потери в голосе и видео норма.
- Слои нужны, чтобы не чинить верх, пока не проверен низ.
- Якорь после
#на сервер не уходит — такой дефект всегда на стороне браузера. - 500 пишет приложение, 502 и 504 — обычно посредник.
Что почитать дальше
- Клиент-сервер и HTTP — уровнем выше: методы, статус-коды, тело запроса.
- DevTools браузера — где всё это видно: Console, Network, Elements.
- Основы API-тестирования в Postman — как отправить запрос руками.
- Команды Linux и терминал — чем читать логи на той стороне.