Я пытаюсь обернуть голову вокруг сетей IPV6. У меня статический IPV4 от моего провайдера, и когда я создаю приложения, я использую то, что, как я предполагаю, является "жестко закодированным" адресом. Как ниже:

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

Всегда ли IPV6-адреса динамические? Или чтобы переключиться на сеть IPV6, мне нужно было бы получить статический адрес IPV6 для жесткого кода в моем приложении? В любом случае мне понадобится какой-нибудь метод для последовательного и надежного подключения к моему серверу ...

Я немного знаю о DNS. Вы жестко закодировали "маршрут" к DNS, который возвращается с текущим адресом вашего сервера IPV6, который может быть динамическим?

Вот DNS-адреса Google IPV6:

Адреса Google Public DNS IPv6:

2001:4860:4860::8888

2001:4860:4860::8844

Я думаю, мне нужно было бы получить доменное имя ... и затем "жестко кодировать" DNS-имя IPV6 в мое приложение; который затем передал бы мое доменное имя, чтобы быть переведенным в IPV6. Это правильно?

2 ответа2

2

Я использую то, что я предполагаю, является "жестко закодированным" адресом

Да. "Жесткое кодирование" означает помещение информации непосредственно в ваш код, вместо использования каких-либо косвенных средств (таких как DNS или простой файл конфигурации). Это общий термин и не ограничивается IP или даже сетью.

Если ваши вызовы connect() относятся непосредственно к IP-адресу - тогда да, вы жестко задаете адрес. Если адрес когда-либо изменится, вам придется перекомпилировать программу.

Всегда ли IPV6-адреса динамические?

Нет. И IPv4, и IPv6 следуют одним и тем же общим правилам:

  • Предоставление вашим провайдером статических или динамических адресов полностью зависит от того, с каким контрактом вы с ним заключаете (в том числе план, который вы выбираете и т.д.)

    Для жилых и небольших бизнес-соединений адреса распределяются провайдером в соответствии с политиками провайдера. Вы можете получить один публичный IPv4-адрес или дюжину, вы можете получить IPv6 /64 или /48, эти распределения могут быть статическими или они могут меняться каждый день - все зависит от контракта, который вы подписали с провайдером.

  • То, как вы назначаете адреса своим серверам и другим компьютерам в вашей локальной сети, полностью зависит от вас. Если вы хотите, чтобы адрес устройства оставался статичным, вы можете это сделать.

    Это правда, что динамическое назначение через SLAAC в IPv6 немного более распространено, чем DHCP в IPv4. Однако «динамический» не означает, что адрес изменится. Действительно, с IPv6 SLAAC одно и то же устройство обычно будет всегда выбирать один и тот же адрес навсегда.

    Наконец, ничто не мешает вам вручную настроить фиксированный адрес для устройства. Это совершенно нормально в IPv6.

Или чтобы переключиться на сеть IPV6, мне нужно было бы получить статический адрес IPV6 для жесткого кода в моем приложении?

Вы не должны жестко задавать конкретные адреса в вашем приложении.

Я думаю, я больше спрашивал о том, как избежать жесткого кодирования адреса в приложении

Разместите их где-нибудь за пределами приложения. Два наиболее распространенных метода:

  • использование DNS - то есть настройка доменного имени для указания на ваш сервер;

  • предоставление механизма конфигурации - такого как файл .ini, или реестр, или что-то еще полностью.

Я думаю, что мне нужно получить доменное имя ... а затем "жесткий код" DNS-имя IPV6 в моем приложении

Да. Вы все еще что-то жестко программируете (доменное имя), но, по крайней мере, доменное имя с меньшей вероятностью изменится - тогда как IP-адрес сервера может иметь много причин для изменения. (Например, сервер может быть перемещен в другое место, или вся его сеть может быть реструктурирована или переключена на другого интернет-провайдера.)

Хотя я бы сказал, что не существует такой вещи, как «DNS-имена IPv6». Доменное имя может относиться как к адресам IPv4, так и к адресам IPv6 одновременно, и оно может даже иметь несколько адресов одного типа.

Хорошо написанная программа попробует все найденные адреса (например, с помощью функции getaddrinfo ()). Это позволяет ему работать как в сетях только с IPv4, так и только с IPv6, а также в смешанных сетях.

1

Вопрос о доступности статического IPv6 лучше адресовать вашему провайдеру. Не все интернет-провайдеры поддерживают их, в то время как для других статическое назначение IPv6 автоматически сопровождается статическим назначением IPv4.

Я отмечаю, что, если доступно, статический IPv6 является только делегированием префикса. Если у вас есть маршрутизатор, совместимый с IPv6, он может принять делегирование этого префикса и впоследствии назначить или разрешить назначать статические адреса IPv6 устройствам, подключенным к вашей сети.

Если под "жестким кодированием" вы подразумевали использование короткого имени вместо ввода длинной строки IPv6, вы можете определить его как псевдоним через файл hosts. Смотрите сообщение StackOverflow
IPv6 в файле хостов Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .