このセクションでは、TCP トランスポートプロトコルに固有のパラメータについて説明します。
輻輳ウィンドウのバーストスロットルに使用される 3 つの変数の 1 つであり、tcp_cwnd_infinite および tcp_cwnd_ss と並んで、輻輳の際のパケット転送を管理します。
転送の輻輳によるパフォーマンス低下を防ぐには、/etc/system ファイル内のパラメータの値を次のように変更します。
# echo "set ip:tcp_cwnd_normal=0xFF" >> /etc/system.d/site:filename # reboot
ここで、site:filename は、新しいパラメータ設定 (0xFF) を格納するファイルです。新しい設定はリブート時に /etc/system ファイルに読み込まれます。site:filename という命名規則を使用すると、ファイルおよびパラメータに対して実施した変更を識別できます。/etc/system.d 内のファイルの使用に関する詳細は、/etc/system ファイルおよび /etc/system.d ディレクトリを参照してください。
輻輳ウィンドウの詳細については、RFC 2581 および RFC 3390 を参照してください。
16
1-65535
はい
「説明」を参照
安定
直接接続していないシステムに対する TCP 遅延肯定応答 (ACK) タイマーのタイムアウト値を指定します。
RFC 1122 の 4.2.3.2 を参照してください。
100 ミリ秒
1 ミリ秒から 60,000 ミリ秒
はい
このパラメータには、500 ミリ秒を超える値を設定しないでください。
次の場合は、値を増やします。
ネットワークリンクが遅く (57.6 Kbps 未満)、最大セグメントサイズ (MSS) が 512 バイトを超える
この間隔が複数のTCP セグメントを受信するには短すぎる
変更の可能性あり
直接接続しているシステムに対する TCP 遅延肯定応答 (ACK) タイマーのタイムアウト値を指定します。
RFC 1122 の 4.2.3.2 を参照してください。
50 ミリ秒
10 から 500 ミリ秒
はい
このパラメータには、500 ミリ秒を超える値を設定しないでください。
次の場合は、値を増やします。
ネットワークリンクが遅く (57.6 Kbps 未満)、最大セグメントサイズ (MSS) が 512 バイトを超える
この間隔が複数のTCP セグメントを受信するには短すぎる
変更の可能性あり
肯定応答 (ACK) が生成される前にリモート宛先 (同じサブネットでない) から受け取られる TCP セグメントの最大数を指定します。TCP セグメントは、個々の接続の最大セグメントサイズ (MMS) 単位で表されます。このパラメータに 0 か 1 を設定すると、すべてのセグメントが 1 MSS の長さであるとみなされ、遅延 ACK は使用されなくなります。実際の数は、接続ごとに動的に計算されます。この値はデフォルトの最大値です。
2
0 から 16
はい
このパラメータは通常の状況で変更しないでください。
変更の可能性あり
肯定応答 (ACK) が生成される前に同じサブネット上のピアから受け取られる TCP セグメントの最大数を指定します。TCP セグメントは、個々の接続の最大セグメントサイズ (MMS) 単位で表されます。このパラメータに 0 か 1 を設定すると、すべてのセグメントが 1 MSS の長さであるとみなされ、遅延 ACK は使用されなくなります。実際の数は、接続ごとに動的に計算されます。この値はデフォルトの最大値です。
8
0 から 16
はい
この値は変更しないでください。ただし、遅延 ACK の影響でネットワークトラフィックが著しく混雑するような状況では、この値を減らします。ただし、2 より小さくしないでください。
変更の可能性あり
このパラメータが有効になっていると (デフォルトの設定)、ウィンドウスケールオプションの値が 0 の場合でも、TCP は常にウィンドウスケールオプションを指定して SYN セグメントを送信します。ウィンドウスケールオプションの指定された SYN セグメントを受信すると、パラメータが無効になっている場合でも、TCP は、ウィンドウスケールオプションを指定して SYN セグメントに応答します。オプションの値は受信ウィンドウサイズに従って設定されます。
ウィンドウスケールオプションについては、RFC 1323 を参照してください。
1 (有効)
0 (無効)、1 (有効)
はい
ウィンドウスケールオプションをサポートしていない古い TCP スタックとの相互運用性の問題がある場合は、このパラメータを無効にしてください。
変更の可能性あり
1 が設定されていると、TCP は常にタイムスタンプオプションを指定して SYN セグメントを送信します。2 に設定すると、TCP 接続がアクティブまたはパッシブのどちらでオープンされたかとは関係なく、タイムスタンプは完全に無効化されます。TCP は、タイムスタンプオプションの指定された (0 の場合もある) SYN セグメントを受信すると、タイムスタンプオプションを指定して SYN セグメントに応答します。
0 (無効)
0 (無効)、1 (有効)、または 2 (TCP 接続のオープン方法に関係なく無効)
はい
往復時間 (RTT) や TCP シーケンス番号ラップアラウンドを正確に測定したい場合、有効にします。
このオプションを有効にする理由については、RFC 1323 を参照してください。
変更の可能性あり
デフォルトの送信ウィンドウサイズをバイト数で指定します。ルートごとに異なる値を設定する方法については、後述のルート別のメトリックを参照してください。max_bufも参照してください。
49,152
4,096 から max_buf の現在の値
はい
アプリケーションは、setsockopt SO_SNDBUF コマンドを使用して、個々の接続の送信バッファーを変更できます。詳細は、setsockopt(3XNET) のマニュアルページを参照してください。
安定
デフォルトの受信ウィンドウサイズをバイト数で指定します。ルートごとに異なる値を設定する方法については、後述のルート別のメトリックを参照してください。max_bufと _recv_hiwat_minmssも参照してください。
128,000
2,048 から max_buf の現在の値
はい
アプリケーションは、setsockopt SO_RCVBUF コマンドを使用して、個々の接続の受信バッファーを変更できます。詳細は、setsockopt(3XNET) のマニュアルページを参照してください。
安定
送信および受信バッファーサイズの最大値をバイト数で指定します。このパラメータは、setsockopt() を使用するアプリケーションによって設定される送信バッファーサイズと受信バッファーサイズを制御します。
1,048,576
128,000 から 1,073,741,824
はい
高速ネットワーク環境で TCP 接続を行う場合は、ネットワークリンクの速度に合わせて値を増やします。_cwnd_max パラメータもおそらく同時に増加されるはずです。
安定
TCP 輻輳ウィンドウ (cwnd) の最大値をバイト数で指定します。
TCP 輻輳ウィンドウについては、RFC 1122 と 2581 を参照してください。
1,048,576
128 から 1,073,741,824
はい
アプリケーションが setsockopt() を使用してウィンドウサイズを _cwnd_max より大きい値に変更しても、使用される実際のウィンドウが _cwnd_max を超えることはありません。したがって、_max_buf は _cwnd_max より大きくするべきです。
変更の可能性あり
輻輳ウィンドウ (cwnd) の初期サイズの最大値を TCP 接続の MSS 単位で指定します。
輻輳ウィンドウの初期サイズがどのように計算されるかについては、RFC 2414 を参照してください。
10
1 から 10
はい
この値は変更しないでください。
特殊な状況下で cwnd の初期サイズがネットワークの輻輳を招く場合は、この値を減らします。
変更の可能性あり
輻輳ウィンドウ (cwnd) の初期サイズを、同じサブネットのシステム間の TCP 接続の最大セグメントサイズ (MSS) 単位で指定します。
10
1 から 16,384
はい
初期ウィンドウが大きい方がアプリケーションにメリットがある場合、このパラメータを増やします。
変更の可能性あり
輻輳ウィンドウが 1 再送タイムアウト (RTO) の間アイドルにされた (セグメントをまったく受信しなかった) あとの輻輳ウィンドウのサイズを TCP 接続の MSS 単位で指定します。
輻輳ウィンドウの初期サイズがどのように計算されるかについては、RFC 2414 を参照してください。
4
1 から 16,384
はい
詳細は、_slow_start_initialを参照してください。
変更の可能性あり
active が設定されていると、TCP は常に選択的肯定応答 (SACK) 許可オプションを指定して SYN セグメントを送信します。SACK 許可オプションが指定されている SYN セグメントを TCP が受信し、このパラメータが passive に設定されている場合、TCP は SACK 許可オプションを指定して応答します。パラメータが never に設定されている場合は、着信セグメントに SACK 許可オプションが指定されているかどうかにかかわらず、TCP は SACK 許可オプションを送信しません。
SACK オプションについては、RFC 2018 を参照してください。
ative
never、pssive、または ative
はい
SACK 処理を行うと TCP 再送のパフォーマンスが向上するため、自発的に有効にします。自発的に有効にすると相手方が混乱するおそれがある場合は、1 を設定します。この混乱が発生した場合、値を passive に設定して、着信接続が SACK 処理を許可する場合にのみ SACK 処理が有効になるようにします。
安定
0 が設定されていると、TCP は、セキュリティー上の理由により、着信接続に対して IP ソースルーティングオプションを逆方向に使用しません。1 が設定されている場合は、通常どおりソースルーティングを逆方向に使用します。
0 (無効)
0 (無効)、1 (有効)
はい
診断のために IP ソースルーティングが必要な場合は、有効にします。
変更の可能性あり
TCP 接続を TIME-WAIT 状態に保つ時間をミリ秒で指定します。
RFC 1122 の 4.2.2.13 を参照してください。
60,000 (60 秒)
1 秒から 600,000 ミリ秒
はい
通常の状況でこのパラメータを変更する必要はありません。システムの通常の使用により、数千件の TCP 接続が TIME-WAIT 状態で待機中になる場合、このパラメータ値を減らすことがあります。この値を 10 秒より少なくしないでください。
変更の可能性あり
ECN (Explicit Congestion Notification、明示的輻輳通知) のサポートを制御します。
このパラメータが never に設定されていると、TCP は、ECN メカニズムをサポートしている接続先とのネゴシエーションを行いません。
接続開始時にこのパラメータが passive に設定されていると、TCP は、ECN メカニズムをサポートしていることを接続先に通知しません。
ただし、接続先が SYN セグメントで ECN メカニズムをサポートしていることを示した場合、TCP は、新しい着信接続要求を受けた際に、ECN メカニズムをサポートしていることを接続先に通知します。
このパラメータを active に設定すると、TCP は接続を受け付けた時点で ECN メカニズムに関して接続先とネゴシエーションを行います。さらに、TCP は自発的な送信接続を行う際に、送信する SYN セグメント内で、ECN メカニズムをサポートしていることを示します。
パッシブ
never、passive、または active
はい
TCP は、ECN を利用して、輻輳制御の処理を効率化できます。ただし、このメカニズムにより、既存の TCP 実装、ファイアウォール、NAT、およびその他の非準拠のネットワークデバイスが混乱する場合もあります。混乱するデバイスは IETF 非準拠です。これらのデバイスを交換することを推奨します。非準拠のデバイスを交換できない状況の場合、このパラメータを passive または never に設定できます。
安定
accept() によって受け付けられるのを待っている TCP リスナーの、保留状態の TCP 接続のデフォルトの最大数を指定します。_conn_req_max_q0も参照してください。
128
1 から 4,294,967,295
はい
複数の接続要求を受けることのある Web サーバーのようなアプリケーションでは、着信頻度に応じてこのデフォルト値を増やすことができます。
このパラメータに著しく大きい値を設定しないでください。保留状態の TCP 接続はメモリーを過剰に使用することがあります。さらに、保留状態の TCP 接続の数が多すぎて、アプリケーションが接続要求を適時に処理できない場合は、新しい着信要求が拒否されることがあります。
_conn_req_max_q を増やしても、アプリケーションでそれだけの数の保留状態の TCP 接続を持てるとは限りません。アプリケーションは、listen() を使用して、保留状態の TCP 接続の最大数をソケットごとに変更できます。このパラメータは、アプリケーションが listen() を使用して設定できる最大値を表します。つまり、このパラメータに非常に大きな値を設定しても、あるソケットに対する実際の最大数は、listen() に指定された値によっては _conn_req_max_q よりもはるかに少ないことがあります。
変更の可能性あり
単一の TCP リスナーが持つことができる、不完全な (3 段階ハンドシェークがまだ終わっていない) 保留状態の TCP 接続のデフォルトの最大数を指定します。
TCP の 3 段階ハンドシェークについては、RFC 793 を参照してください。_conn_req_max_qも参照してください。
1,024
0 から 4,294,967,295
はい
きわめて多くの接続要求を受信することがある Web サーバーのようなアプリケーションでは、着信頻度に応じてこのデフォルト値を増やすことができます。
_conn_req_max_q0 と、各ソケットについて保留状態にある接続の最大数との関係は、次のとおりです。
接続要求を受信すると、TCP はまず、受け付けられるのを待っている保留状態の TCP 接続 (3 段階ハンドシェークが終わっている) の数が、そのリスナーに対する最大数 (N) を超えていないかをチェックします。接続数が超えていると、その要求は拒否されます。超えていなければ、 は、不完全な保留状態の TCP 接続の数が、N と tcp_conn_req_max_q0 の合計を超えていないかをチェックします。そうでなければ、その要求は受け付けられます。それ以外の場合、もっとも古い不完全な保留状態の TCP 要求がドロップされます。
変更の可能性あり
受け付けられるのを待っている、単一のリスナーの保留状態の TCP 接続の最大数のデフォルトの最小値。これは、1 つのアプリケーションが使用できる listen() のもっとも小さい最大値です。
1
1 から 1,024
はい
このパラメータにより、listen() を使用するアプリケーションが保留状態の TCP 接続の最大数の値を過度に小さく設定するのを防ぐことができます。この値は、着信接続要求の頻度に応じて増やすことができます。
変更の可能性あり
このパラメータに 1 が設定されている場合、RST セグメントの最大送信速度は、ipadm パラメータ _rst_sent_rate によって制御されます。このパラメータに 0 が設定されている場合、RST セグメントの送信時に速度を制御することはできません。
1 (有効)
0 (無効)、1 (有効)
はい
このチューニング可能パラメータは、RST セグメントの送信速度を制限することで、TCP に対するサービス拒否攻撃を防止します。この速度制御は、RFC 793 に厳密に準拠する必要がある場合にのみ、無効になります。
変更の可能性あり
40
0 から 4,294,967,295
はい
TCP 環境では、正当な理由により、デフォルト値より多くの RST が生成される場合があります。このような場合は、このパラメータのデフォルト値を引き上げます。
変更の可能性あり
このパラメータは、TCP が一時的なポートとして選択できる最小ポート番号を制御します。アプリケーションでは、指定されたプロトコルを使って接続を作成する際に、ポート番号を指定しないで一時的なポートを使用することができます。一時的なポートは、特定のアプリケーションに関連付けられていません。接続が閉じられると、ポート番号を別のアプリケーションで再利用できます。
ポート番号
32,768
1,024 から 65,535
はい
より広範囲の一時的なポートが必要な場合。
安定
このパラメータは、TCP が一時的なポートとして選択できる最大ポート番号を制御します。アプリケーションでは、指定されたプロトコルを使って接続を作成する際に、ポート番号を指定しないで一時的なポートを使用することができます。一時的なポートは、特定のアプリケーションに関連付けられていません。接続が閉じられると、ポート番号を別のアプリケーションで再利用できます。
ポート番号
65,535
32,768 から 65,535
はい
より広範囲の一時的なポートが必要な場合。
安定
次のパラメータの変更は非推奨です。
この ipadm パラメータは、システム全体で TCP 接続がアイドル状態になってから最初にプローブが送信されるまでの間隔を設定します。
Oracle Solaris は、RFC 1122 に説明されている TCP キープアライブメカニズムをサポートしています。このメカニズムは、TCP ソケットで SO_KEEPALIVE ソケットオプションを設定することで有効になります。
ソケットで SO_KEEPALIVE が有効な場合、TCP 接続が 2 時間 (tcp_keepalive_interval パラメータのデフォルト値) アイドル状態になると最初のキープアライブプローブが送信されます。ピアがプローブに 8 分間応答しない場合、TCP 接続が終了します。詳細は、_rexmit_interval_initialを参照してください。
また、個々のアプリケーションに TCP_KEEPALIVE_THRESHOLD ソケットオプションを使用してデフォルトの間隔をオーバーライドすれば、各アプリケーションがソケットごとに独自の間隔を持つようにできます。オプションの値は、ミリ秒単位の符号なし整数です。tcp(7P) のマニュアルページも参照してください。
2 時間
10 秒から 10 日
符号なし整数 (ミリ秒)
はい
この値は変更しないでください。この値を小さくすると、不必要なネットワークトラフィックが生じる可能性があるとともに、ネットワークの一時的な問題のために未完了のまま接続が終了してしまう可能性も高くなります。
変更の可能性あり
TCP 接続に対するデフォルトの合計再送タイムアウト値をミリ秒で指定します。ある 接続で、TCP が tcp_ip_abort_interval の間再転送を行なっても、この間に相手側のエンドポイントから肯定応答をまったく受け取らないと、この接続は閉じられます。
TCP の再送タイムアウト (RTO) の計算については、RFC 1122 の 4.2.3 を参照してください。_rexmit_interval_maxも参照してください。
5 分
500 ミリ秒から 1193 時間
はい
この値は変更しないでください。例外については、_rexmit_interval_maxを参照してください。
変更の可能性あり
TCP 接続に対するデフォルトの初期再送タイムアウト値をミリ秒で指定します。ルートごとに異なる値を設定する方法については、後述のルート別のメトリックを参照してください。
1,000 ミリ秒
1 ミリ秒から 20,000 ミリ秒
はい
この値は変更しないでください。この値を小さくすると、不要な再転送が行われるおそれがあります。TCP_RTO_INITIAL ソケットオプションは、ソケット単位で初期再送タイムアウトを変更するために使用できます。
変更の可能性あり
デフォルトの最大再送タイムアウト値 (RTO) をミリ秒で指定します。すべての TCP 接続に対して、計算された RTO がこの値を超えることはできません。_ip_abort_intervalも参照してください。
60,000 ミリ秒
1 ミリ秒から 7,200,000 ミリ秒
はい
通常のネットワーク環境では、この値を変更しないでください。
単一の接続の往復時間 (RTT) が 10 秒程度になるような特別な状況では、この値を増やすことができます。この値を変更する場合は、合わせて _ip_abort_interval パラメータも変更するべきです。_ip_abort_interval には、_rexmit_interval_max の 4 倍以上の値を指定します。TCP_RTO_MAX ソケットオプションは、ソケット単位で初期再送タイムアウトを変更するために使用できます。
変更の可能性あり
デフォルトの最小再送タイムアウト値 (RTO) をミリ秒で指定します。すべての TCP 接続に対して、計算された RTO がこの値を下回ることはできません。_rexmit_interval_maxも参照してください。
200 ミリ秒
1 ミリ秒から 7,200,000 ミリ秒
はい
通常のネットワーク環境では、この値を変更しないでください。
TCP の RTO 計算は、RTT のもっとも大きい変動に対処できます。単一の接続の往復時間 (RTT) が 10 秒程度になるような特別な状況では、この値を増やすことができます。この値を変更する場合は、合わせて _rexmit_interval_max パラメータも変更するべきです。_rexmit_interval_max には、_rexmit_interval_min の 8 倍以上の値を指定します。TCP_RTO_MIN ソケットオプションは、ソケット単位で初期再送タイムアウトを変更するために使用できます。
変更の可能性あり
0 ミリ秒
0 から 7,200,000 ミリ秒
はい
この値は変更しないでください。
計算された RTO が接続に対して適切でない場合は、不要な再転送を避けるためにこの値を変更することができます。
変更の可能性あり
このパラメータに 1 が設定され、かつ、ある接続に対するウィンドウスケールオプションが有効になっていると、TCP は、その接続の timestamp オプションも有効にします。
1 (有効)
0 (無効)、1 (有効)
はい
この値は変更しないでください。一般に、TCP を高速ネットワークで使用する場合は、シーケンス番号のラップアラウンドに対する保護が必要になります。この場合、timestamp オプションが必要になります。
変更の可能性あり