Node.js 18升级:双栈协议踩坑

Node.js 18升级:双栈协议踩坑

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

本文讨论了使用nc探测本地服务时的奇怪现象和与IPv4和IPv6地址相关的问题。作者发现在升级Node.js时无法连接到后端服务,原因是服务只监听了IPv4地址,而localhost通常同时解析为IPv6和IPv4地址。文章还介绍了127.0.0.1和::1的区别,以及0.0.0.0和::的含义。此外,作者还讨论了net.ipv6.bindv6only参数的作用和MySQL在使用localhost时的特殊情况。最后,作者提到了Node.js在17版本之后出现的快乐眼球算法的问题。

🎯

关键要点

  • 使用nc探测本地服务时可能出现连接拒绝的现象。
  • Node.js升级后,发现后端服务无法连接,原因是服务只监听IPv4地址。
  • localhost同时解析为IPv6的::1和IPv4的127.0.0.1。
  • IPv6优先于IPv4进行连接,如果IPv6失败则回落到IPv4。
  • 127.0.0.1是标准的IPv4环回地址,而::1是IPv6的环回地址。
  • 0.0.0.0表示本机所有的IPv4地址,::表示本机所有的IPv6地址。
  • net.ipv6.bindv6only参数控制IPv6监听行为,默认值为0。
  • MySQL在使用localhost时通过UNIX套接字连接,而不是TCP/IP。
  • Node.js在17版本后出现了快乐眼球算法的问题,导致IPv6连接失败。
  • Node.js 16之前的版本支持快乐眼球算法,17及之后的版本存在问题,直到20才修复。
➡️

继续阅读