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は、自分自身を指す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」には接続できない。
一般的には、どのポートがローカル・ループバック・アドレス経由で接続できるかは気にする必要はないが、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でリッスンしてもよいが、これだとインターフェイスごとにアクセス制御することができない)。
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と完全に等価ではないので注意する。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.
Windows Server Insider 記事ランキング