三次握手
TCP的三次握手是怎么进行的:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给客户端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;最后,客户端发送一个SYN=0,ACK=1的数据包给服务端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯
*SYN:同步标志
*ACK:确认字符
四次挥手
假设客户端发起中断连接请求,也就是发送FIN报文给服务端,意思是说”客户端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据,这是第一次挥手。 服务端收到FIN报文后因为你还有数据没有发送完成 所以先发送ACK,”告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”,这是第二次挥手。客户端收到ACK后就进入FIN_WAIT状态,继续等待服务端的FIN报文。当服务端确定数据已发送完成,则向客户端发送FIN报文,”告诉客户端,好了,我这边数据发完了,准备好关闭连接了”,这是第三次挥手。客户端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕服务端不知道要关闭,所以发送ACK后进入TIME_WAIT状态这是第四次挥手,如果服务端没有收到ACK则可以重传。“,服务端收到ACK后,”就知道可以断开连接了”。客户端等待了2MSL后依然没有收到回复,则证明服务端已正常关闭,那好,我客户端也可以关闭连接了。Ok,TCP连接就这样关闭了!
*FIN:结束标志