過度のTIME_WAITを回避するためにIP_TRANSPARENTを使用する方法

過度のTIME_WAITを回避するためにIP_TRANSPARENTを使用する方法

IP_TRANSPARENTTCP / IP接続を使用すると、「あまりにも多くのTIME_WAIT」問題を回避できると聞きました。RSTaは接続を切断するために使用されるようですが、FINandではありませんACK

しかし、私はこれを達成する方法をよく理解していません。

ベストアンサー1

どのOSを使用しているか言及していないので、GNU / Linuxと仮定します(「UNIXとLinux」なので、これは間違った仮定である可能性があります)。

カーネル動作の調整

Linuxでは、実行時にTCPスタックの調整は通常、およびsysctl/またはprocfsを使用して行われます。

したがって、おそらく以下を見てください。

  • TCP(7) マンページ
  • Documentation/sysctl/カーネルソースコードの下のファイル。 (あなたも利用できますこのウェブサイト)。

これを許可するオプション/パラメータがあることを確認してください。

さらに進む

カーネルソースコード(net/ipv4/tcp.c)閉じるためにFINフラグを使用するのは「ハードコード」で、変更できないようです...申し訳ありません。

たぶんこの動作を変更するためにパッチを書いてみてください。

結論として

要求された内容を実行する方法がないようです。

それでも、net.ipv4.tcp_fin_timeout(http://www.net.ipv4.tcp_fin_timeoutでも利用可能)などの他のパラメータを調整して、「あまりにも多くのTIME_WAIT」問題を軽減できます/proc/sys/net/ipv4/tcp_fin_timeout

アプリケーションソースコードがある場合は、setsockopt()生成されたソケットを使用してその動作を調整することもできます。

おすすめ記事