test - 纯ipv6站点




IPv6地址的文本表示的最大长度? (4)

一个稍微不正确,天真的选择是:

8 * 4 + 7 = 39

8组4位数,7':'之间。

但要考虑IPv4映射的IPv6地址功能,例如。 [::ffff:192.168.0.1] ,完全写出来:

(6 * 4 + 5)+ 1 +(4 * 3 + 3)= 29 + 1 + 15 = 45

请注意,这是一种输入/显示惯例 - 数据量相同,对于存储来说,最好在原始冒号分隔格式上进行标准化。 [0000:0000:0000:0000:ffff:7fa8:0001]

我想将PHP中$_SERVER["REMOTE_ADDR"]返回的数据存储到数据库字段中,这真的很简单。 问题是,我无法找到有关IPv6地址文本表示的最大长度的任何适当信息,这是Web服务器通过$_SERVER["REMOTE_ADDR"]

我对将文本表示转换为通常编码的128位数据不感兴趣,我只想知道需要多少个字符来存储由$_SERVER["REMOTE_ADDR"]返回的任何IPv6地址。


回答我自己的问题:

IPv6地址通常写成八组,每组四个十六进制数字,每组由冒号(:)分隔。

那最多39个字符。


如所示,标准ipv6地址最多为45个字符,但ipv6地址也可以包括结尾%,后跟“范围”或“区域”字符串,其不具有固定长度,但通常是小的正整数或网络接口名称,因此实际上它可以大于45个字符。 网络接口名称通常是“eth0”,“eth1”,“wlan0”,所以选择50作为限制可能足够好。


我认为@Deepak在这个链接中的回答更接近正确答案。 客户端IP地址的最大长度 。 所以正确的大小是45而不是39.有时候我们尝试在字段大小上进行拼写,但是如果我们准备足够的存储大小似乎会更好。