【问题标题】:using IPv6 and IPv4 at the same application在同一应用程序中使用 IPv6 和 IPv4
【发布时间】:2023-03-06 22:01:01
【问题描述】:

我有一个使用 MG Soft SDK 用 C++ 编写的 SNMP 管理器。到目前为止,它只使用 IPv4 发送 Get 和接收 Trap。现在应连接第二个 SNMP 代理,但这个代理具有 IPv6。一个应用程序是否可以使用同一网卡同时连接到一个使用 IPv4 的远程系统和另一个使用 IPv6 的远程系统?还是我需要 2 个网卡,一个用于 IPv4,另一个用于 IPv6?

【问题讨论】:

  • IPv4 和 IPv6 是完全独立的协议,彼此不知道。您可以运行各种网络协议,例如IPv4、IPv6、IPX、AppleTalk 等,同时在同一个网络接口上。
  • 真正的问题是“MG Soft SDK”(无论是什么)是否提供了足够干净的 API 来同时拥有两者。是否有一个标签会引起 MG Soft SDK 专家的注意?
  • 鉴于如果不跳过“评估我们的产品”圈子,甚至无法下载 SDK 标头,我怀疑您会得到比“一个 NIC,两个连接(IPV4 和 IPV6)更好的答案很好,除非 API 真的很糟糕”。如果 API 很糟糕,第二个 NIC 可能也无济于事 :-)
  • 感谢您的回答。这对我有帮助。 sdk if 用于 SNMP 实现,它支持 v4 和 v6
  • 一种同时支持 IPv4 和 IPv6 的便捷方法(在具有双栈功能的操作系统上,也就是说大多数操作系统上)是将您的程序移植到使用 IPv6,然后执行setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, &myFalseValue, sizeof(myFalseValue)) on您的 IPv6 套接字。现在您有一个可以连接到任何 IPv6 地址(在这种情况下它将使用 IPv6)或任何 IPv4 映射的 IPv6 地址的套接字(在这种情况下,该套接字将在内部使用 IPv4,但对于您的程序来说仍然看起来像一个 IPv6 套接字) .这大大简化了您的程序,因为您只需要一个代码路径而不是两个。

标签: c++ ipv6 ipv4


【解决方案1】:

是的,这是可能的。您只需要在应用程序中打开 2 个单独的连接 - 一个使用 IPv4,另一个使用 IPv6(当然这需要您在应用程序中实现对 IPv4 和 IPv6 协议的支持)。

它的工作方式与您想从同一个应用程序中打开多个 IPv4 连接的方式相同。

例如,网络浏览器会为您访问的单独网页打开单独的连接。当然,它们可以使用 IPv4 连接到一个 Web 服务器,同时通过 IPv6 连接到另一个 Web 服务器。

【讨论】:

  • 实际上,网络浏览器通常会在每个页面打开多个连接,有的可以是 IPv4,有的则是同一页面的 IPv6。不同的 IP 版本可以获取不同的页面元素。有浏览器插件会告诉你。
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2015-09-16
  • 2014-07-05
相关资源
最近更新 更多