ブラウザにURLを入力したときにどのようなフローが発生するのか、Linuxコマンドを使用して何かが機能しない場合にデバッグする方法を理解したい
答え1
ブラウザにURLを入力したときにどのようなフローが起こるかを理解したい
例えば
デバッグ方法
最も便利なツールはおそらく
tcpdump
。nslookup
または、より現代的な同等語host
およびdig
。wget
またはcurl
。manページを読んで、次のような便利なオプションを見つけてください。--server-response
、--debug
、--verbose
、--no-dns-cache
ただし、DNSの前に使用されるネームサービス(ローカルホストファイルや、まれにNBNS、YPなどの他のネットワークサービスなど)があるため、まずローカルの名前解決を理解する必要があります。まずは以下を読んでください。man resolv.conf
答え2
sys/sockets.h
Linuxシステムには、Cプログラム用の実装を含む多数のシステムライブラリが付属しており、バークレーソケットAPIそしてPOSIX標準。POSIX仕様には、方法と呼ばれるgetaddrinfo()
もので、ホストのIPアドレスをそれを必要とするプログラムに返します。各プログラミングランタイム(例:パイソン、パール、phpなど)は、独自のインターフェースを実装し、それを使ってgetaddrinfo()しかし、それらのほとんどは、実際に DNS 要求を処理するためにカーネルの方法を使用します。
ソケット接続には、socket()、bind()、connect() などのメソッド呼び出しがいくつか含まれます。私の回答を参照してください。こここれらの呼び出しがどのように調整されてネットワーク接続が作成されるかについてです。
クライアント側での DNS 解決のトラブルシューティングは、サーバーとキャッシュに帰着します。サーバーは、宛先として認識しているアドレスで応答しますが、何らかの理由 (地理位置情報、ブラックリストなど) でそれが必要なアドレスでない場合は、必要なアドレスを持つサーバーに変更できます。必要なアドレスを持つサーバーに接続しているのに、依然として悪い結果になる場合は、ホストまたはルーターやキャッシュ プロキシの上流にキャッシュされた応答が原因である可能性があります。