【问题标题】:Regarding TCP SYN flood: Why is half-open connections worse than established connections?关于 TCP SYN flood:为什么半开连接比已建立的连接更糟糕?
【发布时间】:2013-03-08 01:09:00
【问题描述】:

这不是出于黑客目的。我正在学习计算机科学,我只是好奇。

所以.. 当主机 A 向主机 B 发送 TCP SYN 时,主机 B 分配空间用于接收缓冲区等,将 SYNACK 发送回主机 A,主机 A 也分配这些空间,然后将 ACK 发送回主机 B。连接是然后成立。

但是为什么半开连接(从 A 发出的最后一个 ACK​​ 永远不会发送)比完全建立的连接更能破坏主机 B?

【问题讨论】:

    标签: tcp ddos denial-of-service


    【解决方案1】:

    半打开的连接不会比完全打开的连接占用更多的资源,而且它们中的一堆也不会比完全打开的连接更容易、快速或确定地压倒服务器。

    但是您只需要向服务器发送一个数据包以使其创建半开放连接,而您需要完成 TCP 握手(1 次发送,1 次接收,另一次发送)以创建完全开放的连接。因此,您可以从欺骗性 IP 地址创建大量半开放连接,或者从 DDoS 平台快速生成数百万个连接。您不必处于接收SYN|ACK 回复的位置。您甚至不必关心服务器是否能够足够快地产生这些回复。

    这假设没有 SYN cookie 或其他针对半开连接的防御措施。

    【讨论】:

    • 非常感谢! :) 那么在服务器超载时,半开放或完全建立的连接几乎是一样的?我们让它半开的唯一原因是因为没有理由从主机 A 发送 ACK? (假设我们不关心我们是否使用自己的源 IP,否则原因是我们不能)所以差不多......半开放和全开放连接占用相同数量的资源,但是完全开放需要我们发送另一个 TCP 段吗?
    • 只是补充一点信息,半开放的连接实际上比完全建立的连接使用更少的资源。来自lwn.net/Articles/277146:“在新连接完全打开之前,Linux 不再使用完全连接所需的所有内存。相反,它在此期间使用“minisock”。minisock 是一个 96 字节的 struct tcp_request_sock 结构,具有最小值完全打开连接所必需的状态。完全建立的 struct tcp_sock 为 1616 字节。两种结构大小测量均参考 64 位内核。这有助于缓解 DOS 攻击。
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多