💡
原文中文,约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才修复。
➡️