【问题标题】:Doubt in Three way handshake in TCP and Unix listen functionTCP和Unix监听功能中的三向握手的疑问
【发布时间】:2009-09-22 15:02:44
【问题描述】:

Connect 函数在发送最后一个 ACK​​(发起 TCP 连接的 3 次握手的第 3 段)后返回。如果这第 3 段丢失了会发生什么,因为 listen 仍在服务器上等待 ACK 但客户端没有人再次发送该 ACK?

【问题讨论】:

    标签: tcp


    【解决方案1】:

    如果客户端用数据包发送它的ACK,并且它丢失了,客户端会注意到数据还没有被服务器确认并重新发送数据包。

    如果客户端在一个单独的数据包中发送它的 ACK,但它丢失了,服务器会注意到 SYN/ACK 没有被客户端确认并重新发送数据包。客户端将通过重新发送 ACK 来响应。

    此时应用程序的连接调用是否仍处于阻塞状态并不重要,因为 ACKing 是由操作系统的 TCP/IP 实现完成的。

    【讨论】:

    • 您说 ACKing 是由 OS 实现完成的,但最终连接和侦听功能完成了 3 次握手。那么完成握手的另一件事是什么?
    • aditya:当操作系统内核注意到某种内核计时器已过期时,它会异步执行此操作。
    • wallenborn:这是真的,除非服务器使用 syncookies,在这种情况下,它不会注意到 syn/ack 没有被确认(因为它没有记录它发送的 syn/ack )。
    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多