美文网首页TCP/IP协议程序员@IT·互联网
为什么TCP需要三次握手和四次挥手

为什么TCP需要三次握手和四次挥手

作者: purple_force | 来源:发表于2017-03-29 15:27 被阅读2836次

    本文希望以简单易懂的形式解释下这个问题,其具体的发包数据、过程等还请自行Google。纯属个人观点,如有不妥,还请各位看官指教。

    TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,采用全双工通信。

    那为什么需要三次握手呢?请看如下的过程:

    1. A向B发起建立连接请求:A——>B;
    2. B收到A的发送信号,并且向A发送确认信息:B——>A;
    3. A收到B的确认信号,并向B发送确认信号:A——>B。

    三次握手大概就是这么个过程。
    通过第一次握手,B知道A能够发送数据。通过第二次握手,A知道B能发送数据。结合第一次握手和第二次握手,A知道B能接收数据。结合第三次握手,B知道A能够接收数据。

    至此,完成了握手过程,A知道B能收能发,B知道A能收能发,通信连接至此建立。三次连接是保证可靠的最小握手次数,再多次握手也不能提高通信成功的概率,反而浪费资源。

    那为什么需要四次挥手呢?请看如下过程:

    1. A向B发起请求,表示A没有数据要发送了:A——>B;
    2. B向A发送信号,确认A的断开请求请求:B——>A;
    3. B向A发送信号,请求断开连接,表示B没有数据要发送了:B——>A;
    4. A向B发送确认信号,同意断开:A——>B。

    B收到确认信号,断开连接,而A在一段时间内没收到B的信号,表明B已经断开了,于是A也断开了连接。至此,完成挥手过程。

    可能有捧油会问,为什么2、3次挥手不能合在一次挥手中?那是因为此时A虽然不再发送数据了,但是还可以接收数据,B可能还有数据要发送给A,所以两次挥手不能合并为一次。

    挥手次数比握手多一次,是因为握手过程,通信只需要处理连接。而挥手过程,通信需要处理数据+连接

    以上纯属个人观点,如有不妥,还请各位看官指教。

    相关文章

      网友评论

      • 周晓飞_三月:挥手次数比握手多一次,是因为握手过程,通信只需要处理连接。而挥手过程,通信需要处理数据+连接。

        这句写的太好了:+1:
      • 3c41e44877cc:写的很好。通俗易懂 mark
      • purple_force:阿里巴巴基础设施事业群-体验技术团队(TXD)招人啊啊!
        【招聘岗位】交互/视觉设计师,前端/全栈工程师,正式和实习都要的!
        【业务涉及】行业最前沿的AI机器人、数据可视化分析与挖掘、企业级大型系统、后台运
        维/研发工具等等等~
        【地点】幸福的杭州,快来快来)و✧
        【投递】简历(设计师附作品集)发邮件到:txd-jobs@list.alibaba-inc.com,请注明来
        自简书purple_force
      • _Mitch:使用三次握手的原因,我觉得谢希仁版《计算机网络》中的反例说得很好:
        client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”:+1:
        _Mitch:@夜凉若水 服务端会有异常检测机制,它在一定时间内如果没有检测到有数据传输,就会发送心跳包(ACK 和当前 TCP 序列号减一的组合)到客户端,如果没有收到客户端的心跳回应,就会重复一定次数发送心跳,如果还是没响应,就直接关闭连接了。
        夜凉若水:@_Mitch 假如连接成功了,传输数据过程中客户端挂了,那服务端还继续等待传输吗?这时候服务端会怎么做呢?
        purple_force:这个例子是正规的解释,文中用一种简单的方式来解释下

      本文标题:为什么TCP需要三次握手和四次挥手

      本文链接:https://www.haomeiwen.com/subject/ykgeottx.html