学习笔记-TCP的三次握手四次挥手

TCP的三次握手四次挥手

形象的理解是创建连接的时候进行三次通信,断开连接的时候进行4次通信

创建连接的三次通信

第一次

客户端------>服务端

客户端发送请求到服务端,此时客户端并不确定自己的发送功能是否正常,接收功能也不确定

服务端接收到客户端的请求之后

服务端能够确定的是:客户端的发送功能正常,自己的接收功能正常

此时服务端并不确定的是:自己的发送功能是否正常,客户端的接收功能是否正常

因此需要进行确认

第二次

服务端----->客户端

服务端向客户端发送请求

如果客户端收到请求

那么客户端能够确认的是:自己的发送功能正常,自己的接收功能正常,服务端的接收功能正常,服务端的发送功能正常

讲道理客户端就已经确认完成所有功能正常了,那么此时服务端还没有,因为服务端发送请求给客户端之后服务端并没有确认自己的的发送功能能否正常使用,因此还需要等待客户端发送确认消息

第三次

客户端----->服务端

虽然客户端能够确认一切功能正常,那么服务端还没有,所以客户端再次发送请求给服务端,服务端接收到请求后服务端就确认自己发送的消息客户端已经收到了,那么就说明自己发送功能正常

通过三次相互通信就保证了客户端和服务端都能够确认对方的收发送功能均处于正常状态

四次挥手(断开连接请求):

当客户端需要断开连接的时候同样需要客户端和服务端双方都确认对方已经断开连接,根据三次握手的原则,这里也确实是只需要三次就相互确认了,但是实际上是发送了四次

第一次

客户端----->服务端

当客户端想要断开的时候就向着服务端发送请求,一旦客户端发送这个断开连接请求后,客户端就不能再主动发送任何数据,那么客户端则需要进行等待服务端的确认

第二次

服务端----->客户端

服务端在接收到客户端的数据之后会发送确认信息给客户端,表明客户端已经接收到了服务端的断开连接请求,但是这里还不能直接同意断开,因为服务端以前发送的数据可能还在参与运算,这种运算还没有结束,需要将这些事务处理完成之后再发送一次请求

第三次

服务端----->客户端

服务端将数据处理完成之后再次发送一个请求,表示已经处理完成,同意断开连接

第四次

客户端----->服务端

在客户端收到两次服务端的回复后客户端可以确认的是客户端已经收到了自己的断开连接请求,并且服务端已经将自己的事务处理完成并同意断开连接

这次发送是客户端底层被动发送确认信息,因为客户端在第一次发送的时候就已经没有发送数据的功能了,所以这里是系统的自动答复

需要注意的是并不是客户端发送完这次请求之后就立即断开,而是需要等2MSL时间后断开

MSL时间:

MSL时间表示从客户端发送请求到服务端的单边最长用时

这里等待2MSL表示一个来回,其意义在于,如果自己在收到客户端两次请求后发送的确认请求并不一定服务端就收到了

对于服务端而言在发送完第三次确认请求之后就会进入等待2MSL状态,如果在这个时间之内没有收到客户端的第四次请求,则表明自己发送的第三次请求客户端没有收到,那么服务端会再次发送第三次请求

那么对于客户端而言,等待2MSL的意义在于,如果自己发送的第4次请求服务端没有收到,则服务端一定会再次发送第三次请求,自己一定会再次接收到第三次请求,如果自己在2MSL的时间内还没有收到服务端发送的第三次请求,则表表明服务端已经收到了自己发送的第四次请求

所以之所以一定要等待2MSL,意义就在于能够确保信息一个来回的时间足够双方都确认

一旦2MSL时间没有收到服务器的第三次请求,那么客户端就直接关闭

猜你喜欢

转载自blog.csdn.net/weixin_43959953/article/details/84984338