連載
» 2006年10月14日 00時00分 UPDATE

Tech TIPS:ローカル・ループバック・アドレス(127.0.0.1)とは?

127.0.0.1はローカル・ループバック・アドレスと呼ばれ、自分自身を指す特別なIPアドレスである。「localhost」という名前でも参照できる。自分自身の上で動作しているサービスへ接続する場合は、このIPアドレスを利用できる。ほとんどの場合localhostと127.0.0.1は同じだが、「\\localhost」と指定するとエラーになることがある。

[打越浩幸,デジタルアドバンテージ]
「Windows TIPS」のインデックス

連載目次

解説

 TCP/IPネットワークでは、自ホストを表すための「ローカル・ループバック・アドレス(もしくは単にループバック・アドレス)」という特別なIPアドレスが利用されることがある。本TIPSでは、これについて解説する。

 ローカル・ループバック・アドレスとは、自分自身を表す特別なIPアドレスの1つであり、TCP/IPが有効なコンピュータでは常に利用可能なIPアドレスである。一般的には「127.0.0.1」というIPアドレス(IPv4の場合)が利用されるが、実際にはIPアドレスの最上位のバイト(最上位の8bit)の内容が「127」でありさえすればよいので、「127.0.0.1〜127.255.255.254」の範囲内ならばどのIPアドレスでも利用できる(127.0.0.0と127.255.255.255の2つはブロードキャスト・アドレスのため除外される)。例えば127.0.0.2でもよいし、127.1.2.3でもよいが、一般的な用途では127.0.0.1だけが利用される。

●ローカル・ループバック・アドレスの確認方法

 TCP/IPネットワークが有効になっていると、このIPアドレスは必ず定義されているはずである。そのため、127.0.0.1が有効かどうか、存在するかどうかで、TCP/IPネットワーク(TCP/IPのプロトコル・スタック)がアクティブであるかどうかを確認することができる。例えば、pingコマンドをIPアドレスあてに実行して、応答が返ってくれば、TCP/IPが有効であると判断できる。

C:\>ping 127.0.0.1 …ローカル・ループバック・アドレスあてのping

Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 …応答
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
…(以下省略)…



 現在のWindows OSでは必ずTCP/IPが有効になっているので、これは常に応答が返ってくるが、従来のWindows 9xといったOSではユーザーがインストールする必要があった。そのため、まずはこれを実行して、正しくTCP/IPのコンポーネントがインストールされているかどうかを確認する必要があった。現在のWindows OSでも、ネットワーク経由のpingを実行する前に、pingやTCP/IPがインストールされ、動作しているかどうかを確認するため、まずこのようなpingを実行してもよいだろう。

 このIPアドレスは、デフォルトでは必ず有効になっているが、それをipconfigコマンドや、ネットワーク・アイコンの[プロパティ]もしくは[サポート]−[詳細]ボタンなどで確認することはできない。しかしnetstatコマンドを使えば、このIPアドレスでリッスンしているいくつかのポートが(デフォルトでは)存在するので、確認することができる。

C:\>netstat -an …リッスンしているポートの表示

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING …ローカル・ループバック・アドレスでのリッスン
  TCP    192.168.0.110:139      0.0.0.0:0              LISTENING
  UDP    0.0.0.0:445            *:*
  UDP    0.0.0.0:500            *:*
  UDP    0.0.0.0:1026           *:*
  UDP    0.0.0.0:4500           *:*
  UDP    192.168.0.110:137      *:*
  UDP    192.168.0.110:138      *:*



●127.0.0.1の利用方法

 127.0.0.1は、自分自身を指すIPアドレスである。そのため、自分自身のサービスが動作しているかどうかを確認したり、自分自身のコンピュータ上で動作しているサービスへ接続する場合に利用したりできる。先の例のように、pingで接続したり、ファイル共有へ接続してみたり、Webサーバが動作しているなら、Webブラウザで接続する、といった使い方をする。外部のコンピュータから接続する場合と違って、自分自身に割り当てられているIPアドレスを知っている必要はなく、常に127.0.0.1というIPアドレスに接続すればよい。これにより、常に自分自身へ接続することが保証されている。

 ただし、このような使い方が可能になるためには、127.0.0.1(もしくは任意のアドレスを表す「0.0.0.0」)に対してアプリケーションがリッスンしている必要がある(Sateが「LISTENING」になっている行、および「Foreign Address」が「*:*}となっている行を参照)。上のnetstat -anの実行例でいえば、TCPの「0.0.0.0:445」や「127.0.0.1:1025」といったポートには、例えば「telnet 127.0.0.1 445」などで接続できるが、「192.168.0.110:139」には接続できない。

●127.0.0.1でリッスンする

 一般的には、どのポートがローカル・ループバック・アドレス経由で接続できるかは気にする必要はないが、Windows OS上で稼働するWebサーバやファイアウォールなどを設定する場合には、意識しておく必要があるだろう。例えば以下のように設定されたWebサーバ(IIS)では、ローカル・コンピュータ上のWebブラウザから、「http://127.0.0.1/」を指定しても、接続できずにエラーとなる。IISが127.0.0.1でリッスンしていないからだ。複数のIPアドレスを持つシステムの場合は、各インターフェイスのIPアドレスを指定するだけでなく、ローカル・ループバック・アドレスを使って接続したければ、127.0.0.1というIPアドレスに対しても明示的にリッスンしておく(0.0.0.0でリッスンしてもよいが、これだとインターフェイスごとにアクセス制御することができない)。

2つのIPアドレスでリッスンしているIIS Webサーバの例 2つのIPアドレスでリッスンしているIIS Webサーバの例
これはIISのWebサイトのプロパティの設定例。このシステムには2つのIPアドレスが割り当てられているので、それを指定している。だが「http://127.0.0.1/」という形式でブラウズしたければ、127.0.0.1というIPアドレスも追加しなければならない。なおこのように設定してからnetstat -anで確認すると、「0.0.0.0:80」でリッスンしているように見える。だが実際には、接続後にIISが接続先IPアドレスの検証を行い、http://127.0.0.1/ならば接続が拒否される。
  (1)あるWebサイトに割り当てられている2つのIPアドレス。ローカル・コンピュータ上からhttp://127.0.0.1/でもアクセスしたければ、もう1つ127.0.0.1も追加すること。

●localhost=127.0.0.1

 127.0.0.1というIPアドレスはよく利用されるため、通常は「localhost」という単純なホスト名でアクセスできるようになっている(ドメイン名は付かない。localhostという単一ラベルの名前としてのみ有効)。例えば「http://127.0.0.1/」は「http://localhost/」としてアクセスできるし、ローカル・コンピュータ上のFTPサーバに接続するには、「ftp localhost」とすればよい。

 localhostはほとんどの場合127.0.0.1と同義に利用できるが、NetBIOS関連のアプリケーションでは意味が異なることがある。

 例えば、あるローカル・コンピュータ上のファイル共有サービス(SMBサービス)へローカルから接続する場合、次のようになる(これはWindows XPの例)。

※例1―単純なコンピュータ名(もしくはFQDN名)で接続
C:\>net use \\winxpc01
コマンドは正常に終了しました。 …接続に成功

※例2―IPアドレスで接続
C:\>net use \\192.168.0.110
コマンドは正常に終了しました。 …接続に成功

※例3―ローカル・ループバックのIPアドレスで接続
C:\>net use \\127.0.0.1
コマンドは正常に終了しました。 …接続に成功

※例4―localhostという名前で接続
C:\>net use \\localhost
システム エラー 52 が発生しました。 …接続に失敗

ネットワークに重複した名前があるため接続されませんでした。コントロール パネルのシステムでコンピュータ名を変更して再実行してください。



 最初の3つの方法は成功しているが、4つ目の例ではエラーとなっている。これは、localhostというNetBIOS名でコンピュータに接続しようとしたが、そのようなNetBIOS名を持つコンピュータは存在しないので、エラーとなっている。Windowsネットワークでは、15文字以下で、ドメイン名を持たない単純なホスト名(単一ラベルのホスト名などと呼ばれる)の場合は、NetBIOS名として扱いNBTで接続しようとするため、このようなエラーが発生する。ただしWindows Server 2003以降では、NetBIOS(NBT)経由での接続が失敗しても、SMB経由(TCPの445番を利用するファイル共有サービス)での接続を試行し、それが成功するので、このような用法でもエラーとはならない。

 このように、NetBIOS名として利用される場合は、localhostは127.0.0.1と完全に等価ではないので注意する。

「Windows TIPS」のインデックス

Windows TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。