问题标签 [ipv6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
architecture - 既然 IPv6 将取代 IPv4,我应该开发我的新应用程序来支持它吗?
我使用多种语言和几个平台开发应用程序。据我所知,IPv6 将在未来 5 到 10 年内成为主流,一些 ISP 甚至提供与 IPv6 互联网的直接连接。在我的专用网络上,所有机器都具有双栈连接,并尽可能使用 IPv6 相互通信。
我的问题是:我的新应用程序应该写成支持 IPv6 吗?如果是这样,我需要考虑哪些事情?现在支持 IPv6 有什么缺点吗?
我不知道这是否会有所帮助或伤害,但这里有一些更具体的细节可能会指导答案:
我的应用程序将在 Windows/Linux/Mac 上运行,它包含一个为每个平台单独编写的特定于平台的组件,以及一个用解释语言编写的通用“核心”组件。
我的应用程序应该能够定位在三个平台中的任何一个上运行的自身的其他实例,并支持任意两台机器之间的 TCP 和 UDP。
c - 链接范围 IPv6 多播数据包突然无法在 MacBook Pro 上路由?
这是一个有点晦涩的问题,但我很困惑,我想也许外面的人可能对这个问题有更多的线索。
我的同事几个月来一直在他的 MacBook Pro 上成功运行一个使用 IPv6 多播的内部应用程序,但今天 Mac 决定停止路由多播数据包。特别是,程序会打印此错误:
SendDataUDP(ff02::bead:cede:deed:feed@4) 在网络接口 [名称=[en0] 描述=[] IP=[fe80::222:41ff:fe21:dfd4@4] 网络掩码=[ffff: ffff:ffff:ffff::] Broadcast=[::]] (errno=65/没有到主机的路由)。
...这很好地描述了出了什么问题...它试图将 UDP 数据包发送到所示的 IP 地址,并且 send() 失败并显示 errno=EHOSTUNREACH。
我不明白的是,什么可能导致 IPv6 链接范围多播地址“无法访问”?如果我对链接范围多播的理解是正确的,则数据包只需从本地以太网端口(在这种情况下为 en0,它已启动并在该机器上工作)发出。
我是否缺少多播的某些方面,或者他的机器只是坏了?他说他没有改变任何东西,只是神秘地停止了工作。
c - 当 getifaddrs() 结果发生变化时,是否有通知机制?
在启动时,我的程序调用 getifaddrs() 来找出哪些网络接口可用于链路本地 IPv6 多播。尽其所能,但它不能处理在 getifaddrs() 返回后可用网络接口集发生变化的情况。
当网络接口发生变化时,操作系统是否可以通过某种方式通知我的程序,以便我可以再次调用 getifaddrs() 并更新我的列表?还是我注定每隔几秒就永远轮询一次 getifaddrs() ?
(注意:在 Windows 上,我调用 GetAdaptersAddresses() 而不是 getifaddrs(),但同样的问题也存在)
c# - C# IPv6 服务器错误
我正在尝试在 C# 中创建一个小型 HTTP 服务器,但在使用 IPv6 客户端时遇到了一些问题。我的机器上有 IPv6 支持,但是当我尝试创建监听套接字时它失败了。
我在这里做错了什么?
代码抛出此异常:系统在尝试在调用中使用指针参数时检测到无效的指针地址
编辑:
堆栈跟踪:
在 System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) 在 System.Net.Sockets.Socket.Bind(EndPoint localEP) 在 TroutServer.Trout.Start(Int32 端口) 在 C:\Users\Chris\Documents \Visual Studio 2008\Projects\TroutServer\trout\trout.cs:第 62 行
类型是 SocketException
c# - 在同一端口上支持 IPv6 和 IPv4 的 C# 服务器
是否有可能拥有一个同时监听和接受 IPv6 和 IPv4 客户端的 Socket?我在 C# 中使用了 IPv6 套接字,希望它会自动向后兼容,但 IPv4 客户端会导致无效的 IP 地址异常。
java - 是否有新的 Java 库支持 Solaris 上的 IPv6?
我正在执行以下操作来查找 Internet 地址。它在 resolv.conf 中有 IPv6 名称服务器的 Solaris 机器上特别失败。在具有 IPv6 名称服务器的 Windows 机器和仅 IPv4 的 Solaris 机器上运行良好。从返回的错误来看,当出现 IPv6 名称服务器时,Java“getAttributes”行似乎在内部(某处很深)出现解析问题。我的问题是,“当使用 IPv6 时,有没有一种方法可以更好地在 Solaris 上正常工作?”
networking - 确定何时尝试 IPv6 连接以及何时使用 IPv4
我正在开发一个连接到用户指定的公共服务器的网络客户端程序。如果用户给我一个主机名来连接,该主机名同时具有 IPv4 和 IPv6 地址(通常是一个同时具有A
和AAAA
记录的 DNS 名称),我不确定我应该如何决定应该连接到哪个地址。
问题是机器同时支持 IPv4 和 IPv6 是很常见的,但只能通过 IPv4 进行全球连接。最常见的情况是仅配置 IPv6 链路本地地址。目前我能想到的最好的选择是:
- 首先尝试 IPv6 地址 - 如果连接失败,请尝试 IPv4 地址;或者
- 只需让用户将其指定为配置设置(“prefer_ipv6”与“prefer_ipv4”)。
我可以看到选项 1 的问题是连接可能不会立即失败 - 可能需要很长时间才能超时。
java - 在 Windows 上绑定 IPv6 服务器套接字
我尝试使用以下片段在 Windows 7 上的 Java 1.6 中绑定 IPv6 服务器套接字:
不幸的是,这失败了 IOException: Address family not supported by protocol family: bind
我知道编写 Java 时假设 Windows 使用单独的 v4 和 v6 堆栈(即使 Windows 7 没有),因此为 v4 和 v6 绑定单个套接字是行不通的。但是,这不是我想要做的:我只想将 v6 套接字绑定到任意地址(即 ::)。
编辑:它在 Vista 上也失败了。
我究竟做错了什么?
java - IPv6 地址验证和规范化
您为此使用了哪些库?它们之间的兼容性如何?还是您编写了自己的解析例程?
我对 Java、C++、Python 和 JavaScript 的相互兼容的实现特别感兴趣,它们支持:
- 零压缩(“
::
”) - IPv4 映射地址 ("
::ffff:123.45.67.89
") - 规范化(包括缩写形式,以供人类阅读)
- CIDR 样式的网络掩码(如
/64
末尾的“”)