TCP通信の状態を監視していたところ、スロースタート閾値の初期値が、カーネル内で定義されている初期値と異なっていることがありました。調査したところ、Linuxに実装されているtcp_metricsが原因でした。本記事では、tcp_metricsの無効化方法について説明します。 Linuxカーネル2.6.6以降のTCP通信にはtcp_metricsという機能があります。tcp_metricsは、スロースタート閾値や輻輳ウィンドウサイズ、RTTといったTCP情報を送信先IPアドレスと関連付け、TCPコネクション終了時にキャッシュします。そして、キャッシュされた送信先IPアドレスへTCPコネクションを開始する時に、キャッシュしたTCP情報をその通信の初期値に設定します。 送信先IPアドレスのTCP情報をキャッシュすることで輻輳を防ぐことができる機能ですが、例えばiperfなどを使ってスループット