即使在我的 Linux 机器上禁用了 ipv6 并重新启动网络服务,并且没有为接口分配 ipv6 地址,我的一个守护进程(具体来说是 cassandra)在检查 netstat 时仍然使用 ipv4 映射的 ipv6 地址,例如::ffff:10.xxx.x.xx:9042
我检查了 strace,它正在使用sa_family=AF_INET, sin_port=htons(44315), sin_addr=inet_addr("127.0.0.1")
并且没有使用AF_INET6
。 是不是 ipv6 仍然处于活动状态? 为什么需要这个?
我问过这个问题网络工程我也不知道该问哪里。抱歉,请删除不相关部分的内容。
答案1
这应该有帮助。它说
IPv6应用程序与IPv4应用程序的兼容性
使用 AF_INET6 地址系列编写的套接字应用程序允许 Internet 协议版本 6 (IPv6) 应用程序与 Internet 协议版本 4 (IPv4) 应用程序(使用 AF_INET 地址系列的应用程序)协同工作。此功能允许套接字程序员使用 IPv4 映射的 IPv6 地址格式。此地址格式表示要表示为 IPv6 地址的 IPv4 节点的 IPv4 地址。IPv4 地址被编码为 IPv6 地址的低 32 位,高 96 位保存固定前缀 0:0:0:0:0:FFFF。例如,IPv4 映射地址可能如下所示:
::FFFF:192.1.1.1
当指定主机只有 IPv4 地址时,这些地址可以由 getaddrinfo() API 自动生成。