TCP协议中的三次握手和四次挥手
为什么要进行三次握手?(是为了建立连接)
答:三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送和接收,而三次握手的主要目标就是双方确认自己与对方的发送和接收都正常。
第一次握手:客户端给服务器发送请求沟通的信息,服务器接收到信息(就类似于拨电话给服务器)
第二次握手:服务器给客户端发送接收到信息的确认信息,(类似于服务器接通电话了,然后给客户端说了个你好;)
第三次握手:客户端给服务器发送他可以接受到服务器的信息,确认了一下双方的沟通正常。(类似于客户端给服务器说我是谁,我要干嘛,通过这一次握手,服务器才和客户端真正的确认了对方的身份)
为什么要四次挥手?(是为了释放连接)
答:一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续吧没发完的数据发过来。
第一次挥手:A和B通电话,马上结束了,A对B说:我说完了要挂电话了,(本次通话A为晚辈,b为 前辈)
第二次挥手:B收到A的消息以后,给A说我知道了 确认要挂电话了(从计算机的角度来说,收到信息以后发一个确认信息过去,但是还以需要在发送一个自己要关闭连接的请求给对方)
第三次挥手:B给A在上次挥手给A发送了回应对方请求连接的信息以后,还要再发一次自己要断开连接的请求给对方
第四次握手:A接受到B的请求断开连接以后,发出同意的信息,这是第四次,这样他们就算双方都知道对面要断线的信息,才彻底断开连接。
官方定义:三次握手
第一次
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
官方定义:四次挥手
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。