1、问题原因
svr挂掉了,端口释放了,cli去connect这个目的端口的时候正好选择了这个端口作为源端口,此时端口没人用,使用是合法的。于是自连接形成了。 就是出现源ip和源端口通目的ip和目的端口完全相同的情况,也就是在服务端没有启动,客户端也可以连接成功,但会造成服务端无法启动。
2、tcp连接分析
要建立一个tcp连接,首先svr要在b端口上listen,cli再使用a端口connect,端口选择一般是用户不显示bind,由内核代为选择一个空闲端口号,那么,即使svr和cli在一台机器上,因为svr已将b端口占用,cli不管用户bind还是内核选择,都不可能选到b。所以这样看来,同一个端口自连接就是一个伪命题。
同时打开
在同时打开的过程中,我们站在一方的角度想,它①先发了一个SYN,然后②收到了对端的SYN(而不是SYN+ACK),这时③回复SYN+ACK,当④再次收到SYN+ACK时就认为建连成功。对于自连接过程:为了建立连接,向destport发送一个SYN(完成了步骤①)