我的理解是
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 完成的。
这怎么可能?
答案1
TCP4 或 TCP6 协议不存在。它们可以用作分别表示 TCP with IPv4 和 TCP with IPv6 的简写,但这是对语言的滥用——所使用的协议始终是 TCP。
由于 ISO/OSI 模型中的层分离,无论 TCP 段(第 4 级)是伴随 IPv4 还是 IPv6 数据包(第 3 级),它始终是相同的。
TCP 段中唯一改变的是校验和场,根据计算RFC 793对于 IPv4 和RFC 2460对于 IPv6,因为两个版本的协议之间的 IP 地址大小不同。 (我不确定是否选项字段的使用方式也不同。)但是,它仍然是相同的 TCP。
是的,::ffff:127.0.0.1
它表示映射到 IPv6 地址的 IPv4 地址(在本例中为环回)。