- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ipv4 和 ipv6 存储在 postgres 数据库中。
因为 ipv4 需要 32 位(4 字节)而 ipv6 需要 128(16 字节)位。那么为什么在 postgres 中 CIDR 和 INET 数据类型对于 IPV4 和 IPV6(8.1)分别具有 12 字节和 24 字节的存储。
在9.1中,IPV4和IPV6分别有7字节和19字节。
我不明白为什么它需要额外的字节超过 16 字节来存储 IPV6 和 4 字节来存储 IPV4??
http://www.postgresql.org/docs/8.1/static/datatype-net-types.html
http://www.postgresql.org/docs/9.1/interactive/datatype-net-types.html
最佳答案
sourcecode IP 数据类型显示如下:
typedef struct
{
unsigned char family; /* PGSQL_AF_INET or PGSQL_AF_INET6 */
unsigned char bits; /* number of bits in netmask */
unsigned char ipaddr[16]; /* up to 128 bits of address */
} inet_struct;
这意味着,除了 ipaddr
中的“原始”数据(IP4 为 4 个字节,IP6 为 16 个字节)之外,还有一个字节用于网络掩码和一个字节用于地址族(基本上是 IP4/IP6 的开关)。
此外还有 varlena
开销,在同一个文件中提到:
/*
* Both INET and CIDR addresses are represented within Postgres as varlena
* objects, ie, there is a varlena header in front of the struct type
* depicted above. This struct depicts what we actually have in memory
* in "uncompressed" cases. Note that since the maximum data size is only
* 18 bytes, INET/CIDR will invariably be stored into tuples using the
* 1-byte-header varlena format. However, we have to be prepared to cope
* with the 4-byte-header format too, because various code may helpfully
* try to "decompress" 1-byte-header datums.
*/
typedef struct
{
char vl_len_[4]; /* Do not touch this field directly! */
inet_struct inet_data;
} inet;
所以 IP4 的等式是这样的:
1 byte varlena
1 byte address family
1 byte netmask
4 raw bytes
===========
7 byte total
对于 IP6,相同的公式为您提供 19 个字节。
编辑 旧版本的 PostgreSQL 只有 4 字节的 varlena 表示。因此,您可以为每种类型添加 3 个字节(IP4:10,IP6:22)。最重要的是有一个填充到下一个 4 字节边界。这为每种类型提供了 2 个字节,总计 12 或 24 个字节。
This mail阐明了较短版本的开发。
关于postgresql - 由于 IPV6 需要 128 位(16 字节)那么为什么在 postgres CIDR 数据类型中存储为 24 字节(8.1)和 19 字节(9.1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542680/
目前部署在 Kubernetes 中的服务,通过 Calico BGP 将 Service 与集群外网络打通,并在外部的 nginx 中配置 Service 地址对外进行服务暴露。经过一段时间的观察
如发现here , 有一种新的 kube 服务是 IPVS 并且有很多负载均衡算法。 唯一的问题是我没有找到指定这些算法的位置。 我的理解: rr:循环法->循环调用后端pod lc:最少连接-> 将
我想尝试这种新的代理模式以及它为我们的一些应用程序提供的各种调度程序。到目前为止,我一直无法找到更改默认模式的方法 iptables至 ipvs在 GKE 节点上。 每个人都说通过--proxy-mo
我想在现有集群中为 IPVS 启用 Kube-proxy 模式。目前,它在 IPtables 上运行。如何在不影响现有工作负载的情况下将其更改为 IPVS? 我已经安装了所有必需的模块来启用它。另外,
我正在开发的应用程序作为 Kubernetes 集群中的部署运行。为此部署创建的 Pod 分布在集群中的各个节点上。我们的应用程序一次只能处理一个 TCP 连接,并且会拒绝进一步的连接。目前,我们使用
我是一名优秀的程序员,十分优秀!