Що таке жорстке кодування стосовно ipv4 та ipv6?


0

Я намагаюся обернути голову навколо мереж IPV6. У мене є статичний IPV4 від мого isp, і коли я будую додатки, я використовую те, що я припускаю, це "жорстко закодована" адреса. Як і нижче:

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

Чи завжди адреси IPV6 динамічні? Або для переходу на мережу IPV6 мені потрібно отримати статичну адресу IPV6 для жорсткого коду до моєї програми? У будь-якому випадку мені знадобиться якийсь метод, щоб послідовно і надійно підключитися до мого сервера ...

Я трохи знаю про DNS. Це ви твердий код "маршруту" до DNS, який повертається з поточною адресою для вашого сервера IPV6, яка може бути динамічною?

Ось DNS-адреси IPV6 від Google:

IPv6 адреси Google Public DNS:

2001: 4860: 4860 :: 8888

2001: 4860: 4860 :: 8844

Я думаю, що мені потрібно буде отримати доменне ім’я ... а потім "жорсткий код" ім'я DNS IPV6 у своїй програмі; який потім надішле моє доменне ім’я для перекладу в IPV6. Це правильно?


1
Ніколи не важко кодуйте статичну адресу у своїх програмах, незалежно від того, чи це IPv4 чи IPv6. Зробіть його налаштованою (як опція командного рядка, запис файлу конфігурації чи будь-що інше) та дозвольте як імена (як www.google.com), так і числові адреси. Тобто спочатку зробіть пошук DNS. Ваша ОС, яка б вона не була, має бібліотеки для цього.
dirkt

Відповіді:


2

Я використовую те, що я припускаю, це "жорстко закодована" адреса

Так. "Жорстке кодування" означає введення інформації безпосередньо у ваш код, замість того, щоб використовувати деякі непрямі засоби (наприклад, DNS або простий файл конфігурації). Це загальний термін і не обмежується IP, або навіть мережевими мережами.

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

Чи завжди адреси IPV6 динамічні?

Ні. І IPv4, і IPv6 дотримуються однакових загальних правил:

  • Від того, чи надає вам провайдер статичні або динамічні адреси, повністю залежить від того, який контракт ви підписуєте з ними (включаючи, який план ви обираєте тощо)

    Для житлових та менших ділових зв'язків адреси присвоюється Інтернет-провайдером відповідно до політики провайдера. Ви можете отримати одну загальнодоступну IPv4-адресу або десяток, ви можете отримати IPv6 / 64 або a / 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 адреса на послугу?
Пфап

Ні. Знову ж, як я вже згадував, якщо ви хочете запропонувати і IPv6, і IPv4, це вже дві адреси - по одній для будь-якого типу. Фактично одну і ту ж послугу можуть надавати декілька машин, що призводить до кількох адрес. (Це рудиментарна форма врівноваження навантаження,
відома

1

Питання про наявність статичного IPv6 краще адресоване вашому Інтернет-провайдеру. Не всі провайдери підтримують їх, тоді як для інших статичне призначення IPv6 автоматично поставляється зі статичним призначенням IPv4.

Зауважу, що за наявності, статичний IPv6 є лише делегуванням префікса. Якщо у вас є маршрутизатор, сумісний з IPv6, він може прийняти цю дефіксацію префікса і згодом призначити або дозволити призначити статичні адреси IPv6 пристроям, підключеним до вашої мережі.

Якщо під "жорстким кодуванням" ви мали намір використовувати коротке ім'я замість того, щоб вводити довгий рядок IPv6, ви можете визначити його як псевдонім через файл хостів. Дивіться публікацію StackOverflow
IPv6 у файлі хостів Windows .


Правильно, тому що платити за те, що так багато, як IPV6-адреси, є протиправним.
Пфап

Напевно, я більше запитував про те, як уникнути жорсткого кодування адреси в програмі.
Пфап

Ви можете надати йому псевдонім через hostsфайл.
harrymc

До моєї відповіді додано більше інформації.
harrymc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.