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/hosts0.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 の入門書が参考になります。

この記事の関連用語

IP アドレス インターネット上のデバイスを識別するための数値アドレス。127.0.0.1 はループバック用の特殊なアドレス。 IPv6 128 ビットのアドレス空間を持つ次世代プロトコル。ループバックアドレスは ::1 の 1 個のみ。 DNS ドメイン名を IP アドレスに変換するシステム。localhost の名前解決にも関与する。 NAT プライベート IP とグローバル IP を変換する技術。ループバック通信は NAT を経由しない。 ファイアウォール ネットワーク通信を監視・制御するセキュリティ装置。ループバック通信の扱いは設定に依存する。