为什么三次握手是三次?
三次握手指的是客户端在与服务端建立连接时发送三次信号,首先客户端给服务端发送SYN请求,
并且客户端进入SYN_SENT状态,这时候服务端监听到有新来的客户端要进行连接,于是服务端就给
客户端回复SYN和ACK请求,并且服务端进入SYN_RCVD状态;接下来客户端收到消息后就进入
ESTABLISHED状态,并且客户端给服务端发送ACK请求,当服务端接收到ACK的时候,服务端就进入
ESTABLISHED状态,然后双方就可以进行通信。
如果这个握手只进行两次,就不安全,无法确认双方的数据收发能力;同时四次没有必要,因为SYN
和ACK只是一个标志位,用一个数据包发送就可以了。
为什么挥手是四次?
四次挥手就是客户端与服务端断开连接的时候发送四次信号,客户端先给服务端发送 FIN 请求(客户
端进入 FIN_WAIT1状态 ),服务端收到FIN后(服务端进入CLOSE_WAIT状态),服务端就会给客户端发
送ACK确认请求( 客户端收到ACK后,就进入 FIN_WAIT2状态 ),当服务端任务完成之后,就会进入
LAST_ACK状态,就会给客户端发送FIN请求(客户端收到FIN后,就进入 TIME_WAIT状态),客户端接收
到FIN请求后就会发送ACK确认,这时候服务端接收到ACK后才会断开与客户端的连接(此时客户端与服务
端都进入CLOSED状态)。(如果服务端超过一个msl还没有接收到ACK确认请求,就会再次向客户端发送
FIN请求,在收到ACK回复就会断开与客户端的连接)
四次挥手是为了确认双方数据处理完毕,调用close才会发送FIN包,从而断开连接。