
cmd
Windows でと を使用するping
と、次の結果が得られました。
- 「localhost」にpingを実行しています:
- 「192.168.0.10」(ローカル IP アドレス) に ping を実行しています:
どちらの状況も全く同じではないでしょうか?
つまり、同じインターフェース、同じマシン、同じアドレスに ping しているのに、なぜこのように異なる結果が得られるのでしょうか?
編集: これが私のipconfig /all
画面です:
答え1
同じインターフェースにpingを実行していない物理インターフェースがなくても、「ローカル ホスト」は存在します。
Your はlocalhost
、コンピュータの「外部」IP からではなく、「内部」IP からコンピュータを参照するために使用されます。そのため、ping パケットは物理ネットワーク インターフェイスを通過せず、物理的なホップなしでポートからポートへパケットを直接送信する仮想ループ バック インターフェイスのみを通過します。
従来は IPv4 アドレス にlocalhost
解決されると予想されていたのに、 が に解決されるのはなぜかと疑問に思うかもしれません。 は従来 TLD であることに注意してください (::1
127.0.0.1
.localhost
RFC 2606)はループバックIPアドレスを指します(IPv4の場合は、RFC 3330(特に 127.0.0.0/8)です。
localhost
を使用して調べるとnslookup
次のようになります。
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
そのため、WindowsはIPv6ループバックIPアドレスの使用を優先します::1
(RFC 2373) が最初にリストされます。
さて、それがどこから来るのか、hosts ファイルを見てみましょう。
type %WINDIR%\System32\Drivers\Etc\Hosts
...
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
...
うーん、Windows の DNS 設定を確認する必要があります。
このKB記事Windows の優先設定に影響を与える設定について説明しています (太字で強調されています)。
レジストリ エディターで、次のレジストリ サブキーを見つけてクリックします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
DisabledComponents をダブルクリックして、DisabledComponents エントリを変更します。
注: DisabledComponents エントリが使用できない場合は、作成する必要があります。これを行うには、次の手順に従います。
[編集] メニューで [新規] をポイントし、[DWORD (32 ビット) 値] をクリックします。
「DisabledComponents」と入力し、Enter キーを押します。
DisabledComponents をダブルクリックします。
[値のデータ] フィールドに次のいずれかの値を入力して IPv6 プロトコルを目的の状態に構成し、[OK] をクリックします。
0
すべての IPv6 コンポーネントを有効にするには、入力します。(Windows のデフォルト設定)- IPv6 ループバック インターフェイスを除くすべての IPv6 コンポーネントを無効にするには、これを
0xffffffff
入力します。この値は、プレフィックス ポリシー テーブル内のエントリを変更して、Windows が IPv6 よりもインターネット プロトコル バージョン 4 (IPv4) を優先して使用するように構成します。詳細については、「送信元アドレスと宛先アドレスの選択」を参照してください。0x20
プレフィックス ポリシー テーブルのエントリを変更して、IPv6 よりも IPv4 を優先するように入力します。0x10
すべての非トンネル インターフェイス (LAN インターフェイスとポイントツーポイント プロトコル (PPP) インターフェイスの両方) で IPv6 を無効にするには、これを入力します。- すべてのトンネル インターフェイスで IPv6 を無効にするには、これを入力します
0x01
。これには、サイト内自動トンネル アドレス指定プロトコル (ISATAP)、6to4、および Teredo が含まれます。0x11
IPv6 ループバック インターフェイスを除くすべての IPv6 インターフェイスを無効にするには、これを入力します。この設定を有効にするには、コンピューターを再起動してください。
このプレフィックス ポリシー テーブルとは何ですか?
netsh interface ipv6 show prefixpolicies
(またはprefixpolicy
以前のバージョン)
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
45 13 fc00::/7
40 1 ::/0
10 4 ::ffff:0:0/96
7 14 2002::/16
5 5 2001::/32
1 11 fec0::/10
1 12 3ffe::/16
1 10 ::/96
このテーブルは、DNS 解決時にどのプレフィックスが他のプレフィックスよりも優先されるかを決定します。
ああ、その KB を使用すると、IPv4 が IPv6 よりも優先順位が高いことを示すエントリをここに追加できます。
注記:互換性の問題が発生していない限り、この動作を上書きする理由はありません。Windows Server でこの設定を変更すると、メール サーバーが壊れてしまうため、慎重に処理する必要があります...
答え2
のループバックインターフェースイーサネット インターフェイスとは独立して存在します。
合併症がなくてもIPv62つの異なるアドレスが存在することになります。
ループバックIPv4アドレス: 127.0.0.1
イーサネットインターフェースの IPv4 アドレス: 192.168.0.10
ループバック インターフェイスは、実際のハードウェアから離れた別のソフトウェア レイヤーにある可能性があります。たとえば、特定のイーサネット インターフェイス ドライバーに何らかの形で依存するとは思えません。
答え3
ローカルホストと IP アドレスは同じものではありません。
localhost は、システムにリンクされている特別なソフトウェア専用の IP アドレスです。localhost、つまり 127.0.0.1 はループバック アドレスです。常にシステムを指し、コンピューターからのみアクセスできます。このルーティングは OS レベルで行われ、NIC から出ることはありません。そのため、ネットワークに到達する可能性はありません。
自分のIPアドレスにpingを実行するのも同様ですが、自分のIPアドレスであることを確認する必要があるため、ネットワークスタック全体が関与する可能性があります。正しくルーティングする...
効果は同じになるはずですが、違いがある場合もあります。
たとえば、ネットワーク ケーブルを外します。静的 IP アドレスに ping を実行します。ホストへのルートがない、またはその他のエラーが表示される場合があります。次に、localhost または 127.0.0.1 に ping を実行すると、正常に動作します。
答え4
「Localhost」エイリアスは IPv6 ループバックに解決されているように見えますが、明示的に IPv4 アドレスを使用すると、明らかに解決されません。