计网回顾---三握四挥

三次握手-开始连接

首先Client端发送连接请求报文,Server端接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server端发送ACK报文,并分配资源。这样就建立了TCP连接。

为什么是三次而不是两次或者四次

首先说一下为什么不是两次?

比方说客户端发起了一个Syn包,但是这个包滞留在了网络中而迟迟没有到达,这样由于TCP的重传机制,他就会又发送一个Syn包过去,这时由于两次握手,这样就建立起了连接。这样看起来确实没问题,但是如果断开连接后,我们滞留在网络中的那个Syn包这时突然到达了服务器中,这时又由于两次握手,所以服务器和客户端建立了连接,但是客户端已经断开了。。。。。

所以这样就出错了,所以就需要三次握手。

那为什么不是四次?

说实话,这个问题有点那啥。。。我三次能稳定的搞定的东西,那我何必四次。

四次挥手-断开连接

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

猜你喜欢

转载自blog.csdn.net/why1092576787/article/details/114792018