Provided by: manpages-ja_0.5.0.0.20131015+dfsg-2_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)、 ウィンドウスケーリング、タイムスタンプなどが含ま
       れている。 ウィンドウスケーリングを利用すると、遅延または帯域の大きな接続で、 (64K 以上の)
       巨大な 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-2001 で規定されている fcntl(2)  F_SETOWN 操作) を用いてそのソ
       ケットの「所有者」として設定された プロセスかプロセスグループである。 SO_OOBINLINE  ソケッ
       トオプションが有効になっていると、緊急データは  通常のデータストリームの中に混ぜて送られる
       (プログラムは下記の SIOCATMARK ioctl を使って緊急データの場所を調べることができる)。  無効
       になっている場合には、 recv(2)  や recvmsg(2)  で MSG_OOB フラグがセットされているときにの
       み、緊急データを受信できる。

       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 以降)
              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 (Boolean; default: disabled; 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_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 (Boolean; default: disabled; 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 (Boolean; default: enabled; 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 (Boolean; default: enabled; Linux 2.4 以降)
              RFC 2883 の TCP Duplicate SACK のサポートを有効にする。

       tcp_ecn (Boolean; default: disabled; Linux 2.4 以降)
              RFC 2884 の Explicit Congestion Notification を有効にする。  これを有効にすると、間
              違った振舞いをする古いルータが  経路の途中にあるような接続先に対して影響が生じ、 場
              合によっては接続が落ちるかもしれない。

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

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

              0  F-RTO を無効にする。

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

              2  そのフローで  SACK  を使用する場合、SACK  拡張版の F-RTO を有効にする。 基本版の
                 F-RTO も SACK が使用されている場合にも使用できるが、 基本版の場合には  F-RTO  が
                 SACK  が有効になった TCP フローでの パケット数計測と、相性が悪く相互干渉が起こる
                 場面が存在する。

              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; Linux 2.4.21/2.6 以降)
              有効にすると、TCP スタックはスループットを高くするよりも 遅延を少なくすることを優先
              して判断を行う。 このオプションを無効にすると、スループットを高くすることが優先され
              る。  このデフォルト値を変更した方がよいアプリケーションの例としては  Beowulf  コン
              ピュータクラスタが挙げられるだろう。

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

       tcp_max_syn_backlog (integer; default: 下記参照; Linux 2.2 以降)
              接続してきているクライアントから ack を受信していない状態の接続リクエストをキューに
              置ける最大数。  この数値を越えると、カーネルはリクエストを捨て始める。 デフォルトの
              値は 256 で、 システムに充分なメモリがある (128Mb 以上) 場合は 1024 になり、 メモリ
              が非常に少ない場合  (32 Mb 以下) は 128 になる。 この数値を 1024 以上に増やしたい場
              合は、          include/net/tcp.h          の           TCP_SYNQ_HSIZE           を
              TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog  のように修正し、 カーネルを再コンパイルする
              ことを奨める。

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

       tcp_moderate_rcvbuf (Boolean; default: enabled; 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 (Boolean; default: disabled; 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 (Boolean; default: enabled; 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 (Boolean; default: disabled; 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 では、デフォルト値は 4K バイトで、 メモリ
                        の少ないシステムでは 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(4MB, tcp_mem[1]*PAGE_SIZE/128))

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

       tcp_sack (Boolean; default: enabled; Linux 2.2 以降)
              RFC 2018 の TCP Selective Acknowledgements を有効にする。

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

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

       tcp_syn_retries (integer; default: 5; Linux 2.2 以降)
              アクティブな TCP 接続に初期 SYN の再送を試みる最大回数。 この数値は 255  よりも大き
              くすべきではない。 デフォルトの値は 5 で、およそ 180 秒に対応する。

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

       tcp_syncookies (Boolean; Linux 2.2 以降)
              TCP syncookies を有効にする。カーネルは CONFIG_SYNCOOKIES  をつけてコンパイルしてお
              かなければならない。  ソケットのバックログキューがオーバーフローすると、 syncookies
              が送信される。 syncookies 機能は、SYN flood 攻撃からソケットを守ろうとする。 これは
              いずれにしても、最終手段として用いるべきである。  これは TCP プロトコルに違反してお
              り、 TCP 拡張のような、TCP の他の部分と衝突してしまう。  クライアントやリレーで問題
              が起こることもある。 過負荷や設定間違いによって負荷の大きな状態にあるサーバを調整し
              て救うための        機構とみなすべきではない。         そのような用途には、代わりに
              tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow などの使用を考えるこ
              と。

       tcp_timestamps (Boolean; default: enabled; Linux 2.2 以降)
              RFC 1323 の TCP timestamps を有効にする。

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

       tcp_tw_recycle (Boolean; default: disabled; Linux 2.4 以降)
              TIME_WAIT ソケットの素早い再利用を有効にする。  このオプションを有効にすると、  NAT
              (ネットワークアドレス変換) を用いていると問題が生じるので、 あまり推奨しない。

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

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

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

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

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

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

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

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

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

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

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

       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_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_PEEK  を、帯域外デー
       タを受信するための  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)

       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 プロジェクトのリリース 3.54 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。