127.0.0.1 - 自分自身への手紙
プログラマーなら誰もが知っている IP アドレス、127.0.0.1。「localhost」とも呼ばれるこのアドレスは、ネットワークの外には一切出ず、自分自身のコンピュータを指します。Web 開発者が http://localhost:3000 でアプリケーションをテストするとき、データはネットワークケーブルを 1 ミリメートルも流れることなく、OS のカーネル内で折り返されています。
しかし、なぜ「127」なのか。なぜ 1.0.0.1 や 10.0.0.1 ではないのか。この一見何気ない数字の裏には、1970 年代のインターネット黎明期にまで遡る歴史があります。
なぜ 127 なのか - クラス A の最後の番号
IPv4 アドレスの初期設計では、最初のオクテット (8 ビット) でネットワークのクラスを区別していました。クラス A は最初のビットが 0 で始まるアドレス、つまり 0.0.0.0 から 127.255.255.255 までの範囲です。
127 はクラス A の最後のネットワーク番号です。1981 年の RFC 790 で、127.0.0.0/8 のブロック全体 (約 1,677 万個のアドレス) がループバック用に予約されました。つまり、127.0.0.1 だけでなく、127.0.0.2 も 127.255.255.254 も、すべてループバックアドレスです。
なぜクラス A の最後の番号が選ばれたのか、公式な記録は残っていません。有力な説は、クラス A の先頭 (0 と 1) は特殊用途に予約されており、末尾の 127 も「端」として特殊用途に割り当てやすかったというものです。1,677 万個ものアドレスをループバックに「浪費」したことは、IPv4 アドレス枯渇の一因とも言われますが、当時は 43 億個が無限に思えた時代です。
ループバックの仕組み - データはどこを通るのか
127.0.0.1 宛のパケットは、ネットワークインターフェース (NIC) には一切送信されません。OS のネットワークスタック内に仮想的な「ループバックインターフェース」(Linux では lo、macOS では lo0) が存在し、パケットはこのインターフェースで折り返されます。
- 物理的なネットワークを経由しないため、ネットワーク障害の影響を受けない
- 暗号化やファイアウォールの処理をバイパスできる (設定による)
- 通信速度はメモリコピーの速度に近く、実質的に遅延ゼロ
- 外部からはアクセスできないため、開発中のサービスを安全にテストできる
IP 確認さんで確認できる IP アドレスは、あなたのグローバル IP アドレスです。127.0.0.1 は決して外部に見えることはありません。
localhost と 127.0.0.1 は同じか
厳密には異なります。localhost はホスト名であり、DNS または /etc/hosts ファイルによって IP アドレスに解決されます。多くのシステムでは localhost は 127.0.0.1 (IPv4) と ::1 (IPv6) の両方に解決されます。
この違いが問題になるケースがあります。
- MySQL は
localhostで接続すると Unix ソケットを使い、127.0.0.1で接続すると TCP/IP を使う。接続方法が異なるため、認証設定によっては一方でしか接続できないことがある - IPv6 が有効な環境で
localhostが ::1 に解決され、IPv4 でしかリッスンしていないサービスに接続できないことがある - 一部のブラウザは
localhostを「安全なコンテキスト」として扱い、HTTPS なしでも Service Worker や Geolocation API を使用できるが、127.0.0.1では扱いが異なる場合がある
0.0.0.0 - もう一つの特殊アドレス
127.0.0.1 と混同されがちなのが 0.0.0.0 です。このアドレスは文脈によって意味が変わります。
- サーバーのバインドアドレスとして: 「すべてのネットワークインターフェースでリッスンする」を意味する。
0.0.0.0:8080でサーバーを起動すると、localhost からも外部からもアクセスできる - ルーティングテーブルで: デフォルトルート (0.0.0.0/0) は「他のどのルートにも一致しない宛先」を意味する
- 送信元アドレスとして: DHCP でアドレスを取得する前のデバイスが、自身のアドレスとして 0.0.0.0 を使用する
- 広告ブロッカーで:
/etc/hostsに0.0.0.0 ads.example.comと記述すると、広告サーバーへのアクセスを無効化できる。127.0.0.1 よりも 0.0.0.0 の方が高速に失敗するため、広告ブロッカーでは 0.0.0.0 が好まれる
IPv6 のループバック - ::1
IPv6 では、ループバックアドレスは ::1 (0000:0000:0000:0000:0000:0000:0000:0001 の省略形) です。IPv4 の 127.0.0.0/8 が 1,677 万個のアドレスを占有していたのに対し、IPv6 ではたった 1 個のアドレスで済んでいます。128 ビットのアドレス空間があれば、1,677 万個の「浪費」を気にする必要はないのですが、IPv6 の設計者は効率性を重視しました。
ポップカルチャーの中の 127.0.0.1
127.0.0.1 は、プログラマー文化の中でアイコン的な存在です。
- 「There's no place like 127.0.0.1」(127.0.0.1 に勝る場所はない) - 映画「オズの魔法使い」の名台詞「There's no place like home」のパロディ。プログラマー向け T シャツの定番デザイン
- 「localhost is where the heart is」(localhost こそ我が家) - 同様のパロディ
- セキュリティの文脈では、「127.0.0.1 からの攻撃」は内部犯行を暗示する表現として使われることがある
まとめ
127.0.0.1 は、インターネットの最も基本的な概念 - 「自分自身との通信」 - を体現するアドレスです。1970 年代に割り当てられたこの数字は、半世紀を経た今も、世界中の開発者が毎日使い続けています。
次に localhost にアクセスするとき、そのデータがネットワークケーブルを 1 ミリメートルも流れていないこと、そして 1,677 万個のアドレスがこの「自分への手紙」のために予約されていることを思い出してみてください。IP 確認さんで確認できるグローバル IP アドレスとは対照的に、127.0.0.1 は決して外の世界に出ることのない、あなただけのアドレスです。
ネットワークの基礎を体系的に学びたい方には、TCP/IP の入門書が参考になります。