Digital Q.DataBase предлагает типы данных для хранения IPv4-, IPv6- и MAC- адресов, как показано в Таблица 2.5.21. Данные типы лучше использовать вместо обычных текстовых типов для хранения сетевых адресов, поскольку они обеспечивают проверку ошибок ввода, а также поддерживают специализированные операторы и функции (см. Раздел 2.6.12).
Таблица 2.5.21. Типы сетевых адресов
| Имя | Размер | Описание |
|---|---|---|
cidr | 7 или 19 байт | сети IPv4 и IPv6 |
inet | 7 или 19 байт | узлы и сети IPv4 и IPv6 |
macaddr | 6 байт | MAC-адреса |
macaddr8 | 8 байт | MAC-адреса (формат EUI-64) |
При сортировке inet или cidr типов данных,
IPv4-адреса всегда будут предшествовать IPv6-адресам, включая
IPv4-адреса, инкапсулированные или сопоставленные с IPv6-адресами, такие как
::10.2.3.4 или ::ffff:10.4.3.2.
inet #
Значение inet тип хранит адрес узла IPv4 или IPv6 и, опционально, его подсеть, в одном поле. Подсеть определяется количеством бит сетевого адреса в составе адреса узла (
«маска сети»). Если маска сети равна 32, а адрес — IPv4,
то значение указывает не на подсеть, а на отдельный узел.
В IPv6 длина адреса составляет 128 бит, поэтому 128 бит определяют
уникальный адрес узла. Обратите внимание: если
необходимо принимать только сети, следует использовать
cidr тип вместо inet.
Формат ввода для этого типа данных:
адрес/y
где
адрес
представляет собой адрес IPv4 или IPv6, а
y
параметр y — это количество бит в маске сети. Если
/y
часть опущена, то маска сети принимается равной 32 для IPv4 или 128 для IPv6; в этом случае значение представляет собой один хост. При выводе
/y
часть не отображается, если маска сети определяет один хост.
cidr #
Значение cidr тип данных используется для хранения сетевых спецификаций IPv4 или IPv6. Форматы ввода и вывода соответствуют соглашениям бесклассовой адресации (CIDR). Сети задаются в формате: адрес/y где адрес представляет собой начальный адрес сети в формате IPv4 или IPv6, а y — это количество бит в маске сети. Если параметр
y опущен, он вычисляется на основе правил старой системы классовой адресации, однако его значение будет как минимум достаточным для охвата всех октетов, указанных во входной строке. Указание сетевого адреса, имеющего установленные биты справа от заданной маски сети, является ошибкой.
Таблица 2.5.22 приведены некоторые примеры.
Таблица 2.5.22. cidr Примеры ввода типов
cidr Ввод | cidr Вывод | |
|---|---|---|
| 192.168.100.128/25 | 192.168.100.128/25 | 192.168.100.128/25 |
| 192.168/24 | 192.168.0.0/24 | 192.168.0/24 |
| 192.168/25 | 192.168.0.0/25 | 192.168.0.0/25 |
| 192.168.1 | 192.168.1.0/24 | 192.168.1/24 |
| 192.168 | 192.168.0.0/24 | 192.168.0/24 |
| 128.1 | 128.1.0.0/16 | 128.1/16 |
| 128 | 128.0.0.0/16 | 128.0/16 |
| 128.1.2 | 128.1.2.0/24 | 128.1.2/24 |
| 10.1.2 | 10.1.2.0/24 | 10.1.2/24 |
| 10.1 | 10.1.0.0/16 | 10.1/16 |
| 10 | 10.0.0.0/8 | 10/8 |
| 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 |
| 2001:4f8:3:ba::/64 | 2001:4f8:3:ba::/64 | 2001:4f8:3:ba/64 |
| 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 |
| ::ffff:1.2.3.0/120 | ::ffff:1.2.3.0/120 | ::ffff:1.2.3/120 |
| ::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 |
inet и cidr #
Существенное различие между inet и cidr
типами данных состоит в том, что inet допускает значения с ненулевыми битами справа от маски сети, в то время как cidr не является таковым. Например, 192.168.0.1/24 допустимо для inet
но не для cidr.
Если вас не устраивает формат вывода для inet или
cidr значений, воспользуйтесь функциями host,
текст, и abbrev.
macaddr #
Значение macaddr тип предназначен для хранения MAC-адресов, известных, например, как аппаратные адреса сетевых плат Ethernet (хотя MAC-адреса используются и в других целях). Входные данные принимаются в следующих форматах:
'08:00:2b:01:02:03' |
'08-00-2b-01-02-03' |
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'0800-2b01-0203' |
'08002b010203' |
Все эти примеры определяют один и тот же адрес. Для записи цифр допускается использование как верхнего, так и нижнего регистров
a по f. Вывод всегда осуществляется в первой из указанных форм.
Стандарт IEEE 802-2001 определяет вторую из указанных форм (с дефисами) в качестве канонической формы для MAC-адресов, а первую форму (с двоеточиями) — как используемую в нотации с обратным порядком битов (MSB-first), так что 08-00-2b-01-02-03 = 10:00:D4:80:40:C0. В настоящее время это соглашение повсеместно игнорируется, оно актуально только для устаревших сетевых протоколов (таких как Token Ring). Digital Q.DataBase не предусматривает изменение порядка битов; все допустимые форматы используют канонический порядок LSB.
Остальные пять форматов ввода не входят в какой-либо стандарт.
macaddr8 #
Значение macaddr8 Тип данных для хранения MAC-адресов в формате EUI-64, известном, например, по аппаратным адресам сетевых плат Ethernet (хотя MAC-адреса используются и для других целей). Данный тип может принимать MAC-адреса длиной как 6, так и 8 байт и сохраняет их в 8-байтовом формате. MAC-адреса, представленные в 6-байтовом формате, будут храниться в 8-байтовом формате, при этом 4-й и 5-й байты принимают значения FF и FE соответственно. Следует отметить, что в IPv6 используется модифицированный формат EUI-64, в котором 7-й бит должен быть установлен в единицу после преобразования из формата EUI-48. Функция macaddr8_set7bit предназначена для выполнения данного
изменения.
Как правило, любые входные данные, состоящие из пар шестнадцатеричных
цифр (на границах байтов), которые могут быть единообразно разделены
одним из ':', '-' или '.',
принимаются. Количество шестнадцатеричных цифр должно составлять либо 16 (8 байт), либо 12 (6 байт). Начальные и конечные пробелы игнорируются.
Ниже приведены примеры допустимых форматов ввода:
'08:00:2b:01:02:03:04:05' |
'08-00-2b-01-02-03-04-05' |
'08002b:0102030405' |
'08002b-0102030405' |
'0800.2b01.0203.0405' |
'0800-2b01-0203-0405' |
'08002b01:02030405' |
'08002b0102030405' |
Все эти примеры определяют один и тот же адрес. Для записи цифр допускается использование как верхнего, так и нижнего регистров
a по f. Вывод всегда осуществляется в первой из указанных форм.
Шесть представленных выше форматов ввода не соответствуют какому-либо стандарту.
Для преобразования традиционного 48-битного MAC-адреса формата EUI-48 в модифицированный формат EUI-64 с целью включения в состав узловой части IPv6-адреса, используйте функцию macaddr8_set7bit как показано ниже:
SELECT macaddr8_set7bit('08:00:2b:01:02:03');
macaddr8_set7bit
-------------------------
0a:00:2b:ff:fe:01:02:03
(1 row)