为什么 tcp_syncookies 不能取代半连接队列?
tcp_syncookies 既省下了半连接队列所需的内存资源,又能避免 SYN 攻击,为什么不能取代半连接队列?
首先,tcp_syncookies 是因为没有一个专门用于保存 cookies 的队列才省下了内存资源,但也因此,服务端不会在第二/三次握手报文丢失的情况下重传第二次握手报文
其次,tcp_syncookies 虽然能避免 SYN 攻击,但无法避免 ACK 攻击(通过构造大量 ACK 去消耗服务端资源的攻击),编/解码 cookie 值都比较耗 CPU,攻击者可以利用这一点短时间内构造大量附带各种瞎编 cookie 值的第三次握手报文,服务端收到后傻傻去解码,发现不对后才丢弃,受到 ACK 攻击的服务端可能会因为 CPU 资源耗尽导致没法响应正常请求