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 万個のアドレス) が予約され、1986 年の RFC 990 でループバック用途として明文化されました。つまり、127.0.0.1 だけでなく、127.0.0.2 も 127.255.255.254 も、すべてループバックアドレスです。
なぜクラス A の最後の番号が選ばれたのか、公式な記録は残っていません。有力な説は、クラス A の先頭の 0 は特殊用途に予約されており、末尾の 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 の設計者は効率性を重視しました。
4 つの表記の早見表
ここまでに出てきた 4 つの表記は、見た目が似ていても正体と振る舞いが違います。
| 表記 | 正体 | パケットの行き先 | 主な用途と注意点 |
|---|---|---|---|
127.0.0.1 |
IPv4 のループバックアドレス | ネットワークインターフェース (NIC) には一切送信されず、OS のネットワークスタック内にある仮想のループバックインターフェースで折り返される。Linux では lo、macOS では lo0 |
物理的なネットワークを経由しないため障害の影響を受けず、外部からはアクセスできないので開発中のサービスを安全にテストできる |
localhost |
ホスト名であり、アドレスそのものではない | DNS または /etc/hosts ファイルでアドレスに解決されてから折り返される。多くのシステムでは 127.0.0.1 と ::1 の両方に解決される |
MySQL では Unix ソケット接続になり、127.0.0.1 の TCP/IP 接続とは認証設定の効き方が変わる。一部のブラウザは安全なコンテキストとして扱い、HTTPS なしでも Service Worker や Geolocation API を使える |
0.0.0.0 |
文脈によって意味が変わる特殊アドレス | サーバーのバインドアドレスに指定すると、すべてのネットワークインターフェースでリッスンする。ルーティングテーブルではデフォルトルート (0.0.0.0/0) として「他のどのルートにも一致しない宛先」を表す | 0.0.0.0:8080 で起動したサーバーは localhost からも外部からもアクセスできる。DHCP でアドレスを取得する前の送信元アドレスにも使われ、/etc/hosts に書いた場合は 127.0.0.1 より高速に失敗する |
::1 |
IPv6 のループバックアドレス。0000:0000:0000:0000:0000:0000:0000:0001 の省略形 | IPv6 のループバックとして折り返される。IPv4 の 127.0.0.0/8 が 1,677 万個のアドレスを占有していたのに対し、IPv6 ではアドレス 1 個で済んでいる | IPv6 が有効な環境では localhost が ::1 に解決されることがあり、IPv4 でしかリッスンしていないサービスには接続できない |
ポップカルチャーの中の 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 は、インターネットの最も基本的な概念 - 「自分自身との通信」 - を体現するアドレスです。1981 年に予約されたこの数字は、40 年以上を経た 2020 年代も、世界中の開発者が毎日使い続けています。
次に localhost にアクセスするとき、そのデータがネットワークケーブルを 1 ミリメートルも流れていないこと、そして 1,677 万個のアドレスがこの「自分への手紙」のために予約されていることを思い出してみてください。IP 確認さんで確認できるグローバル IP アドレスとは対照的に、127.0.0.1 は決して外の世界に出ることのない、あなただけのアドレスです。
この記事の関連用語
よくある質問
なぜ 127.0.0.1 が localhost なのですか?
127 は IPv4 のクラス A の最後のネットワーク番号で、1981 年の RFC 790 で予約され、1986 年の RFC 990 でループバック用途が明文化されました。クラス A の端の番号が特殊用途に割り当てやすかったためと考えられていますが、公式な記録は残っていません。
localhost と 127.0.0.1 は同じですか?
厳密には異なります。localhost はホスト名で、DNS や /etc/hosts で IP アドレスに解決されます。MySQL では localhost だと Unix ソケット、127.0.0.1 だと TCP/IP を使うなど、動作が異なる場合があります。
127.0.0.0/8 の全アドレスがループバックですか?
はい。127.0.0.1 だけでなく、127.0.0.2 から 127.255.255.254 まで約 1,677 万個すべてがループバックアドレスです。IPv6 では ::1 の 1 個のみに効率化されました。