Доменные имена — это понятные человеку адреса сайтов (типа linkedin.com).Интернет понимает только IP-адреса. DNS — это переводчик, который превращает домен в IP. Когда браузер открывает www.linkedin.com, он запускает процесс **DNS resolution** (разрешение имени). Простая схема внутри браузера: ```python ip, ошибка = получить_IP(доменное_имя) if ошибка: "Неизвестный хост!" ``` ### Как это работает внутри 1. Браузер сначала смотрит в свой кэш. Нашёл — сразу использует. 2. Не нашёл — спрашивает у операционной системы через вызов `gethostbyname`. ```python def получить_IP(доменное_имя): ответ, ошибка = посмотреть_в_кэше() if нет_ошибки: return ответ else: ответ = ОС_найди_IP(доменное_имя) # gethostbyname return ответ ``` ### Что делает Linux ОС смотрит в файл `/etc/nsswitch.conf`. Там обычно строка: ```bash hosts: files dns ``` Сначала проверяет локальный файл `/etc/hosts`, потом идёт в DNS. Пример `/etc/hosts`: ```bash 127.0.0.1 localhost 127.0.0.1 test.linkedin.com # ← добавили сами ``` Теперь `ping test.linkedin.com` сразу покажет 127.0.0.1 — без интернета. ### Настоящий DNS-запрос Если в `/etc/hosts` ничего нет, Linux идёт к DNS-резолверам из файла `/etc/resolv.conf`. Смотрим трафик: ```bash sudo tcpdump -i any port 53 # в одном терминале dig linkedin.com # в другом ``` Получаем ответ: IP linkedin.com = 108.174.10.10 ### Как резолвер находит IP (полный путь) 1. Смотрит в свой кэш. 2. Нет — спрашивает **root-сервер** (знает все TLD). 3. Root отвечает: «Для .com спроси вот эти сервера». 4. Спрашивает .com-сервер → получает authoritative сервер linkedin.com. 5. Спрашивает сервер LinkedIn → получает настоящий IP. Посмотреть весь путь одной командой: ```bash dig +trace linkedin.com ``` ### Важные поля в ответе DNS * **TTL** (время жизни) — сколько секунд кэшировать. Пример: 3600 = 1 час. * Тип записи: * **A** — IPv4 (108.174.10.10) * **AAAA** — IPv6 * **NS** — какие сервера отвечают за домен * **CNAME** — алиас (www.linkedin.com → другое имя) Быстрые примеры: ```bash dig A linkedin.com +short dig AAAA linkedin.com +short dig NS linkedin.com +short dig www.linkedin.com CNAME +short ``` ### Где SRE использует DNS (7 реальных кейсов) 1. Внутренний DNS для компании (wiki, базы, микросервисы). Если упадёт — всё сломается. 2. Service discovery: `serviceb.internal.company.com` автоматически показывает рабочие серверы. 3. Load Balancer в AWS/Azure: дают CNAME, а не IP. При масштабе меняют IP — TTL обычно 60 секунд. 4. Географический баланс: пользователю дают ближайший сервер. 5. Безопасность: DNS можно подделать. Защищает HTTPS + DNSSEC. 6. Старая кэш — главная боль. После смены сервера часть клиентов ещё ходит на старый IP. 7. При выключении сервера жди полный TTL, иначе часть трафика упадёт. Всё! DNS разобран максимально просто.Готов к следующему разделу — **UDP**? Пиши «да».