コンテンツにスキップ

FreeBSD/TCP Fast Open

出典: フリー教科書『ウィキブックス(Wikibooks)』

FreeBSDでのTCP Fast Open(TFO)の実装と利用方法について説明します。

FreeBSDでのTCP Fast Openのサポート:

  • FreeBSD 11.0以降でサポート
  • クライアントとサーバーの両方の機能をサポート
設定方法:
# TFOを有効化するためのsysctl設定

# クライアント側の設定
sysctl net.inet.tcp.fastopen.client_enable=1

# サーバー側の設定
sysctl net.inet.tcp.fastopen.server_enable=1
永続的に設定する場合は/etc/sysctl.confに追加
/etc/sysctl.conf
net.inet.tcp.fastopen.client_enable=1
net.inet.tcp.fastopen.server_enable=1
追加の設定オプション:
# TFOクライアントのキャッシュサイズ設定
sysctl net.inet.tcp.fastopen.client_max_entries=100

# サーバー側の最大受付数
sysctl net.inet.tcp.fastopen.server_max_entries=100

# TFOクッキーの生存時間(秒)
sysctl net.inet.tcp.fastopen.server_cookie_lifetime=3600
アプリケーション側の対応:
// サーバー側でTFOを有効にする例
int qlen = 5;  // TFOキューの長さ
setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen));

// クライアント側でTFOを使用する例
// connectの代わりにsendtoを使用
sendto(sockfd, data, data_len, MSG_FASTOPEN,
       (struct sockaddr *)&server_addr, addr_len);
モニタリングと診断:
# TFO統計情報の確認
netstat -s | grep TFO

# TFOの接続状態確認
sockstat -4 | grep TCP

制限事項と注意点:

  1. ネットワーク環境
    • ミドルボックス(ファイアウォール等)がTFOパケットをブロックする可能性
    • NAT通過時の挙動に注意が必要
  2. セキュリティ
    • クッキーの再利用攻撃に対する防御機能あり
    • TFOクッキーは定期的に更新される
  3. パフォーマンス
    • 初回接続時は通常の3-way handshakeが必要
    • 再接続時のみRTT削減効果が得られる
  4. アプリケーション互換性
    • アプリケーションがTFOをサポートしている必要がある
    • 既存のアプリケーションは修正が必要な場合がある

FreeBSDのTFO実装は、Linux実装と比較して以下の特徴があります:

  • より保守的なセキュリティ設定
  • シンプルな設定メカニズム
  • FreeBSD特有のネットワークスタック最適化との統合

これらの設定と機能を活用することで、特に以下のような用途で効果を発揮します:

  • Webサーバー
  • キャッシュサーバー
  • マイクロサービス間通信
  • CDNエッジサーバー