内容简介:连接中断可以由server或者client中任一端发起,上图中为client发起,如果是server端发起,则流程中1,2,3,4步骤方向互换即可。TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第三次挥手完成后发送了第四次挥手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次挥手的FIN包,主动关闭端接到重发的FIN包后可以再发一
三次握手建立连接
- 初始阶段:client状态为CLOSED, server状态为LISTEN
- 1.SYN阶段:client向server发送SYN报文请求建立连接,client进入SYN-SEND状态
- 2.SYN/ACK阶段:server收到SYN报文,进入SYN-RCVD状态,回复SYN/ACK报文给client,并为这次连接分配资源。
- 3.ACK阶段:client收到AYN/ACK报文后向server回复SYN报文,并为这次连接分配资源。
- 至此连接建立。
四次挥手
连接中断可以由server或者client中任一端发起,上图中为client发起,如果是server端发起,则流程中1,2,3,4步骤方向互换即可。
- 初始阶段:client和server状态皆为ESTABLISHED
- 1.FIN阶段:client向server发送FIN发起中断请求,client进入FIN-WAIT-1状态,等待接收server的ACK
- 2.ACK阶段:server端接到FIN报文(即client向server宣告没有数据要继续传输了,但是如果server端还有数据没有向client传输完成,那么不需要此时关闭socket,数据可以继续传输,只需要回复client ACK即可), server向client回复ACK报文,并进入CLOSE-WAIT状态, client在收到ACK之后进入FIN-WAIT-1状态,等待接收server的FIN
- 3.FIN阶段:server端数据传输完成,向client端发送FIN报文,进入等待client ACK阶段
- 4.ACK阶段:client在收到server的FIN报文后,向server回复ACK报文,但是client并不确认server是否一定能收到ACK报文,所以等待2MSL之后才会关闭client自己,server在收到ACK报文后会立即关闭
- client在等待2MSL后依然没有收到server回复,证明server已正常关闭, client自动关闭
TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第三次挥手完成后发送了第四次挥手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次挥手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
MSL(Maximum Segment Lifetime): RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
參考資料
《TCP IP详解卷一》
TCP协议中的三次握手和四次挥手(图解) : https://www.cnblogs.com/thrillerz/p/6464203.html
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 握手过程中,非对称密钥的应用
- 深入OpenFlowPlugin源码分析OpenFlow握手过程(一)
- 深入OpenFlowPlugin源码分析OpenFlow握手过程(二)
- TCP三次握手和四次挥手过程
- 抓包神器:Wireshark 实例分析TCP三次握手过程
- 【技术分享】OpenSSL握手重协商过程中存在漏洞可导致拒绝服务
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。