[root@upu_2 ~]#
[root@upu_2 ~]# lsof -i :2181 -P|grep LISTEN
java 7853 root 16u IPv6 21294 0t0 TCP *:2181 (LISTEN)
[root@upu_2 ~]#
[root@upu_2 ~]# lsof -i :26888 -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7853 root 27u IPv6 15051913 0t0 TCP 10.23.46.36:2181->10.23.46.36:26888 (ESTABLISHED)
css 29804 root 113u IPv4 15051910 0t0 TCP 10.23.46.36:26888->10.23.46.36:2181 (ESTABLISHED)
[root@upu_2 ~]#
[root@upu_2 ~]#
[root@upu_2 ~]# netstat -natp|grep 26888
tcp 0 0 10.23.46.36:26888 10.23.46.36:2181 ESTABLISHED 29804/css
tcp 0 0 ::ffff:10.23.46.36:2181 ::ffff:10.23.46.36:26888 ESTABLISHED 7853/java
[root@upu_2 ~]#
可以看到, - zookeeper 以 IPv6 类型创建了监听 socket
- 业务(zk客户端)基于 IPv4 类型建立了到 zookeeper 的 TCP 连接
- 从 zookeeper 侧看该 TCP 连接,其类型为 IPv6
(以下内容来自 *)
-=-=-=- 我是第一次和公司同事打麻将的分隔线 -=-=-=-
【IPv6】
从 IPv4 到 IPv6 最显著的变化就是网络地址的长度。RFC 2373 和 RFC 2374 定义的 IPv6 地址有 128 位长;IPv6 地址的表达形式,一般采用 32 个十六进制数。
IPv6 中可能的地址有 2^128≈3.4×10^38 个,具体数量为 340,282,366,920,938,463,463,374,607,431,768,211,456 个。也可以想象为 16^32 个,因为 32 位地址每位可以取 16 个不同的值(参考组合数学)。
在很多场合,IPv6 地址由两个逻辑部分组成:一个 64 位的网络前缀和一个 64 位的主机地址,主机地址通常根据物理地址自动生成,叫做 EUI-64(或者 64-位扩展唯一标识)
【IPv6 地址表示】
IPv6 地址为 128 位元长,但通常写作 8 组每组四个十六进制数的形式。例如:
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
是一个合法的 IPv6 地址。 如果四个数字都是 0 ,可以被省略。例如:
2001:0db8:85a3:0000:1319:8a2e:0370:7344
等价于 2001:0db8:85a3::1319:8a2e:0370:7344
遵从这些规则,如果因为省略而出现了两个以上的冒号的话,可以压缩为一个,但这种零压缩在地址中只能出现一次。因此: 2001:0DB8:0000:0000:0000:0000:1428:57ab
2001:0DB8:0000:0000:0000::1428:57ab
2001:0DB8:0:0:0:1428:57ab
2001:0DB8:0::0:1428:57ab
2001:0DB8::1428:57ab
都是合法的地址,并且他们是等价的。但 2001::25de::cade
是非法的。(因为这样会使得搞不清楚每个压缩中有几个全零的分组) 同时前导的零可以省略,因此
2001:0DB8:02de::0e13
等价于 2001:DB8:2de::e13
如果这个地址实际上是 IPv4 的地址,后 32 位元可以用 10 进制数表示;因此: ffff:192.168.89.9 等价于 ::ffff:c0a8:5909 ,但 不等价于 ::192.168.89.9 和 ::c0a8:5909 。
ffff:1.2.3.4 格式叫做 IPv4 映射地址,是不建议使用的。而 ::1.2.3.4 格式叫做 IPv4 一致地址。
IPv4 地址可以很容易的转化为 IPv6 格式。举例来说,如果 IPv4 的一个地址为 135.75.43.52(十六进制为 0x874B2B34),它可以被转化为 0000:0000:0000:0000:0000:0000:874B:2B34 或者 ::874B:2B34 。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为 ::135.75.43.52。
-=-=-=- 我是第一次和公司同事打麻将的分隔线 -=-=-=-
结论:当 zk 客户端以 IPv4 方式与监听 IPv6 地址的 zookeeper 建立 TCP 连接时,zookeeper 以 IPv4 映射地址形式表达所看到的 TCP 连接信息。