关于 ipv4 和 ipv6,硬编码是什么?

关于 ipv4 和 ipv6,硬编码是什么?

我正在尝试理解 IPV6 网络。我的 ISP 为我提供了一个静态 IPV4,当我构建应用程序时,我使用我假设的“硬编码”地址。如下所示:

//The * are replaced with my static IPV4 address
network_connect_raw(client, "**.**.**.***", 8000);

IPV6 地址总是动态的吗?或者要切换到 IPV6 网络,我是否需要获取静态 IPV6 地址并将其硬编码到我的应用程序中?无论哪种方式,我都需要某种方法来持续可靠地连接到我的服务器...

我对 DNS 了解一点。您是否对 DNS 进行硬编码以返回您的 IPV6 服务器的当前地址(该地址可能是动态的)?

以下是 Google 的 DNS IPV6 地址:

Google 公共 DNS IPv6 地址如下:

2001:4860:4860::8888

2001:4860:4860::8844

我认为我需要获取一个域名...然后将 DNS IPV6 名称“硬编码”到我的应用程序中;然后提交我的域名以将其转换为 IPV6。这样对吗?

答案1

我使用我认为是“硬编码”的地址

是的。“硬编码”是指将信息直接放入代码中,而不是使用一些间接方法(例如 DNS 或简单的配置文件)。这是一个通用术语,不仅限于 IP,甚至网络。

如果您的 connect() 调用直接引用 IP 地址,那么是的,您正在对地址进行硬编码。如果地址发生变化,您将不得不重新编译程序。

IPV6 地址总是动态的吗?

不是。IPv4 和 IPv6 都遵循相同的一般规则:

  • 您的 ISP 是否为您提供静态或动态地址完全取决于您与他们签订的合同(包括您选择的计划等)。

    对于住宅和小型企业连接,地址由 ISP 根据其政策分配。您可能会获得一个或十几个公共 IPv4 地址,可能会获得一个 IPv6 /64 或一个 /48,这些分配可能是静态的,也可能每天都会变化 - 这一切都取决于您与 ISP 签订的合同。

  • 如何为 LAN 中的服务器和其他计算机分配地址完全取决于您。如果您希望设备的地址保持静态,您可以这样做。

    确实,IPv6 中通过 SLAAC 进行动态分配比 IPv4 中的 DHCP 更常见。但是,“动态”并不意味着地址会改变。事实上,使用 IPv6 SLAAC,同一台设备通常会永远选择相同的地址。

    最后,没有什么可以阻止您为设备手动配置固定地址。 在 IPv6 中这样做完全正常。

或者为了切换到 IPV6 网络,我是否需要获取静态 IPV6 地址并将其硬编码到我的应用程序中?

首先,你不应该在应用程序中硬编码特定的地址。

我想我更多的是在问如何避免将地址硬编码到应用程序中

将它们放在应用程序之外的某个地方。最常见的两种方法是:

  • 使用 DNS – 即配置域名指向您的服务器;

  • 提供配置机制——例如.ini 文件、注册表或其他东西。

我认为我需要获取一个域名...然后将 DNS IPV6 名称“硬编码”到我的应用程序中

是的。你仍在进行硬编码某物(域名),但至少域名不太可能发生变化 - 而服务器的 IP 地址可能因多种原因而发生变化。(例如,服务器可能会被移动到其他位置,或者其整个网络可能会重组,或者切换到不同的 ISP。)

尽管我想说,没有“DNS IPv6 名称”这样的东西。域名可能同时引用 IPv4 和 IPv6 地址,甚至可能具有多个相同类型的地址。

编写良好的程序将尝试全部它找到的地址(例如借助 getaddrinfo() 函数)。这使它能够在纯 IPv4 和纯 IPv6 网络中以及混合网络中工作。

答案2

静态 IPv6 的可用性问题最好由您的 ISP 来解决。并非所有 ISP 都支持它们,而对于其他 ISP 来说,静态 IPv6 分配会自动附带静态 IPv4 分配。

我注意到,如果可用,静态 IPv6 只是一个前缀委派。如果您有兼容 IPv6 的路由器,那么它可以接受该前缀委派,随后为连接到您网络的设备分配或允许您分配静态 IPv6 地址。

如果您所说的“硬编码”是指使用短名称而不是输入 IPv6 长字符串,则可以通过 hosts 文件将其定义为别名。请参阅 StackOverflow 帖子
Windows 主机文件中的 IPv6

相关内容