本人对网络这块实在是搞不清楚,要是能有人推荐一下资料就好了!不知道有没有跟我一样呢?!所以在这里先贴一点从其他地方搞来的一些IPv4的东东。

IPv4主要包括一下5类地址

A类:

0 7位 网络号 24位 主机号

B类:

1 0 14位 网络号 16位 主机号

C类:

1 1 0 21位 网络号 8位 主机号

D类:

1 1 1 0 28位 多播组号

E类:

1 1 1 1 0 27位 留待后用

由上表可以看出一个IPv4地址使用32位二进制表示,使用时写成4个十进制数,每个十进制占用8位,每个十进制间用句点分隔。从上表还可以看出各类IP中前面不同的位数都是固定的,所以各类IP的范围如下:

类型 范围
A 0.0.0.0--127.255.255.255
B 128.0.0.0--191.255.255.255
C 192.0.0.0--233.255.255.255
D 224.0.0.0--239.255.255.255
E 240.0.0.0--247.255.255.255

IPv6地址长128位,分为8组,每组使用4个十六进制数表示。

几个特殊地址:

127.0.0.1 IPv4环回地址

::1 IPv6环回地址

0.0.0.0/0 表示所有网络段

什么是网络地址?主机地址?子网掩码?

0.0.0.0/8 前8位为网络号,后24位为主机号,子网掩码为255.0.0.0,整个表示的主机地址范围是0.0.0.0到0.255.255.255。

主机地址应该就是网络中一个具体主机的IP地址。

子网掩码应该就是网络号全为1,主机号全为0,所以转换为十进制后0.0.0.0/8的子网掩码就是255.0.0.0。

那网络地址到底是个什么鬼呢?参考下面链接的博文解释

网络地址:把IP地址转成二进制和子网掩码进行与运算(逻辑与:0&0=0;0&1=0;1&0=0;1&1=1 )

仍使用下面博文中的例子,演示如何计算网络地址

主机地址:202.112.14.137,子网掩码:255.255.255.224

把主机地址和子网掩码分别使用二进制表示

主机:select 202::bit(8)||112::bit(8)||14::bit(8)||137::bit(8);

11001010011100000000111010001001

掩码:select 255::bit(8)||255::bit(8)||255::bit(8)||224::bit(8);

11111111111111111111111111100000

按位与计算:select B'11001010011100000000111010001001' & B'11111111111111111111111111100000';

结果:11001010011100000000111010000000

使用十进制表示:202.112.14.128

select B'11001010'::int||'.'||B'01110000'::int||'.'||B'00001110'::int||'.'||B'10000000'::int;

参考:http://blog.csdn.net/leichelle/article/details/8217022

以上还是请大家去查找一下官方正规的资料,千万不要被我误导了,因为我真的对网络这块不清楚。

虽然使用CHAR类型也能存储网络地址,但是CHAR本身是不会校验存储的网络地址是否合法的,且听说postgresql提供的网络地址类型对网络地址数据处理性能更高。

回到正文:

postgresql提供的网络地址类型有inet,cidr,macaddr三种类型用于存储网络地址和MAC地址数据。

名字 存储空间 描述
inet 7或19字节 IPv4或IPv6主机和网络地址
cidr 7或19字节 IPv4或IPv6网络地址
macaddr 6字节 MAC地址

inet

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

示例:

test=# select inet'192.168.31/24';
inet
-----------------
192.168.31.0/24
(1 row) test=# select inet'192.168.31.1/32';
inet
--------------
192.168.31.1
(1 row) test=# select inet'192.168.31.1';
inet
--------------
192.168.31.1
(1 row)

test=# select inet'192.168.31/24';
inet
-----------------
192.168.31.0/24
(1 row)

cidr

基本和inet相同,inet和cidr类型之间的基本区别是inet接受子网掩码,而cidr不接受。

示例:

test=# select cidr'192.168.31/24';
cidr
-----------------
192.168.31.0/24
(1 row) test=# select cidr'192.168.31.1/32';
cidr
-----------------
192.168.31.1/32
(1 row) test=# select cidr'192.168.31.1';
cidr
-----------------
192.168.31.1/32
(1 row) test=# select cidr'192.168.31/24';
cidr
-----------------
192.168.31.0/24
(1 row)

和inet的区别

test=# select inet'192.168.31.1/24';
inet
-----------------
192.168.31.1/24
(1 row) test=# select cidr'192.168.31.1/24';
ERROR: invalid cidr value: "192.168.31.1/24"
LINE 1: select cidr'192.168.31.1/24';
^
DETAIL: Value has bits set to right of mask.

macaddr

示例:

test=# select macaddr'08:00:2b:01:02:03';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08-00-2b-01-02-03';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b:010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b-010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'0800.2b01.0203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row)

cidr和inet操作符

操作符 描述 示例 结果
< 小于 select inet '192.168.1.5' < inet '192.168.1.6'; t
<= 小于或等于 select inet '192.168.1.5' <= inet '192.168.1.5'; t
= 等于 select inet '192.168.1.5' = inet '192.168.1.5'; t
>= 大于或等于 select inet '192.168.1.5' >= inet '192.168.1.5'; t
> 大于 select inet '192.168.1.5' > inet '192.168.1.4'; t
<> 不等于 select inet '192.168.1.5' <> inet '192.168.1.4'; t
<< 包含于 select inet '192.168.1.5' << inet '192.168.1/24'; t
<<= 包含于或等于 select inet '192.168.1/24' <<= inet '192.168.1/24'; t
>> 包含 select inet '192.168.1/24' >> inet '192.168.1.5'; t
>>= 包含或等于 select inet '192.168.1/24' >>= inet '192.168.1/24'; t
&& 包含或包含于 select inet '192.168.1/24' && inet '192.168.1.80/28' t
~ 位非 select ~ inet '192.168.1.6'; 63.87.254.249
& 位与 select inet '192.168.1.6' & inet '0.0.0.255'; 0.0.0.6
| 位或 select inet '192.168.1.6' | inet '0.0.0.255'; 192.168.1.255
+ select inet '192.168.1.6' + 25; 192.168.1.31
- select inet '192.168.1.43' - 36; 192.168.1.7
- select inet '192.168.1.43' - inet '192.168.1.19'; 24

cidr和inet函数

函数 返回类型 描述 示例 结果
abbrev(inet) text 显示为文本格式 select abbrev(inet '10.1.0.0/16'); 10.1.0.0/16
abbrev(cidr) text 显示为文本格式 select abbrev(cidr '10.1.0.0/16'); 10.1/16
broadcast(inet) inet 网络广播地址 select broadcast('192.168.1.5/24'); 192.168.1.255/24
family(inet) int 获取地址族,4位IPv4,6为IPv6 select family('::1'); 6
host(inet) text 抽取IP地址,并以text显示 select host('192.168.1.5/24'); 192.168.1.5
hostmask(inet) inet 为网络构造主机掩码 select hostmask('192.168.23.20/30'); 0.0.0.3
masklen(inet) int 抽取掩码长度 select masklen('192.168.1.5/24'); 24
netmask(inet) inet 为网络构造子网掩码 select netmask('192.168.1.5/24'); 255.255.255.0
network(inet) cidr 抽取地址的网络部分 select network('192.168.1.5/24'); 192.168.1.0/24
set_masklen(inetint) inet 为inet设置子网掩码长度 select set_masklen('192.168.1.5/24', 16); 192.168.1.5/16
set_masklen(cidrint) cidr 为cidr设置子网掩码长度 select set_masklen('192.168.1.0/24'::cidr, 16); 192.168.0.0/16
text(inet) text 将IP地址和掩码长度抽取为文本 select text(inet '192.168.1.5'); 192.168.1.5/32
inet_same_family(inetinet) boolean 是否属于相同的地址族 select inet_same_family('192.168.1.5/24', '::1'); f
inet_merge(inetinet) cidr 包括两个入参地址的最小网络地址 select inet_merge('192.168.1.5/24', '192.168.2.5/24'); 192.168.0.0/22

macaddr函数

函数 返回类型 描述 示例 结果
trunc(macaddr) macaddr 将mac地址后3个字节设置为0

select trunc(macaddr '12:34:56:78:90:ab');

12:34:56:00:00:00

macaddr 类型还支持标准关系操作符( > , <= 等)用于词法排序,和按位运算符( ~ , & 和 | )非,与和或。

原文链接:https://www.postgresql.org/docs/9.6/static/functions-net.html

postgresql----网络地址类型和函数的更多相关文章

  1. Postgres 9.11 网络地址类型函数和操作符

    9.11. 网络地址类型函数和操作符 Table 9-31 显示了可以用于 cidr 和 inet 的操作符. 操作符 <<,<<= >>,和 >>= ...

  2. PostgreSQL的时间/日期函数使用

    PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...

  3. [转] PostgreSQL的时间/日期函数使用

    PS:http://blog.csdn.net/love_rongrong/article/details/6712883 字符串模糊比较 日期类型的模糊查询是不能直接进行的,要先转换成字符串然后再查 ...

  4. 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法

    1..对于设备需要获取本设备的网络地址和MAC地址: NLME_GetShortAddr()——返回本设备的16位网络地址 NLME_GetExtAddr()——  返回本设备的64位扩展地址 2.使 ...

  5. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:    常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:    下面是Post ...

  6. [转帖]PostgreSQL的时间/日期函数使用

    PostgreSQL的时间/日期函数使用 https://www.cnblogs.com/mchina/archive/2013/04/15/3010418.html 这个博客的 文章目录比上一个好十 ...

  7. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  8. YUI的类型判断函数

    1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...

  9. 函数的类型:函数也是类型 (*)->*

    函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础. 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值: 每一个函数 ...

随机推荐

  1. linux环境中iostat命令的安装,解决-bash: iostat: command not found问题

    需求说明: 今天在测试环境的主机上,准备通过iostat来查看系统的io情况,发现没有该命令 [root@testvm Packages]# iostat -bash: iostat: command ...

  2. lua 注释

    1. 单行注释 --  功能等同于C++中的// 2. 多行注释  --[[  注释的内容  ]]   功能等同于C++中的 /**/ 3. 多行注释   --[====[   注释和内容  ]=== ...

  3. Spring getBean 首字母大小写问题

    如果类第一个字母大写第二个小写,那么首字母小写获取bean 如果第一个和第二个字母都是大写的,那个获取bean首字母要大写

  4. java-RAC Oracle 连接字符串

    昨天在访问oracle数据库取数据时遇到一个问题: 上网搜索一下发现是我访问的数据库做了RAC,原有的数据库连接字符串不适用,原来的连接字符串如下所示: 使用下面的字符串解决了该问题: String ...

  5. Unity关闭shader中的光照模型以及如何自定义光照模型

    // Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject' // Upgrade NOTE: replaced '_Wor ...

  6. Android学习之Gallery

    在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最 ...

  7. android R文件不能识别?

    android R文件引入不了原因可能是: 1.xml有错误,导致R文件生成失败:(修改xml,并clear,然后再重新Bulid一下即可) 2.如果是图片,可能是命名有问题,查看并修改(不要以数字开 ...

  8. django restframwork 教程之authentication权限

    当前我们的API在编辑或者删除的时候没有任何限制,我们不希望有些人有高级的行为,确保: 代码段始终与创建者相关联 只允许授权的用户可以创建代码段 只允许代码段创建者可以更新和删除 没有认证的请求应该有 ...

  9. WP8.1学习系列(第十九章)——事件和路由事件概述

    我们将介绍在使用 C#.Visual Basic 或 Visual C++ 组件扩展 (C++/CX) 作为编程语言并使用 XAML 进行 UI 定义时,针对 Windows 运行时应用的事件的编程概 ...

  10. LESS CSS 框架简介与使用

    简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide Web)中.HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义. ...