Я хочу понять, что происходит, когда мы вводим какой-то URL в браузер и как отлаживать, если что-то не работает с помощью команд Linux
2 ответа
Система Linux поставляется с рядом системных библиотек, включая реализацию sys/sockets.h
для программ на C, которая реализует стандарты Berkeley Sockets API и POSIX . Спецификация POSIX включает определение метода, называемого getaddrinfo()
который возвращает IP-адрес хоста программе, которая нуждается в этом. Каждая среда программирования (например, Python, perl, php и т.д.) Реализует свои собственные интерфейсы, с помощью которых они вызывают getaddrinfo (), но большинство из них фактически используют метод ядра для фактической обработки запроса DNS.
Соединение с сокетами включает в себя несколько вызовов методов, включая socket(), bind(), connect() и т.д. Смотрите мой ответ здесь о том, как эти вызовы координируются для создания сетевого соединения.
Устранение неполадок при разрешении DNS на стороне клиента сводится к серверу и кешу. Сервер ответит адресом, который он знает для получателя, но если это не тот адрес, который вы хотите по какой-либо причине (геолокация, внесение в черный список и т.д.), Вы можете изменить серверы на тот, который имеет нужный вам адрес. Если вы подключаетесь к серверу с нужным адресом, но все еще получаете неверный результат, это может быть вызвано кэшированным ответом на вашем хосте или восходящим потоком на маршрутизаторе или прокси-сервере кэширования.
[Я] хочу понять, что происходит, когда мы вводим какой-то URL в браузер
Смотри например
- Мое путешествие веб-запроса
- Фрэнка Каковы подробные шаги модели OSI, связанные с подключением к веб-сайту?
и как отлаживать
Наиболее полезные инструменты, вероятно,
tcpdump
.nslookup
или его более современные аналогиhost
anddig
.wget
илиcurl
. Прочитайте их справочные страницы, чтобы узнать полезные опции, такие как--server-response
,--debug
,--verbose
,--no-dns-cache
Сначала вам нужно понять локальное разрешение имен, поскольку существуют службы имен, которые могут использоваться до DNS (например, локальные файлы хостов, а также в некоторых редких настройках, другие сетевые службы, такие как NBNS, YP и т.д.). Я бы начал с чтения man resolv.conf