0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

socketライブラリの名前解決とOS内部の仕組み

Last updated at Posted at 2025-02-13

はじめに

ネットワークの仕組みを学んでいると、「ブラウザがドメイン名をIPアドレスに変換する過程で socket ライブラリが使われる」と説明されることがあります。私はこの説明を読んで、「socket ライブラリの関数を実行すると、OSのターミナルで nslookup が動くの?」という疑問が浮かびました。

この記事では、この疑問を解決しながら、

  • socket ライブラリがどのように名前解決を行うのか
  • OSの /etc/hostsnsswitch.confresolv.conf の役割
  • nslookupdig との違い

をまとめてみます。


socket ライブラリによる名前解決の流れ

Python で socket.gethostbyname("www.example.com") を実行すると、以下の手順で名前解決が行われます。

/etc/hosts を確認

まず、ローカルの /etc/hostswww.example.com のエントリがあるかをチェックします。

/etc/hosts の例

127.0.0.1   localhost
192.168.1.100   myserver

この場合、myserver というホスト名を問い合わせると、DNS を使わずに 192.168.1.100 を返します。

nsswitch.conf を確認し、次の処理を決定

/etc/nsswitch.conf には、名前解決を行う際の優先順位が設定されています。

/etc/nsswitch.conf の例

hosts: files dns

この設定では、/etc/hosts を見て、なければ DNS に問い合わせるという順番になっています。

/etc/resolv.conf を参照してDNSサーバーに問い合わせ

/etc/hosts にエントリがない場合、OS は /etc/resolv.conf に設定されたDNSサーバーに問い合わせます。

/etc/resolv.conf の例

nameserver 8.8.8.8
nameserver 1.1.1.1

この設定では、

  1. GoogleのDNSサーバー(8.8.8.8)に問い合わせる
  2. 応答がなければ CloudflareのDNSサーバー(1.1.1.1)に問い合わせる

という順番になります。


socket ライブラリと nslookup の違い

ここで、「socket ライブラリの関数を実行すると nslookup が動くの?」という疑問に戻ります。

socket ライブラリの動作

  • /etc/hosts/etc/nsswitch.conf/etc/resolv.conf の順に従う
  • DNS 以外の手段(ローカルファイル)も使う

nslookupdig の動作

  • OSの名前解決システムを使わず、直接 DNS サーバーに問い合わせる
  • /etc/hosts を無視する

つまり、socket ライブラリは OSの名前解決ルールを守る のに対し、nslookup常にDNSに問い合わせる という違いがあります。


【実験】OSの名前解決の動作を確認する

/etc/hosts を使った実験

  1. /etc/hosts を編集

    sudo nano /etc/hosts
    
  2. 次の行を追加

    1.2.3.4 example.com
    
  3. 保存して ping で確認

    ping example.com
    

    1.2.3.4 にアクセスする!(DNSを使わない)

  4. Python で確認

    import socket
    print(socket.gethostbyname("example.com"))
    

    1.2.3.4 になる!

  5. nslookup で確認

    nslookup example.com
    

    本物のDNSサーバーのIPが返る(1.2.3.4 にはならない)

この結果から、socket/etc/hosts を使うが、nslookup は使わないことが確認できます。


まとめ

socket ライブラリ nslookup/dig
/etc/hosts を使うか? ✅ 使う ❌ 使わない
/etc/resolv.conf を使うか? ✅ 使う ✅ 使う
/etc/nsswitch.conf の順番を守るか? ✅ 守る ❌ 守らない
DNSに直接問い合わせるか? ❌ まずローカルを確認 ✅ 直接DNSへ

socket ライブラリは OSの名前解決のルールに従い、ローカルの /etc/hosts も参照する のに対し、nslookup常にDNSサーバーに直接問い合わせる という違いがあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?