Node.js源码中,为什么会首选binding ipv6 ? 【精简小知识】

2020-05-09 17:31:50 浏览数 (1)

​写这篇文章的起因,在阅读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差异

  1. 双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核心源码解析,觉得写得不错,可以点个在看,谢谢

0 人点赞