全部產品
Search
文件中心

PolarDB:網路地址類型

更新時間:Jul 06, 2024

本文介紹了網路地址類型的定義及相關文法。

網路地址類型

名字

儲存尺寸

描述

cidr

7或19位元組

IPv4和IPv6網路

inet

7或19位元組

IPv4和IPv6主機以及網路

macaddr

6位元組

MAC地址

macaddr8

8 bytes

MAC地址(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/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 vs. cidr

inetcidr類型之間的本質區別是inet接受右邊有非零位的網路遮罩, 而cidr不接受。例如,192.168.0.1/24inet是有效,但對cidr是無效的。

說明

如果你不喜歡inetcidr值的輸出格式,可以嘗試函數hosttextabbrev

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'

這些例子指定的都是同一個地址。對於位af,大小寫都可以接受。輸出總是使用展示的第一種形式。

IEEE Std 802-2001 指定第二種展示的形式(帶有連字號)作為 MAC 位址的標準形式,並且指定第一種形式(帶有分號)作為位翻轉的記號,因此 08-00-2b-01-02-03 = 01:00:4D:08:04:0C。這種習慣目前已經被廣泛地忽略,並且它只與廢棄的網路通訊協定(如令牌環)相關。PostgreSQL 沒有對位翻轉做任何規定,並且所有可接受的格式都使用標準的 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'

這些例子都指定相同的地址。數字af的大小寫形式都被接受。輸出總是以上面顯示的第一種形式。

上述的後六種輸入格式不屬於任何標準。

要把 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)