通信は最初は正常。
しかし、
- 数分後に突然切れる
- 一定時間操作しないと接続が落ちる
- 再接続すれば直る
- サーバにもエラーは出ていない
このような断続的通信断は、
FWセッションタイムアウト
が原因であることが非常に多いです。
本記事では、
- セッションタイムアウトの仕組み
- なぜ断続的に見えるのか
- 確定診断の方法
- 正しい対処法
- 設計で防ぐ方法
を、現場レベルで解説します。
目次
まず理解すべきこと:FWは通信を“覚えている”
ステートフルFWは、通過する通信を
セッションテーブル
で管理しています。
このテーブルには、
- 送信元IP
- 宛先IP
- ポート番号
- TCP状態
- 最終通信時刻
が記録されます。
そして一定時間通信がないと、
セッションは削除されます。
なぜ「断続的」に見えるのか
典型的な流れ:
- TCP接続確立
- しばらく通信なし(アイドル状態)
- FWがセッションを削除
- アプリが再び通信しようとする
- FWにセッションが存在せず破棄
この時、
- クライアント側ではタイムアウト
- サーバ側にはログが出ない
という状況になります。
再接続すると新しいセッションが作られるため、
「一時的な不具合」に見える
のです。
よくある発生パターン
① Webアプリで一定時間後にエラー
- 管理画面を放置
- 操作再開で500エラー
② DB接続プールで突然エラー
- アイドル時間が長い
- クエリ実行時に接続失敗
③ VPNやRDPが突然切断
- 操作していない時間がある
診断方法:本当にタイムアウトか確認する
① 発生までの時間を測る
例:
- 常に5分後に切れる
- 30分後に必ず切断
→ FWタイムアウト値と一致すれば可能性大
② tcpdumpで確認
tcpdump -nn host 対向IP and port ポート番号
切断時に確認するポイント:
- RSTが返っているか
- 無応答で再送していないか
多くの場合、
再送のみで応答がない
という挙動になります。
③ FWのセッション確認
該当通信のセッションが存在するか確認。
通信失敗直後にセッションが存在しなければ、
タイムアウトで削除された可能性が高い
TCPタイムアウトの基礎知識
FWには複数のタイムアウトがあります。
- TCP Established
- TCP SYN
- UDP
- ICMP
特に重要なのは
TCP Establishedタイムアウト
です。
一般的な値:
- 300秒(5分)
- 900秒(15分)
- 3600秒(1時間)
解決方法
① FWタイムアウト値を延長する
最も単純な方法。
ただしセッションテーブル容量とのバランスが必要。
② アプリ側でKeepAliveを有効化
一定間隔でパケットを送ることで、
セッションが維持されます。
例:
- TCP keepalive
- HTTP keep-alive
- DBのheartbeat設定
③ LBやProxy経由の場合の確認
FWだけでなく、
- ロードバランサ
- リバースプロキシ
にもタイムアウト設定があります。
FWより短い場合、そこで切断されます。
解決したと言える状態
- 一定時間放置後も通信が継続する
- 再送が発生しない
- セッションが安定維持される
- アプリログに接続エラーが出ない
再発防止の設計ポイント
- アプリのアイドル時間を把握する
- FWタイムアウト値を明文化する
- KeepAlive設計を標準化する
- セッション数上限とバランスを取る
まとめ
FWセッションタイムアウトによる断続的通信断は、
「通信が止まった」のではなく、「FWが忘れた」
という現象です。
原因は偶発的ではありません。
時間と一致するなら、必ずタイムアウトを疑う。
構造を理解すれば、確実に解決できます。
あわせて読みたい


FW/NATセッションが原因の“謎の通信断”を見抜く方法
ネットワークは正常に見えるのに、 アプリ通信だけ突然切れる 再接続すると復旧する 時間が経つと直ることがある このような 「原因が分からない通信断」 に悩まされた…
あわせて読みたい


FWログは正常なのに通信できない?現場で頻発する典型トラブル7選【原因別に完全解説】
「FWログでは allow になっている」「deny ログも出ていない」それなのに 通信できない。 これは FW運用の現場で 最も多い“勘違いトラブル” です。 本記事では、「ログ…
