天天看點

listen--監聽數量

#include <sys/socket.h>

int listen(int sockfd, int backlog);

/* backlog指定了該套接口排隊的最大連接配接個數 */

調用listen導緻套接口從CLOSED狀态轉換到LISTEN狀态。

監聽視窗維持兩個隊列(隊列的大小與backlog有關):

未完成隊列,每個這樣的SYN分節對應一項;已由某個客戶發出并到達伺服器,而伺服器正在等待完成相應的TCP三向交握,此套接口處于SYN_RCVD狀态。

完成隊列,完成TCP三向交握過程的每一項;該套接口處于ESTABLISHED狀态。

  如果指定值在源代碼中是一個常值,那麼增長其大小需要重新編譯伺服器程式。那麼,我們可以為它設定一個預設值,不過允許通過指令行選項或者環境變量來覆寫該值。

listen--監聽數量
listen--監聽數量

  當一個客戶SYN到達時,若這個隊列是滿的,TCP就忽略該分節,也就是不會發送RST。

  這麼做的原因在于,隊列已滿的情況是暫時的,客戶TCP如果沒收收到RST,就會重發SYN,在隊列有空閑的時候處理該請求。如果伺服器TCP立即響應一個RST,客戶的connect調用就會立即傳回一個錯誤,強制應用程序處理這種情況,而不會再次重發SYN。而且用戶端也不無差別該套接口的狀态,是“隊列已滿”還是“該端口沒有在監聽”。

  向某一目标伺服器發送大量的SYN,用以填滿一個或多個TCP端口的未完成隊列。每個SYN的源IP位址都置成随機數(IP欺騙),這樣防止攻擊伺服器獲悉黑客的真實IP位址。通過僞造的SYN裝滿未完成連接配接隊列,使得合法的SYN不能排上隊,導緻針對合法使用者的服務被拒絕。

  防禦方法:

針對伺服器主機的方法。增加連接配接緩沖隊列長度和縮短連接配接請求占用緩沖隊列的逾時時間。該方式最簡單,被很多作業系統采用,但防禦性能也最弱。

針對路由器過濾的方法。由于DDoS攻擊,包括SYN-Flood,都使用位址僞裝技術,是以在路由器上使用規則過濾掉被認為位址僞裝的包,會有效的遏制攻擊流量。

針對防火牆的方法。在SYN請求連接配接到真正的伺服器之前,使用基于防火牆的網關來測試其合法性。它是一種被普遍采用的專門針對SYN-Flood攻擊的防禦機制。

listen--監聽數量

本文轉自cococo點點部落格園部落格,原文連結:http://www.cnblogs.com/coder2012/p/3472677.html,如需轉載請自行聯系原作者

繼續閱讀