写这篇文章的起因,在阅读Node.js源码的关键环节,看到了这行代码
意思就是调用listen函数监听端口的最终是调用了这个函数
借此我找到了CVTE技术经理,张师傅,张师傅给我的回复:
于是我点开了翻译,确定了一下大概意思:
意思是说,ipv4套接字无法接受ipv6包
让我们一起看看某度是怎么说ipv4和ipv6的区别的:
1.地址空间不同,IPv4中规定IP地址长度为32,而IPv6中IP地址的长度为128
2.路由表大小不同,IPv6的路由表相比IPv4的更小。
3.IPv6的组播支持以及对流的支持要强于IPv4。
4.安全性不同,IPv6的安全性更高,在使用IPv6的网络时,用户可对网络层的数据进行加密。
5.协议扩充不同,IPv6允许协议进行扩充而IPv4不允许。
打开wireshark抓包
我们看ip头部的信息,0100代表ipv4
0110表示IPv6
当IPv4接口接收到IPv6的数据包的时候会自动丢弃。在开启IPv6协议的路由器上会自动识别IP数据包的版本,并作需要处理。对于一般的电脑网卡,只要开启IPv6协议就可以处理IPv6数据包。
这也印证了那句英语的后半句:
这样你应该就搞明白了,为什么源码中会是这样写了呢。
目前ipv4和ipv6实现双协议栈通信的三种方式:
ipv4与ipv6差异
- 双IP层技术
双IP层是保持IPv6与IPv4互操作性的最直接方式。适用于Internet有IPv4向IPv6过渡的前期。具有双IP层的节点成为IPv4/IPv6节点。它具有两个IP协议的完整实现。
2. 隧道技术
隧道技术适用于Internet有IPv4向IPv6过渡的中期。其原理是两个IPv6的网络之间的中间网络的多协议路由器接收到源主机的IP包时,将其放入中间网络层数据包在和域中,当其到达中间网络另一端多协议路由器时再恢复源IP包并转发到目的主机,这样整个中间网络就像一条隧道。
3. 报头翻译技术
当Internet中只有极少数IPv4节点时(过渡阶段后期),报头翻译技术可以保持IPv6与IPv4节点间的通讯。向IPv4节点发送消息时,路径上最后一个IPv6/IPv4路由器发现目的地址是IPv4映射地址则进行报头翻译,将IPv6报头替换成IPv4报头,并转发到目的IPv4节点。
接下来,我将会写webAssebmly在项目中的实践、Node.js核心源码解析,觉得写得不错,可以点个在看,谢谢