发送数据localhost比127.0.0.1慢很多(win10 localhost 解析为::1 的解决办法)

博客内容讲述了在Windows环境下,由于IPv6的优先级高于IPv4导致localhost解析慢的问题。通过调整IPv6的前缀策略,可以提高IPv4的优先级,从而加快对`127.0.0.1`的访问速度。文章提供了查询和设置IPv6优先级的命令,以解决本地服务启动慢的状况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动一个tornado识别验证码服务,发送用
url = “http://127.0.0.1:19952/captcha/v1”
url = “http://localhost:19952/captcha/v1”
localhost要4秒钟,而127.0.0.1只要0.006秒钟,也就是几毫秒

在这里插入图片描述在这里插入图片描述
ping localhost解析出来的是IPV6的::1,原因是windows有个优先解析列表,当ipv6的优先级高于ipv4时,就会出现这种情况。
输入命令 netsh interface ipv6 show prefixpolicies,查询ipv6优先级

优先顺序    标签   前缀
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        35      4  ::ffff:0:0/96
        30      2  2002::/16
         5      5  2001::/32
         3     13  fc00::/7
         1     11  fec0::/10
         1     12  3ffe::/16
         1      3  ::/96

请注意,IPv6地址(:: / 0)优先于IPv4地址(:: / 96,:: ffff:0:0/96),因此我们可以制定策略,使IPv6不会比任何IPv4地址有利。其中,标签表示优先级,0表示优先级最高,依次类推。

现在需要设置使::/96、::ffff:0:0/96的优先级高于::/0和::1/128,输入下列命令设置优先级:

netsh int ipv6 set prefix ::/96 50 0
netsh int ipv6 set prefix ::ffff:0:0/96 40 1
netsh int ipv6 set prefix 2002::/16 35 2
netsh int ipv6 set prefix 2001::/32 30 3
netsh int ipv6 set prefix ::1/128 10 4
netsh int ipv6 set prefix ::/0 5 5
netsh int ipv6 set prefix fc00::/7 3 13
netsh int ipv6 set prefix fec0::/10 1 11
netsh int ipv6 set prefix 3ffe::/16 1 12
### nslookup 命令执行结果显示特定服务器地址的原因 当 `nslookup` 显示 Server 为 127.0.0.1 Address: 127.0.0.1#53 的时候,这表明客户端正在查询位于本机上的 DNS 服务[^4]。通常情况下,这意味着本地安装了一个 DNS 服务器(如 BIND),或者是某些配置使得 DNS 查询被重定向到了本地。 #### 可能的原因 - **本地 DNS 配置**:如果 `/etc/resolv.conf` 或者其他网络管理工具(比如 NetworkManager)指定了 127.0.0.1 作为首选 DNS 服务器,则所有的 DNS 请求都会发往这个地址。 - **hosts 文件影响**:即使没有运行实际的 DNS 服务,在 `/etc/hosts` 中定义了 `localhost` 对应于 127.0.0.1 后,也会导致类似的输出结果,因为这是标准做法之一用于确保 `localhost` 总是指向回环接口[^1]。 - **应用程序级代理或转发器**:有时应用层面可能会设置一个内部使用的轻量级 DNS 转发程序监听在 127.0.0.1 上面,从而改变系统的默认行为。 #### 解决方法 要更改此情况并让 `nslookup` 使用外部公共 DNS 服务器来进行域名解析,可以通过修改 `/etc/resolv.conf` 来指定新的 DNS 服务器: ```bash nameserver 8.8.8.8 # Google Public DNS nameserver 8.8.4.4 # Secondary server from Google ``` 另外一种方式是在不改动全局配置的情况下临时测试不同的 DNS 设置,可以在命令行中直接给定目标名称服务器: ```bash nslookup example.com 8.8.8.8 ``` 这样就可以绕过任何可能存在的本地 DNS 服务而直接访问所选的服务提供商进行查询操作。 对于更复杂的场景下想要彻底解决问题而不是仅仅规避它的话,还需要检查是否有不必要的本地 DNS 服务正在运行,并考虑停止这些服务除非确实需要它们;同时确认所有相关联的应用服务都指向正确的上游 DNS 服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值