Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       tcp - TCP プロトコル

書式

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/tcp.h>

       tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

説明

       これは RFC 793, RFC 1122, RFC 2001 で定義されている TCP プロトコルを NewReno 拡張と SACK 拡張を含めて実装
       したものである。    TCP    は、    ip(7)     上の二つのソケット間に、信頼性の高い、ストリーム指向の全二重
       (full-duplex) 通信を提供する。 v4 と v6 の両方のバージョンの ip(7)  に対応している。 TCP は、データが順序
       を守って到着すること、途中で失われたパケットが 再送されることを保証する。また、パケット単位にチェックサム
       を 生成、検査することで、転送エラーを検知する。 TCP はレコード境界 (record boundary) を保存しない。

       新しく生成されたばかりの TCP ソケットは、 リモートアドレスかローカルアドレスがなく、 したがって詳細が完全
       に指定された状態ではない。 外部への TCP 接続を生成するには、 connect(2)  を用いてもう一方の TCP  ソケット
       への接続を確立する。 外部からの新たな接続を受けるには、まず bind(2)  でソケットをローカルなアドレスとポー
       トに結びつけ、次に listen(2) を呼んでソケットを接続待ち受け状態にする。  その後、到着した接続要求に対して
       accept(2)   を用い、ソケットを新しく生成する。  accept(2)   または connect(2)  のコールが成功したソケット
       は、詳細が完全に指定された状態となり、  データのやりとりが可能となる。接続待ち受け状態の  (listening)  ソ
       ケットや、 接続 (connect) されていないソケットを通してデータをやりとりすることはできない。

       Linux  は  RFC 1323 の TCP high performance 拡張をサポートしている。 これには、Protection Against Wrapped
       Sequence Numbers (PAWS)、 ウィンドウスケーリング、タイムスタンプなどが含まれている。 ウィンドウスケーリン
       グを利用すると、遅延または帯域の大きな接続で、  (64 K 以上の) 巨大な TCP ウィンドウを用いることが可能とな
       る。   これを用いるには、送受信のバッファーサイズを大きくしなければならない。    システム全体に対するバッ
       ファーサイズの変更は、ファイル  /proc/sys/net/ipv4/tcp_wmem/proc/sys/net/ipv4/tcp_rmem を用いて行うこ
       とができる。 また、個々のソケットのみを大きくしたい場合には、 SO_SNDBUFSO_RCVBUF ソケットオプションを
       用いて setsockopt(2)  コールを用いて設定すればよい。

       SO_SNDBUFSO_RCVBUF      のメカニズムで宣言されるソケットバッファーの最大サイズは、ファイル
       /proc/sys/net/core/rmem_max/proc/sys/net/core/wmem_max で指定されたシステムとしての制限値を超えること
       はできない。  TCP  は実際には  setsockopt(2)  コールが要求したバッファーサイズの二倍を割り当てる。 そのた
       め、この後で getsockopt(2)   コールを行うと、  setsockopt(2)   で要求したバッファーサイズとは異なる値が返
       る。  TCP はこの余分な空間を、管理目的やカーネル内部の構造体に用いている。 /proc ファイルの値は、これらを
       反映し、実際の TCP ウィンドウよりも大きな値となる。  各接続におけるソケットのバッファーサイズ変更を有効に
       するには、  listen(2)  や connect(2)  コールの前に設定しなければならない。 より詳しい情報は socket(7)  を
       見よ。

       TCP は緊急データ (urgent data) をサポートしている。緊急データは  何らかの重要なメッセージがデータストリー
       ムに含まれていること、  そのデータをできるだけ早く処理すべきこと、を受信者に伝えるために用いられる。 緊急
       データを送るには、 send(2)  に MSG_OOB オプションを指定する。  緊急データを受信すると、カーネルは  SIGURG
       シグナルを送信する。送信先は SIOCSPGRPFIOSETOWN ioctl (や POSIX.1 で規定されている fcntl(2)  F_SETOWN
       操作) を用いてそのソケットの「所有者」として設定された プロセスかプロセスグループである。 SO_OOBINLINE ソ
       ケットオプションが有効になっていると、緊急データは 通常のデータストリームの中に混ぜて送られる (プログラム
       は下記の  SIOCATMARK  ioctl  を使って緊急データの場所を調べることができる)。   無効になっている場合には、
       recv(2)  や recvmsg(2)  で MSG_OOB フラグがセットされているときにのみ、緊急データを受信できる。

       When  out-of-band  data  is  present,  select(2)   indicates the file descriptor as having an exceptional
       condition and poll (2) indicates a POLLPRI event.

       Linux 2.4  では多くの変更がなされ、  スループットとスケーリングが向上し、機能も高まった。  これらの機能に
       は、ゼロコピー   sendfile(2)、  Explicit  Congestion  Notification、  TIME_WAIT  ソケットの新しい管理法、
       keep-alive ソケットオプション、 Duplicate SACK 拡張のサポートなどがある。

   アドレスのフォーマット
       TCP は IP の上層に構築されている (ip(7)  を参照)。 ip(7)  に定義されているアドレスフォーマットは TCP にも
       適用される。  TCP は point-to-point の通信だけをサポートする。 ブロードキャストやマルチキャストはサポート
       しない。

   /proc インターフェース
       システム全体に対する TCP パラメーターの設定には、 /proc/sys/net/ipv4/  ディレクトリ内のファイルによりアク
       セスできる。  さらに、IP  に関連する  /proc インターフェースのほとんどは TCP についても適用される。 ip(7)
       を参照のこと。 Boolean は整数値で、 0 以外の値 ("true") は対応するオプションが有効、 0 値 ("false")  は無
       効、であることを意味する。

       tcp_abc (Integer; default: 0; Linux 2.6.15 から 3.8 まで)
              RFC  3465 で定義されている Appropriate Byte Count (ABC) を制御する。 ABC は、部分的な ACK に応じた
              輻輳ウィンドウ (cwnd)  の増加をより緩やかにする方法である。 以下の値を指定できる。

              0  ACK を受信する毎に cwnd を増やす (ABC なし)。

              1  フルサイズのセグメントの ACK を受信する毎に cwnd を増やす。

              2  ACK が遅延 ACK (delayed acknowledgment) を相殺するための 2 セグメントに 対する  ACK  の場合に、
                 cwnd を 2 増やすことができる。

       tcp_abort_on_overflow (ブール値; デフォルト: 無効; Linux 2.4 以降)
              接続を待ち受けているサービスが遅すぎて、受信についていけない場合に、  接続をリセットできるようにす
              る。   これを用いると、バーストによってオーバーフローが起こったときに、   接続を回復できるようにな
              る。このオプションを用いるのは、 受信デーモンを高速化できない場合に「限定する」こと。 このオプショ
              ンを用いると、そのサーバに接続しているクライアント にとっては害になることがある。

       tcp_adv_win_scale (integer; default: 2; Linux 2.4 以降)
              バッファーリングのオーバーヘッドの計算方法を、           tcp_adv_win_scale            が正の場合は
              bytes/2^tcp_adv_win_scale        に、        tcp_adv_win_scale       が負か       0       の場合は
              bytes-bytes/2^(-tcp_adv_win_scale) とする。

              ソケットの受信バッファー空間はアプリケーションとカーネルで共有される。  TCP   はバッファーの一部を
              TCP ウィンドウとして管理し、 これを受信ウィンドウとして接続の他端に通知する。 空間の残りは「アプリ
              ケーション」バッファーとして用いられ、  スケジューリングやアプリケーションの遅延からネットワークを
              隔離する。  tcp_adv_win_scale のデフォルト値は 2 であり、 この場合アプリケーションバッファーは全体
              の 1/4 になる。

       tcp_allowed_congestion_control (String; default: see text; Linux 2.4.20 以降)
              非特権プロセスで利用できる輻輳制御アルゴリズムの選択肢を表示/設定する (TCP_CONGESTION ソケットオプ
              ションの説明を参照のこと)。   このリストの要素はホワイトスペースで区切られ、改行文字で終端される。
              このリストは tcp_available_congestion_control で表示されるリストの部分集合となる。  このリストのデ
              フォルト値は、"reno" と tcp_congestion_control のデフォルト設定をあわせたものとなる。

       tcp_autocorking (ブール値; デフォルト: 有効; Linux 3.14 以降)
              このオプションを有効にすると、  送信総パケット数を減らすため、  カーネルは小さな  write  (連続する
              write(2) や sendmsg(2) の呼び出し) を可能な限り結合しようとする。 パケットの結合が行われるのは、そ
              のフローの前のパケットが少なくとも一つは   qdisc  キューかデバイスの送信キューで送信待ちの場合であ
              る。 このオプションが有効な場合でも TCP_CORK  オプションを使うことができ、アプリケーションがソケッ
              トの「コルク解除」(送信待ち状態の解除)  をいつどのように行えばよいか分かっている場合には、最適な動
              作をさせることができる。

       tcp_available_congestion_control (String; read-only; Linux 2.4.20 以降)
              登録されている輻輳制御アルゴリズムのリストを表示する。  このリストの要素はホワイトスペースで区切ら
              れ、改行文字で終端される。  このリストに載っているものだけが、 tcp_allowed_congestion_control に表
              示される。 他の輻輳制御アルゴリズムがモジュールとして利用可能だが、 モジュールがロードされていない
              こともある。

       tcp_app_win (integer; default: 31; Linux 2.4 以降)
              この変数は、TCP   ウィンドウの何バイト分を  バッファーリングのオーバーヘッド用に予約するかを指定す
              る。

              そのウィンドウの window/2^tcp_app_win  と  mss  の大きいほう  (バイト単位)  がアプリケーションバッ
              ファーとして予約される。 0 を指定すると一切予約領域を取らない。

       tcp_base_mss (Integer; default: 512; Linux 2.6.17 以降)
              パケット化レイヤの  Path  MTU discovery (MTU probing) で、 search_low の初期値と使用される値。 MTU
              probing が有効な場合、この値はその接続の MSS の初期値となる。

       tcp_bic (ブール値; デフォルト: 無効; Linux 2.4.27/2.6.6 から 2.6.13 まで)
              BIC TCP 輻輳制御アルゴリズムを有効にする。 BIC-TCP は送信側のみの変更で、  スケーラビリティと  TCP
              親和性 (friendliness) の両方を提供しつつ、 大きなウィンドウの下での線形な RTT 公平性を保証するもの
              である。 このプロトコルでは additive increase (追加的な増加) と binary search increase (二分探索増
              加) といわれる二つの仕組みを 組み合わせている。輻輳ウィンドウが大きいときは、増分の大きい additive
              increase により、スケーラビリティを確保しながら 線形な RTT 公平性を保証する。 輻輳ウィンドウが小さ
              いときには binary search increase により TCP 親和性を達成している。

       tcp_bic_low_window (integer; default: 14; Linux 2.4.27/2.6.6 以降 2.6.13 まで)
              BIC  TCP が輻輳ウィンドウの調整を開始する閾値ウィンドウ (パケット単位)  を設定する。この閾値を下回
              る場合、BIC TCP はデフォルトの TCP Reno と 同じ動作をする。

       tcp_bic_fast_convergence (ブール値; デフォルト: 有効; Linux 2.4.27/2.6.6 以降 2.6.13 まで)
              BIC  TCP  が輻輳ウィンドウの変化により速く反応するようにする。  同じコネクションを共有する二つのフ
              ローが一つにまとまるのを より速く行うようにする。

       tcp_congestion_control (String; default: 説明参照; Linux 2.4.13 以降)
              新規の接続で使用されるデフォルトの輻輳制御アルゴリズムを設定する。 "reno" アルゴリズムは常に利用可
              能だが、 カーネル設定次第では別の選択肢が利用できることもある。 このファイルのデフォルト値はカーネ
              ル設定の一つとして設定される。

       tcp_dma_copybreak (integer; default: 4096; Linux 2.6.24 以降)
              システムに  DMA コピーエンジンが存在し、カーネルで CONFIG_NET_DMA オプションが有効になっている場合
              に、 DMA コピーエンジンにオフロードされるソケットの読み込みサイズの下限値 (バイト単位)。

       tcp_dsack (ブール値; デフォルト: 有効; Linux 2.4 以降)
              RFC 2883 の TCP Duplicate SACK のサポートを有効にする。

       tcp_ecn (integer; default: see below; Linux 2.4 以降)
              RFC 3168 Explicit Congestion Notification を有効にする。

              このファイルは以下のいずれかの値を取ることができる。

              0      Disable ECN.  Neither initiate nor accept ECN.  This was the default up  to  and  including
                     Linux 2.6.30.

              1      Enable  ECN  when  requested  by  incoming  connections  and  also  request ECN on outgoing
                     connection attempts.

              2      Enable ECN when requested by incoming connections, but  do  not  request  ECN  on  outgoing
                     connections.  This value is supported, and is the default, since Linux 2.6.31.

              When enabled, connectivity to some destinations could be affected due to older, misbehaving middle
              boxes along the path, causing connections to be dropped.  However,  to  facilitate  and  encourage
              deployment with option 1, and to work around such buggy equipment, the tcp_ecn_fallback option has
              been introduced.

       tcp_ecn_fallback (ブール値; デフォルト: 有効; Linux 4.1 以降)
              Enable RFC 3168, Section 6.1.1.1. fallback.  When enabled, outgoing ECN-setup SYNs that  time  out
              within the normal SYN retransmission timeout will be resent with CWR and ECE cleared.

       tcp_fack (ブール値; デフォルト: 有効; Linux 2.2 以降)
              TCP Forward Acknowledgement のサポートを有効にする。

       tcp_fin_timeout (integer; default: 60; Linux 2.2 以降)
              ソケットを強制的にクローズする前に、  最後の FIN パケットを待つ時間を秒単位で指定する。 これは厳密
              には TCP の仕様を満たしていないが、 DoS 攻撃 (denial of service attack) から身を守るために必要であ
              る。 Linux 2.2 ではデフォルト値は 180 であった。

       tcp_frto (integer; default: 下記参照; Linux 2.4.21/2.6 以降)
              F-RTO  を有効にする。F-RTO は TCP 再送タイムアウト (RTO) からの 復旧性能を向上させたアルゴリズムで
              ある。 この機能は無線環境で特に効果を発揮する。 無線環境では、通常は、中間ルーターの輻輳ではなくラ
              ンダムな無線の干渉 によりパケットロスが発生する。 詳細は RFC 4138 を参照。

              このファイルは以下のいずれかの値を取ることができる。

              0  Disabled.  This was the default up to and including Linux 2.6.23.

              1  基本版の F-RTO アルゴリズムを有効にする。

              2  Enable  SACK-enhanced F-RTO if flow uses SACK.  The basic version can be used also when SACK is
                 in use though in that case scenario(s) exists where  F-RTO  interacts  badly  with  the  packet
                 counting of the SACK-enabled TCP flow.  This value is the default since Linux 2.6.24.

              Linu 2.6.22 より前では、このパラメーターはブール値であり、 上記の 0 と 1 のみをサポートしていた。

       tcp_frto_response (integer; default: 0; Linux 2.6.22 以降)
              F-RTO  が TCP 再送タイムアウトが偽物だと検出した場合 (つまり、TCP がもっと長い再送タイムアウトを設
              定していれば タイムアウトが避けられた場合)、 次にどうするかに関して選択肢がいくつかある。 以下の値
              を選択できる。

              0  レートを元の半分にする。   滑らかで、保守的な反応を行い、RTT   1回分の時間後に   輻輳ウィンドウ
                 (cwnd)  とスロースタートの閾値 (ssthresh)  が半分になる。

              1  非常に保守的な反応。このオプションの使用は推奨されない。  反応が正しかった場合であっても、Linux
                 TCP の他の部分と うまく連携できないからである。 cwndssthresh は直ちに半分にされる。

              2  積極的な反応。 不要と判明した輻輳制御の測定情報を取り消す (TCP がもっと注意深く扱うべき再送が失
                 われる可能性を無視する)。 。 cwndssthresh はタイムアウト前の値に戻される。

       tcp_keepalive_intvl (integer; default: 75; Linux 2.4 以降)
              TCP keep-alive のプローブを送る間隔 (秒単位)。

       tcp_keepalive_probes (integer; default: 9; Linux 2.2 以降)
              TCP keep-alive プローブの最大回数。 この回数だけ試しても接続先から反応が得られない場合は、  あきら
              めて接続を切断する。

       tcp_keepalive_time (integer; default: 7200; Linux 2.2 以降)
              接続がアイドル状態になってから、keep-alive        プローブを送信するまでの時間を秒単位で指定する。
              SO_KEEPALIVE ソケットオプションが有効になっている場合のみ keep-alive は送信される。 デフォルト値は
              7200  秒 (2 時間)。 keep-alive が有効になっている場合、 さらにおよそ 11 分 (75 秒間隔の 9 プローブ
              分)  経過するとアイドル状態の接続は終了させられる。

              下層にある接続追跡機構やアプリケーションでのタイムアウトは、 もっとずっと短いかもしれない。

       tcp_low_latency (Boolean; default: disabled; since Linux 2.4.21/2.6; obsolete since Linux 4.14)
              If enabled, the TCP stack  makes  decisions  that  prefer  lower  latency  as  opposed  to  higher
              throughput.   It  this  option is disabled, then higher throughput is preferred.  An example of an
              application where this default should be changed would be a Beowulf compute cluster.  Since  Linux
              4.14, this file still exists, but its value is ignored.

       tcp_max_orphans (integer; default: see below; Linux 2.4 以降)
              システムが許容する、  orphan な (どのユーザーファイルハンドルにもアタッチされていない)  TCP ソケッ
              トの最大数。 この数を越えると、orphan な接続はリセットされ、警告が表示される。  この制限が存在する
              のは、単純な使用不能 (denial-of-service) 攻撃を 防ぐために過ぎない。この値を小さくすることは推奨し
              ない。 ネットワークの条件によっては、この数値を大きくしないといけないかもしれないが、 orphan  なソ
              ケットひとつあたり  64 K 程度のスワップ不可能なメモリーを消費することも注意せよ。 デフォルトの初期
              値はカーネルパラメーターの NR_FILE と等しい。 この初期デフォルト値はシステムのメモリーに応じて調整
              される。

       tcp_max_syn_backlog (integer; default: 下記参照; Linux 2.2 以降)
              The  maximum number of queued connection requests which have still not received an acknowledgement
              from the connecting client.  If this number is exceeded, the kernel will begin dropping  requests.
              The default value of 256 is increased to 1024 when the memory present in the system is adequate or
              greater (>= 128 MB), and reduced to 128 for those systems with very low memory (<= 32 MB).

              Prior to Linux 2.6.20, it was recommended that if this needed to be increased above 1024, the size
              of the SYNACK hash table (TCP_SYNQ_HSIZE) in include/net/tcp.h should be modified to keep

                  TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog

              and  the kernel should be recompiled.  In Linux 2.6.20, the fixed sized TCP_SYNQ_HSIZE was removed
              in favor of dynamic sizing.

       tcp_max_tw_buckets (integer; default: 下記参照; Linux 2.4 以降)
              システムが許容する TIME_WAIT 状態にあるソケットの最大数。 この制限が存在するのは、  単純な使用不能
              (denial-of-service) 攻撃を防ぐために過ぎない。 デフォルト値は NR_FILE*2 で、システムのメモリーに応
              じて調整される。 この数値を越えると、そのようなソケットはクローズされ、警告が表示される。

       tcp_moderate_rcvbuf (ブール値; デフォルト: 有効; Linux 2.4.17/2.6.7 以降)
              有効にすると、TCP は受信バッファーの自動調整を行う。 具体的には、  (tcp_rmem[2]  を超えない範囲で)
              バッファーの大きさを自動的に変化させ、  その経路で最大のスループットを達成するのに必要な大きさに合
              わせようとする。

       tcp_mem (Linux 2.4 以降)
              これは 3 つの整数 [low, pressure, high] からなるベクトル値である。 これらは TCP がメモリー使用量を
              追跡するために用いられる (使用量はシステムのページサイズ単位で計測される)。 デフォルトはブート時に
              利用できるメモリーの量から計算される。 (実際には、TCP は low memory のみを使用する。値は  32ビット
              システムでは約 900 メガバイトに制限される。 64 ビットシステムではこの制限はない。)

              low    TCP は、グローバルにアロケートしたページがこの数値以下の場合は、 メモリーアロケーションを調
                     整しない。

              pressure
                     TCP がアロケートしたメモリーがこの数値分のページ数を越えると、 TCP はメモリー消費を抑えるよ
                     うになる。 アロケートしたページ数が low 以下になると、このメモリー圧迫状態から脱する。

              high   TCP がグローバルに割り当てるページ数の最大値。 この値はカーネルによって課されるあらゆる制限
                     よりも優先される。

       tcp_mtu_probing (integer; default: 0; Linux 2.6.17 以降)
              このパラメーターは、TCP のパケット化レイヤの Path MTU discovery を制御する。  このファイルには以下
              の値を設定できる。

              0  無効にする。

              1  デフォルトでは無効だが、ICMP ブラックホールが検出された場合は有効にする。

              2  常に有効にする。 MSS の初期値として tcp_base_mss が使用される。

       tcp_no_metrics_save (ブール値; デフォルト: 無効; Linux 2.6.6 以降)
              デフォルトでは、TCP は接続クローズ時に各種の接続パラメーターを ルートキャッシュ (route cache) に保
              存し、近い将来に接続が確立された際に これらの情報を初期状態として使用できるようになっている。 通常
              は、これにより全体として性能が向上するが、              時として性能の劣化を引き起こすこともある。
              tcp_no_metrics_save  を有効にすると、TCP  は接続クローズ時に接続パラメーターをキャッシュ  しなくな
              る。

       tcp_orphan_retries (integer; default: 8; Linux 2.4 以降)
              こちらからクローズした接続について、 先方をプローブする最大試行数。

       tcp_reordering (integer; default: 3; Linux 2.4 以降)
              TCP  パケットストリームでパケット順序の逆転が発生しただけであり、 パケットロスが起こったとはみなさ
              ない、パケット数の最大値。 この値を超えてパケットの順序逆転が起こると、パケットロスが生じたと みな
              し、slow  start に入る。 この数値は変更しないほうが良い。 これは、接続中のパケットの並び替えによっ
              て生じる 不必要な速度低下や再送を最小化するように設計された、 パケット並び替え (packet reordering)
              の検知メトリックなのである。

       tcp_retrans_collapse (ブール値; デフォルト: 有効; Linux 2.2 以降)
              再送の際にフルサイズのパケットを送ろうとする。

       tcp_retries1 (integer; default: 3; Linux 2.2 以降)
              普通に確立されている接続上に、 TCP がネットワーク層を巻き込まずに再送を試みる回数。 再送がこの回数
              を越えると、まず最初に、 新しい再送を送る前に可能ならネットワーク層に経路を更新させる。 デフォルト
              は RFC が指定している最少数である 3。

       tcp_retries2 (integer; default: 15; Linux 2.2 以降)
              確立状態の接続に、この回数  TCP パケットの再送信を 行なってもだめな場合はあきらめる。 デフォルト値
              は 15 で、これは (再送のタイムアウトに依存するが)  およそ 13〜30 分程度の期間に対応する。 RFC 1122
              は最小の限界を 100 秒と置いているが、 これはたいていの場合には短すぎると思われる。

       tcp_rfc1337 (ブール値; デフォルト: 無効; Linux 2.2 以降)
              TCP  の動作を  RFC 1337 に準拠させる。 無効にすると、TIME_WAIT 状態のときに RST が受信された場合、
              TIME_WAIT 期間の終了を待たずにそのソケットを直ちにクローズする。

       tcp_rmem (Linux 2.4 以降)
              これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP が受信バッファーサイ
              ズを調整するために用いられる。 TCP は、システムで利用できるメモリーに応じて、 受信バッファーのサイ
              ズをこれらの変数の範囲で 以下に示すデフォルトから動的に調整する。

              min    各 TCP ソケットが用いる受信バッファーの最小サイズ。  デフォルト値はシステムのページサイズで
                     ある  (Linux 2.4 では、デフォルト値は 4 K バイトで、 メモリーの少ないシステムでは PAGE_SIZE
                     バイトに減らされる)。 この値は、メモリー圧迫モードにおいても、 このサイズの割り当てが成功す
                     ることを保証するために用いられる。  これは、 SO_RCVBUF を用いてソケットの最低受信バッファー
                     サイズを宣言する際には用いられない。

              default
                     TCP ソケットの受信バッファーのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義さ
                     れている、  ジェネリックなグローバルのデフォルトバッファーサイズ net.core.rmem_default より
                     優先される。 デフォルト値は 87380 バイトである (Linux 2.4  では、メモリーの少ないシステムの
                     場合  43689 まで減らされる)。 大きな受信バッファーサイズが必要な場合は、 この値を増やすべき
                     である     (すべてのソケットに影響する)。     大きな      TCP      ウィンドウを用いるには、
                     net.ipv4.tcp_window_scaling を有効にしておかなければならない (デフォルトは有効)。

              max    各      TCP      ソケットで用いる受信バッファーの最大サイズ。      この値よりもグローバルの
                     net.core.rmem_max が優先される。 これは、 SO_RCVBUF  を用いてソケットの受信バッファーサイズ
                     制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。

                         max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     (Linux  2.4 では、デフォルト値は 87380*2 バイトで、 メモリーの少ないシステムでは 87380 まで
                     減らされる。)

       tcp_sack (ブール値; デフォルト: 有効; Linux 2.2 以降)
              RFC 2018 の TCP Selective Acknowledgements を有効にする。

       tcp_slow_start_after_idle (ブール値; デフォルト: 有効; Linux 2.6.18 以降)
              有効にすると、RFC 2861  の動作が行われ、  アイドル時間経過後に輻輳ウィンドウをタイムアウトさせる。
              アイドル時間は現在の  RTO (再送タイムアウト) で定義される。 無効にすると、輻輳ウィンドウはアイドル
              時間経過後もタイムアウトされない。

       tcp_stdurg (ブール値; デフォルト: 無効; Linux 2.2 以降)
              このオプションを有効にすると、 TCP 緊急ポインター (urgent-pointer)  フィールドを RFC 1122 に従った
              解釈を行う。 この解釈に従うと、緊急ポインターは緊急データの最後のバイトを指す。 このオプションを無
              効にすると、緊急ポインターの解釈が BSD 互換の方法で 行われる: 緊急ポインターは緊急データの後の最初
              のバイトを指す。 このオプションを有効にすると、相互運用性に問題が生じるかもしれない。

       tcp_syn_retries (integer; default: 6; Linux 2.2 以降)
              The  maximum  number  of  times  initial  SYNs  for  an  active  TCP  connection  attempt  will be
              retransmitted.  This value should not  be  higher  than  255.   The  default  value  is  6,  which
              corresponds  to retrying for up to approximately 127 seconds.  Before Linux 3.7, the default value
              was 5, which (in conjunction with calculation based on other kernel  parameters)  corresponded  to
              approximately 180 seconds.

       tcp_synack_retries (integer; default: 5; Linux 2.2 以降)
              passive な TCP 接続の SYN/ACK セグメントで再送を試みる最大数。 この数値は 255 よりも大きくすべきで
              はない。

       tcp_syncookies (integer; default: 1; Linux 2.2 以降)
              Enable TCP syncookies.  The kernel must  be  compiled  with  CONFIG_SYN_COOKIES.   The  syncookies
              feature  attempts  to  protect  a  socket  from a SYN flood attack.  This should be used as a last
              resort, if at all.  This is a violation of the TCP protocol, and conflicts with other areas of TCP
              such as TCP extensions.  It can cause problems for clients and relays.  It is not recommended as a
              tuning mechanism for heavily loaded servers to help with overloaded or  misconfigured  conditions.
              For     recommended     alternatives     see    tcp_max_syn_backlog,    tcp_synack_retries,    and
              tcp_abort_on_overflow.  Set to one of the following values:

              0  Disable TCP syncookies.

              1  Send out syncookies when the syn backlog queue of a socket overflows.

              2  (since Linux 3.12)  Send out syncookies  unconditionally.   This  can  be  useful  for  network
                 testing.

       tcp_timestamps (integer; default: 1; Linux 2.2 以降)
              Set to one of the following values to enable or disable RFC 1323 TCP timestamps:

              0  timestamps を有効にする。

              1  Enable  timestamps  as defined in RFC1323 and use random offset for each connection rather than
                 only using the current time.

              2  As for the value 1, but without random  offsets.   Setting  tcp_timestamps  to  this  value  is
                 meaningful since Linux 4.10.

       tcp_tso_win_divisor (integer; default: 3; Linux 2.6.9 以降)
              このパラメーターは、一つの  TCP Segmentation Offload (TSO) フレームで 消費できる輻輳ウィンドウの割
              合 (パーセント) を制御する。 バースト性と、どれだけ大きな TSO フレームを構築するかのはトレードオフ
              であり、 このパラメーターはその度合いを設定する。

       tcp_tw_recycle (ブール値; デフォルト: 無効; Linux 2.4 以降 4.11 まで)
              Enable fast recycling of TIME_WAIT sockets.  Enabling this option is not recommended as the remote
              IP  may  not  use  monotonically  increasing  timestamps  (devices  behind   NAT,   devices   with
              per-connection timestamp offsets).  See RFC 1323 (PAWS) and RFC 6191.

       tcp_tw_reuse (ブール値; デフォルト: 無効; Linux 2.4.19/2.6 以降)
              プロトコルの面から見て問題ない場合に新規コネクションに  TIME_WAIT 状態のソケットを再利用することを
              許可する。技術的に詳しい人の助言や 要請なしにこのオプションを変更すべきではない。

       tcp_vegas_cong_avoid (ブール値; デフォルト: 無効; Linux 2.2 から 2.6.13 まで)
              TCP Vegas 輻輳制御アルゴリズムを有効にする。 TCP Vegas  は帯域を推測することで輻輳の起こり始めを予
              想するように  TCP  の送信側のみに変更を加えたものである。 TCP Vegas は輻輳ウィンドウを修正すること
              で、送信レートを調整する。 TCP Vegas は TCP Reno と比べてパケットロスは少ないが、 TCP Reno  ほど積
              極的な挙動はしない。

       tcp_westwood (ブール値; デフォルト: 無効; Linux 2.4.26/2.6.3 から 2.6.13 まで)
              TCP Westwood+ 輻輳制御アルゴリズムを有効にする。 TCP Westwood+ は TCP 輻輳制御の性能を最適化するよ
              うに TCP Reno の プロトコルスタックの送信側のみに修正を加えたものである。 輻輳が起こった後で、輻輳
              ウィンドウや  slow start の閾値を 通信両端間の帯域の推測に基づいて設定する。 この推測を使って、TCP
              Westwood+ は輻輳が発生した時に使っていた 帯域を考慮に入れた slow start  の閾値と輻輳ウィンドウを設
              定する。  TCP Westwood+ は、有線ネットワークにおける TCP Reno の公平性 (fairness) と、無線リンクで
              のスループットを大きく向上する。

       tcp_window_scaling (ブール値; デフォルト: 有効; Linux 2.2 以降)
              RFC 1323 の TCP ウィンドウスケーリングを有効にする。  この機能を用いると、接続先が対応していれば、
              TCP  接続で大きな  (64 K  以上の) ウィンドウが使えるようになる。 通常は TCP ヘッダーのウインドウ長
              フィールドは 16 ビットなので、 ウィンドウサイズは 64 K バイト以下に限られる。 もっと大きなウィンド
              ウを使いたい場合は、 アプリケーションはソケットバッファーのサイズを増やして、 ウィンドウスケーリン
              グのオプションを利用すればよい。 tcp_window_scaling を無効にしていると、 TCP  は他端との接続設定の
              際に、 ウィンドウスケーリングのネゴシエーションを行なわない。

       tcp_wmem (Linux 2.4 以降)
              これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP が送信バッファーサイ
              ズを調整するために用いられる。 TCP  は、システムで利用できるメモリーに応じて、送信バッファーのサイ
              ズを これらの変数の範囲で以下に示すデフォルトから動的に調整する。

              min    各  TCP ソケットが用いる送信バッファーの最小サイズ。 デフォルト値はシステムのページサイズで
                     ある (Linux 2.4 では、デフォルト値は 4 K である)。 この値は、メモリー圧迫モードにおいても、
                     このサイズ以下の割り当てが成功することを保証するために用いられる。  これは、 SO_SNDBUF を用
                     いてソケットの最低送信バッファーサイズを宣言する際には用いられない。

              default
                     TCP ソケットの送信バッファーのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義さ
                     れている、                             ジェネリックなグローバルのデフォルトバッファーサイズ
                     /proc/sys/net/core/wmem_default より優先される。 デフォルト値は 16 K バイトである。  大きな
                     送信バッファーサイズが必要な場合は、   この値を増やすべきである   (すべてのソケットに影響す
                     る)。 大きな TCP ウィンドウを用いるには、 /proc/sys/net/ipv4/tcp_window_scaling を 0 以外の
                     値 (デフォルト値) にしておかなければならない。

              max    各          TCP          ソケットで用いる送信バッファーの最大サイズ。          この値よりも
                     /proc/sys/net/core/wmem_max  が優先される。  これは  SO_SNDBUF   を用いてソケットの送信バッ
                     ファーサイズ制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。

                         max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     (Linux 2.4 では、デフォルト値は 128 K バイトで、 メモリーの少ないシステムでは 64 K にまで減
                     らされる。)

       tcp_workaround_signed_windows (ブール値; デフォルト: 無効; Linux 2.6.26 以降)
              有効にすると、ウィンドウスケーリングオプションを受信しないのは、 接続相手の  TCP  が壊れていると考
              え、ウィンドウを符号付きの量とみなす。  無効にすると、接続相手からウィンドウスケーリングオプション
              を受信しなかった 場合であっても、接続相手の TCP が壊れているとはみなさない。

   ソケットオプション
       TCP ソケットのオプションは、 オプションレベル引数に IPPROTO_TCP  を指定した  setsockopt(2)   で設定でき、
       getsockopt(2)   で取得できる。  注釈がない限り、  optvalint へのポインターである。 さらに、ほとんどの
       IPPROTO_IP ソケットオプションも TCP ソケットに対して有効である。詳細は ip(7)  を見よ。

       Following is a list of TCP-specific socket options.  For details of some other socket  options  that  are
       also applicable for TCP sockets, see socket(7).

       TCP_CONGESTION (Linux 2.6.13 以降)
              このオプションの引数は文字列である。    このオプションを使うと、呼び出し元がソケット単位に使用する
              TCP 輻輳制御アルゴリズムを設定することができる。 非特権プロセスが使用できるアルゴリズムは (上述の)
              tcp_allowed_congestion_control  で設定されたものだけに制限される。 特権プロセス (CAP_NET_ADMIN) は
              任意の輻輳制御アルゴリズムを選択することができる (上記の tcp_available_congestion_control の説明を
              参照)。

       TCP_CORK (Linux 2.2 以降)
              セットされると、  partial フレームを送信しない。 このオプションが解除されると、 キューイングされた
              partial フレームが送られる。これは sendfile(2)  を呼ぶ前にヘッダーを前置したり、  スループットを最
              適化したい場合に便利である。  現在の実装では、 TCP_CORK で出力を抑えることができる時間の上限は 200
              ミリ秒である。 この上限に達すると、キューイングされたデータは自動的に送信される。 Linux 2.5.71  以
              降においてのみ、このオプションを TCP_NODELAY と同時に用いることができる。 移植性の必要なプログラム
              ではこのオプションを用いるべきではない。

       TCP_DEFER_ACCEPT (Linux 2.4 以降)
              これを用いると、リスナはデータがソケットに到着した時のみ目覚めるようになる。 整数値 (秒)  をとり、
              TCP  が接続を完了しようと試みる回数を制限できる。 移植性の必要なプログラムではこのオプションを用い
              るべきではない。

       TCP_INFO (Linux 2.4 以降)
              このソケットの情報を収集するのに用いる。 カーネルは /usr/include/linux/tcp.h  ファイルで定義されて
              いる struct tcp_info を返す。 移植性の必要なプログラムではこのオプションを用いるべきではない。

       TCP_KEEPCNT (Linux 2.4 以降)
              接続を落とす前に  TCP が試みる keepalive プローブの最大回数。 移植性の必要なプログラムではこのオプ
              ションを用いるべきではない。

       TCP_KEEPIDLE (Linux 2.4 以降)
              この時間 (秒単位) を越えて接続がアイドル状態に留まっていると、 このソケットに SO_KEEPALIVE  ソケッ
              トオプションが設定されている場合、  TCP は keepalive プローブを送りはじめる。 移植性の必要なプログ
              ラムではこのオプションを用いるべきではない。

       TCP_KEEPINTVL (Linux 2.4 以降)
              各 keepalive プローブの間隔 (秒単位)。  移植性の必要なプログラムではこのオプションを用いるべきでは
              ない。

       TCP_LINGER2 (Linux 2.4 以降)
              orphan  された FIN_WAIT2 状態のソケットの寿命。 このオプションを用いると、システム全体に適用される
              ファイル /proc/sys/net/ipv4/tcp_fin_timeout の値を、このソケットに対してのみ変更できる。 socket(7)
              レベルのオプション SO_LINGER と混同しないこと。 移植性の必要なプログラムではこのオプションを用いる
              べきではない。

       TCP_MAXSEG
              送出 TCP パケットの最大セグメントサイズ。 Linux 2.2 以前と Linux 2.6.28 以降では、このオプションを
              接続確立の前に設定すると、初期パケット で他端にアナウンスする MSS の値も変化する。インターフェース
              の MTU より も大きな (あるいは大きくなってしまった) 値は効果を持たない。 また TCP は、この値よりも
              最小・最大の制限の方を優先する。

       TCP_NODELAY
              設定すると  Nagle アルゴリズムを無効にする。 すなわち、データ量が少ない場合でも 各セグメントは可能
              な限り早く送信される。 設定されていないと、 送信する分だけ溜まるまでデータはバッファーされ、  小さ
              なパケットを頻繁に送らずにすみ、 ネットワークを有効に利用できる。 このオプションは TCP_CORK により
              上書きされる。しかしながら、 TCP_CORK が設定されている場合であっても、このオプションを設定すると、
              送信待ちの出力を明示的に掃き出す (flush) ことになる。

       TCP_QUICKACK (Linux 2.4.4 以降)
              設定されていると  quickack モードを有効にし、クリアされると無効にする。 通常の TCP 動作では ack は
              必要に応じて遅延されるのに対し、 quickack モードでは ack はすぐに送信される。 このフラグは永続的な
              ものではなく、  quickack モードから/モードへ切り替えるためのものである。 これ以降の TCP プロトコル
              の動作によっては、 内部のプロトコル処理や、遅延  ack  タイムアウトの発生、  データ転送などの要因に
              よって、 再び quickack から出たり入ったりする。 移植性の必要なプログラムではこのオプションを用いる
              べきではない。

       TCP_SYNCNT (Linux 2.4 以降)
              接続の試行を中止させる前に TCP が送る SYN 再送数を設定する。 これは 255 より大きくはできない。  移
              植性の必要なプログラムではこのオプションを用いるべきではない。

       TCP_USER_TIMEOUT (Linux 2.6.37 以降)
              このオプションは  unsigned  int  型の引数を取る。 値が 0 より大きい場合、その値は、 どのくらいの時
              間、送信されたデータが ACK を受信しないままの状態が続くと、 TCP がその接続を強制的にクローズし、ア
              プリケーションに ETIMEDOUT を返すかを、 ミリ秒単位で指定する。 オプションの値が 0 の場合、TCP はシ
              ステムのデフォルト値を使用する。

              ユーザータイムアウトを長くすると、 通信の両端での接続性がない場合でも長い時間 TCP 接続が維持される
              ようになる。 ユーザータイムアウトを短くすると、 アプリケーションは必要であれば「早く失敗」できるよ
              うになる。 設定しなかった場合は、 通常の WAN 環境では現在のシステムのデフォルトの 20  分で失敗する
              ことになる。

              このオプションは TCP 接続がどの状態の場合でも設定することができるが、 接続が同期状態 (ESTABLISHED,
              FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK) の場合のみ効果がある。 また、 TCP keepalive
              (SO_KEEPALIVE)  オプションとともに使用された場合、  TCP_USER_TIMEOUT は keepalive 失敗による接続ク
              ローズを判定するための keepalive 値を上書きする。

              このオプションは TCP がパケットを再送する際や keepalive プローブを送信する際には影響を及ぼさない。

              他の多くのオプション同様、リッスン中のソケットでこのオプションがセットされていれば accept(2)  が返
              すソケットにオプションが継承される。

              ユーザータイムアウト機能の詳細は RFC 793 と  RFC 5482 ("TCP User Timeout Option") に書かれている。

       TCP_WINDOW_CLAMP (Linux 2.4 以降)
              広報するウィンドウのサイズをこの値に固定する。 カーネルによって最小サイズは SOCK_MIN_RCVBUF/2 に制
              限されている。 このオプションは移植性の必要なコードでは用いるべきでない。

   ソケット API
       TCP は帯域外データ (out-of-band data) を限定的にサポートしており、  (1  バイトの)  緊急データという形であ
       る。 つまり Linux においては、 接続先が (新しいやり方の) 帯域外データを送ってきた場合、 (古いやり方の) 緊
       急データは通常のデータとしてストリームに挿入されることになる (これは SO_OOBINLINE  がセットされている場合
       でも同様である)。 これは BSD ベースのスタックとは異なる。

       Linux は、デフォルトでは urgent ポインターフィールドの解釈に BSD 互換の方法を用いる。これは RFC 1122 に反
       しているが、 他のスタックと同時に動作させるにはやむを得ない。これは /proc/sys/net/ipv4/tcp_stdurg  によっ
       て変更できる。

       recv(2)  の MSG_PEEK フラグを使うと、帯域外データを覗き見することができる。

       Linux  2.4 以降では、 recv(2)  (や recvmsg(2))  の flags 引数に MSG_TRUNC を使うことができる。 このフラグ
       を指定すると、受信データは、呼び出し元から渡されたバッファー にコピーされて返されるのではなく、廃棄される
       ようになる。 Linux 2.4.4 以降では、 MSG_TRUNC を、帯域外データを受信するための MSG_OOB と組み合わせて使っ
       た場合にも、これと同じ効果を持つようになっている。

   ioctl
       以下の ioctl(2) 呼び出しは value に情報を入れて返す。 正しい書式は以下の通り。

              int value;
              error = ioctl(tcp_socket, ioctl_type, &value);

       ioctl_type は以下のいずれか一つである:

       SIOCINQ
              受信バッファーのキューにある、まだ読んでいないデータの量を返す。ソケットは LISTEN 状態にあってはな
              らず、さもないとエラー  (EINVAL)  が返る。  SIOCINQ<linux/sockios.h> で定義されている。 代わり
              に、<sys/ioctl.h> で定義されている、同義語の FIONREAD を使うこともできる。

       SIOCATMARK
              受信データストリームが緊急マークの位置であれば、真を返す (つまり value が 0 以外)。

              SO_OOBINLINE ソケットオプションが設定されていて、 SIOCATMARK  が真を返した場合、次のソケットからの
              読み込みでは緊急データが 返される。 SO_OOBINLINE ソケットオプションが設定されておらず、 SIOCATMARK
              が真を返した場合、次のソケットからの読み込みでは緊急データに 続くデータが返される  (実際に緊急デー
              タを読み込むには recv(MSG_OOB) とフラグをつける必要がある)。

              データの一回の読み込みでは緊急マークを跨がっての読み込みは行われない。  アプリケーションが緊急デー
              タの存在を (exceptfds 引数を使って) select(2)  経由または SIGURG  シグナルの配送を通じて知らされた
              場合、 SIOCATMARK のチェックと読み込み (何バイト読み込み要求をしてもよい) を SIOCATMARK が偽を返さ
              なくなるまで繰り返し行うことで、緊急マークの位置まで 読み進めることができる。

       SIOCOUTQ
              ソケットの送信キューに残っている未送信データの量を返す。ソケットは  LISTEN  状  態にあってはならな
              い。  LISTEN  状態の場合にはエラー  (EINVAL) となる。 SIOCOUTQ<linux/sockios.h> で定義されてい
              る。 代わりに、<sys/ioctl.h> で定義されている、同義語の TIOCOUTQ を 使うこともできる。

   エラー処理
       ネットワークエラーが起こると、 TCP はパケットの再送を試みる。  何回かやっても成功しなければ、この接続に対
       して ETIMEOUT エラーか最後に受信したエラーが返される。

       アプリケーションによっては、もっと早くエラーを知らせてほしい場合がある。   これには  IPPROTO_IP  レベルの
       IP_RECVERR ソケットオプションを用いると良い。このオプションが有効になっていると、  到着したエラーはすべて
       ただちにユーザープログラムに渡される。 このオプションは慎重に用いること — ルーティングの変更など、 通常あ
       りうるネットワーク状態に対して TCP をより脆弱にしてしまう。

エラー

       EAFNOTSUPPORT
              sin_family に渡されたソケットアドレスのタイプが AF_INET ではなかった。

       EPIPE  接続先が予期しなかったかたちでソケットをクローズした。  またはシャットダウンされたソケットに読み込
              みが実行された。

       ETIMEDOUT
              接続先が、何回かデータを再送しても反応しない。

       ip(7)  で定義されているエラーや、ジェネリックなソケット層におけるエラーも TCP に返されることがある。

バージョン

       Explicit Congestion Notification、zero-copy の sendfile(2)、 並び替えのサポート、SACK 拡張 (DSACK) などの
       サポートは 2.4 で導入された。 フォワード確認 (FACK)、TIME_WAIT リサイクル、接続ごとの keepalive  に対する
       ソケットオプションは 2.3 で導入された。

バグ

       まだ説明されていないエラーがある。

       IPv6 に関する記述がない。

関連項目

       accept(2), bind(2), connect(2), getsockopt(2), listen(2), recvmsg(2), sendfile(2), sendmsg(2), socket(2),
       ip(7), socket(7)

       The kernel source file Documentation/networking/ip-sysctl.txt.

       RFC 793: TCP の仕様。
       RFC 1122: TCP の要求事項と Nagle アルゴリズムの記述。
       RFC 1323: TCP のタイムスタンプ・ウィンドウスケーリング各オプション。
       RFC 1337: TIME_WAIT assassination hazard に関する説明。
       RFC 3168: Explicit Congestion Notification に関する説明。
       RFC 2581: TCP 輻輳制御アルゴリズム。
       RFC 2018 と RFC 2883: SACK とその拡張。

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10  の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。