TCP三次握手和四次握手

建立连接(三次握手)

为什么要三次握手?

答:防止无效的请求连接状态重新发送到服务端,如果服务器端返回给客户端确定连接,那么假设是两次握手的情况下,服务器端就以为一条连接已经建立,就会等待客户端的数据,但是客户端实际上并没有请求数据,而客户端并不知道,浪费了服务器端的很多资源。(为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

 

 断开连接(四次握手)

相比于建立连接时候的三次握手,服务器端的ACK和FIN没有一次发送,因为TCP连接是全双工模式,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据

 如图,客户端首先发起中断连接请求,即发送FIN,告诉服务端,我这边没有数据要发送给你了,但是你要是还有数据要发送。可以先不必关掉连接,服务器端收到后,发送ACK,也还可以继续发送数据。当服务器端也没有数据要发送时,就申请中断连接,发送FIN,告诉客户端,我也没有数据发送了,准备关闭连接了,客户端收到后回复ACK,表示收到服务端的请求。但是它不相信网络,害怕服务器端没有收到,还会再发消息,会进入timawait等待2MSL后没有再收到消息进入关闭状态