Предположим, я хочу назначить адреса IPv6 людям из диапазона 2001: 0DB8 ::/32. Большинство из них выдаются последовательно, но некоторые из них не являются последовательными. Эта таблица DB показывает, какие адреса уже были назначены.Вычисление расстояния до следующего доступного IP-адреса
+-----------------------------------------+
| Address |
+-----------------------------------------+
| 2001:0DB8:0000:0000:0000:0000:0000:0001 |
| 2001:0DB8:0000:0000:0000:0000:0000:0002 |
| 2001:0DB8:0000:0000:0000:0000:0000:0003 |
| 2001:0DB8:0000:0000:0000:0000:0000:0009 |
| 2001:0DB8:0000:0000:0000:0000:0F00:0001 |
| 2001:0DB8:0000:0000:0000:0000:0F00:0002 |
+-----------------------------------------+
Обратите внимание, что это редко заполнены - первый 3 будут приняты, то есть 5 доступных адресов, пока следующий не будет принято, то берется разрыв в несколько миллионов адресов, прежде чем другой.
Что я хочу сделать, это назначить пользователям следующий доступный адрес, начиная с начала подсети. В этом случае было бы легко начать с самого начала, обнаружите, что в 2001 году нет записи: 0DB8 :: 4 и использовать ее. Но в конечном итоге следующий доступный адрес может быть в тысячах или миллионах шагов от начала подсети. Прогулка по базе данных по одному адресу за раз была бы плохой идеей.
Я думал о добавлении другого поля к столу так, что каждый адрес указывает на то, как много доступных адресов есть между собой и следующим в списке:
+-----------------------------------------+--------------------+
| Address | Steps to next addr |
+-----------------------------------------+--------------------+
| 2001:0DB8:0000:0000:0000:0000:0000:0001 | 1 |
| 2001:0DB8:0000:0000:0000:0000:0000:0002 | 1 |
| 2001:0DB8:0000:0000:0000:0000:0000:0003 | 6 |
| 2001:0DB8:0000:0000:0000:0000:0000:0009 | 15728632 |
| 2001:0DB8:0000:0000:0000:0000:0F00:0001 | 2 |
| 2001:0DB8:0000:0000:0000:0000:0F00:0003 | |
+-----------------------------------------+--------------------+
, но я не уверен, что мне помогает , Если IP-адрес назначается где-то посередине разреженной секции, мне все равно придется рассчитать, сколько шагов от этого адреса до следующего в последовательности, а затем вернуться к назначенному адресу шкафа перед новым и исправить свои «шаги к следующему addr». Все еще кажется медленным процессом.
Есть ли лучший способ сделать это?
Это почти наверняка ужасный способ назначения IPv6-адреса, чтобы начать с. Я нахожусь ... это просто (плохо задуманное) домашнее задание. –
@MichaelHampton Я искренне заинтересован в том, как вы лучше всего придумаете алгоритм назначения адресов. Вероятно, вне темы в качестве ответа на этот вопрос (поскольку он касается увеличения уже существующей базы данных IPAM), но с нетерпением ждем, чтобы это стало ответом на совершенно новый вопрос. –
@JeremyVisser Вот что такое DHCP для ... –