本文共 514 字,大约阅读时间需要 1 分钟。
两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。每一方必须发送一个SYN,且这些SYN必须传递给对方。这需要每一方使用一个对方熟知的端口最为本地端口。 当出现同时打开的情况时,状态迁移图就与标准的连接状态迁移图不一样了。两端几乎同时发送SYN并进入SYN_SENT状态。当每一端收到SYN时,状态变为SYN_RCVD,同时它们都再发SYN并对收到的SYN进行确认。当双方都接收到SYN及相应的ACK时,状态都变味了ESTABLISHED。 一个同时打开的连接需要交换需要交换4个报文段,比正常的三次握手多一个。没有任何一端称为客户或服务器,因为每一端既是客户又是服务器。
在标准的情况下通过一方发送FIN来关闭连接,但是双方都执行主动关闭也是有可能的,TCP协议也允许这样的同时关闭。当应用层发出关闭命令时,梁福安均从ESTABLISHED变为FIN_WAITE_1。这将导致双发各发送一个FIN,两个FIN经过网络传输后分别达到另一端。收到FIN后,状态由FIN_WAIT_1变签到CLOSING,并将发送最后的ACK。当收到最后的ACK时,状态变化为TIME_WAIT。