为什么是三次握手而不是两次握手为什么是四次挥手

来源:互联网 发布:数学建模软件 编辑:程序博客网 时间:2024/05/01 09:27

                                           为什么是三次握手捏:::

         三次握手可以简单看做是客户发送请求,服务器对客户的请求进行确认,客户对服务器的确认再进行确认。

         如果采用两次握手,假设下面这种情况,客户向服务器发送请求,服务器没有对客户的请求进行确认(因为网络的延迟他可能没有收到这个请求)。客户收不到这个确认于是过一段时间他在向服务器发起连接请求并顺利完成数据传输,但是过了一段时间这个请求到达了服务器而服务器误以为这是一个新的连接请求于是对这个请求进行确认并发送确认给客户但是客户没有发起过连接请求因此它不会理会服务器的确认,服务器以为这个连接已经建立好了于是一直等待客户发送数据,这样就会造成服务器的资源浪费。如果采用三次握手上述情况客户不会向服务器的确认进行确认,这样服务器收不到确认它就知道客户没有要发起请求的连接,于是不会再等待。

        三次握手主要是为了防止已失效的连接请求报文突然到达服务器,造成服务器的等待和资源的浪费。

                              为什么是四次挥手捏:::

        在三次握手的过程中,SYN和ACK是一起发送的但是在四次挥手的时候FIN和ACK却不是一起发送的而是分开发送的,为什么呢???那是因为啊,TCP连接是全双工的也就是说接收到FIN只是说没有数据再发过来但是还是可以发送数据的,也就是接受到一个FIN只是关闭了一个方向的数据传输,另一个方向还可以继续发送数据。在四次挥手的时候也是这样前两次挥手只是确认关闭了一个方向的数据,加上后面两次挥手才真正的关闭了整个全双工连接。

       当socket在ESTABISHED状态时,他想主动关闭连接于是向对方发送FIN请求,发送完FIN请求后它处于FIN_WAIT_1状态,当对方确认ACK报文后则处于FIN_WAIT_2状态。FIN_WAIT_2表示半连接,也就是有一方要求关闭连接,另一方收到请求但是告诉她我还有一些数据要发送稍后会关闭。TIME_WAIT状态表示收到对方的FIN并发送出ACK.如果三次握手可能在关闭后还有一个方向没有关闭。

       

      

0 0
原创粉丝点击