gpt4 book ai didi

language-agnostic - 更多 TCP 和 POSIX 套接字 listen() 和 accept() 语义

转载 作者:可可西里 更新时间:2023-11-01 02:33:26 24 4
gpt4 key购买 nike

情况:服务器调用 listen()(但不是 accept()!)。客户端向服务器发送 SYN。服务器获取 SYN,然后将 SYN/ACK 发送回客户端。但是,客户端现在挂断/死亡,因此它永远不会向服务器发回 ACK。连接处于 SYN_SENT 状态。

现在另一个客户端发送一个 SYN,从服务器得到一个 SYN/ACK,然后发回一个 ACK​​。此连接现在处于 ESTABLISHED 状态。

现在服务器终于调用了accept()。怎么了? accept() 是否在第一个错误连接上阻塞,直到发生某种超时?它是否首先检查队列中是否存在任何已建立的连接并返回这些连接?

最佳答案

好吧,您在这里描述的是多次执行的典型 syn-flood 攻击 ( http://en.wikipedia.org/wiki/SYN_flood )。

在以下位置查找示例时:http://lkml.indiana.edu/hypermail/linux/kernel/0307.0/1258.html有两个独立的队列,一个同步队列和一个已建立的队列。显然,第一个连接将保留在 syn 队列中(因为它处于 SYN_RCVD 状态),第二个连接将位于已建立的队列中,accept() 将从中获取它。 netstat 仍应显示第一个处于 SYN_RCVD 状态。

注意:另请参阅我的评论,客户端将处于 SYN_SENT 状态,服务器(我们正在讨论)将处于 SYN_RCVD 状态。

关于language-agnostic - 更多 TCP 和 POSIX 套接字 listen() 和 accept() 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com