暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 使用教程 / SQL语言 / 数据类型17

tocata 2024-08-16
40

网络地址类型

AntDB 提供用于存储 IPv4、IPv6 和 MAC 地址的数据类型。 用这些数据类型存储网络地址比用纯文本类型好,因为这些类型提供输入错误检查以及特殊的操作符和函数。

网络地址类型

名字存储尺寸描述
cidr7 或 19 字节IPv4 和 IPv6 网络
inet7 或 19 字节IPv4 和 IPv6 主机以及网络
macaddr6 字节MAC 地址
macaddr88 bytesMAC 地址(EUI-64 格式)

在对 inet 或者 cidr 数据类型进行排序的时候, IPv4 地址将总是排在 IPv6 地址前面,包括那些封装或者是映射在 IPv6 地址里 的 IPv4 地址,例如 ::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部分省略, 则网络掩码对 IPv4 取为 32,对 IPv6 取为 128,所以该值表示只有一台主机。在显示时,如果/y*部分指定一个单台主机,它将不会被显示出来。

cidr

cidr 类型保存一个 IPv4 或 IPv6 网络地址声明。其输入和输出遵循无类的互联网域路由(Classless Internet Domain Routing)习惯。 声明一个网络的格式是*地址/y*,其中 address 是最低位地址,表现为 IPv4 或 IPv6 网络地址而 y 是网络掩码的位数。 如果省略 y, 那么掩码部分用旧的有类的网络编号系统进行计算,否则它将至少大到足以包括写在输入中的所有字节。 声明一个在其指定的掩码右边置了位的网络地址会导致错误。

cidr 类型输入例子

cidr输入cidr输出abbrev(cidr)
192.168.100.128/25192.168.100.128/25192.168.100.128/25
192.168/24192.168.0.0/24192.168.0/24
192.168/25192.168.0.0/25192.168.0.0/25
192.168.1192.168.1.0/24192.168.1/24
192.168192.168.0.0/24192.168.0/24
128.1128.1.0.0/16128.1/16
128128.0.0.0/16128.0/16
128.1.2128.1.2.0/24128.1.2/24
10.1.210.1.2.0/2410.1.2/24
10.110.1.0.0/1610.1/16
1010.0.0.0/810/8
10.1.2.3/3210.1.2.3/3210.1.2.3/32
2001:4f8:3:ba::/642001:4f8:3:ba::/642001:4f8:3:ba/64
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/1282001:4f8:3:ba:2e0:81ff:fe22:d1f1/1282001: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 vs. cidr

inet 和 cidr 类型之间的本质区别是 inet 接受右边有非零位的网络掩码, 而 cidr 不接受。例如,192.168.0.1/24 对 inet 是有效的,但对 cidr 是无效的。

提示

如果不喜欢 inet 或 cidr 值的输出格式,可以尝试函数 hosttext 和 abbrev

macaddr

macaddr 类型存储 MAC 地址,也就是以太网卡硬件地址 (尽管 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 Std 802-2001 指定第二种展示的形式(带有连字符)作为 MAC 地址的标准形式,并且指定第一种形式(带有分号)作为位翻转的记号,因此 08-00-2b-01-02-03 = 01:00:4D:08:04:0C。这种习惯目前已经被广泛地忽略,并且它只与废弃的网络协议(如令牌环)相关。AntDB 没有对位翻转做任何规定,并且所有可接受的格式都使用标准的 LSB 顺序。

剩下的五种输入格式不属于任何标准。

macaddr8

macaddr8 类型以 EUI-64 格式存储 MAC 地址,例如以太网卡的硬件地址(尽管 MAC 地址也被用于其他目的)。这种类型可以接受 6 字节和 8 字节长度的 MAC 地址,并且将它们存储为 8 字节长度的格式。以 6 字节格式给出的 MAC 地址被存储为 8 字节长度格式的方式是吧第 4 和第 5 节分别设置为 FF 和 FE。 注意 IPv6 使用一种修改过的 EUI-64 格式,其中从 EUI-48 转换过来后的第 7 位应该被设置为一。函数 macaddr8_set7bit 被用来做这种修改。 一般而言,任何由 16 进制数(字节边界上)对构成的输入(可以由':''-'或者'.'统一地分隔)都会被接受。16 进制数的数量必须是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 的大小写形式都被接受。输出总是以上面显示的第一种形式。

上述的后六种输入格式不属于任何标准。

要把 EUI-48 格式的传统 48 位MAC地址转换成修改版 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)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论