クライアント サーバー
│ │
│ -------- SYN ---------------> │
│ │ 状態を保持しない
│ <---- SYN-ACK + Cookie -------│
│ │
│ ---- ACK + Cookie情報 ------> │
│ │ Cookieを検証
│ │ 接続状態を生成
一般化すると、Cookie値は次の情報から生成されます。
Cookie = F(
送信元IP,
宛先IP,
送信元ポート,
宛先ポート,
時刻情報,
サーバー秘密値,
TCPオプション情報の一部
)
正確なビット配置や使用するハッシュは実装に依存します。
「暗号化して格納する」というより、接続情報と秘密値から検証可能な値を生成し、初期シーケンス番号へ符号化すると説明する方が適切です。
SYN Cookieは万能ではありません。
RFC 4987は、SYN CookieにはTCPオプションとの互換性や将来拡張への制約があり得ると指摘しています。
Linuxでも、SYN Cookieは通常の高負荷を処理するための性能向上機能ではなく、SYN backlogがあふれた場合のフォールバック機能とされています。