Что такое жесткое кодирование в отношении ipv4 и ipv6?

504
Pfap

Я пытаюсь обернуть голову вокруг сетей 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. Это правильно?

0
Никогда не программируйте статический адрес в своих программах, независимо от того, IPv4 или IPv6. Сделайте его настраиваемым (как параметр командной строки, запись в файле конфигурации и т. Д.) И разрешите как имена (например, «www.google.com»), так и числовые адреса. Т.е. сначала поиск DNS. Ваша ОС, какой бы она ни была, имеет библиотеки для этого. dirkt 6 лет назад 1

2 ответа на вопрос

2
grawity

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

Да. «Жесткое кодирование» означает помещение информации непосредственно в ваш код, вместо использования каких-либо косвенных средств (таких как 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, а также в смешанных сетях.

Мне нужно будет заглянуть в SLAAC и вручную настроить фиксированный адрес IPV6. Насколько хорошо написанная программа пробует все найденные адреса; разве большинство приложений не подключаются к очень специфическим сервисам и поэтому требуют только 1 адрес на сервис? Pfap 6 лет назад 0
Нет. Опять же, как я уже говорил, если вы хотите предложить как IPv6, так и IPv4, это уже два адреса - по одному для каждого типа. Одна и та же услуга может фактически предоставляться несколькими компьютерами, что приводит к нескольким адресам. (Это элементарная форма балансировки нагрузки, также называемая круговым механизмом DNS). grawity 6 лет назад 0
1
harrymc

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

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

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

Правильно, потому что платить за то, что так много, как адреса IPV6, нелогично. Pfap 6 лет назад 0
Я думаю, я больше спрашивал о том, как избежать жесткого кодирования адреса в приложении. Pfap 6 лет назад 0
Вы можете дать ему псевдоним через файл `hosts`. harrymc 6 лет назад 0
Добавил больше информации в мой ответ. harrymc 6 лет назад 0