F5 GLOSSARY

SYN

SYNとは、TCPで接続を開始する際に、クライアントからサーバに送られるパケットのことです。TCPにおける接続開始は、以下の手順で行われます。

  1. まずクライアント側が「SYN」パケットを送信します。
  2. SYNパケットを受け取ったサーバ側が「SYN/ACK」パケットをクライアント側に返します。この時サーバは、接続情報を保持するための接続テーブル上に、接続に必要なリソースを確保し、「ハーフオープン」の状態になります。
  3. SYN/ACKパケットを受け取ったクライアント側は「ACK」パケットをサーバ側に返します。
  4. ACKパケットをサーバ側が受け取った時点で接続が確立されます。

このように、パケットを3回やり取りすることで接続を確立する方法を「3-way ハンドシェーク」と呼びます。これによってサーバは、自分が返信したパケットが通信相手に届くことを確認できます。しかしクライアントが送信元IPアドレスを偽装した場合には問題が発生します。この場合にはSYN/ACKパケットへのクライアントからの返信が届かないため、サーバ側はタイムアウトするまでハーフオープンの状態になり、無駄なリソースを消費するからです。この特性を悪用したDoS/DDoS攻撃が「SYNフラッド」です。

F5が提供する「F5 BIG-IP」はフルプロキシとして動作し、SYNパケットをサーバに転送する前にチェックすることで、SYNフラッドを防止します。またBIG-IP自らが多量のSYNパケットを受信した場合の保護のために、SYN Cookieという機能も装備しています。これは、MD5で算出した番号(これをCookieと呼びます)をSYN/ACKパケットのTCPシーケンス番号に設定し、これに対するACKパケットの内容から再度Cookieを算出するという手法です。これによってSYN/ACKパケット送出時点で接続情報を記憶する必要がなくなるため、SYNフラッドを受けた場合でも、メモリ リソースの逼迫を回避できます。


< Return to the glossary