Префикс это что в компьютере

Обновлено: 06.07.2024

В информатике подстрока — это непустая связная часть строки.

Формальное определение

Пусть " width="" height="" />
— строка длины n .
Любая строка , где , является подстрокой L длины ji + 1 .
Если i = 0 , то S называется префиксом L длины j + 1 .
Если j = n − 1 , то S — суффикс L длины ji + 1 .

Пример

С точки зрения информатики строки «кипед», «Вики», «дия» являются подстроками строки «Википедия»; при этом «Вики» — префиксом, а «дия» — суффиксом.

Получение подстроки

Если line — исходная строка, begin — позиция первого символа подстроки, end — позиция последнего символа подстроки, то подстрока subline вычисляется следующим образом:

В языке C

char * subline = (char *)malloc(end - begin + 2);
if (subline == NULL)
fprintf(stderr, "ERROR: malloc failed!");
exit(1);
>
subline[end - begin + 1] = '\0';

В языке python подстрока является слайсом (срезом) (англ. slice ).

В языке

В языке Pascal

SubStr := Copy(SourceStr, StartCharIndex, SubStrLength);

Операции с подстрокой

Помимо простой задачи выделения подстроки из строки по двум индексам существует и более сложная задача поиска индексов, указывающих на заданную подстроку в строке (поиск вхождения подстроки в строку).

См. также

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "Префикс (информатика)" в других словарях:

Дерево суффиксов — Суффиксное дерево способ организации данных (строк), позволяющий выяснять, входит ли строка w в строку t, за время O(|w|), где |w| длина строки w. Содержание 1 Основные определения и описание структуры 2 Свойства суффиксных д … Википедия

Идентификатор цифрового объекта — (также используется словосочетание Цифровой идентификатор объекта, ЦИО, digital object identif … Википедия

Зализняк, Андрей Анатольевич — Андрей Анатольевич Зализняк А. А. Зализняк во время лекции о берестяных грамотах из раскопок 2008 года Дата рождения … Википедия

Позиционная система — счисления система счисления, в которой один и тот же числовой знак (цифра) в записи числа имеет различные значения в зависимости от того места (разряда), где он расположен. Изобретение позиционной нумерации, основанной на поместном значении цифр … Википедия

Всем доброго времени суток! Из-за обилия чуши в интернете по данной тематике я решил написать собственную подробную и интересную статью, которая наконец-то раскроет вопрос: а что же такое маска подсети, для чего она нужна и где её принимать. Статья подойдёт как для чайников, так и для начинающих специалистов.

IP и маска

Один бит может принимать вид нуля и единицы – именно эту информацию может понимать компьютер, современный смартфон, телевизор и другие устройства. А так как у нас этих битов 32, то суммарное количество адресов IPv4, которые могут существовать: 2 32 = 4 294 967 296.

ПРИМЕЧАНИЕ! Достаточно много «АйПи» зарезервированы под какие-то нужды. К таким адресам относят: 255.255.255.255, 0.0.0.0, 0.0.0.1 и т.д.

Итак, у нас есть 4 байтовый или 32 битовый адрес. Чаще всего один кусок адреса называют именно байтом, или так называемыми «октетом». Октет – это 1 байт адреса IPv4. Для удобства представления разделяются точками – так проще воспринимается информация.

Таблица масок

Дома в домашних роутерах чаще всего используют 255.255.255.0 или 24я маска. Также часто используют:

  • 29 – 255.255.255.248
  • 30 – 255.255.255.252
  • 27 – 255.255.255.224
  • 26 – 255.255.255.192
  • 32 – 255.255.255.255 (имеет только один узел)
  • 23 – 255.255.254.0

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

Передача данных

Как вы, наверное, знаете – информация в сети передается пакетами, примерно также как на почте. В пакете также есть и заголовок, где прописаны два адреса:

  • Source IP – от кого отсылается пакет.
  • Destination IP – к кому отсылать пакет.

Никакой маски в передаваемой информации нет, также сам адрес представлен в чистом виде без точек, запятых и без каких-либо разделителей – «голые» 4 байта. И тут сразу встает вопрос – а для чего тогда вообще нужна маска подсети, и где её применяют? – Вот мы и подошли к самой сути. В пакете информации маски нет. Так как она тут просто не нужна. Но вот при присвоении адреса какому-то устройству: будь это компьютер, смартфон, телевизор, сервер – каждому устройству также приписывается маска подсети.

Аналогично все происходит в сети. Если устройство находится в пределах одной подсети (можно говорить и просто «сети»), то отправка идет напрямую. Если же устройство находится где-то там, то пакет отправляется через шлюз.

Теперь давайте посмотрим, какой же вид имеет маска сети. Самое главное правило, что при переводе в двоичный код (1 и 0), мы можем видеть строгое разделение единиц (1) и нулей (0).

255.255.248.0 = 11111111.11111111.11111000.00000000

То есть, идут сначала единицы, а потом нули. Не может быть такого, что 1 и 0 постоянно меняются и чередуются: «101010001». При этом идет определенное число единиц (1), а уже потом какое-то число нулей (0). Вот как раз число нулей и является длиной маски. Компьютер определяет границу, достаточно просто. Он переводим IP и маску в двоичный код и просто побитово перемножает два этих числа.

ПРИМЕЧАНИЕ! Всё как в математике 1*1 = 1, 0*1 = 0 и 0*0=0.

11000000.10101000.00001011.00001010 (192.168.11.10)
11111111.11111111.11111000.00000000 (255.255.248.0)
=
11000000.10101000.00001000.00000000 = 192.168.8.0

ВНИМАНИЕ! Оба этих адреса нельзя использовать в сети.

В итоге у нас получается диапазон от 192.168.8.1 до 192.168.15.254. Можно также записать более коротко как 192.168.8.0/21. В итоге все начальные единицы – это адрес или префикс сети (192.168.х.х). Длина префикса – это начальное количество единиц и нулей до последних сплошных нулей. А все нули, которые идут в самом конце – это идентификатор хоста внутри сети.

ПРИМЕЧАНИЕ! При отправке пакетов напрямую, шлюз не может контролировать их. В некоторых организациях для контроля отправки пакетов сети разбивают на несколько сетей, а между ними устанавливают маршрутизаторы, через которые и идут пакеты. Их ещё часто называют «файрволами».

Давайте расскажу на примере обычного Wi-Fi роутера и локальной домашней сети. Дома стоит маршрутизатор, к которому подключены: компьютер, ноутбук, смартфон и телевизор. Роутер раздает настройки сети и присваивает им свои IP и маску. Как я и говорил ранее, чаще всего используется: 255.255.255.0.

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

В больших организациях всё куда сложнее, так как между сетями может быть достаточно много шлюзов, хостов, а также других важных устройств. Именно поэтому IT инженеру нужно заранее просчитывать все возможные варианты резервации IP для каждого сетевого устройства.

IP адрес протокола IPv4 состоит из 32 бит, но не все биты в адресе имеют одинаковое значение. Биты делятся на две части: слева некоторое количество бит обозначают сеть, к которой относится данный адрес, оставшиеся биты справа идентифицируют устройство внутри сети. Подробнее об этом можно прочесть в статье про IPv4-адресацию. Граница между этими двумя группами бит может проходить в разных местах, например, для 32-битного адреса, первые 16 бит могут обозначать сеть, вторые – хост внутри сети, возможны любые другие сочетания (10 и 22, 8 и 24, 30 и 2) – в принципе, любые два числа, дающие в сумме 32 подойдут.

Для описания того, где проходит эта граница используется сетевой префикс. Он записывается обычно после адреса в виде десятичного числа через слеш, например 10.0.0.0/8 или 192.168.10.123/19 (8 и 19 – префиксы). Префикс обозначает, сколько бит в приведённом адресе хранят информацию о сети. Например, если префикс /24, это означает, что в адресе из 32-х бит 24 бита хранят информацию о сети, а оставшиеся 8 – информацию о хосте.

Предположим, что имеется такая задача: найти широковещательный адрес для адреса 172.20.35.123/20. Запишем адрес в двоичном виде 10101100.00010100.00100011.01111011, как мы помним из определения, чтобы получить широковещательный адрес, надо взять ту часть адреса, где хранится информация о хосте и заполнить её единицами. Так как префикс 20 – отсчитываем первые 20 бит и оставляем их без изменений (виде 10101100.00010100.0010), оставшиеся 12 бит заполняем единицами, так как там хранится хостовая часть адреса (1111.11111111), получится адрес 10101100.00010100.00101111.11111111, в десятичной системе это выглядит как 172.20.47.255.

Перевод префикса в маску подсети

Префикс и маска подсети обозначают одно и то же, только разными способами. Если надо найти маску подсети по префиксу, то надо просто написать столько единиц, сколько указано в префиксе, оставшуюся часть дополнить нулями (чтобы всего получилось 32 двоичные цифры) и дальше группами по 8 бит перевести в десятичную систему.

Например, стоит задача найти маску, соответствующую префиксу /19. Для этого запишем 19 единиц и дополним их 13 нулями, чтобы всего получилось 32 цифры:

11111111.11111111.11100000.00000000, то что получилось надо перевести в десятичный вид и получим маску подсети 255.255.224.0.

Сетевой префикс в IPv6

В IPv6 адрес состоит из 128 бит, и маски подсети не используются, так как пришлось бы иметь очень длинные маски — тоже по 128 бит. Вместо этого используется только префикс. Смысл префикса в IPv6 такой же как и для IPv4 — отделение части адреса, хранящей информацию о сети от части адреса, хранящей информацию о хосте. Правая часть, хранящая информацию о хосте имеет специальное название — «Идентификатор интерфейса» (Interface ID). В IPv6 клиенту выделяются сети с префиксом /64, что означает ещё 64 бита на хосты внутри сети. Таким образом, внутри сети моэет существовать 2 64 различных хостов.

IPv4 использует 32-битные адреса, ограничивающие адресное пространство 4 294 967 296 (2 32 ) возможными уникальными адресами. У каждого хоста и маршрутизатора в Интеренете есть IP-адрес. IP-адрес не имеет отношения к хосту. Он имеет отношение к сетевому интерфейсу, поэтому иногда хост или маршрутизатор могут иметь несколько IP-адресов.

IP-адреса имеют иерархическую организацию. Первая часть имеет переменную длину и задает сеть, а последняя указывает на хост.

Обычно IP-адреса записываются в виде 4 десятичных чисел, каждое в диапозоне от 0 до 255, разделенными точками (dot-decimal notation). Каждая часть представляет один байт адреса. Например, шестнадцатиричный адрес 80D00297 записывается как 128.208.2.151.


Префикс задается наименьшим IP-адресом в блоке и размером блока. Размер определяется числом битов в сетевой части, оставшиеся биты в части хоста могут варьироваться. Таким образом, размер является степенью двойки. Он записывается после префикса IP-адреса в виде слэша и длины сетевой части в битах. В предыдущем примере префикс содержит 2 8 адресов и поэтому для сетевой части отводится 24 бита. Записывается так: 128.208.2.0/24.

Также, сколько бит используется сетевым ID и сколько бит доступно для идентификации хостов (интерфейсов) в этой сети, определяется сетевыми классами.

Всего 3 класса IP-адресов:

  • Класс A. IP сетевых адресов использует левые 8 бит (самый левый байт) для указания сети, оставшиеся 24 бита (оставшиеся три байта) для идентификации интерфейса хоста в этой сети. Адреса класса A всегда имеют самый левый бит самого левого байта нулевым, то есть значения от 0 до 127 для первого байта в десятичной нотации. Таким образом доступно максимум 128 адресов сетей класса A, каждый из которых может содержать до 33,554,430 интерфейсов. Однако сети 0.0.0.0 (известная как маршрут по умолчанию) и 127.0.0.0 (loop back сеть) имеют специальное назначение и не доступны для использования в качестве идентификаторов сети. Поэтому доступно только 126 адресов сетей класса A.
  • Класс B. IP сетевых адресов использует левые 16 бит (два левых байта) для идентификации сети, оставшиеся 16 бит (последние два байта) указывают хостовые интерфейсы. Адрес класса B всегда имеет самые левые два бита установленными в 1 0. Таким образом для номера сети остается 14 бит, что дает 32767 доступных сетей класса B. Первый байт адреса сети класса B может принимать значения от 128 до 191, и каждая из таких сетей может иметь до 32,766 доступных интерфейсов.
  • Класс C. IP сетевых адресов использует левые 24 бит (три левых байта) для идентификации сети, оставшиеся 8 бит (последний байт) указывает хостовый интерфейс. Адрес класса С всегда имеет самые левые три бита установленными в 1 1 0. Таким образом для номера сети остается 14 бит, что дает 4,194,303 доступных сетей класса B. Первый байт адреса сети класса B может принимать значения от 192 до 255, и каждая из таких сетей может иметь до 254 доступных интерфейсов. Однако сети класса C с первым байтом больше, чем 223, зарезервированы и не используются.

Существует также специальные адреса, которые зарезервированы для 'несвязанных' сетей - это сети, которые используют IP, но не подключены к Internet. Вот эти адреса:

  • Одна сеть класса A: 10.0.0.0
  • 16 сетей класса B: 172.16.0.0 - 172.31.0.0
  • 256 сетей класса С: 192.168.0.0 - 192.168.255.0

IP адрес может означать одно из трех:

  • Адрес IP сети (группа IP устройств, имеющих доступ к общей среде передаче - например, все устройства в сегменте Ethernet). Сетевой адрес всегда имеет биты интерфейса (хоста) адресного пространства установленными в 0 (если сеть не разбита на подсети - как мы еще увидим);
  • Широковещательный адрес IP сети (адрес для 'разговора' со всеми устройствами в IP сети). Широковещательные адреса для сети всегда имеют интерфейсные (хостовые) биты адресного пространства установленными в 1 (если сеть не разбита на подсети - опять же, как мы вскоре увидим).
  • Адрес интерфейса (например Ethernet-адаптер или PPP интерфейс хоста, маршрутизатора, сервера печать итд). Эти адреса могут иметь любые значения хостовых битов, исключая все нули или все единицы - чтобы не путать с адресами сетей и широковещательными адресами.
  • Для сети класса A: (один байт под адрес сети, три байта под номер хоста)
    • 10.0.0.0 сеть класса А, потому что все хостовые биты равны 0.
    • 10.0.1.0 адрес хоста в этой сети
    • 10.255.255.255 широковещательный адрес этой сети, поскольку все сетевые биты установлены в 1
    • 172.17.0.0 сеть класса B
    • 172.17.0.1 адрес хоста в этой сети
    • 172.17.255.255 сетевой широковещательный адрес
    • 192.168.3.0 адрес сети класса C
    • 192.168.3.42 хостовый адрес в этой сеть
    • 192.168.3.255 сетевой широковещательный адрес

    Почти все доступные сетевые IP-адреса принадлежат классу C.

    Длина префикса не выводится из IP-адреса, поэтому протоколу маршрутизации вынуждены передавать префиксы на маршрутизаторы. Иногда префиксы задаются с помощью указания длины.


    То есть маска подсети определяет как будут локально интерпретироваться IP адреса в сегменте IP сети, что для нас весьма важно, поскольку определяет процесс разбивки на подсети.

    Стандартная маска подсети - все сетевые биты в адресе установлены в '1' и все хостовые биты установлены в '0'. Это означает, что стандартные маски подсети для трех классов сетей:

    • A класс - маска подсети: 255.0.0.0
    • B класс - маска подсети: 255.255.0.0
    • C класс - маска подсети: 255.255.255.0

    Выполненение операции И между маской и IP-адресом позволяет выделить сетевую часть.

    О маске подсети нужно помнить три вещи:

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

    Изначально использовалась классовая адресация (INET), но со второй половины 90-х годов XX века она была вытеснена бесклассовой адресацией (CIDR), при которой количество адресов в сети определяется маской подсети.

    Никто не знает точно, сколько всего сетей подключено к Интернету, но очевидно, что их много — возможно, порядка миллиона. Различные алгоритмы маршрутизации требуют, чтобы каждый маршрутизатор обменивался информацией о доступных ему адресах с другими маршрутизаторами. Чем больше размер таблицы, тем больше данных необходимо передавать и обрабатывать. С ростом размера таблицы время обработки растет как минимум линейно. Чем больше данных приходится передавать, тем выше вероятность потери (в лучшем случае временной) части информации по дороге, что может привести к нестабильности работы алгоритмов выбора маршрутов.

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

    При агрегации IP-адреса содержатся в префиксах различной длины. Один и тот же IP-адрес может рассматриваться одним маршрутизатором как часть блока /22 (содержащего 2 10 адресов), а другим — как часть более крупного блока /20 (содержащего 2 12 адресов). Это зависит от того, какой информацией обладает маршрутизатор. Такой метод работает и для разбиения на подсети и называется CIDR (Classless InterDomain Routing — бесклассовая междоменная маршрутизация).

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