TCP三次握手和四次挥手协议

栏目:Web开发 作者:admin 日期:2015-06-13 评论:4 点击: 6,389 次

前言

在面试的过程中,TCP的传输协议经常会出现。以前我参加面试的过程中就被问到过,现在轮到我面试其他人的时候,我也会问一些相关的问题。作为一名开发者,无论使用什么样的开发语言,最基本的网络知识一定要理解透彻,这样才能获得更好的职业发展。

TCP链接协议概述

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
 

建立连接的过程

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

断开连接的过程

断开连接端可以是Client端,也可以是Server端。假设Client端发起中断连接请求,就先发送FIN报文。Server端接到FIN报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以服务器端先发送ACK,告诉Client端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端:服务器这边数据发完了,准备好关闭连接了。Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,所以发送ACK后进入TIME_WAIT状态, Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,最后,Client端也可以关闭连接了至此,TCP连接就已经完全关闭了!关闭连接的过程如下图所示:

声明: 本文由金丝燕网原创编译,转载请保留链接: TCP三次握手和四次挥手协议,更多交流: Java学习群

TCP三次握手和四次挥手协议:目前有4 条留言

  1. 4楼
    Yuan:

    很不错的文章,特别的图解

    2016-11-23 下午5:22 [回复]
  2. 地板
    路人丙:

    不错!简捷易懂。

    2016-09-13 下午3:11 [回复]
  3. 板凳
    流行天下:

    Server端接到FIN报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以服务器端先发送ACK,告诉Client端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。这个时候Client端就进入FIN_WAIT状态。
    这里如果服务器没有数据需要发送,是不是可以直接向Client端发送FIN报文啊,而不用在发送ACK了啊?是不是就可以变成三次挥手了啊

    2016-05-09 下午6:10 [回复]
  4. 沙发
    蛋蛋:

    我觉得很棒!学习了。当我想评论的时候,才发现,这个网站没有注册,请问这是您自己做的网站么?

    2016-01-20 下午5:15 [回复]

发表评论