#3 IPv6 地址
计算机网络 IPv6 2021-12-30$ ip -c -6 addr show dev wlp6s0
3: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet6 2409:8a4d:c81:c140::5/128 scope global dynamic noprefixroute
valid_lft 226977sec preferred_lft 140577sec
inet6 2409:8a4d:c81:c140:ca67:f46:7f29:1dad/64 scope global temporary dynamic
valid_lft 376sec preferred_lft 376sec
inet6 2409:8a4d:c81:c140:fcf0:3456:fac4:3b63/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 376sec preferred_lft 376sec
inet6 fe80::56f8:128b:b513:e571/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# ipconfig /all
# ipconfig
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : 2409:8a4d:c81:c140::6
IPv6 地址 . . . . . . . . . . . . : 2409:8a4d:c81:c140:68cd:b350:9fe8:9feb
临时 IPv6 地址. . . . . . . . . . : 2409:8a4d:c81:c140:757f:88b3:b455:5882
本地链接 IPv6 地址. . . . . . . . : fe80::68cd:b350:9fe8:9feb%5
IPv4 地址 . . . . . . . . . . . . : 192.168.1.7
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : fe80::1%5
192.168.1.1
DHCP 服务器 . . . . . . . . . . . : 192.168.1.1
DNS 服务器 . . . . . . . . . . . : 2409:804c:2000:1::1
2409:804c:2000:2::1
192.168.1.1
一、地址格式
IPv4 4 字节, 一般用四个十进制的数字表示,xxx.xxx.xxx.xxx
形式,每一段的范围是 0~255。
IPv6 16 字节,一般用 32 个十六进制数表示,每四个一组,共八组,xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
形式,每一段的范围是 0000~FFFF。
缩写
- 高位的 0 可以省略,比如
0001
就可以写成1
- 全 0 段可以省略,用分号表示,比如
fe80::
,::
(全 0), 又比如上面的2409:8a4d:c81:c140::5
但是, 只能缩写一次,比如A:B:0:0:C:D:0:0
不能写成A:B::C:D::
, 只能缩写成A:B::C:D:0:0
或A:B:0:0:C:D::
百分号
如果一台机器有多张网卡,都有一个 fe80 的链路地址,操作系统无法区分一个包该走哪张网卡出。
在 IPv4 中,不同网卡一般配置了不同子网,比如 172.16.31.0/24
, 172.168.32.0/24
。
但是 IPv6 的分配可以自己生成(无状态地址自动配置),大家都在 fe80 段。
百分号后面附加的是 zone index,这个数据是操作系统解释的。Windows 会采用接口号(整型数),而 Linux 习惯端口名称,比如 eth0, enp7s0。
PS: 推荐阅读: 网卡名称的变迁(ethX -> enpXsY)
- windows:
netsh interface ipv6 show address
- linux:
ifconfig
注意:用在 URL 中时,这个百分号应该转义成 %25
。
二、前缀
IPv4 有分区的概念,一开始叫做分类网络,ABCDE 五类。后来又有无类网络 (Classless Inter-Domain Routing, CIDR),取任意长度作前缀,比如 172.16.0.0/12 以 1010 1100 0001
做前缀。
IPv6 也有分区的概念,和 CIDR 一样,可以取任意长度作前缀。
比如 fe80::/10 就是以 1111 1110 10
做前缀。
移动网络给我分配的是 /64 段,听说有地方能拿到更短前缀(V2EX, 2020/07, 电信 IPv6 大家还能拿到/56 么)。
如果拿到更短前缀,就可以自己在家划分子网了。根据现在的实践(SLAAC),一个网络最少需要留 64 位,如果正好分的是 64 位前缀,那么就不能采用 SLAAC 方案了,只能走 DHCP。
无状态自动配置
- RS, Router Solicitation
- RA, Router Advertisement 路由器告诉机器 IPv6 前缀
- NS, Neighbor Solicitation 机器广播自己将要采用某一个 IPv6