🏠

なぜlocalhostで開発サーバーにアクセスできるのか?

2025/01/23に公開

調べたきっかけ

開発環境でサーバーを起動したとき、localhost:3000などでアクセスできるようになる。
これまでその仕組みを深堀裏したことはなかったが、最近ネットワーク周りの学習を進める中で、気になったので調べた。

localhostとは

localhostは、自身の端末を指す特別なドメイン名
他の一般的なドメイン名(例: zenn.dev)などと同様、名前解決によりIPアドレスを特定し、そこへリクエストを送る。

/etc/hostsの役割

localhostの名前解決は、/etc/hosts ファイルの設定を利用している。
このファイルは、ドメイン名とIPアドレスの対応を定義するファイル。
一例。自分の環境でcatすると、ちゃんと定義されていた。

127.0.0.1	localhost
::1         localhost

この設定により、localhostは127.0.0.1(IPv4)または::1(IPv6)へリクエストを送る。
では、127.0.0.1とはなんなのか。

ループバックアドレス

127.0.0.1は「ループバックアドレス」と呼ばれる特別なIPアドレス。
ループバックアドレスにリクエストを送ると、外部ネットワークと通信することなく、自身の端末内で完結させる。外部と通信しないので高速。
ちなみに、内部的な通信なので、OSI参照モデルでいうデータリンク層、物理層は、仮想的なデータ転送が行われる。

まとめ(理解度チェック)

生成AIに考えてもらいました。

問題1

localhostの主な特徴として正しいものはどれか?
A. インターネット上の公開サーバーを指す
B. 自身の端末を指す特別なドメイン名
C. 常に外部のIPアドレスに接続する
D. ランダムなIPアドレスに接続する

問題2

/etc/hostsファイルの主な役割は何か?
A. ウイルス対策
B. パスワード管理
C. ドメイン名とIPアドレスの対応定義
D. ネットワークスピードの向上

問題3
ループバックアドレス127.0.0.1の特徴として正しいものは?
A. 外部ネットワークと常に通信する
B. ランダムなポートに接続する
C. 外部通信なしで端末内通信を実現
D. 特定のアプリケーションでのみ使用可能

問題4
OSI参照モデルで、ループバック通信の特徴として正しいものは?
A. 全ての層で通常の外部通信と同じ処理
B. データリンク層と物理層で仮想的なデータ転送
C. アプリケーション層のみで処理
D. トランスポート層で外部通信を強制する

問題5
localhostの名前解決で使用されるIPアドレスはどれか?
A. 192.168.1.1
B. 10.0.0.1
C. 127.0.0.1
D. 8.8.8.8

答え

B, C, C, B, C

Discussion