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

关于 TCP/IP 的一个问题

  •  
  •   pumpkin · 2016-12-20 09:12:36 +08:00 · 2323 次点击
    这是一个创建于 2897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在看 TCP/IP 协议卷的时候, TCP 服务连接后,断开之前如果不考虑报文丢失之类的话,服务端一直都是在确认客户端发送来的序列号和报告自己的窗口大小。但是服务器要是向客户端回传一个信息呢?比如 http 请求的时候回复一个网页,那么客户端是如何确认的呢?是这个时候服务器和客户端的角色交换了吗?如果交换的话,那是不是还得三次握手?

    13 条回复    2016-12-20 13:12:09 +08:00
    misaka19000
        1
    misaka19000  
       2016-12-20 09:18:29 +08:00 via Android
    不是很熟悉 TCP ,我记得好像有个 ACK 可以用于确认送达了吧?
    pagxir
        2
    pagxir  
       2016-12-20 09:20:57 +08:00 via Android
    你确定你认真看啦。你不知道 tcp 连接的数据传输是双向的么
    pumpkin
        3
    pumpkin  
    OP
       2016-12-20 09:23:24 +08:00
    @pagxir 我知道是双向的,可是双向是两边都是都同时扮演两个角色吗?
    HunterPan
        4
    HunterPan  
       2016-12-20 09:23:57 +08:00
    ack 你看到没有..
    SevenJ
        5
    SevenJ  
       2016-12-20 09:24:41 +08:00
    建立链接后, client 和 server 对于 TCP 来说就没啥区别,双方都 Ack, Seq, 你用 wireshark 可以抓包看下
    flicker317
        6
    flicker317  
       2016-12-20 09:25:06 +08:00
    TCP 是全双工的, 3 次握手完成, 建立连接后, 客户端与服务端是等价的, 一端发送信息, 另一端都要用单独的 ack 报文确认, 有时候 ack 会跟着数据报文捎带过去. http 协议是单工的, 一次 http 请求经过下面几个过程, http request(client), http request ack(server), http response(server), http response ack(client)
    nfroot
        7
    nfroot  
       2016-12-20 09:26:27 +08:00   ❤️ 1
    TCP 通讯的时候会反复确认“你 TM 收到这一段没?”,对方反馈收到了就传下一段。(实务中会多段一起发送,哪段没收到重发哪段)

    而 UDP 是一窝蜂的传过去,管你收不收得到。
    BOYPT
        8
    BOYPT  
       2016-12-20 09:27:51 +08:00
    “服务端一直都是在确认客户端发送来的序列号和报告自己的窗口大小”

    这里理解错了,应该是“双方一直都是在确认对方发送来的序列号和报告自己的窗口大小”
    pumpkin
        9
    pumpkin  
    OP
       2016-12-20 09:29:34 +08:00
    @flicker317
    @SevenJ
    这样啊,看来是我把 http 中的 server , client 和 TCP 中的搞混淆了。感谢各位
    pumpkin
        10
    pumpkin  
    OP
       2016-12-20 09:31:53 +08:00
    @BOYPT 那意思是维护一个链接,同时需要两个窗口么,一个是发送的时候用的,一个是接收的时候用的,可以这么理解么
    BOYPT
        11
    BOYPT  
       2016-12-20 09:45:54 +08:00
    @pumpkin 考虑通信双方的话,就 4 个了;
    BOYPT
        12
    BOYPT  
       2016-12-20 09:51:48 +08:00
    @pumpkin 不过发送方的“窗口”不是完整窗口,而是根据对方的接受窗口估算一个发送长度,一定要理解成对方窗口的同步状态也不是不行;
    easing
        13
    easing  
       2016-12-20 13:12:09 +08:00 via Android
    TCP 是双工的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1215 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:22 · PVG 02:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.