什么是TCP?
TCP:传输控制协议 是面向连接的协议。在收发数据前,双方都要建立可靠的连接。一个TCP连接必须经过三次“对话”才能建立起来。
三次握手的简述
第一次握手成功 让服务器端知道客户端具有发送能力。
第二次握手成功 让客户端知道服务器具有接收和发送能力。但此时服务器端不知道客户端是否接收到了自己的信息
第三次握手成功 服务器端知道客户端接收到信息,建立连接
四次挥手简述
第一次挥手 客户端发送一个FIN报文,用来关闭客户端到服务器的传输数据,此时客户端处于FIN_WAIT_1状态
第二次挥手 服务器端收到FIN报文,会发送ACK报文,并且第二次挥手 当服务器端收到FIN之后,会发送ACK报文,并且把客户端的序列号增加1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务器端处于CLOSE-WAIT状态
第三次挥手 如果服务器端同意关闭连接,则会向客户端发送一个FIN报文,并且指定一个序列号,此时服务器端处于LAST-ACK的状态
第四次挥手 当客户端收到ACK之后,处于FIN-WAIT-2状态。待收到FIN报文时发送一个ACK报文作为应答,并且把服务器端的序列号值+1作为自己ACK报文的序列号值,此时客户端处于TIME-WAIT状态。等待一段时间后会进入CLOSE状态,当服务端收到ACK报文之后,也会变成CLOSE状态,此时连接正式关闭。
为什么建立连接通信了三次,而断开连接却用了四次?
因为当服务器端接受到FIN报文后,发送的ACK报文只是用来应答,并不表示服务器端也希望立即关闭连接。
当只有服务器端把所有的报文都发送完,才会发送FIN报文,告诉客户端可以断开连接了。