[TCP/IP] TCP在listen时的参数backlog的意义
linux內核中會維護兩個隊列:
??1)未完成隊列:接收到一個SYN建立連接請求,處于SYN_RCVD狀態
??2)已完成隊列:已完成TCP三次握手過程,處于ESTABLISHED狀態
??3)當有一個SYN到來請求建立連接時,就在未完成隊列中新建一項。當三次握手過程完成后,就將套接口從未完成隊列移動到已完成隊列。
??4)backlog曾被定義為兩個隊列的總和的最大值,Berkely實現中的backlog值為上面兩隊列之和再乘以1.5。
5)如果當客戶端SYN到達的時候隊列已滿,TCP將會忽略后續到達的SYN,但是不會給客戶端發送RST信息,因為此時允許客戶端重傳SYN分節。如果啟用syncookies (net.ipv4.tcp_syncookies = 1),新的連接不進入未完成隊列,不受影響
6)backlog 即上述已完成隊列的大小, 這個設置是個參考值,不是精確值. 內核會做些調整
?
SYN 洪水攻擊(syn flood attack)
通過偽造IP向服務器發送SYN包,塞滿服務器的未完成隊列,服務器發送SYN+ACK包 沒回復,反復SYN+ACK包,使服務器不可用.
啟用syncookies 是簡單有效的抵御措施.
啟用syncookies,僅未完成隊列滿后才生效.
轉載于:https://www.cnblogs.com/taoshihan/p/11217212.html
總結
以上是生活随笔為你收集整理的[TCP/IP] TCP在listen时的参数backlog的意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [TCP/IP]TCP服务端accept
- 下一篇: [TCP/IP] TCP如何实现流量控制