Сколько места в памяти занимает IP-адрес

Обновлено: 21.11.2024

Эндрю Смит не работает, не консультирует, не владеет акциями и не получает финансирование от какой-либо компании или организации, которые могли бы извлечь выгоду из этой статьи, и не раскрывает никаких соответствующих связей, кроме своей академической должности.

Партнеры

Открытый университет предоставляет финансирование в качестве партнера-основателя The Conversation UK.

Похоже, каждые пять лет появляются новости о том, что цифровое небо рушится. Еще в 2010 и 2015 годах ходили слухи, что в Интернете скоро закончатся IP-адреса. Теперь регулятор европейских интернет-доменов прогнозирует, что оставшиеся 1,91 млн адресатов в регионе, скорее всего, закончатся до 2020 года.

Каждый компьютер и смартфон должен иметь IP-адрес для доступа в Интернет. IP — это сокращение от Интернет-протокола, и, как и ваш почтовый индекс, он должен быть достаточно уникальным, поскольку это гарантирует, что все подключенные устройства могут точно отправлять и получать данные между собой. Вот как устройство, которое вы используете, может просматривать эту статью.

IP-адрес — это уникальный идентификационный код для каждого устройства, имеющего доступ к Интернету. Студия ASAG/Shutterstock

Но когда в 1980-х (да, это было давно) были разработаны IP-адреса, они думали, что создание цифровых адресов длиной 32 числа обеспечит достаточное разнообразие, чтобы у каждого электронного устройства на Земле был свой адрес. Последовательность чисел длиной 32 цифры дает два в степени 32 комбинаций, что позволяет использовать разные интернет-адреса для 4,2 млрд устройств.

В то время этого было более чем достаточно, так как мало кто знал об Интернете. Но в 2019 году в некоторых домах может быть до 20 IP-адресов — по одному на каждое электронное устройство. Сюда входят игровые приставки, смартфоны, умные лампочки, умные колонки, ноутбуки, умные телевизоры и так далее. Эти IP-адреса используются по всей Европе со скоростью 11 в минуту.

Как Интернет продолжает расширяться

Почему я довольно спокойно отношусь ко всему этому? Интернет-адреса, которые заканчиваются, являются адресами «версии 4». Их использование значительно увеличилось, когда Интернет стал популярным среди обычных пользователей с середины 1990-х годов. Но эксперты признали более 15 лет назад, что необходима более совершенная система адресации. Самая новая у нас версия 6. Как вы помните, адреса версии 4 состоят из 32 цифр. В версии 6 их 128. Это дает два в степени 128 комбинаций или 340 282 366 920 938 463 463 374 607 431 768 211 456 адресов. Это равно 340 ундециллионам потенциальных адресов — невероятно большое число.

Электронные устройства все чаще и чаще используют адреса новой версии 6, но все еще существует множество устройств, веб-серверов и технологий интернет-коммуникаций, таких как ваш домашний маршрутизатор, которые используют старую версию 4. Потребуется много времени, чтобы заменить, особенно учитывая количество устройств, уже использующих Интернет.

Нужны ли будут все более и более длинные IP-адреса, чтобы не отставать от Интернета, распространяющегося на новые устройства? Не совсем. Новая технология может перенаправлять интернет-трафик 16 миллионов устройств через один IP-адрес. Скорее всего, ваш домашний маршрутизатор и оператор мобильной связи уже делают это.

В будущем доступ к Интернету может быть предоставлен всем домашним устройствам, включая кошачьи щитки. Особист/Shutterstock

Это главная причина, по которой нет особой необходимости паниковать, когда интернет-органы объявляют, что адреса заканчиваются. Благодаря технологической изобретательности один единственный адрес теперь мог поддерживать еще 16 млн, а каждый из 16 млн можно было разделить на еще 16 млн и т. д.

Это напоминает нам о том, сколько устройств, вероятно, используют Интернет в любой момент времени. Каждый IP-адрес, каждый домашний маршрутизатор, если бы он имел достаточную вычислительную мощность, мог бы поддерживать миллионы устройств, позволяя подключать к Интернету все, от кошачьего люка до аквариума.

IP-адрес

Адрес — это структура данных, понятная сети, которая однозначно идентифицирует конечную точку получателя в сети.

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

Традиционный Интернет использует сетевой протокол IPv4. Это назначает адрес интерфейсам хоста (компьютерам или другим сетевым конечным точкам) и интерфейсам маршрутизатора. Адрес ecah представляет собой 32-битное число (4 байта).Адрес назначается таким образом, чтобы никакие две системы не имели одинаковый IP-адрес. Некоторые системы имеют более одного IP-адреса, и в этом случае они могут быть доступны по любому из их IP-адресов.

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

Администраторы конкретной IP-сети могут свободно распределять адреса узлов в своей сети без согласования с другими администраторами в Интернете. Однако им не разрешено выделять адреса хостов, принадлежащие сетевому номеру, который им не был назначен. Если им требуются дополнительные адреса, они должны подать заявку на новый блок адресов (т. е. новый сетевой номер), который обычно не будет следовать за тем, что было назначено ранее. Эти сетевые номера можно приобрести в реестре.

Адреса IPv4 обычно записываются в формате, известном как "десятичное представление с точками". В этом формате каждый байт 4-байтового адреса выражается как десятичное (с основанием 10) число (т. е. от 0 до 255). Четыре десятичных числа разделены «точками» или «точками», как показано ниже:

Адрес IPv4 "129.7.1.10" соответствует шестнадцатеричному значению 0x8107010A.

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

Специальное значение «0.0.0.0» зарезервировано для неизвестного адреса. Он редко используется в качестве адреса пакета и обычно недействителен.

Сетевой адрес IPv4 идентифицируется как побитовое логическое И 32-битного адреса IPv4 с другой 32-битной величиной, сетевой маской. Все системы с одинаковым сетевым номером используют одну и ту же сетевую маску (иногда называемую «маской подсети»). Это значение часто узнают с помощью DHCP.

Маска подсети организована таким образом, что каждый бит с логической «1» указывает на бит в значении адреса, который является частью номера сети, а логический «0» — на каждый бит, который является частью хоста. количество. Сетевая маска может быть записана в виде десятичной записи с точками или в виде шестнадцатеричного числа.

например, 24-битный номер сети имеет сетевую маску, которая может быть записана как 255.255.255.0, что идентично 0xFFFFFF00.

Следовательно, IP-адрес 129.7.1.10 с маской сети 255.255.255.0 указывает на номер сети 129.7.1.0.

24-битный номер сети оставляет 8-битную часть хоста. Это сеть с пространством для 254 хостов. (Помните, что номер хоста «0» зарезервирован для самой сети, а адрес всего хоста зарезервирован для использования в качестве сетевого широковещательного адреса). Иногда сетевая маска представлена ​​записью IP-адреса, за которым следует косая черта ('/') с количеством последовательных битов «1», используемых для формирования номера сети. Вышеупомянутая сетевая маска, таким образом, также может быть представлена ​​как «/24» (т. е. 24 «1» перед «0»). Вот еще несколько примеров:

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

Пример

Как получатель может определить, что это широковещательный IP-пакет подсети, если исходный IP-адрес был 192.168.10.2/24?

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

В этом случае маска равна 24b, то есть биты (32-24) составляют основную часть. Таким образом, широковещательный адрес подсети IPv4: 192.168.10.255.

Динамическая конфигурация хоста

Конфигурация с отслеживанием состояния позволяет DHCP-серверу назначать IP-адреса и маски подсети с использованием протокола динамической конфигурации хоста (DHCP).

DNS и сетевые имена

Что такое подсеть?

Во времена зарождения Интернета (до того, как его назвали Всемирной паутиной) министерство обороны США разработало IPv4 — десятичный формат с четырьмя точками, чтобы проверить пределы своих сетевых возможностей. Адреса IPv4 обозначаются четырьмя подсетями чисел (например, пример адреса IPc4: 170.16.240.1), которые разделены десятичными знаками. Однако в конце 1980-х федеральное правительство осознало, что у них закончатся адреса IPv4, и нужно что-то делать.Исследователи подключения IPv6 предложили простое решение: ввести больше подсетей (всего восемь групп), разделенных двоеточиями, чтобы определить протокол IPv6. Таким образом, подсети IPv4 определяются пятью различными классами, которые будут объяснены ниже. Чтобы найти свою подсеть IPv4, вы можете использовать несколько онлайн-инструментов, называемых калькуляторами подсети ipv4, чтобы отсортировать все виды информации о подсети на вашем IP-адресе. Для получения дополнительной информации о том, как работает подсеть IPv4 и IPv4, ознакомьтесь с информационными таблицами ниже.

Что такое классы адресов IPv4?

  • Класс А
  • Класс Б
  • Класс С
  • Класс D
  • Класс E

Кто такой АРИН?

На начальных этапах развития Интернета разработчики создали серию номеров Интернет-протокола версии 4 (IPv4) для эффективной и действенной сети между компьютерами. Несколько лет спустя для помощи в управлении IP-адресами IPv4 было создано Управление по присвоению номеров в Интернете (IANA), ныне являющееся отделом Интернет-корпорации по присвоению имен и номеров (ICANN). По мере того, как Интернет продолжал расти, росла и потребность в IP-адресах и организациях для управления их распространением. С 1980-х по 2000-е годы для этого был создан ряд организаций.

Знакомство с маской подсети IPv4

Теперь, когда вы понимаете, что такое двоичный код, давайте взглянем на две наши маски подсети из начала моего поста: 192.168.1.0 / 255.255.255.0 192.168.1.0/24 Концепция маски подсети проста. У вас есть сеть, и у вас есть хосты в сети (все, что имеет IP-адрес, является хостом). Маска подсети определяет, какая часть адреса TCP/IP представляет вашу сеть, а какая часть может использоваться для ваших хостов. Поскольку я простой человек, я думаю об этом так; Номер сети представляет собой улицу, на которой я живу, а часть хоста используется для номеров всех домов на моей улице. Маска подсети 255.255.255.0 означает, что первые три октета адреса будут использоваться для сети, и, таким образом, номер нашей сети — 192.168.1. Это означает, что в этой сети может быть 254 компьютера, потому что четвертый октет не используется сетевой частью адреса. Мы знаем это из-за 0 в маске подсети (255.255.255.0). Мы называем каждую из числовых секций октетом, потому что думаем о них в двоичном виде, и в каждой секции есть восемь возможных битов. Восемь бит - это октет. 11111111 в двоичном формате равно 255 в десятичном (вы делали преобразования?). Таким образом, наша десятичная маска подсети 255.255.255.0, отображаемая в двоичном формате, будет выглядеть так: 11111111.11111111.11111111.00000000 Если вы посчитаете все единицы, вы обнаружите, что их 24. Теперь снова посмотрите на примеры масок подсети. 192.168.1.0/255.255.255.0 192.168.1.0/24 Вы понимаете, почему обе маски подсети одинаковы? Число 24 — это количество битов, используемых в сетевой части адреса, и это сокращение для записи комбинации адрес/маска подсети. Важно понимать это, когда вы начинаете делить свою сеть на несколько подсетей.

Я пишу код Java для объединения потоков из трассировки сети за весь день в бины по 84 секунды для каждой подсети. В настоящее время у меня есть до 256 подсетей и 1024 ячейки для каждой подсети. Я использую это для получения статистики характеристик трафика, такой как количество подключений, входящие/исходящие байты, количество внешних IP-адресов в каждом окне каждой подсети. В то время как соединения, входящие/исходящие байты просты, получение уникального количества внешних IP-адресов вызывает ошибки OutOfMemory.

Чтобы определить уникальное количество внешних IP-адресов, мне нужно сохранить IP-адрес в некоторой структуре данных, такой как хеш-таблица, и в конце трассировки я могу получить размер этой хеш-таблицы. Это означает, что у меня будет 1024 * 256 хэш-таблиц, каждая из которых хранит большое количество 12-15-байтовых строк IP-адресов (от десятков до тысяч). Это быстро взрывается, и системе не хватает памяти (я пытался установить размер кучи java до 2 ГБ, но безрезультатно). Может ли кто-нибудь предложить способ эффективного хранения такого большого количества объектов?

Я пытался использовать набор битов (преобразование ip в int), однако, учитывая, что IP-адреса очень и очень разрежены, это не помогает с ситуацией с памятью. В крайнем случае, я мог бы использовать разреженные матрицы библиотеки colt, в каждой из которых хранится до 64 IP-адресов, но я хотел получить мнение на случай, если я упущу что-то очевидное и смогу сэкономить время на написании/отладке такой оболочки.

Примечания. Чтобы получить представление о масштабе, я вижу несколько сотен миллионов потоков на трассировку, которую анализирую и агрегирую. В большинстве случаев я использую от 10 до 20 из 256 подсетей, но хотелось бы, чтобы решение можно было масштабировать на все 256 подсетей.

Во-первых, несколько предварительных вычислений: 1024*256*15*10000/(1024^3) = примерно 40 ГБ, при условии, что ваши хэш-таблицы занимают всего один байт (скорее всего, несколько тысяч). ). Это много, но не слишком много, с чем не мог бы справиться дорогой сервер. ;) Я не понимаю, зачем вам все это в ОЗУ, но если предположить, что вы не можете обойтись базой данных на диске, кажется, вам лучше распределить нагрузку между несколькими машинами.

Бен, я аспирант и у меня нет доступа к кластеру серверов. Кроме того, в настоящее время я трачу примерно 10-15 минут на трассировку. Если я использую хранилище на основе dist, это просто займет слишком много времени, возможно, несколько часов или даже день. Мне нужно вести подсчет всех уникальных IP-адресов для каждого бина в каждой подсети, и для этого потребуется хранилище для проверки уникальности. kdgregory, я веду учет всех компьютеров с IP-адресами в подсети, к которым подключаются. Возможный диапазон — все адреса IP-V4, ограничений нет. Возможно, у вас есть доступ к google на 8.8.8.8 и еще на 202.192.1.1.

Настоящий вопрос, который я задавал, касался разреженности. Если ваши данные действительно разрежены (например, миллион адресов, сосредоточенных в нескольких тысячах диапазонов IP-адресов), вы можете использовать тот факт, что многомерные массивы Java не полностью распределены (например, int[256][][] [] занимает место только для 256 указателей).

3 ответа 3

Обновление: если бы вы сохранили все 4 миллиарда адресов IPv4 в виде единого массива, вы могли бы представить время в виде отдельного короткого замыкания.

Это будет 8 ГБ с временным разрешением 65 КБ. Просто учтите это, потому что это устанавливает верхнюю границу памяти, потому что любая другая схема должна быть ниже этого значения. Если бы вы использовали байт, это было бы временное разрешение 256, 337,5 секунд на бин и 4 ГБ.

Теперь у вас есть немного времени, чтобы сказать, что вы видели хотя бы один пакет в этой корзине. Если вам нужен подсчет, который снова взрывает память, но с коротким, вы можете использовать 1024 блока с потенциальным 6-битным разрешением для подсчета: максимум 64 пакета.

Теперь со 100 миллионами уникальных IP-адресов объем памяти сокращается в 10 раз, поэтому теоретически вы можете увеличить объем памяти с 8 ГБ до 800 МБ. Не выделяя все пространство, вы думаете, что можете сэкономить память, но вам все равно нужно хранить 4 байта для каждого IP: 400 МБ только для IP-адресов + 400 МБ для какой-то структуры для их хранения (100M указателей * 4 байта) и 2 байта для время: минимум 1 ГБ. Выделяя все пространство, вы получаете возможность пропустить повторное сохранение IP-адреса, потому что ваш хеш — это ваш IP-адрес. Если вы уменьшите массив, у вас больше не будет IP-адреса, потому что он был хеширован. Теперь вы не можете сохранить IP-адрес и по-прежнему отвечать на вопросы по IP-адресу, но вы не можете извергнуть его.

Что, если вы сохранили ряд масок подсети, а затем объединили все IP-адреса под ними и сохранили свою статистику по этой маске подсети. Например, у вас есть 256 подсетей с собственной маской подсети. Ваша программа будет принимать нижнюю границу маски. То есть, если вы маскируете 209.134.0.0/16 и используете нижнюю границу 8. Тогда для этой подсети будет создано 256 ячеек, которые находятся за пределами 209.134.0.0-209.134.255.255. Вы повторите тот же процесс для всех 256 подсетей, которые у вас есть. Нижняя граница в 8 бит означает, что нижние 256 адресов каждой подсети будут объединены. Вы можете хэшировать любой IP-адрес в корзину и хранить статистику в памяти. Однако ничего не скажешь об одном IP-адресе. Но если вам нужно большее разрешение, вы можете просто уменьшить нижнюю маску подсети, скажем, до 4, и теперь контейнеров станет больше.

Вы создаете корзину только в том случае, если у вас есть 1 IP-адрес внутри нее, поэтому, если у вас нет IP-адресов, отображаемых там, вы можете сэкономить немного места, чтобы балансировать между достаточно низким разрешением для спуска и достаточно высоким, чтобы пропустить создание корзин для вещи, которые вам не нужны.

Тогда вы можете вести журнал каждого бина и отслеживать, что происходит в каждом бине на диске.Если вы хотите ответить на вопрос об одном IP-адресе, выясните, к какой ячейке он принадлежит, затем откройте файл и выполните поиск в нем, чтобы найти ответ. Эта схема означает, что вы можете увеличивать или уменьшать масштаб в зависимости от размера ваших данных, а также повышая и понижая границы. Вы можете повысить производительность, изменив структуру файлов, которые вы записываете для каждого бина.

Читайте также: