可能的重复项︰
IPv6 地址的文本表示的最大长度吗?

作为存储客户端 ip 地址的数据库列的最大大小,您会推荐什么?我将它设置为 16,但是可以得到更长一些的 IPv6 等 ip 地址呢?

2009-07-02 21:12:32
问题评论:

它已经在这里介绍。检查stackoverflow.com/questions/1038950/...

实际上,该张贴内容不是很有用的。我们不使用 Sql Server 而对此帖子的回答简洁而到点,正好我所查找的。

发布的 @Andriyev 仅指 IPv4。

任何人在随后这里以后-如果您碰巧得到使用 Postgres 的能力,它们具有内置 IP 数据类型,因此。

回答:

对于 IPv4,您无法逃避与存储的 4 原始字节 (每个 IP 地址中期间的数字为 0-255 之间,即 1 个字节) 的 IP 地址。但您必须翻译和 DB 转然后是杂乱。

IPv6 的地址是 128 位 (而不是 32 位 IPv4 地址)。他们通常编写为 8 组用冒号分隔的十六进制数字 4: 2001:0db8:85a3:0000:0000:8a2e:0370:733439 个字符是合适的以该格式存储 IPv6 地址。

编辑︰ 然而,需要注意一个问题,@Deepak 的回答有关 IPv4 映射 IPv6 地址的详细信息,请参阅。(正确 IPv6 最大字符串长度为45 个字符.)

某些数据库 (postgres 至少) 具有本机 IP 列类型,并针对您的转换。

我会避免混合使用 IPv4 和 IPv6 在同一存档数据库的"一段时间。"IPv4 仍是默认标准,并继续使用多年来。在传统的应用程序中我使用过,有必要添加 IPv6 地址数据库,这样做是作为单独的条目。这允许使用现有代码,预计 IPv4 地址被保留在原处,并允许继续只得到一个 IPv4 地址的代码。新部分的代码中,它们都有可以专门从 IPv4、 IPV6 或组合查询选项。

为什么39 个字节在 IPv6 是 128 位,即采用最大16 个字节?

不要将 IPv4 存储为 4 个字节的原因相同。

如果您打算通过位屏蔽查询,然后显然以存储字节数。如果每行的额外 23 个字节是为您的问题,然后显然以存储字节数。不清楚问题是什么这里。

没有与常规 39 字符 IPv6 结构需要注意的一个问题。IPv4 映射 IPv6 地址,则该字符串可较长 (超过 39 个字符)。为了说明这一点的示例︰

IPv6 (39 个字符)︰

ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD

IPv4 映射 IPv6 (45 个字符)︰

ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:192.168.158.190

注意︰ 最后一个 32 位 (即对应于 IPv4 地址) 可能需要最多 15 个字符 (如 IPv4 使用 1 个字节的 4 组和格式从 0-255 4 个十六进制数字为最大值是NNN.NNN.NNN.NNN .符号拆分字符串中每个组的每个字节的数).

最正确最大 IPv6 字符串长度,因此,为 45。

(用户Deepak): 这是实际中我参加了 IPv6 培训的考试问题。(我们都回答 39) !

我最近看过某些 IP4 地址的双点,像 183.60..244.37 一些恶意的探测。那么,我想使它成为 50 会比 45 能够跟踪坏 IPs 好一些。

这是不正确的答案。您应该保留 IP 数据以原始格式,哪些用例只需要 16 个字节不 39,如我上面已经提到。

意见不是要决定什么是正确的地方。什么投票进行的。有些人需要显示的 IP 地址,其他人将罚款与其作为字节存储。只也弊为不同的应用程序没有正确答案。

这是很有帮助,但我想指出的次要错误/拼写正确。十进制、 十六进制不,应该说"IPv4 使用 1 个字节的 4 组和 4 个十六进制数字格式"。IPv4 地址是普通旧的十进制数字。

如果您想要在标准表示法处理 IPV6 有 8 个组的 4 个十六进制数字︰

2001:0dc5:72a3:0000:0000:802e:3370:73E4

32 个十六进制数字 + 7 分隔符 = 39 个字符。

注意︰如果您还需要包含 IPV4 地址映射为 IPV6 地址,如 @Deepak 所示使用45个字符.

发件人已经尝试它...所有三种方法使它只需使用 varchar(39)

少些高效存储远胜过无需将其插入/更新上并设置其格式显示它任意位置时的任何好处。

IPv6 维基百科文章中,所述

IPv6 地址通常都被编写为四个十六进制数字,其中每个组一个冒号 (:) 分隔的八组

一个典型的 IPv6 地址︰

2001:0db8:85a3:0000:0000:8a2e:0370:7334

这是 39 个字符长。IPv6 的地址是 128 位,因此无疑,您可以使用 binary(16) 列中,但我想我会坚持使用字母数字表示。

内容来源于Stack Overflow Max length for client ip address [duplicate]
请输入您的翻译

Max length for client ip address [duplicate]

确认取消