美文网首页真相系列
tcp真得需要三次握手才能建立连接吗

tcp真得需要三次握手才能建立连接吗

作者: 银角代王 | 来源:发表于2021-05-06 18:27 被阅读0次

    从网上一搜一大把的三次握手流程图示

    image.png

    首先我们来看一下tcp主要实现的功能

    1. 在两端之间建立一条全双工连接
    2. 保证连接之间的数据包不丢、不重、有序
    3. 控制连接之间数据流量(窗口控制)

    建立连接时首要保证两端可以互相通信

    首先是保证两端之间是可以相互发送、接收数据的

    A:你听见了吗?
    
            B:我听见了,你听见了吗?
    
    A:我也听见了
    
            B:好的
    
    

    假设只有一次握手,既A——>B,就像你给暗恋的女生写了一份情书,没有给你任何回复,你就一厢情愿得认为她已经是你的女朋友了,强行暗送秋波,人家是不会回应的。

    如果有两次握手,既A——>B——>A,这回有戏了,女生答应你了(也可能是惨遭拒绝),如果真是谈对象,关系基本就确立了。

    确保历史连接不被处理

    在网络世界里,事情有一点点变化。这次回到真实的网络环境,正常的连接情况如下:

    Client:填写IP:PORT,填写SEQ,发送连接请求
    
            Server:收到请求,将收到的SEQ加一填入ACK返回给Client
    
    Client:收到回复,判断ACK中的值是否为之前发送的SEQ加一,如果是,建立连接并回执给Sever,如果不是则发送RST通知Server连接无效
    
            Server: 收到回执,建立或者丢弃连接
    
    

    思考一种情况:

    A发起连接后很久没有收到B的回复,A又重新发起了一次对B的连接;

    接着B收到了A的前一次连接请求并回复;

    这个时候A就可以通过B返回的ACK中的值与自己当前的SEQ值对比,如果对比失败,就可以认为是无效连接,并通知到B丢弃无效连接。

    为什么不是一次或者二次握手

    我们前面讨论了只有一次握手肯定是不行的(单相思);

    那么如果只进行二次握手呢?也就是没有了A回执给B的那一步,这个时候连接建立的时机就变成了B收到A的请求的时刻,因为B并不清楚收到的请求是新的请求还是已经因为超时被A放弃的请求,B只能被动地建立连接进行初始化,当收到新的请求后,又需要断开之前建立的连接,造成资源浪费。

    相关文章

      网友评论

        本文标题:tcp真得需要三次握手才能建立连接吗

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