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