zoukankan      html  css  js  c++  java
  • TCP客户端与服务端的爱恨情仇——三次握手四次挥手


    图片搬运自——TCP三次握手和四次挥手全过程及为什么要三次握手解答

    对比


      通过对“三次握手”和“四次挥手”的中间过程进行对比,可以发现“三次握手”和“四次挥手”的过程其实是差不多的,只不过“挥手”时把中间的过程拆分成两个过程。

    背景

      这一切都要从那时候说起......
      那一天阳光正好,Client 小姐与 Server 先生在公园邂逅了,Client 小姐望着 Server 先生清秀的脸庞,心中小鹿在乱踹,她想认识这位风度翩翩的秀儿,只是羞于表达,不知从何说起......

    进展

      最终,Client 小姐其中一个人格战胜了其它六百六十六个人格,她终于行动了。
      Client 小姐悄悄地走到 Server 先生身旁,用暗号试探道“SYN seq=5354?”;Server 先生心中窃喜,也想试探一番,并同时回复 Client 小姐,于是 Server 先生开口了,说道“SYN seq=28251ACK=5355”。
      Client 小姐微微一笑,回“ACK=28252”。
      就此,俩人有一搭没一搭的聊着天。

    离别

      在聊天过程中,Client 小姐发现 Server 先生是个海王,Server 先生也发现 Client 小姐是渣女;
      Client 小姐对 Server 先生说:“FIN=147258 (我不跟你聊了,再见)”;
      Server 先生说“ACK=147259 (哦)”;
      Server 先生继续补充“我觉得我配不上你”;
      Server 先生说“FIN=258369 (我不跟你聊了,再见)”;
      Client 小姐:“ACK=258370 (哦)”;

    思考

      四次挥手的二、三过程分开是因为要立刻给 “FIN的发送方” 回复(ACK),而 “FIN接收方” 自己的FIN 是要在自己数据传输完了才发送,如果此时还有很多数据需要传输,等到数据传输完,才一并发送 FIN 和 ACK,这个时间段就会过长,这期间 “主动断开方” 未收到回复,会多次发送 FIN 造成信道的浪费。

    拓展

    报文说明

    SYN = Synchronize(“同步”)
    ACK = Acknowledge(“承认”)

    报文格式


    TCP报文格式

    特殊情况

    在接收到“FIN”信号时,如果接收方没有数据要传输了,会把“ACK”和“FIN”合在一起发送,此时“四次挥手”也就变成了“三次挥手”——TCP协议三次握手和四次挥手抓包分析

    总结

    握手

    A: 我想跟你聊天;
    B: 好啊,我想跟你聊天;
    A: 好啊。

    挥手

    A: 我不跟你聊了;
    B: 好;
    A: 等我再说完这几句话,blah blah blah;
    B: 我不跟你聊了;
    A: 好;

    资料

    TCP-三次握手和四次挥手简单理解
    为什么是四次挥手不是三次挥手

  • 相关阅读:
    [BZOJ2969] 矩形粉刷
    数字 (number)
    字符串(String)
    小HY的四元组
    最大公约数(Max Gcd)
    [洛谷P2102] 地砖铺设
    Python OS模块(内置模块)
    json解析神器--jsonpath
    kafka 优势+应用场景
    Python之异常处理
  • 原文地址:https://www.cnblogs.com/life-of-coding/p/tcp.html
Copyright © 2011-2022 走看看