tcp nonblock connection rst

客戶端(>5w)異步connect鏈接到server端,server端listen backlog設置爲1024,發現存在部分客戶端創建鏈接後,收到服務端的rst包。linux

先看下tcp監聽套接字維護的兩個隊列(來自Unix網絡編程)編程

測試模擬抓包以下:網絡

解釋:異步connect過快,致使server端listen已完成鏈接隊列滿了,後面接着來的connect請求放到未完成鏈接對列(SYN--->SYN,ACK, 等待客戶端的ACK)中,當客戶端的握手包ACK到來時,因爲已完成鏈接隊列已滿,沒法繼續接受鏈接,所以丟棄該ACK,而未完成隊列一段時間後仍爲收到ACK,會重傳SYN,ACK包,這就出現了下圖所示的屢次重傳,默認重傳5次(可經過sysct -a | grep synack查看和設置。)5次重傳後,將該未完成鏈接從未完成鏈接隊列移出。而客戶端看來鏈接正常,接着發送速度,收到服務端的RST包。異步

詳解介紹請看:http://blog.csdn.net/justlinux2010/article/details/8604676tcp

相關文章
相關標籤/搜索