我的理解是
tcp6 用于通过 IPv6 的连接,tcp 用于通过 IPv4 的连接。
和
::ffff:127.0.0.1 表示映射到 IPv4 地址的 IPv6 地址。
但是当我使用 netstat 在像这样的端口上查找打开的连接时
netstat -anp | grep 31210
我得到输出
tcp 0 0 ::ffff:127.0.0.1:64876 ::ffff:127.0.0.1:31210 ESTABLISHED 23755/java
这意味着,IPv6 通信是使用 tcp 完成的。
这怎么可能?
TCP4 或 TCP6 协议不存在。它们可以用作分别表示 TCP 与 IPv4 和 TCP 与 IPv6 的速记,但这是对语言的滥用 - 使用的协议始终是 TCP。
由于 ISO/OSI 模型中的层分离,无论是伴随 IPv4 还是 IPv6 数据包(级别 3),TCP 段(级别 4)始终相同。
TCP 段中唯一改变的是校验和字段,根据IPv4 的RFC 793和IPv6 的RFC 2460计算,因为 IP 地址的大小在两个版本的协议之间不同。(我不确定Options字段的用法是否也不同。)但是,它仍然是相同的 ol' TCP。
是的,::ffff:127.0.0.1
表示映射到 IPv6 地址的 IPv4 地址(在本例中为环回)。