tcp_max_syn_backlog谣拣、SOMAXCOON
socket維護(hù)了兩個(gè)隊(duì)列,一個(gè)是半連接隊(duì)列一個(gè)是完成連接隊(duì)列
隊(duì)列長(zhǎng)度由以下內(nèi)核參數(shù)來確定:
半連接隊(duì)列:tcp_max_syn_backlog 這個(gè)值設(shè)置過小在syn半連接攻擊中導(dǎo)致正常用戶的請(qǐng)求被拒絕族展,設(shè)置過大會(huì)導(dǎo)致比較消耗內(nèi)存資源森缠,若要設(shè)置很大建議和syncookies機(jī)制一起使用可以避免使用掉大量的內(nèi)存。
完成連接隊(duì)列:min(backlog, somaxconn) 由兩個(gè)參數(shù)最小值決定仪缸,backlog是在套接字里指定參數(shù)屬于userspace里的參數(shù)贵涵,過大時(shí)會(huì)被內(nèi)核參數(shù)somaxconn覆蓋
解決syn flood的方法有多種,例如恰画,縮小listen()維護(hù)的兩個(gè)隊(duì)列的最大長(zhǎng)度宾茂,減少重發(fā)syn+ack的次數(shù),增大重發(fā)的時(shí)間間隔拴还,減少收到ack的等待超時(shí)時(shí)間碎绎,使用syncookie等挚躯,但直接修改tcp選項(xiàng)的任何一種方法都不能很好兼顧性能和效率靡挥。所以在連接到達(dá)監(jiān)聽者線程之前對(duì)數(shù)據(jù)包進(jìn)行過濾是極其重要的手段明刷。
reference:socket與tcp連接過程