コンピュータネットワークでは、localhost は、アクセスに使用されている現在のコンピュータを指すホスト名です。localhostという名前はループバック用に予約されています。[ 1 ]これは、ループバックネットワークインターフェイスを介してホスト上で実行されているネットワークサービス にアクセスするために使用されます。ループバックインターフェイスを使用すると、ローカルネットワークインターフェイスハードウェアをバイパスします。
ローカルループバック機構を使用すると、物理的なネットワークインターフェースを必要とせずに、またはコンピュータが接続されているネットワークからサービスにアクセスできないようにすることなく、ホスト上でネットワークサービスを実行できます。たとえば、ローカルにインストールされたWebサイトには、WebブラウザからURL 「http://localhost」でアクセスしてホームページを表示できます。
IPv4ネットワーク標準では、ループバック用にアドレス127.0.0.0 / 8 (1600 万以上のアドレス) のアドレス ブロック全体を予約しています。 [ 2 ]つまり、これらのアドレスのいずれかに送信されたパケットはすべてループバックされます。アドレス127.0.0.1は IPv4 ループバック トラフィックの標準アドレスです。残りのアドレスはすべてのオペレーティングシステムでサポートされているわけではありません。ただし、ホスト上で複数のサーバー アプリケーションを設定し、すべて同じポート番号でリッスンするために使用できます。IPv6アドレス指定アーキテクチャ[ 3 ]では、ループバック用に割り当てられたアドレスは :: 1のみです。標準では、このアドレスを物理インターフェイスに割り当てること、およびリモート ホストに送信されるパケットの送信元アドレスまたは宛先アドレスとして使用することを禁止しています。
localhost という 名前は通常、IPv4ループバックアドレス127.0.0.1とIPv6ループバック アドレス::1に解決されます。
この解像度は通常、オペレーティングシステムのhostsファイル内の以下の行によって設定されます。
127.0.0.1 localhost ::1 localhost
この名前はドメインネームシステム(DNS)サーバーによって解決される場合もありますが、この名前の使用には特別な考慮事項があります[ 1 ] 。
localhostをループバック アドレス ( 127.0.0.1および::1 )にマッピングする以外にも、 localhost を他の IPv4 (ループバック) アドレスにマッピングすることもできます。また、任意のループバック アドレスに他の名前や追加の名前を割り当てることも可能です。hostsファイルまたは DNS で指定されたループバック アドレス範囲以外のアドレスにlocalhostをマッピングしても、アプリケーションが内部的に名前をマッピングする可能性があるため、意図したとおりの効果が得られるとは限りません。
ドメインネームシステムでは、.localhostという名前はトップレベルドメイン名として予約されており、元々はホスト名localhostとの混同を避けるために確保されていました。[ 4 ]ドメイン名レジストラは、トップレベルドメイン.localhostのドメイン名を委任することはできません。[ 1 ]
1981年、ブロック127.0.0.0 / 8は「予約済み」ステータスを取得しました[ 5 ] 。これは、汎用クラスA IPネットワークとして割り当てられないようにするためです。このブロックは、1986年にループバック目的で正式に割り当てられました[ 6 ]。特殊用途IPv4アドレスブロック としてのその目的は、1994年[ 7 ]、2002年[ 8 ]、2010年[ 9 ]、そして最後に2013年に確認されました[ 2 ]。
当初の1995年には、単一のIPv6ループバックアドレス::1が定義されました。[ 10 ]その目的と定義は、1998年、[ 11 ]、2003年、[ 12 ]、そして現在の定義である2006年まで変更されていません。 [ 3 ]
ループバックアドレス宛てのパケットの処理は、TCP/IPスタックのリンク層で行われます。このようなパケットは、ネットワークインターフェースコントローラ(NIC)やハードウェアデバイスドライバに渡されることはなく、コンピュータシステムの外部に出たり、ルータによってルーティングされたりしてはなりません。これにより、ハードウェアネットワークインターフェースが存在しない場合でも、ソフトウェアのテストやローカルサービスが可能になります。
ループバックパケットは、TCP/IPスタックを通過する他のパケットとは、宛先となる特別なIPアドレスによってのみ区別されます。そのため、最終的にそれらを受信するサービスは、指定された宛先に応じて応答します。例えば、HTTPサービスは、127.0.0.99: 80と127.0.0.100:80宛てのパケットを異なるWebサーバーにルーティングしたり、異なるWebページを返す単一のサーバーにルーティングしたりできます。このようなテストを簡素化するために、ホストファイルには各アドレスに適切な名前を設定することができます。
ループバックの送信元または宛先アドレスを持つ非ループバックインターフェイスで受信したパケットは破棄する必要があります。このようなパケットは、マーシャンパケットと呼ばれることもあります。[ 13 ]他の偽パケットと同様に、これらは悪意のあるものである可能性があり、それらが引き起こす可能性のある問題は、ボゴンフィルタリングを適用することで回避できます。
MySQLデータベースのリリースでは、ホスト名localhostの使用とアドレス127.0.0.1および::1の使用を区別しています。[ 14 ]アプリケーションのクライアント コネクタ インターフェイスで宛先としてlocalhost を使用する場合、MySQL アプリケーション プログラミング インターフェイスはUnix ドメイン ソケットを使用してデータベースに接続しますが、ループバック インターフェイスを介した TCP 接続では明示的なアドレスを直接使用する必要があります。
127.0.0.0 / 8アドレスの使用における注目すべき例外の 1 つは、マルチプロトコル ラベル スイッチング(MPLS) の traceroute エラー検出での使用です。ルーティングできないという特性により、エンド ユーザーへの不良パケットの配信を回避する便利な手段となります。