ping localhostとping 127.0.0.1の違いは何ですか?

ping localhostとping 127.0.0.1の違いは何ですか?

ping応答を無効にしたら、次のコマンドを実行します。

# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p

localhostと127.0.0.1をpingすると、他の結果が表示されます。

# ping -c 3 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.101 ms

--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.047/0.072/0.101/0.022 ms

ping 127.0.0.1 失敗:

ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2032ms

なぜ結果が違うのですか?

答え1

このpingコマンドは、名前が解決されるアドレスを表示します。この場合、IPv6 localhostアドレスで解決されます::1。一方、127.0.0.1はIPv4アドレスなので、明示的にpingIPv4を使用します。

使用sysctlしている製品はIPv4 pingにのみ影響するため、応答を受け取りますが、::1応答を受け取ることはできません127.0.0.1

確認によって取得されるアドレスは、localhostDNS リゾルバがどのように設定されたかによって異なります。localhostに設定されている可能性がありますが、/etc/hosts理論的には実際のネームサーバーからインポートできます。


ip6tablesIPv6 pingを削除する方法については、IPv6と似ていないようですので、確認してみることをお勧めします。sysctlまたは、ネットワークで IPv6 を使用していない場合は、IPv6 を完全に無効にします。 (もちろん、これは非常に未来志向のアイデアではありませんが、現在使用していない場合は実行可能です。)

答え2

127.0.0.1:
127.0.0.1は、ほとんどのシステムではデフォルトのループバックです。ループバックアドレスは、システムがオペレーティングシステムのネットワークスタックを検証するために使用するアドレスです。
IPv4のループバックアドレスは、サブネットの任意の値を持つことができます。127.0.0.0/8
IPv6のループバックアドレスは、サブネットの任意の値を持つことができます。::1/128
pingネットワークスタックがオペレーティングシステムで実行されている場合、この範囲のすべての値は有効でなければなりません。

ローカルホスト:
localhostドメイン名ですが、自分のコンピュータにローカルなホスト名です。
このホスト名は、デフォルトでIPv4およびIPv6ループバック(通常はまたは127.0.0.1)を指します::1

localhostファイルを編集すると、アドレスを簡単に変更できます/etc/hosts
システムがこのサービスを使用している場合は、systemd-resolvedlocalhostを確認するかのように処理されます。
~によると出荷書類ビーチsystemd-resolved:

ホスト名「localhost」と「localhost.localdomain」(および「.localhost」または「.localhost.localdomain」で終わるすべてのホスト名)はIPアドレスで解決されます127.0.0.1::1

平らな
ホスト名またはドメイン名をpingしようとすると、オペレーティングシステムにホスト名またはドメイン名の解決を要求します。あなたの場合はlocalhostを無効にしましたが、icmpv4localhostはIPv6ループバックとIPv4ループバックとして解決されましたが、IPv6ループバック応答のみが解決されました。
違いは、ある場合はIPに対してpingを試み、別の場合は複数の値を持つことができるホスト名に対してpingを試みることです。

icmpv6を無効にする
IPv6 が不要な場合は無効にすることをお勧めします。これにより、ファイアウォールとサービス構成の面で実行する必要があるすべての作業が倍増します。

sysctl -w net.ipv6.conf.all.disable_ipv6=0

それでもIPv6サポートが必要で、これを避けたい場合は、次のものを使用icmpv6できますip6tables

ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j DROP

答え3

ローカルホストには、IPv6アドレス::1とIPv4アドレス127.0.0.1という2つのアドレスがあります。

IPv6 はデフォルトのプロトコルなので、::1 は常に 127.0.0.1 より優先されます。これが localhost に ping を要求したときにすでに ::1 ping をしている理由です。

:: 1に対してpingを実行できますが、127.0.0.1ではpingを実行できない理由について、sysctlはIPv4のpingのみを無効にし、IPv6では無効にしません。私が知っている限り、IPv6のpingを無効にするためのsysctlはありませんが、必要に応じてファイアウォールで無効にすることができます(無効にすることはお勧めできません)。

関連情報