V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
situs
V2EX  ›  问与答

关于 tcp 四次分手

  •  
  •   situs · 2018-06-28 16:21:04 +08:00 · 1927 次点击
    这是一个创建于 2370 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1、客户端主动断开的的情况下,客户端在收到服务端的 ack 后,客户端此时不再发送数据,单向通道已断开,然后该服务端发送 fin 等待客户端的 ack,我想问客户端到服务端的单向通道不是已经断开了吗怎么还能给服务端响应 ack ?还是说数据的传输和 ack 不是一个层次的?
    2、如果是服务端主动断开的话是几次分手??

    谢谢各位大佬
    7 条回复    2018-06-29 21:34:57 +08:00
    GeruzoniAnsasu
        1
    GeruzoniAnsasu  
       2018-06-28 18:45:01 +08:00   ❤️ 1
    不知怎么吐槽

    断开通道指的是逻辑上一个概念,又不是剪掉网线咔嚓物理上不通电了

    建议从头看书
    Lonely
        2
    Lonely  
       2018-06-28 18:47:20 +08:00 via iPhone   ❤️ 2
    四次分手……
    mringg
        3
    mringg  
       2018-06-28 18:50:02 +08:00 via iPhone
    挥手,分手太桑心了
    WhoMercy
        4
    WhoMercy  
       2018-06-28 19:01:56 +08:00
    1.
    i) 第二次挥手后,服务端断开连接,不再接收客户端新的连接请求 [但服务端可以向客户端发出连接] ;

    ii) 服务端最后向客户端发出确认断开 TCP 请求连接后,等待客户端响应(第三次挥手);

    iii) 客户端收到服务端确认断开 TCP 请求连接,通过该连接返回 ACK ;

    iv) 服务端收到 ACK,完成第四次挥(分)手。

    2.
    貌似没提到服务端要主动断开连接的情况,考是不会考的。
    因为挥手过程主要是对服务端有利(减少服务端等待的资源消耗)。
    理论上服务端不接收、不响应,连一次挥手都不需要,或者直接返回错误,就是一次挥手。
    (可能理解有误,如果有错,望大佬不吝告知)
    situs
        5
    situs  
    OP
       2018-06-28 20:28:55 +08:00
    @WhoMercy
    感谢讨论先~
    我明白了,我把“数据”和“报文里的数据”混在一起了,我以为二次挥手之后客户端不再发数据了,所以服务端再进行第三次挥手的时候然后客户端响应一个 fin 把我搞晕了。。客户端只是不发送带数据的报文了,还是可以发送不带数据只是带 fin 啊或者 ack 字段的报文的。
    关于 2 的话,明天我再搜搜相关的文章。
    Bryan0Z
        6
    Bryan0Z  
       2018-06-28 20:31:18 +08:00 via Android
    看到 4 次分手就点进来了
    lyog
        7
    lyog  
       2018-06-29 21:34:57 +08:00 via iPhone
    楼主可以搜一下啥是双工
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1182 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.