释放连接-状态解读
FIN-WAIT-1:表示主动关闭连接
向对方发送FIN报文,进入FIN-WAIT-1状态
CLOSE-WAIT:表示等待关闭
对方发送FIN给自己,自己回应ACK给对方,进入CLOSE-WAIT状态
需要考虑自己是否还有数据要发送,没有,就发送FIN给对方
FIN-WAIT-2:只要对方发送ACK确认后,主动方就处在这个状态
CLOSING:一种比较罕见的例外状态
表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文,如果双方几乎在同时准备关闭连接的话,那么就出现了双方同时发送FIN报文的情 况,也即会出现CLOSING状态,表示双方都正在关闭连接
LAST-ACK:被动关闭一方在发送FIN报文后,最后等待对方的ACK报文
当收到ACK报文后,即可进入CLOSED状态了
TIME-WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可进入 CLOSED状态了
如果FIN-WAIT-1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME-WAIT状态,而无须经过FIN-WAIT-2状态
CLOSED:关闭状态
由于有些状态的时间比较短暂,所以很难用netstat命令看到,比如SYN-RCVD、FIN-WAIT-1等
为什么释放连接需要四次?
全双工模式
第一次挥手:主机1发出FIN报文
表示主机1告诉主机2,主机1已经没有数据要发给主机2,但是主机2还是可以发数据给主机1
第二次挥手:当主机2返回ACK报文
表示主机2知道主机1没有数据要发送,但是主机2还是可以发送数据给主机1
第三次挥手:当主机2发出FIN报文
表示主机2告诉主机1,主机2已经没有数据要发给主机1
第四次挥手:当主机1返回ACK报文
表示主机1知道主机2没有数据要发送
TCP释放连接 细节
有时候在抓包时,可能只看到3次挥手
是将第二第三次合并了
当server接收到client的Fin时,如果server后面也没有数据要发送
server可以将2,3次挥手合并,同时告诉client
已经知道client没有数据发
server没有数据要发了
网友评论