最近在最新的linux发行版中发现了一种新行为,其中doublestack套接字上的getnameinfo(..,NI_NUMERICHOST)
返回IPv4映射的IPv6地址,其范围标识符为::ffff:x.x.x.x%yyyyyyyyy
而不是::ffff:x.x.x.x
这种新行为导致现有应用程序出现一些破坏,这些应用程序似乎使用字符串解析从IPv4映射的IPv6地址中提取IPv4地址。没有其他测试过的操作系统可以做到这一点,包括稍早版本的linux。
我理解映射地址将被视为具有全局范围,因此不应具有范围ID。此外,我不知道故意这样做会有什么意义...... IPv4中不存在范围ID。这是合法行为还是网络堆栈中的回归?