网络地址类型#

提供用于存储 IPv4 、IPv6 、MAC 地址的数据类型, 在下表里显示。 用这些数据类型存储网络地址比用纯文本类型好, 因为这些类型提供输入错误检查和特殊的操作和功能(见 网络地址函数和操作符 )。

表. 网络地址类型

名字

存储空间

描述

cidr

12 或 24 字节

IPv4 和IPv6 网络

inet

12 或 24 字节

IPv4 和IPv6 主机和网络

macaddr

6 字节

MAC 地址

在对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类型。

该类型的输入格式是address/y, 这里的address 是 IPv4 或者 IPv6 地址,y 是子网掩码的位数。如果/y 部分未填,则子网掩码对 IPv4 而言是 32 ,对 IPv6 而言是 128 , 所以该值表示只有一台主机。显示时,如果该值表示只有一台主机, /y将不会显示。

cidr#

cidr保存一个 IPv4 或 IPv6 网络地址。其输入和输出遵循无类别的互联网域路由习惯。 声明一个网络的格式是address/y, 这里的address是 IPv4 或者 IPv6 地址, y是子网掩码的位数。如果省略y, 那么掩码部分用旧的有类别的网络编号系统进行计算,除非它已经足够到包括确定掩码所需的所有字节。 声明一个指定掩码的网络地址是错误的。

下表是些例子:

表. cidr 类型输入举例

cidr 输入

cidr 输出

abbrev(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不接受。

小技巧

如果你不喜欢inet或cidr值的输出格式, 请试一下host,text和abbrev函数。

macaddr#

macaddr类型存储 MAC 地址,也就是以太网卡硬件地址(尽管 MAC 地址还用于其它用途)。 可以接受下列格式:

‘08002b:010203’

‘08002b-010203’

‘0800.2b01.0203’

‘08-00-2b-01-02-03’

‘08:00:2b:01:02:03’

它们声明的都是同一个地址。对于数据位a到f, 大小写都行。输出总是我们上面给出的最后一种形式。