2408:8210:8f03:20ed:6d4:c49d:2c42:a650

ipv6号称128位,按照冒号数了一下,刚好分为8个部分。
所以计算了一下,
总共128位,每个部分就是128/8=16位。
也就意味着每部分最大值用二进制表示就是16个1,
即1111111111111111
用nodejs算了一下

> parseInt('1111111111111111',2).toString(16)
结果是 'ffff'

刚好是4个f


所以ipv6一般显示出来就是一个用冒号合并的8个从0到ffff的16进制数字,
所以在看到ipv6里会有一些不够4个数字的部分,就像下面这样
2408:8140:3fff:f803:102:f006:0:1018


我们有时候也会看到下面这样的ipv6地址

2408:8000:1100:f18::3

可以看到只有5个冒号,按道理分成8个部分应该至少有7个冒号才对呀,
这是咋回事?
求助于chatgpt,给出了下面答案

IPv6 地址中的省略号 :: 是一种简化表示法,用于减少地址长度。它表示连续的一组全零字段,可以帮助简洁地表示冗长的 IPv6 地址。

示例
完整表示:2001:0db8:0000:0000:0000:0000:0000:0001
简化为:2001:db8::1
规则
单个连续零段:使用 :: 表示连续的零,但只能使用一次。
如:2001:db8:0:0:0:0:0:1 简化为 2001:db8::1
前导零省略:每个字段中的前导零可以省略。
如:2001:0db8:0000:1 简化为 2001:db8:0:1
注意
省略号只能出现一次,以避免歧义。
解析工具会自动补全省略部分的零。

所以对于2408:8000:1100:f18::3,实际的情况应该是下面这样的
2408:8000:1100:f18:0:0:0:3
0:0:0被省略了


黑不溜秋
203 声望2 粉丝