サーバー機器・OS:サーバーの接続待ちキューのあふれはnstatのTcpExtListenOverflows・TcpExtListenDropsとログの「Possible SYN flooding」警告で確認、somaxconnを増やす(listenの引数とあわせて)、SYN Cookie。ネットワーク:ファイアウォール・DDoS対策のSYN制限を緩和。
数値の目安
Linux(Androidを含む)の最初のSYN再送は1秒後です。以前のカーネルはその後間隔を2倍ずつ延ばし、1、3、7、15秒…の時点で再送、6.5以降は1、2、3、4、5秒の時点で5回送り直した後に2倍ずつ(7、11、19秒…)間隔を延ばします(tcp_syn_linear_timeouts=4)。Androidスマホは、OSをアップデートしても発売時のカーネルを使い続けることが多いため、同じAndroidバージョンでも端末ごとに異なる場合があります。どちらの場合も、すべて失敗すると約2分後にあきらめます。Windowsはバージョンと設定によって1秒または3秒から延びていき、送り直す回数が2〜4回なので20〜30秒であきらめます(そのPCの値はnetsh int tcp show globalのMax SYN Retransmissionsで確認)。
グラフでは
接続直後・メンテ明けに急増 · 接続試行数、接続待ちキューのあふれ数
確認箇所
サーバーのnstatでTcpExtListenOverflows・TcpExtListenDropsとdmesgの「Possible SYN flooding on port」警告を確認し、ss -lntで待ち受けソケットのRecv-Q(acceptを待っている接続数)がSend-Q(backlogの上限)に達していないか確認。サーバー側のキャプチャで、SYNが届いているか、SYN-ACKを返しているかを確認
IP SysctlLinux kernel tcp_syn_retriesのデフォルトは6、tcp_syn_linear_timeoutsのデフォルトは4(SYNのRTOは1、1、1、1、1、2、4…)、最後の再送は67秒後・あきらめるのは131秒後、somaxconnのデフォルトは4096、tcp_syncookiesのデフォルトは1