如果 SYN 半連接隊列已滿,只能丟棄連接嗎?
並不是這樣,開啓 syncookies 功能就可以在不使用 SYN 半連接隊列的情況下成功建立連接,在前面我們源碼分析也可以看到這點,當開啓了 syncookies 功能就不會丟棄連接。
syncookies 是這麼做的:服務器根據當前狀態計算出一個值,放在己方發出的 SYN+ACK 報文中發出,當客戶端返回 ACK 報文時,取出該值驗證,如果合法,就認爲連接建立成功,如下圖所示。
syncookies 參數主要有以下三個值:
-
0 值,表示關閉該功能;
-
1 值,表示僅當 SYN 半連接隊列放不下時,再啓用它;
-
2 值,表示無條件開啓功能;
那麼在應對 SYN 攻擊時,只需要設置爲 1 即可:
巨人的肩膀
[1] 系統性能調優必知必會.陶輝.極客時間.
[2] https://blog.cloudflare.com/syn-packet-handling-in-the-wild