AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 430207
Accepted
Helio
Helio
Asked: 2018-03-15 07:54:10 +0800 CST2018-03-15 07:54:10 +0800 CST 2018-03-15 07:54:10 +0800 CST

ping localhost 和 ping 127.0.0.1 有什么区别?

  • 772

执行以下操作以禁用 ping 回复后:

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

我从 ping localhost 与 127.0.0.1 获得不同的结果

# 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

为什么这些结果不同?

ping sysctl
  • 3 3 个回答
  • 18218 Views

3 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2018-03-15T08:22:07+08:002018-03-15T08:22:07+08:00

    该ping命令显示将名称解析到的地址。在这种情况下,它解析为 IPv6 本地主机地址,::1. 另一方面,127.0.0.1它是一个 IPv4 地址,因此它明确ping使用 IPv4。

    您使用的sysctl仅影响 IPv4 ping,因此您会收到 的回复::1,但不会收到127.0.0.1.

    您从解析中获得的地址localhost取决于您的 DNS 解析器的设置方式。localhost可能设置在 中/etc/hosts,但理论上您可以从实际的名称服务器中获取它。


    至于如何丢弃 IPv6 ping,您可能需要查看ip6tables,因为 IPv6 似乎没有类似sysctl的。或者只是完全禁用 IPv6,如果您没有在网络中使用它。(当然,这不是一个非常具有前瞻性的想法,但如果你目前没有使用它,它是可行的。)

    • 62
  2. Kiwy
    2018-03-15T08:14:07+08:002018-03-15T08:14:07+08:00

    127.0.0.1:127.0.0.1
    是大多数系统的默认环回。环回地址是系统用来验证操作系统的网络堆栈的地址。
    IPv4 的环回地址可以采用子网中的任何127.0.0.0/8
    值 IPv6 的环回地址可以采用子网中的::1/128
    ping任何值,如果您的网络堆栈在您的操作系统上运行,那么这些范围内的任何值都应该有效。

    localhost:
    localhost是一个主机名,这是一种域名,但在您自己的机器上是本地的。
    默认情况下,此主机名指向您的 IPv4 和 IPv6 环回,通常为127.0.0.1或::1.

    localhost可以通过编辑文件轻松更改地址/etc/hosts。
    如果您的系统使用该服务systemd-resolved,该服务将处理 localhost 的解析方式。
    根据以下文件systemd-resolved:

    主机名“localhost”和“localhost.localdomain”(以及任何以“.localhost”或“.localhost.localdomain”结尾的主机名)被解析为 IP 地址127.0.0.1和::1

    ping
    当您尝试 ping 主机名或域名时,它会要求操作系统解析此主机名或域名。在您的情况下,您禁用icmpv4但 localhost 被解析为您的 IPv6 环回和您的 IPv4 环回,但只有您的 IPv6 环回答案。
    不同之处在于,在一种情况下,您尝试 ping 一个 IP,而在另一种情况下,您 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
    
    • 34
  3. Michael Hampton
    2018-03-15T09:08:01+08:002018-03-15T09:08:01+08:00

    本地主机有两个地址,一个 IPv6 地址 ::1 和一个 IPv4 地址 127.0.0.1。

    IPv6 是默认协议,因此 ::1 始终优于 127.0.0.1。这就是您在请求 ping localhost 时 ping ::1 的原因。

    至于为什么您可以 ping ::1 但无法 ping 127.0.0.1,您的 sysctl 仅禁用了 IPv4 的 ping,但没有禁用 IPv6。据我所知,没有相应的 sysctl 可以禁用 IPv6 的 ping,但如果您确实需要,您可以在防火墙中禁用它(当然无论如何都不建议禁用它)。

    • 9

相关问题

  • Fedora /etc/sysctl.conf 在启动时未加载

  • modprobe 和 sysctl -w 在设置系统参数方面的区别?

  • 尽管我更新了 sysctl,但可能的连接数少于 1000

  • ping:只显示结果

  • 为什么 ping 解析到与 traceroute 不同的地址?和猞猁?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve