今天我注意到这样一个情况:
[[email protected] ~]#netstat -taupen | grep 54310
tcp 0 0 ::ffff:10.0.12.209:54310 ::ffff:10.0.12.209:54310 TIME_WAIT 0 0 -
您会注意到源套接字与目标套接字相同。可能吗 ?有人可以解释一下。
今天我注意到这样一个情况:
[[email protected] ~]#netstat -taupen | grep 54310
tcp 0 0 ::ffff:10.0.12.209:54310 ::ffff:10.0.12.209:54310 TIME_WAIT 0 0 -
您会注意到源套接字与目标套接字相同。可能吗 ?有人可以解释一下。
TCP 连接通常是通过使用侦听套接字建立的。但这不是要求。TCP 标准允许两端发送一个 SYN 数据包,而其中任何一个都不会进入 LISTEN 状态。
在这样的连接建立期间,每个对等点将发送一个 SYN 和一个 ACK 作为两个单独的数据包。因此,当它们达到 ESTABLISHED 状态时,将发送四个数据包(而不是通常的三个数据包)。
这是状态图中从 CLOSED 到 SYN SENT 到 SYN RECEIVED 到 ESTABLISHED 的路径。
这样做的一个副作用是,当 TCP 端点连接到自身时它也可以工作。它很少有用,但标准允许。以这种方式建立的套接字将返回它发送回自己的所有数据。您可以使用以下方法对其进行测试:
nc -p 12345 ::1 12345
您会注意到状态图还允许从 LISTEN 到 SYN SENT 的转换。因此,该标准确实允许使用侦听套接字来启动客户端连接。我不知道 Linux 是否已经实现了对该特定序列的支持,该
nc
命令似乎不支持它,因此可能需要一些编码来测试。