×
サイバー攻撃について
  • TCPヘッダーを検証する

  • 接続要求を管理する

  • SYN-ACKを生成して返す

  • ACKを待つ

  • 必要に応じてSYN-ACKを再送する

  • タイムアウトまで状態を管理する

つまり、攻撃者が小さな負担で、防御側へより大きな処理を発生させます。

この構造を、状態保持の非対称性と表現できます。


Linuxでは未完了接続をSYN backlogで管理する

TCPの待ち行列は、初心者向けには次の2段階で考えると理解しやすくなります。

SYN受信
  │
  ▼
SYN backlog
未完了の接続要求
  │ ACK受信
  ▼
accept queue
接続完了済みだがアプリが未受領
  │ accept()
  ▼
アプリケーション

Linuxでは、ACKをまだ受け取っていない接続要求がSYN_RECV状態として管理されます。

net.ipv4.tcp_max_syn_backlogは、ACKを受け取っていない接続要求を、リスニングソケットごとにどれだけ記憶するかに関係する設定です。

Linuxカーネル資料では、SYN_RECVのrequest socketは約304バイトを消費すると説明されています。したがって、「SYNを1件受けるたびに完全なTCPソケットと同じ大きさのTCBを割り当てる」と説明するのは、現在のLinux実装としては単純化しすぎです。


SYN backlogとaccept queueは別物