三次握手和四次挥手学习记录

1.三次握手

三次握手中,是由客户端发起的,客户端首先发起一个SYN=1,ACK=0的请求,服务器端返回一个ACK=1的响应,客户端在发送一个ACK=1的响应,建立连接。

三次握手而不是两次握手的原因:如果存在网络延迟等意外情况,客户端发送的ACK=0,SYN=1的请求,在连接释放后的某个时间短才发送给服务器,这是服务器返回一个ACK=1的响应建立连接,但是客户端并没有发送响应,因此不会发送消息,而服务器端就一直等待消息,浪费资源。三次握手的话,客户端不会响应服务器的这次响应,那么就不会建立连接。

2.四次挥手

连接释放可能是客户端或者服务端发送的。当没有消息发送的时候,需要释放连接,客户端会发送一个FIN=1的没有数据的保温并进入等待,服务器端收到后给客户端发送一个确认,客户端不在发送消息,但接受消息,并进入等待,当服务器端消息发送完毕后,再次放松一个FIN=1的连接释放,客户端收到后,回复一个ACK=1的确认信息,又进去timewait等待,服务器收到后关闭连接。

等待两秒的原因是防止最后一个ACK的丢失,两秒是最大报文生存时间,服务器在超时后会重新发送FIN,这时客户端就知道ACK丢失,如果没有再次收到ACK=1的信息,则确认服务器端收到信息,释放连接。

猜你喜欢

转载自blog.csdn.net/qq_38256015/article/details/80638504