tcp连接方式拟人化详解

t c p tcp 连接方式详解

我们知道tcp是一种传输层的协议,主要用来控制传输数据,并且是面向连接的;

t c p tcp 整个传输过程中总共分为三个阶段:传输之前(建立连接)、传输中、传输后进行关闭连接。

1. 传输之前(建立连接)

1.1 建立连接的方式

  1. 方式:三次握手
    • 对应形象的描述:
      • 为何有 t c p tcp t c p tcp 三次握手就好比住在河对岸两个青梅竹马在一个大雾的早上一起上学,由于看不清楚需要通过招手去确认是不是对方
      • t c p tcp 连接的步骤:
        1. 男主首先向女主招手(syn)
        2. 女主对男主微笑一下(ack)
        3. 男主对女主确认是否是对他微笑,说不定是情敌呢,所以男主再向女主招手(syn),通过女主的微笑确认(ack)就可以进行下一步了;
        4. 进入连接状态(established),男主向女主发送确认信息(syn)
      • tcp的最终优化方案:
        • 由于3的确认可以由女主主动发出确认消息这样就可以将2、3一次到位了,女主微笑(ack)表示确认这个消息招手(syn)表示确认是和男主说话

1.2 双方何时处于半打开状态以及何时处于全打开状态

  1. 处于半打开状态?
    • 答:由于彼此都是没来得及看到对方的确认消息,故这样的时候都是半打开状态。
      • client发送需要建立连接的指令(syn)此时将自身的syn_sent设为半打开状态;
      • server发送了确认(ack+syn)的指令,此时将自身的syn_rcvd设为半打开状态;
  2. 处于全打开状态?
    • 答:收到彼此确认消息进行连接的建立。
      • client收到来自server的确认连接(ack+syn)的指令,此时将自身的syn_rcvd设为半打开状态;
      • server收到client最后发来的ack确认消息,将自身的syn_sent设为打开状态。

1.3 动画演示如下:

三次握手.gif

2. 传输中

2.1 传输的方式

  1. 形象地描述:

    • 传输中就是男主和女主确认身份之后进行传输信号,由于距离较远需要进行的一系列确认操作;
  2. 会产生三种情况,分别如下:

    1. 正常情况下,男主说一句(发送data)女主能够有时间去回复一句(确认收到)(不是碎碎嘴,聊得不错);
    2. 周围噪音比较大,男主说了一句(发送data)女主没有听到,男主没有收到女主的确认消息(确认收到指令)但是男主不沮丧这时候就需要男主再和女主说话(再次发送data)(tcp重传);
    3. 男主是个碎碎嘴,尤其语速还很快,一次连续说很多话(连续发送多个data),这时候有听不到的,那么就像上面一样男主,依旧不沮丧继续说刚刚女主没回复的内容(重传没有收到确认的内容);
  3. t c p tcp 传输是一种全双工,A可以向A发出发送消息的指令,同时B也可以向A,只要连接已经确认。

2.2 动画演示如下:

传输中.gif

3. 传输之后(关闭连接)

注意:

  • 这里的传输之后并不是有一个特别的标志或者指数据传输完毕,而是指传输的两个节点其中有一个发送了结束传输的信号就开始算是传输之后,所以与我们理解的传输之后还是有一定的差别,这里特别指出来。

3.1 关闭的方式

  1. 方式:四次握手
    • 男主挥手(fin)——女主伤感地微笑(ack)——女主挥手(fin)——男主伤感地微笑(ack)。
  2. 为什么连接的时候2/3可以两步并做一步走,但是关闭的时候却不行呢?
    1. 因为男主挥手(fin)之后,但是人还没走,(可能因为舍不得女主吧,嘿嘿),所以可能依旧在听着女主说话(传输指令或者data),直到等女主说完了之后向他挥手(fin)这时候才是彻底结束此次对话;
      • 男主人未走但是已经挥手这种状态叫做「半关闭」状态
    2. 之所以连接的时候可以并做一步走是因为连接的时候彼此都在,无需担心有没有离开因为本身就是为了连接,之前没有连接自然就没有数据的遗漏;而关闭本身就是为了离开自然就会有两种状态的分离,此时另一方(server)发出的消息可能就没有听到,有消息的遗漏,所以必须两步走。

3.2 动画演示如下:

四次握手.gif

参考文章:

  1. TCP协议三次握手和四次握手机制-动画详解

猜你喜欢

转载自blog.csdn.net/weixin_42295969/article/details/106281198