IPv6地址的文本表示的最大长度是多少?

5 浏览
0 Comments

IPv6地址的文本表示的最大长度是多少?

我想将PHP中$_SERVER["REMOTE_ADDR"]返回的数据存储到数据库字段中,这是一个非常简单的任务。问题是我找不到任何关于IPv6地址的文本表示的最大长度的正确信息,而这正是一个网页服务器通过$_SERVER["REMOTE_ADDR"]提供的。我不关心将文本表示转换为通常编码的128位地址,我只想知道存储任何$_SERVER["REMOTE_ADDR"]返回的IPv6地址所需的最大字符数。

0
0 Comments

IPv6地址的文本表示的最大长度是多少?

IPv6的标准地址最多有45个字符,但是IPv6地址还可以包含一个以%结尾的"scope"或"zone"字符串,该字符串没有固定的长度,但通常是一个小的正整数或网络接口名称,因此实际上它可以比45个字符更长。网络接口名称通常是"eth0"、"eth1"、"wlan0"这样的几个字符。在Linux中,网络接口名称的最大长度是15个字符,因此选择61个字节将覆盖Linux上的所有接口名称。

然而,这只是针对本地链路地址,一旦您的网站在互联网上运行(希望在开发过程中也不会出现这种情况),您将不会看到这些地址。

这个答案值得更多的关注。最好增加5个字符,而不是为了找出这样的异常问题而调试一个小时。因此,对于那些想要知道真正的最大字符数量的人来说,这个答案是最好的。

网络接口命名约定规定名称不能超过15个字符。最好加上45 + 1(终止空字符)+ 15 = 61个字符。再加上3个字符(用于结构字节对齐),我们得到64个字符。

更好的方法是在从外部源读取数据时添加检查,以确保不超过最大字段大小。然后,当数据进入系统时,您可以依靠地址是正确的。因此,对于只有IPv6地址的情况,您只需要39个字符(不包括一些行尾字符等。8组4个十六进制字符+ 7个分隔符字符)。(好吧,每次计算一个新地址也应该进行检查,并在不适当的字符串格式时抛出错误。使用一个二进制域结构最容易实现这个功能,其中有一个toString()方法来进行检查)。

0
0 Comments

IPv6地址的文本表示的最大长度是多少?

在Linux上,可以通过常量INET6_ADDRSTRLEN(包含,参见man inet_ntop)来查看。在我的系统上(头文件"in.h"):

#define INET6_ADDRSTRLEN 46

最后一个字符是用来终止NULL的,所以最大长度是45,与其他答案相同。

那么,我在这里看到的48是什么?可能是在2013年前后增加的,可能是为了结构对齐。

我认为这只是Linux存储IPv6地址和附加的链路本地网络设备名称的方式。例如,fffe::1234:5678:9abc:def0%eth0。为了解释从46到48的变化,但这只是我的猜测。你应该在内部只存储二进制形式,通过toString()方法或类似的方法将其转换为字符串和内部格式进行传输。如果不支持该格式或者在程序中出现错误,可以抛出异常。(不在结构中存储子网掩码,大多数情况下是128或64或更小)。

因此,对于IPv4,需要存储32位的子网掩码,但对于IPv6,只需要存储一个字节(0-128)。

0
0 Comments

IPv6地址的文本表示的最大长度是多少?这个问题的出现是因为IPv6地址的文本表示形式可能会有多种形式,包括基于十进制的IPv4映射IPv6地址和基于百分号的作用域标识符。为了确保存储和显示的一致性,需要确定IPv6地址文本表示的最大长度,并提供解决方法来处理各种不同的表示形式。

根据给出的示例,IPv6地址的标准表示形式是8个由冒号分隔的4位十六进制数字组成,每个组之间有7个冒号。因此,IPv6地址的标准文本表示的最大长度是39个字符。

然而,如果使用IPv4映射IPv6地址,最后两个组可以使用十进制表示,并用句点分隔。例如,"[::ffff:192.168.100.228]"表示为"0000:0000:0000:0000:0000:ffff:192.168.100.228",这样的地址文本表示形式的最大长度是45个字符。

此外,IPv6地址可能还包含作用域区域标识符,用百分号表示。这将进一步增加地址的长度。因此,为了确保能够处理各种不同的表示形式,存储和显示IPv6地址的文本表示时,需要考虑到这些因素。

为了解决这个问题,可以定义一个足够大的缓冲区来存储IPv6地址的文本表示。例如,可以使用定义的INET6_ADDRSTRLEN(46个字符)或更大的缓冲区来存储IPv6地址的文本表示。此外,需要编写代码来验证和处理输入,以确保输入的长度不超过缓冲区的大小,同时还需考虑到各种不同的表示形式。

总结起来,为了处理IPv6地址的文本表示,需要确定最大长度并提供足够大的缓冲区来存储不同形式的地址表示。此外,还需要编写代码来验证和处理输入,以确保输入的长度不超过缓冲区的大小,并处理各种不同的表示形式,如IPv4映射IPv6地址和作用域区域标识符。

0