OSDN Git Service

(split) LDP: Update draft and release (from the previous commit)
[linuxjm/LDP_man-pages.git] / release / man7 / tcp.7
1 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
2 .\" and Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
3 .\" Note also that many pieces are drawn from the kernel source file
4 .\" Documentation/networking/ip-sysctl.txt.
5 .\"
6 .\" %%%LICENSE_START(VERBATIM_ONE_PARA)
7 .\" Permission is granted to distribute possibly modified copies
8 .\" of this page provided the header is included verbatim,
9 .\" and in case of nontrivial modification author and date
10 .\" of the modification is added to the header.
11 .\" %%%LICENSE_END
12 .\"
13 .\" 2.4 Updates by Nivedita Singhvi 4/20/02 <nivedita@us.ibm.com>.
14 .\" Modified, 2004-11-11, Michael Kerrisk and Andries Brouwer
15 .\"     Updated details of interaction of TCP_CORK and TCP_NODELAY.
16 .\"
17 .\" 2008-11-21, mtk, many, many updates.
18 .\"     The descriptions of /proc files and socket options should now
19 .\"     be more or less up to date and complete as at Linux 2.6.27
20 .\"     (other than the remaining FIXMEs in the page source below).
21 .\"
22 .\" FIXME The following need to be documented
23 .\"     TCP_MD5SIG (2.6.20)
24 .\"         commit cfb6eeb4c860592edd123fdea908d23c6ad1c7dc
25 .\"         Author was yoshfuji@linux-ipv6.org
26 .\"         Needs CONFIG_TCP_MD5SIG
27 .\"         From net/inet/Kconfig
28 .\"         bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)"
29 .\"         RFC2385 specifies a method of giving MD5 protection to TCP sessions.
30 .\"         Its main (only?) use is to protect BGP sessions between core routers
31 .\"         on the Internet.
32 .\"
33 .\"         There is a TCP_MD5SIG option documented in FreeBSD's tcp(4),
34 .\"         but probably many details are different on Linux
35 .\"         http://thread.gmane.org/gmane.linux.network/47490
36 .\"         http://www.daemon-systems.org/man/tcp.4.html
37 .\"         http://article.gmane.org/gmane.os.netbsd.devel.network/3767/match=tcp_md5sig+freebsd
38 .\"     TCP_COOKIE_TRANSACTIONS (2.6.33)
39 .\"         commit 519855c508b9a17878c0977a3cdefc09b59b30df
40 .\"         Author: William Allen Simpson <william.allen.simpson@gmail.com>
41 .\"         commit e56fb50f2b7958b931c8a2fc0966061b3f3c8f3a
42 .\"         Author: William Allen Simpson <william.allen.simpson@gmail.com>
43 .\"
44 .\"         REMOVED in Linux 3.10
45 .\"             commit 1a2c6181c4a1922021b4d7df373bba612c3e5f04
46 .\"             Author: Christoph Paasch <christoph.paasch@uclouvain.be>
47 .\"
48 .\"     TCP_THIN_LINEAR_TIMEOUTS (2.6.34)
49 .\"         commit 36e31b0af58728071e8023cf8e20c5166b700717
50 .\"         Author: Andreas Petlund <apetlund@simula.no>
51 .\"     TCP_THIN_DUPACK (2.6.34)
52 .\"         commit 7e38017557bc0b87434d184f8804cadb102bb903
53 .\"         Author: Andreas Petlund <apetlund@simula.no>
54 .\"     TCP_REPAIR (3.5)
55 .\"         commit ee9952831cfd0bbe834f4a26489d7dce74582e37
56 .\"         Author: Pavel Emelyanov <xemul@parallels.com>
57 .\"     TCP_REPAIR_QUEUE (3.5)
58 .\"         commit ee9952831cfd0bbe834f4a26489d7dce74582e37
59 .\"         Author: Pavel Emelyanov <xemul@parallels.com>
60 .\"     TCP_QUEUE_SEQ (3.5)
61 .\"         commit ee9952831cfd0bbe834f4a26489d7dce74582e37
62 .\"         Author: Pavel Emelyanov <xemul@parallels.com>
63 .\"     TCP_REPAIR_OPTIONS (3.5)
64 .\"         commit b139ba4e90dccbf4cd4efb112af96a5c9e0b098c
65 .\"         Author: Pavel Emelyanov <xemul@parallels.com>
66 .\"     TCP_FASTOPEN (3.6)
67 .\"         (Fast Open server side implementation completed in 3.7)
68 .\"         http://lwn.net/Articles/508865/
69 .\"     TCP_TIMESTAMP (3.9)
70 .\"        commit 93be6ce0e91b6a94783e012b1857a347a5e6e9f2
71 .\"        Author: Andrey Vagin <avagin@openvz.org>
72 .\"     TCP_NOTSENT_LOWAT (3.12)
73 .\"        commit c9bee3b7fdecb0c1d070c7b54113b3bdfb9a3d36
74 .\"        Author: Eric Dumazet <edumazet@google.com>
75 .\"
76 .\"*******************************************************************
77 .\"
78 .\" This file was generated with po4a. Translate the source file.
79 .\"
80 .\"*******************************************************************
81 .\"
82 .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
83 .\" Translated 1999-12-06, NAKANO Takeo <nakano@apm.seikei.ac.jp>
84 .\" Updated 2002-11-15, NAKANO Takeo
85 .\" Updated 2005-02-21, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
86 .\" Updated 2005-09-07, Akihiro MOTOKI
87 .\" Updated 2005-12-26, Akihiro MOTOKI
88 .\" Updated 2006-07-19, Akihiro MOTOKI, LDP v2.36
89 .\" Updated 2008-08-07, Akihiro MOTOKI, LDP v3.05
90 .\" Updated 2008-12-31, Akihiro MOTOKI, LDP v3.15
91 .\" Updated 2009-03-01, Akihiro MOTOKI, LDP v3.19
92 .\" Updated 2012-05-01, Akihiro MOTOKI <amotoki@gmail.com>
93 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
94 .\" Updated 2013-07-22, Akihiro MOTOKI <amotoki@gmail.com>
95 .\"
96 .TH TCP 7 2014\-03\-31 Linux "Linux Programmer's Manual"
97 .SH 名前
98 tcp \- TCP プロトコル
99 .SH 書式
100 \fB#include <sys/socket.h>\fP
101 .br
102 \fB#include <netinet/in.h>\fP
103 .br
104 \fB#include <netinet/tcp.h>\fP
105 .sp
106 \fBtcp_socket = socket(AF_INET, SOCK_STREAM, 0);\fP
107 .SH 説明
108 これは RFC\ 793, RFC\ 1122, RFC\ 2001 で定義されている TCP プロトコルを NewReno 拡張と SACK
109 拡張を含めて実装したものである。 TCP は、 \fBip\fP(7)  上の二つのソケット間に、信頼性の高い、ストリーム指向の全二重
110 (full\-duplex) 通信を提供する。 v4 と v6 の両方のバージョンの \fBip\fP(7)  に対応している。 TCP
111 は、データが順序を守って到着すること、途中で失われたパケットが 再送されることを保証する。また、パケット単位にチェックサムを
112 生成、検査することで、転送エラーを検知する。 TCP はレコード境界 (record boundary) を保存しない。
113
114 新しく生成されたばかりの TCP ソケットは、 リモートアドレスかローカルアドレスがなく、 したがって詳細が完全に指定された状態ではない。 外部への
115 TCP 接続を生成するには、 \fBconnect\fP(2)  を用いてもう一方の TCP ソケットへの接続を確立する。
116 外部からの新たな接続を受けるには、まず \fBbind\fP(2)  でソケットをローカルなアドレスとポートに結びつけ、次に \fBlisten\fP(2)
117 を呼んでソケットを接続待ち受け状態にする。 その後、到着した接続要求に対して \fBaccept\fP(2)  を用い、ソケットを新しく生成する。
118 \fBaccept\fP(2)  または \fBconnect\fP(2)  のコールが成功したソケットは、詳細が完全に指定された状態となり、
119 データのやりとりが可能となる。接続待ち受け状態の (listening) ソケットや、 接続 (connect)
120 されていないソケットを通してデータをやりとりすることはできない。
121
122 Linux は RFC\ 1323 の TCP high performance 拡張をサポートしている。 これには、Protection
123 Against Wrapped Sequence Numbers (PAWS)、 ウィンドウスケーリング、タイムスタンプなどが含まれている。
124 ウィンドウスケーリングを利用すると、遅延または帯域の大きな接続で、 (64K 以上の) 巨大な TCP ウィンドウを用いることが可能となる。
125 これを用いるには、送受信のバッファサイズを大きくしなければならない。 システム全体に対するバッファサイズの変更は、ファイル
126 \fI/proc/sys/net/ipv4/tcp_wmem\fP と \fI/proc/sys/net/ipv4/tcp_rmem\fP
127 を用いて行うことができる。 また、個々のソケットのみを大きくしたい場合には、 \fBSO_SNDBUF\fP や \fBSO_RCVBUF\fP
128 ソケットオプションを用いて \fBsetsockopt\fP(2)  コールを用いて設定すればよい。
129
130 \fBSO_SNDBUF\fP や \fBSO_RCVBUF\fP のメカニズムで宣言されるソケットバッファの最大サイズは、ファイル
131 \fI/proc/sys/net/core/rmem_max\fP や \fI/proc/sys/net/core/wmem_max\fP
132 で指定されたシステムとしての制限値を超えることはできない。 TCP は実際には \fBsetsockopt\fP(2)
133 コールが要求したバッファサイズの二倍を割り当てる。 そのため、この後で \fBgetsockopt\fP(2)  コールを行うと、
134 \fBsetsockopt\fP(2)  で要求したバッファサイズとは異なる値が返る。 TCP
135 はこの余分な空間を、管理目的やカーネル内部の構造体に用いている。 \fI/proc\fP ファイルの値は、これらを反映し、実際の TCP
136 ウィンドウよりも大きな値となる。 各接続におけるソケットのバッファサイズ変更を有効にするには、 \fBlisten\fP(2)  や
137 \fBconnect\fP(2)  コールの前に設定しなければならない。 より詳しい情報は \fBsocket\fP(7)  を見よ。
138 .PP
139 TCP は緊急データ (urgent data) をサポートしている。緊急データは 何らかの重要なメッセージがデータストリームに含まれていること、
140 そのデータをできるだけ早く処理すべきこと、を受信者に伝えるために用いられる。 緊急データを送るには、 \fBsend\fP(2)  に \fBMSG_OOB\fP
141 オプションを指定する。 緊急データを受信すると、カーネルは \fBSIGURG\fP シグナルを送信する。送信先は \fBSIOCSPGRP\fP や
142 \fBFIOSETOWN\fP ioctl (や POSIX.1\-2001 で規定されている \fBfcntl\fP(2)  \fBF_SETOWN\fP 操作)
143 を用いてそのソケットの「所有者」として設定された プロセスかプロセスグループである。 \fBSO_OOBINLINE\fP
144 ソケットオプションが有効になっていると、緊急データは 通常のデータストリームの中に混ぜて送られる (プログラムは下記の \fBSIOCATMARK\fP
145 ioctl を使って緊急データの場所を調べることができる)。 無効になっている場合には、 \fBrecv\fP(2)  や \fBrecvmsg\fP(2)  で
146 \fBMSG_OOB\fP フラグがセットされているときにのみ、緊急データを受信できる。
147
148 Linux 2.4 では多くの変更がなされ、 スループットとスケーリングが向上し、機能も高まった。 これらの機能には、ゼロコピー
149 \fBsendfile\fP(2)、 Explicit Congestion Notification、 TIME_WAIT ソケットの新しい管理法、
150 keep\-alive ソケットオプション、 Duplicate SACK 拡張のサポートなどがある。
151 .SS アドレスのフォーマット
152 TCP は IP の上層に構築されている (\fBip\fP(7)  を参照)。 \fBip\fP(7)  に定義されているアドレスフォーマットは TCP
153 にも適用される。 TCP は point\-to\-point の通信だけをサポートする。 ブロードキャストやマルチキャストはサポートしない。
154 .SS "/proc インタフェース"
155 システム全体に対する TCP パラメータの設定には、 \fI/proc/sys/net/ipv4/\fP ディレクトリ内のファイルによりアクセスできる。
156 さらに、IP に関連する \fI/proc\fP インタフェースのほとんどは TCP についても適用される。 \fBip\fP(7)  を参照のこと。
157 \fIBoolean\fP は整数値で、 0 以外の値 ("true") は対応するオプションが有効、 0 値 ("false")
158 は無効、であることを意味する。
159 .TP 
160 \fItcp_abc\fP (Integer; default: 0; Linux 2.6.15 以降)
161 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
162 RFC 3465 で定義されている Appropriate Byte Count (ABC) を制御する。 ABC は、部分的な ACK
163 に応じた輻輳ウィンドウ (\fIcwnd\fP)  の増加をより緩やかにする方法である。 以下の値を指定できる。
164 .RS
165 .IP 0 3
166 ACK を受信する毎に \fIcwnd\fP を増やす (ABC なし)。
167 .IP 1
168 フルサイズのセグメントの ACK を受信する毎に \fIcwnd\fP を増やす。
169 .IP 2
170 ACK が遅延 ACK (delayed acknowledgment) を相殺するための 2 セグメントに 対する ACK の場合に、 \fIcwnd\fP
171 を 2 増やすことができる。
172 .RE
173 .TP 
174 \fItcp_abort_on_overflow\fP (ブール値; デフォルト: 無効; Linux 2.4 以降)
175 .\" Since 2.3.41
176 接続を待ち受けているサービスが遅すぎて、受信についていけない場合に、 接続をリセットできるようにする。
177 これを用いると、バーストによってオーバーフローが起こったときに、 接続を回復できるようになる。このオプションを用いるのは、
178 受信デーモンを高速化できない場合に「限定する」こと。 このオプションを用いると、そのサーバに接続しているクライアント にとっては害になることがある。
179 .TP 
180 \fItcp_adv_win_scale\fP (integer; default: 2; Linux 2.4 以降)
181 .\" Since 2.4.0-test7
182 バッファリングのオーバーヘッドの計算方法を、 \fItcp_adv_win_scale\fP が正の場合は
183 \fIbytes/2^tcp_adv_win_scale\fP に、 \fItcp_adv_win_scale\fP が負か 0 の場合は
184 \fIbytes\-bytes/2^(\-tcp_adv_win_scale)\fP とする。
185
186 ソケットの受信バッファ空間はアプリケーションとカーネルで共有される。 TCP はバッファの一部を TCP ウィンドウとして管理し、
187 これを受信ウィンドウとして接続の他端に通知する。 空間の残りは「アプリケーション」バッファとして用いられ、
188 スケジューリングやアプリケーションの遅延からネットワークを隔離する。 \fItcp_adv_win_scale\fP のデフォルト値は 2 であり、
189 この場合アプリケーションバッファは全体の 1/4 になる。
190 .TP 
191 \fItcp_allowed_congestion_control\fP (String; default: see text; Linux 2.4.20 以降)
192 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
193 非特権プロセスで利用できる輻輳制御アルゴリズムの選択肢を表示/設定する (\fBTCP_CONGESTION\fP ソケットオプションの説明を参照のこと)。
194 このリストの要素はホワイトスペースで区切られ、改行文字で終端される。 このリストは
195 \fItcp_available_congestion_control\fP で表示されるリストの部分集合となる。 このリストのデフォルト値は、"reno"
196 と \fItcp_congestion_control\fP のデフォルト設定をあわせたものとなる。
197 .TP 
198 \fItcp_autocorking\fP (ブール値; デフォルト: 有効; Linux 3.14 以降)
199 .\" commit f54b311142a92ea2e42598e347b84e1655caf8e3
200 .\" Text heavily based on Documentation/networking/ip-sysctl.txt
201 If this option is enabled, the kernel tries to coalesce small writes (from
202 consecutive \fBwrite\fP(2)  and \fBsendmsg\fP(2)  calls) as much as possible, in
203 order to decrease the total number of sent packets.  Coalescing is done if
204 at least one prior packet for the flow is waiting in Qdisc queues or device
205 transmit queue.  Applications can still use the \fBTCP_CORK\fP socket option to
206 obtain optimal behavior when they know how/when to uncork their sockets.
207 .TP 
208 \fItcp_available_congestion_control\fP (String; read\-only; Linux 2.4.20 以降)
209 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
210 登録されている輻輳制御アルゴリズムのリストを表示する。 このリストの要素はホワイトスペースで区切られ、改行文字で終端される。
211 このリストに載っているものだけが、 \fItcp_allowed_congestion_control\fP に表示される。
212 他の輻輳制御アルゴリズムがモジュールとして利用可能だが、 モジュールがロードされていないこともある。
213 .TP 
214 \fItcp_app_win\fP (integer; default: 31; Linux 2.4 以降)
215 .\" Since 2.4.0-test7
216 この変数は、TCP ウィンドウの何バイト分を バッファリングのオーバーヘッド用に予約するかを指定する。
217
218 .\"
219 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
220 そのウィンドウの \fIwindow/2^tcp_app_win\fP と mss の大きいほう (バイト単位)
221 がアプリケーションバッファとして予約される。 0 を指定すると一切予約領域を取らない。
222 .TP 
223 \fItcp_base_mss\fP (Integer; default: 512; Linux 2.6.17 以降)
224 .\"
225 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
226 パケット化レイヤの Path MTU discovery (MTU probing) で、 \fIsearch_low\fP の初期値と使用される値。 MTU
227 probing が有効な場合、この値はその接続の MSS の初期値となる。
228 .TP 
229 \fItcp_bic\fP (ブール値; デフォルト: 無効; Linux 2.4.27/2.6.6 から 2.6.13 まで)
230 .\"
231 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
232 BIC TCP 輻輳制御アルゴリズムを有効にする。 BIC\-TCP は送信側のみの変更で、 スケーラビリティと TCP 親和性
233 (friendliness) の両方を提供しつつ、 大きなウィンドウの下での線形な RTT 公平性を保証するものである。 このプロトコルでは
234 additive increase (追加的な増加) と binary search increase (二分探索増加) といわれる二つの仕組みを
235 組み合わせている。輻輳ウィンドウが大きいときは、増分の大きい additive increase により、スケーラビリティを確保しながら 線形な RTT
236 公平性を保証する。 輻輳ウィンドウが小さいときには binary search increase により TCP 親和性を達成している。
237 .TP 
238 \fItcp_bic_low_window\fP (integer; default: 14; Linux 2.4.27/2.6.6 以降 2.6.13 まで)
239 .\"
240 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
241 BIC TCP が輻輳ウィンドウの調整を開始する閾値ウィンドウ (パケット単位)  を設定する。この閾値を下回る場合、BIC TCP はデフォルトの
242 TCP Reno と 同じ動作をする。
243 .TP 
244 \fItcp_bic_fast_convergence\fP (ブール値; デフォルト: 有効; Linux 2.4.27/2.6.6 以降 2.6.13 まで)
245 BIC TCP が輻輳ウィンドウの変化により速く反応するようにする。 同じコネクションを共有する二つのフローが一つにまとまるのを
246 より速く行うようにする。
247 .TP 
248 \fItcp_congestion_control\fP (String; default: 説明参照; Linux 2.4.13 以降)
249 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
250 新規の接続で使用されるデフォルトの輻輳制御アルゴリズムを設定する。 "reno" アルゴリズムは常に利用可能だが、
251 カーネル設定次第では別の選択肢が利用できることもある。 このファイルのデフォルト値はカーネル設定の一つとして設定される。
252 .TP 
253 \fItcp_dma_copybreak\fP (integer; default: 4096; Linux 2.6.24 以降)
254 システムに DMA コピーエンジンが存在し、カーネルで \fBCONFIG_NET_DMA\fP オプションが有効になっている場合に、 DMA
255 コピーエンジンにオフロードされるソケットの読み込みサイズの下限値 (バイト単位)。
256 .TP 
257 \fItcp_dsack\fP (ブール値; デフォルト: 有効; Linux 2.4 以降)
258 .\" Since 2.4.0-test7
259 RFC\ 2883 の TCP Duplicate SACK のサポートを有効にする。
260 .TP 
261 \fItcp_ecn\fP (ブール値; デフォルト: 無効; Linux 2.4 以降)
262 .\" Since 2.4.0-test7
263 RFC\ 2884 の Explicit Congestion Notification を有効にする。
264 これを有効にすると、間違った振舞いをする古いルータが 経路の途中にあるような接続先に対して影響が生じ、 場合によっては接続が落ちるかもしれない。
265 .TP 
266 \fItcp_fack\fP (ブール値; デフォルト: 有効; Linux 2.2 以降)
267 .\" Since 2.1.92
268 TCP Forward Acknowledgement のサポートを有効にする。
269 .TP 
270 \fItcp_fin_timeout\fP (integer; default: 60; Linux 2.2 以降)
271 .\" Since 2.1.53
272 .\"
273 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
274 ソケットを強制的にクローズする前に、 最後の FIN パケットを待つ時間を秒単位で指定する。 これは厳密には TCP の仕様を満たしていないが、 DoS
275 攻撃 (denial of service attack) から身を守るために必要である。 Linux 2.2 ではデフォルト値は 180 であった。
276 .TP 
277 \fItcp_frto\fP (integer; default: 0; Linux 2.4.21/2.6 以降)
278 .\" Since 2.4.21/2.5.43
279 F\-RTO を有効にする。F\-RTO は TCP 再送タイムアウト (RTO) からの 復旧性能を向上させたアルゴリズムである。
280 この機能は無線環境で特に効果を発揮する。 無線環境では、通常は、中間ルータの輻輳ではなくランダムな無線の干渉 によりパケットロスが発生する。 詳細は
281 RFC\ 4138 を参照。
282
283 このファイルは以下のいずれかの値を取ることができる。
284 .RS
285 .IP 0 3
286 F\-RTO を無効にする。
287 .IP 1
288 基本版の F\-RTO アルゴリズムを有効にする。
289 .IP 2
290 そのフローで SACK を使用する場合、SACK 拡張版の F\-RTO を有効にする。 基本版の F\-RTO も SACK
291 が使用されている場合にも使用できるが、 基本版の場合には F\-RTO が SACK が有効になった TCP フローでの
292 パケット数計測と、相性が悪く相互干渉が起こる場面が存在する。
293 .RE
294 .IP
295 Linu 2.6.22 より前では、このパラメータはブール値であり、 上記の 0 と 1 のみをサポートしていた。
296 .TP 
297 \fItcp_frto_response\fP (integer; default: 0; Linux 2.6.22 以降)
298 F\-RTO が TCP 再送タイムアウトが偽物だと検出した場合 (つまり、TCP がもっと長い再送タイムアウトを設定していれば
299 タイムアウトが避けられた場合)、 次にどうするかに関して選択肢がいくつかある。 以下の値を選択できる。
300 .RS
301 .IP 0 3
302 レートを元の半分にする。 滑らかで、保守的な反応を行い、RTT 1回分の時間後に 輻輳ウィンドウ (\fIcwnd\fP)  とスロースタートの閾値
303 (\fIssthresh\fP)  が半分になる。
304 .IP 1
305 非常に保守的な反応。このオプションの使用は推奨されない。 反応が正しかった場合であっても、Linux TCP の他の部分と
306 うまく連携できないからである。 \fIcwnd\fP と \fIssthresh\fP は直ちに半分にされる。
307 .IP 2
308 積極的な反応。 不要と判明した輻輳制御の測定情報を取り消す (TCP がもっと注意深く扱うべき再送が失われる可能性を無視する)。 。 \fIcwnd\fP と
309 \fIssthresh\fP はタイムアウト前の値に戻される。
310 .RE
311 .TP 
312 \fItcp_keepalive_intvl\fP (integer; default: 75; Linux 2.4 以降)
313 .\" Since 2.3.18
314 TCP keep\-alive のプローブを送る間隔 (秒単位)。
315 .TP 
316 \fItcp_keepalive_probes\fP (integer; default: 9; Linux 2.2 以降)
317 .\" Since 2.1.43
318 TCP keep\-alive プローブの最大回数。 この回数だけ試しても接続先から反応が得られない場合は、 あきらめて接続を切断する。
319 .TP 
320 \fItcp_keepalive_time\fP (integer; default: 7200; Linux 2.2 以降)
321 .\" Since 2.1.43
322 接続がアイドル状態になってから、keep\-alive プローブを送信するまでの時間を秒単位で指定する。 \fBSO_KEEPALIVE\fP
323 ソケットオプションが有効になっている場合のみ keep\-alive は送信される。 デフォルト値は 7200 秒 (2 時間)。 keep\-alive
324 が有効になっている場合、 さらにおよそ 11 分 (75 秒間隔の 9 プローブ分)  経過するとアイドル状態の接続は終了させられる。
325
326 .\"
327 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
328 下層にある接続追跡機構やアプリケーションでのタイムアウトは、 もっとずっと短いかもしれない。
329 .TP 
330 \fItcp_low_latency\fP (ブール値; デフォルト: 無効; Linux 2.4.21/2.6 以降)
331 .\" Since 2.4.21/2.5.60
332 有効にすると、TCP スタックはスループットを高くするよりも 遅延を少なくすることを優先して判断を行う。
333 このオプションを無効にすると、スループットを高くすることが優先される。 このデフォルト値を変更した方がよいアプリケーションの例としては Beowulf
334 コンピュータクラスタが挙げられるだろう。
335 .TP 
336 \fItcp_max_orphans\fP (integer; default: see below; Linux 2.4 以降)
337 .\" Since 2.3.41
338 システムが許容する、 orphan な (どのユーザファイルハンドルにもアタッチされていない)  TCP ソケットの最大数。
339 この数を越えると、orphan な接続はリセットされ、警告が表示される。 この制限が存在するのは、単純な使用不能 (denial\-of\-service)
340 攻撃を 防ぐために過ぎない。この値を小さくすることは推奨しない。 ネットワークの条件によっては、この数値を大きくしないといけないかもしれないが、
341 orphan なソケットひとつあたり 64K 程度のスワップ不可能なメモリを消費することも注意せよ。 デフォルトの初期値はカーネルパラメータの
342 NR_FILE と等しい。 この初期デフォルト値はシステムのメモリに応じて調整される。
343 .TP 
344 \fItcp_max_syn_backlog\fP (integer; default: 下記参照; Linux 2.2 以降)
345 .\" Since 2.1.53
346 接続してきているクライアントから ack を受信していない状態の接続リクエストをキューに置ける最大数。
347 この数値を越えると、カーネルはリクエストを捨て始める。 デフォルトの値は 256 で、 システムに充分なメモリがある (128Mb 以上) 場合は
348 1024 になり、 メモリが非常に少ない場合 (32 Mb 以下) は 128 になる。 この数値を 1024 以上に増やしたい場合は、
349 \fIinclude/net/tcp.h\fP の TCP_SYNQ_HSIZE を
350 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog のように修正し、 カーネルを再コンパイルすることを奨める。
351 .TP 
352 \fItcp_max_tw_buckets\fP (integer; default: 下記参照; Linux 2.4 以降)
353 .\" Since 2.3.41
354 システムが許容する TIME_WAIT 状態にあるソケットの最大数。 この制限が存在するのは、 単純な使用不能 (denial\-of\-service)
355 攻撃を防ぐために過ぎない。 デフォルト値は NR_FILE*2 で、システムのメモリに応じて調整される。
356 この数値を越えると、そのようなソケットはクローズされ、警告が表示される。
357 .TP 
358 \fItcp_moderate_rcvbuf\fP (ブール値; デフォルト: 有効; Linux 2.4.17/2.6.7 以降)
359 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
360 有効にすると、TCP は受信バッファの自動調整を行う。 具体的には、 (\fItcp_rmem[2]\fP を超えない範囲で)
361 バッファの大きさを自動的に変化させ、 その経路で最大のスループットを達成するのに必要な大きさに合わせようとする。
362 .TP 
363 \fItcp_mem\fP (Linux 2.4 以降)
364 .\" Since 2.4.0-test7
365 これは 3 つの整数 [low, pressure, high] からなるベクトル値である。 これらは TCP がメモリ使用量を追跡するために用いられる
366 (使用量はシステムのページサイズ単位で計測される)。 デフォルトはブート時に利用できるメモリの量から計算される。 (実際には、TCP は \fIlow
367 memory\fP のみを使用する。値は 32ビットシステムでは約 900 メガバイトに制限される。 64 ビットシステムではこの制限はない。)
368 .RS
369 .TP  10
370 \fIlow\fP
371 TCP は、グローバルにアロケートしたページがこの数値以下の場合は、 メモリアロケーションを調整しない。
372 .TP 
373 \fIpressure\fP
374 TCP がアロケートしたメモリがこの数値分のページ数を越えると、 TCP はメモリ消費を抑えるようになる。 アロケートしたページ数が \fIlow\fP
375 以下になると、このメモリ圧迫状態から脱する。
376 .TP 
377 \fIhigh\fP
378 TCP がグローバルに割り当てるページ数の最大値。 この値はカーネルによって課されるあらゆる制限よりも優先される。
379 .RE
380 .TP 
381 \fItcp_mtu_probing\fP (integer; default: 0; Linux 2.6.17 以降)
382 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
383 このパラメータは、TCP のパケット化レイヤの Path MTU discovery を制御する。 このファイルには以下の値を設定できる。
384 .RS
385 .IP 0 3
386 無効にする。
387 .IP 1
388 デフォルトでは無効だが、ICMP ブラックホールが検出された場合は有効にする。
389 .IP 2
390 常に有効にする。 MSS の初期値として \fItcp_base_mss\fP が使用される。
391 .RE
392 .TP 
393 \fItcp_no_metrics_save\fP (ブール値; デフォルト: 無効; Linux 2.6.6 以降)
394 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
395 デフォルトでは、TCP は接続クローズ時に各種の接続パラメータを ルートキャッシュ (route cache) に保存し、近い将来に接続が確立された際に
396 これらの情報を初期状態として使用できるようになっている。 通常は、これにより全体として性能が向上するが、 時として性能の劣化を引き起こすこともある。
397 \fItcp_no_metrics_save\fP を有効にすると、TCP は接続クローズ時に接続パラメータをキャッシュ しなくなる。
398 .TP 
399 \fItcp_orphan_retries\fP (integer; default: 8; Linux 2.4 以降)
400 .\" Since 2.3.41
401 こちらからクローズした接続について、 先方をプローブする最大試行数。
402 .TP 
403 \fItcp_reordering\fP (integer; default: 3; Linux 2.4 以降)
404 .\" Since 2.4.0-test7
405 TCP パケットストリームでパケット順序の逆転が発生しただけであり、 パケットロスが起こったとはみなさない、パケット数の最大値。
406 この値を超えてパケットの順序逆転が起こると、パケットロスが生じたと みなし、slow start に入る。 この数値は変更しないほうが良い。
407 これは、接続中のパケットの並び替えによって生じる 不必要な速度低下や再送を最小化するように設計された、 パケット並び替え (packet
408 reordering) の検知メトリックなのである。
409 .TP 
410 \fItcp_retrans_collapse\fP (ブール値; デフォルト: 有効; Linux 2.2 以降)
411 .\" Since 2.1.96
412 再送の際にフルサイズのパケットを送ろうとする。
413 .TP 
414 \fItcp_retries1\fP (integer; default: 3; Linux 2.2 以降)
415 .\" Since 2.1.43
416 普通に確立されている接続上に、 TCP がネットワーク層を巻き込まずに再送を試みる回数。 再送がこの回数を越えると、まず最初に、
417 新しい再送を送る前に可能ならネットワーク層に経路を更新させる。 デフォルトは RFC が指定している最少数である 3。
418 .TP 
419 \fItcp_retries2\fP (integer; default: 15; Linux 2.2 以降)
420 .\" Since 2.1.43
421 確立状態の接続に、この回数 TCP パケットの再送信を 行なってもだめな場合はあきらめる。 デフォルト値は 15 で、これは
422 (再送のタイムアウトに依存するが)  およそ 13〜30 分程度の期間に対応する。 RFC\ 1122 は最小の限界を 100 秒と置いているが、
423 これはたいていの場合には短すぎると思われる。
424 .TP 
425 \fItcp_rfc1337\fP (ブール値; デフォルト: 無効; Linux 2.2 以降)
426 .\" Since 2.1.90
427 TCP の動作を RFC\ 1337 に準拠させる。 無効にすると、TIME_WAIT 状態のときに RST が受信された場合、 TIME_WAIT
428 期間の終了を待たずにそのソケットを直ちにクローズする。
429 .TP 
430 \fItcp_rmem\fP (Linux 2.4 以降)
431 .\" Since 2.4.0-test7
432 これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP
433 が受信バッファサイズを調整するために用いられる。 TCP は、システムで利用できるメモリに応じて、 受信バッファのサイズをこれらの変数の範囲で
434 以下に示すデフォルトから動的に調整する。
435 .RS
436 .TP  10
437 \fImin\fP
438 各 TCP ソケットが用いる受信バッファの最小サイズ。 デフォルト値はシステムのページサイズである (Linux 2.4 では、デフォルト値は 4K
439 バイトで、 メモリの少ないシステムでは \fBPAGE_SIZE\fP バイトに減らされる)。 この値は、メモリ圧迫モードにおいても、
440 このサイズの割り当てが成功することを保証するために用いられる。 これは、 \fBSO_RCVBUF\fP
441 を用いてソケットの最低受信バッファサイズを宣言する際には用いられない。
442 .TP 
443 \fIdefault\fP
444 TCP ソケットの受信バッファのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義されている、
445 ジェネリックなグローバルのデフォルトバッファサイズ \fInet.core.rmem_default\fP より優先される。 デフォルト値は 87380
446 バイトである (Linux 2.4 では、メモリの少ないシステムの場合 43689 まで減らされる)。 大きな受信バッファサイズが必要な場合は、
447 この値を増やすべきである (すべてのソケットに影響する)。 大きな TCP ウィンドウを用いるには、
448 \fInet.ipv4.tcp_window_scaling\fP を有効にしておかなければならない (デフォルトは有効)。
449 .TP 
450 \fImax\fP
451 各 TCP ソケットで用いる受信バッファの最大サイズ。 この値よりもグローバルの \fInet.core.rmem_max\fP が優先される。 これは、
452 \fBSO_RCVBUF\fP を用いてソケットの受信バッファサイズ制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。
453
454     max(87380, min(4MB, \fItcp_mem\fP[1]*PAGE_SIZE/128))
455
456 (Linux 2.4 では、デフォルト値は 87380*2 バイトで、 メモリの少ないシステムでは 87380 まで減らされる。)
457 .RE
458 .TP 
459 \fItcp_sack\fP (ブール値; デフォルト: 有効; Linux 2.2 以降)
460 .\" Since 2.1.36
461 RFC\ 2018 の TCP Selective Acknowledgements を有効にする。
462 .TP 
463 \fItcp_slow_start_after_idle\fP (ブール値; デフォルト: 有効; Linux 2.6.18 以降)
464 .\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
465 有効にすると、RFC 2861 の動作が行われ、 アイドル時間経過後に輻輳ウィンドウをタイムアウトさせる。 アイドル時間は現在の RTO
466 (再送タイムアウト) で定義される。 無効にすると、輻輳ウィンドウはアイドル時間経過後もタイムアウトされない。
467 .TP 
468 \fItcp_stdurg\fP (ブール値; デフォルト: 無効; Linux 2.2 以降)
469 .\" Since 2.1.44
470 .\" RFC 793 was ambiguous in its specification of the meaning of the
471 .\" urgent pointer.  RFC 1122 (and RFC 961) fixed on a particular
472 .\" resolution of this ambiguity (unfortunately the "wrong" one).
473 このオプションを有効にすると、 TCP 緊急ポインタ (urgent\-pointer)  フィールドを RFC\ 1122 に従った解釈を行う。
474 この解釈に従うと、緊急ポインタは緊急データの最後のバイトを指す。 このオプションを無効にすると、緊急ポインタの解釈が BSD 互換の方法で 行われる:
475 緊急ポインタは緊急データの後の最初のバイトを指す。 このオプションを有効にすると、相互運用性に問題が生じるかもしれない。
476 .TP 
477 \fItcp_syn_retries\fP (integer; default: 5; Linux 2.2 以降)
478 .\" Since 2.1.38
479 アクティブな TCP 接続に初期 SYN の再送を試みる最大回数。 この数値は 255 よりも大きくすべきではない。 デフォルトの値は 5 で、およそ
480 180 秒に対応する。
481 .TP 
482 \fItcp_synack_retries\fP (integer; default: 5; Linux 2.2 以降)
483 .\" Since 2.1.38
484 passive な TCP 接続の SYN/ACK セグメントで再送を試みる最大数。 この数値は 255 よりも大きくすべきではない。
485 .TP 
486 \fItcp_syncookies\fP (Boolean; Linux 2.2 以降)
487 .\" Since 2.1.43
488 TCP syncookies を有効にする。カーネルは \fBCONFIG_SYNCOOKIES\fP をつけてコンパイルしておかなければならない。
489 ソケットのバックログキューがオーバーフローすると、 syncookies が送信される。 syncookies 機能は、SYN flood
490 攻撃からソケットを守ろうとする。 これはいずれにしても、最終手段として用いるべきである。 これは TCP プロトコルに違反しており、 TCP
491 拡張のような、TCP の他の部分と衝突してしまう。 クライアントやリレーで問題が起こることもある。
492 過負荷や設定間違いによって負荷の大きな状態にあるサーバを調整して救うための 機構とみなすべきではない。 そのような用途には、代わりに
493 \fItcp_max_syn_backlog\fP, \fItcp_synack_retries\fP, \fItcp_abort_on_overflow\fP
494 などの使用を考えること。
495 .TP 
496 \fItcp_timestamps\fP (ブール値; デフォルト: 有効; Linux 2.2 以降)
497 .\" Since 2.1.36
498 RFC\ 1323 の TCP timestamps を有効にする。
499 .TP 
500 \fItcp_tso_win_divisor\fP (integer; default: 3; Linux 2.6.9 以降)
501 このパラメータは、一つの TCP Segmentation Offload (TSO) フレームで 消費できる輻輳ウィンドウの割合 (パーセント)
502 を制御する。 バースト性と、どれだけ大きな TSO フレームを構築するかのはトレードオフであり、 このパラメータはその度合いを設定する。
503 .TP 
504 \fItcp_tw_recycle\fP (ブール値; デフォルト: 無効; Linux 2.4 以降)
505 .\" Since 2.3.15
506 .\"
507 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
508 TIME_WAIT ソケットの素早い再利用を有効にする。 このオプションを有効にすると、 NAT (ネットワークアドレス変換)
509 を用いていると問題が生じるので、 あまり推奨しない。
510 .TP 
511 \fItcp_tw_reuse\fP (ブール値; デフォルト: 無効; Linux 2.4.19/2.6 以降)
512 .\" Since 2.4.19/2.5.43
513 .\"
514 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
515 プロトコルの面から見て問題ない場合に新規コネクションに TIME_WAIT 状態のソケットを再利用することを許可する。技術的に詳しい人の助言や
516 要請なしにこのオプションを変更すべきではない。
517 .TP 
518 \fItcp_vegas_cong_avoid\fP (ブール値; デフォルト: 無効; Linux 2.2 から 2.6.13 まで)
519 .\" Since 2.1.8; removed in 2.6.13
520 .\"
521 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
522 TCP Vegas 輻輳制御アルゴリズムを有効にする。 TCP Vegas は帯域を推測することで輻輳の起こり始めを予想するように TCP
523 の送信側のみに変更を加えたものである。 TCP Vegas は輻輳ウィンドウを修正することで、送信レートを調整する。 TCP Vegas は TCP
524 Reno と比べてパケットロスは少ないが、 TCP Reno ほど積極的な挙動はしない。
525 .TP 
526 \fItcp_westwood\fP (ブール値; デフォルト: 無効; Linux 2.4.26/2.6.3 から 2.6.13 まで)
527 TCP Westwood+ 輻輳制御アルゴリズムを有効にする。 TCP Westwood+ は TCP 輻輳制御の性能を最適化するように TCP
528 Reno の プロトコルスタックの送信側のみに修正を加えたものである。 輻輳が起こった後で、輻輳ウィンドウや slow start の閾値を
529 通信両端間の帯域の推測に基づいて設定する。 この推測を使って、TCP Westwood+ は輻輳が発生した時に使っていた 帯域を考慮に入れた slow
530 start の閾値と輻輳ウィンドウを設定する。 TCP Westwood+ は、有線ネットワークにおける TCP Reno の公平性
531 (fairness) と、無線リンクでのスループットを大きく向上する。
532 .TP 
533 \fItcp_window_scaling\fP (ブール値; デフォルト: 有効; Linux 2.2 以降)
534 .\" Since 2.1.36
535 RFC\ 1323 の TCP ウィンドウスケーリングを有効にする。 この機能を用いると、接続先が対応していれば、 TCP 接続で大きな (64K
536 以上の) ウィンドウが使えるようになる。 通常は TCP ヘッダのウインドウ長フィールドは 16 ビットなので、 ウィンドウサイズは 64K
537 バイト以下に限られる。 もっと大きなウィンドウを使いたい場合は、 アプリケーションはソケットバッファのサイズを増やして、
538 ウィンドウスケーリングのオプションを利用すればよい。 \fItcp_window_scaling\fP を無効にしていると、 TCP
539 は他端との接続設定の際に、 ウィンドウスケーリングのネゴシエーションを行なわない。
540 .TP 
541 \fItcp_wmem\fP (Linux 2.4 以降)
542 .\" Since 2.4.0-test7
543 これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP
544 が送信バッファサイズを調整するために用いられる。 TCP は、システムで利用できるメモリに応じて、送信バッファのサイズを
545 これらの変数の範囲で以下に示すデフォルトから動的に調整する。
546 .RS
547 .TP  10
548 \fImin\fP
549 各 TCP ソケットが用いる送信バッファの最小サイズ。 デフォルト値はシステムのページサイズである (Linux 2.4 では、デフォルト値は 4K
550 である)。 この値は、メモリ圧迫モードにおいても、 このサイズ以下の割り当てが成功することを保証するために用いられる。 これは、
551 \fBSO_SNDBUF\fP を用いてソケットの最低送信バッファサイズを宣言する際には用いられない。
552 .TP 
553 \fIdefault\fP
554 .\" True in Linux 2.4 and 2.6
555 TCP ソケットの送信バッファのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義されている、
556 ジェネリックなグローバルのデフォルトバッファサイズ \fI/proc/sys/net/core/wmem_default\fP より優先される。
557 デフォルト値は 16K バイトである。 大きな送信バッファサイズが必要な場合は、 この値を増やすべきである (すべてのソケットに影響する)。 大きな
558 TCP ウィンドウを用いるには、 \fI/proc/sys/net/ipv4/tcp_window_scaling\fP を 0 以外の値 (デフォルト値)
559 にしておかなければならない。
560 .TP 
561 \fImax\fP
562 各 TCP ソケットで用いる送信バッファの最大サイズ。 この値よりも \fI/proc/sys/net/core/wmem_max\fP が優先される。
563 これは \fBSO_SNDBUF\fP を用いてソケットの送信バッファサイズ制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。
564
565     max(65536, min(4MB, \fItcp_mem\fP[1]*PAGE_SIZE/128))
566
567 (Linux 2.4 では、デフォルト値は 128K バイトで、 メモリの少ないシステムでは 64K にまで減らされる。)
568 .RE
569 .TP 
570 \fItcp_workaround_signed_windows\fP (ブール値; デフォルト: 無効; Linux 2.6.26 以降)
571 有効にすると、ウィンドウスケーリングオプションを受信しないのは、 接続相手の TCP が壊れていると考え、ウィンドウを符号付きの量とみなす。
572 無効にすると、接続相手からウィンドウスケーリングオプションを受信しなかった 場合であっても、接続相手の TCP が壊れているとはみなさない。
573 .SS ソケットオプション
574 .\" or SOL_TCP on Linux
575 TCP ソケットのオプションは、 オプションレベル引数に \fIIPPROTO_TCP\fP を指定した \fBsetsockopt\fP(2)  で設定でき、
576 \fBgetsockopt\fP(2)  で取得できる。 注釈がない限り、 \fIoptval\fP は \fIint\fP へのポインタである。 さらに、ほとんどの
577 \fBIPPROTO_IP\fP ソケットオプションも TCP ソケットに対して有効である。詳細は \fBip\fP(7)  を見よ。
578 .TP 
579 \fBTCP_CONGESTION\fP (Linux 2.6.13 以降)
580 .\"         commit 5f8ef48d240963093451bcf83df89f1a1364f51d
581 .\"         Author: Stephen Hemminger <shemminger@osdl.org>
582 The argument for this option is a string.  This option allows the caller to
583 set the TCP congestion control algorithm to be used, on a per\-socket basis.
584 Unprivileged processes are restricted to choosing one of the algorithms in
585 \fItcp_allowed_congestion_control\fP (described above).  Privileged processes
586 (\fBCAP_NET_ADMIN\fP)  can choose from any of the available congestion\-control
587 algorithms (see the description of \fItcp_available_congestion_control\fP
588 above).
589 .TP 
590 \fBTCP_CORK\fP (Linux 2.2 以降)
591 .\" precisely: since 2.1.127
592 セットされると、 partial フレームを送信しない。 このオプションが解除されると、 キューイングされた partial フレームが送られる。これは
593 \fBsendfile\fP(2)  を呼ぶ前にヘッダを前置したり、 スループットを最適化したい場合に便利である。 現在の実装では、 \fBTCP_CORK\fP
594 で出力を抑えることができる時間の上限は 200 ミリ秒である。 この上限に達すると、キューイングされたデータは自動的に送信される。 Linux
595 2.5.71 以降においてのみ、このオプションを \fBTCP_NODELAY\fP と同時に用いることができる。
596 移植性の必要なプログラムではこのオプションを用いるべきではない。
597 .TP 
598 \fBTCP_DEFER_ACCEPT\fP (Linux 2.4 以降)
599 .\" Precisely: since 2.3.38
600 .\" Useful references:
601 .\" http://www.techrepublic.com/article/take-advantage-of-tcp-ip-options-to-optimize-data-transmission/
602 .\" http://unix.stackexchange.com/questions/94104/real-world-use-of-tcp-defer-accept
603 これを用いると、リスナはデータがソケットに到着した時のみ目覚めるようになる。 整数値 (秒) をとり、 TCP
604 が接続を完了しようと試みる回数を制限できる。 移植性の必要なプログラムではこのオプションを用いるべきではない。
605 .TP 
606 \fBTCP_INFO\fP (Linux 2.4 以降)
607 このソケットの情報を収集するのに用いる。 カーネルは \fI/usr/include/linux/tcp.h\fP ファイルで定義されている \fIstruct
608 tcp_info\fP を返す。 移植性の必要なプログラムではこのオプションを用いるべきではない。
609 .TP 
610 \fBTCP_KEEPCNT\fP (Linux 2.4 以降)
611 .\" Precisely: since 2.3.18
612 接続を落とす前に TCP が試みる keepalive プローブの最大回数。 移植性の必要なプログラムではこのオプションを用いるべきではない。
613 .TP 
614 \fBTCP_KEEPIDLE\fP (Linux 2.4 以降)
615 .\" Precisely: since 2.3.18
616 この時間 (秒単位) を越えて接続がアイドル状態に留まっていると、 このソケットに \fBSO_KEEPALIVE\fP
617 ソケットオプションが設定されている場合、 TCP は keepalive プローブを送りはじめる。
618 移植性の必要なプログラムではこのオプションを用いるべきではない。
619 .TP 
620 \fBTCP_KEEPINTVL\fP (Linux 2.4 以降)
621 .\" Precisely: since 2.3.18
622 各 keepalive プローブの間隔 (秒単位)。 移植性の必要なプログラムではこのオプションを用いるべきではない。
623 .TP 
624 \fBTCP_LINGER2\fP (Linux 2.4 以降)
625 .\" Precisely: since 2.3.41
626 orphan された FIN_WAIT2 状態のソケットの寿命。 このオプションを用いると、システム全体に適用されるファイル
627 \fI/proc/sys/net/ipv4/tcp_fin_timeout\fP の値を、このソケットに対してのみ変更できる。 \fBsocket\fP(7)
628 レベルのオプション \fBSO_LINGER\fP と混同しないこと。 移植性の必要なプログラムではこのオプションを用いるべきではない。
629 .TP 
630 \fBTCP_MAXSEG\fP
631 .\" Present in Linux 1.0
632 送出 TCP パケットの最大セグメントサイズ。 Linux 2.2 以前と Linux
633 2.6.28 以降では、このオプションを接続確立の前に設定すると、初期パケット
634 で他端にアナウンスする MSS の値も変化する。インターフェースの MTU より
635 も大きな (あるいは大きくなってしまった) 値は効果を持たない。 また TCP
636 は、この値よりも最小・最大の制限の方を優先する。
637 .TP 
638 \fBTCP_NODELAY\fP
639 .\" Present in Linux 1.0
640 設定すると Nagle アルゴリズムを無効にする。 すなわち、データ量が少ない場合でも 各セグメントは可能な限り早く送信される。 設定されていないと、
641 送信する分だけ溜まるまでデータはバッファされ、 小さなパケットを頻繁に送らずにすみ、 ネットワークを有効に利用できる。 このオプションは
642 \fBTCP_CORK\fP により上書きされる。しかしながら、 \fBTCP_CORK\fP が設定されている場合であっても、このオプションを設定すると、
643 送信待ちの出力を明示的に掃き出す (flush) ことになる。
644 .TP 
645 \fBTCP_QUICKACK\fP (Linux 2.4.4 以降)
646 設定されていると quickack モードを有効にし、クリアされると無効にする。 通常の TCP 動作では ack は必要に応じて遅延されるのに対し、
647 quickack モードでは ack はすぐに送信される。 このフラグは永続的なものではなく、 quickack
648 モードから/モードへ切り替えるためのものである。 これ以降の TCP プロトコルの動作によっては、 内部のプロトコル処理や、遅延 ack
649 タイムアウトの発生、 データ転送などの要因によって、 再び quickack から出たり入ったりする。
650 移植性の必要なプログラムではこのオプションを用いるべきではない。
651 .TP 
652 \fBTCP_SYNCNT\fP (Linux 2.4 以降)
653 .\" Precisely: since 2.3.18
654 接続の試行を中止させる前に TCP が送る SYN 再送数を設定する。 これは 255 より大きくはできない。
655 移植性の必要なプログラムではこのオプションを用いるべきではない。
656 .TP 
657 \fBTCP_USER_TIMEOUT\fP (Linux 2.6.37 以降)
658 .\"         commit dca43c75e7e545694a9dd6288553f55c53e2a3a3
659 .\"         Author: Jerry Chu <hkchu@google.com>
660 .\" The following text taken nearly verbatim from Jerry Chu's (excellent)
661 .\" commit message.
662 .\"
663 This option takes an \fIunsigned int\fP as an argument.  When the value is
664 greater than 0, it specifies the maximum amount of time in milliseconds that
665 transmitted data may remain unacknowledged before TCP will forcibly close
666 the corresponding connection and return \fBETIMEDOUT\fP to the application.  If
667 the option value is specified as 0, TCP will to use the system default.
668
669 Increasing user timeouts allows a TCP connection to survive extended periods
670 without end\-to\-end connectivity.  Decreasing user timeouts allows
671 applications to "fail fast", if so desired.  Otherwise, failure may take up
672 to 20 minutes with the current system defaults in a normal WAN environment.
673
674 This option can be set during any state of a TCP connection, but is only
675 effective during the synchronized states of a connection (ESTABLISHED,
676 FIN\-WAIT\-1, FIN\-WAIT\-2, CLOSE\-WAIT, CLOSING, and LAST\-ACK).  Moreover, when
677 used with the TCP keepalive (\fBSO_KEEPALIVE\fP)  option, \fBTCP_USER_TIMEOUT\fP
678 will override keepalive to determine when to close a connection due to
679 keepalive failure.
680
681 The option has no effect on when TCP retransmits a packet, nor when a
682 keepalive probe is sent.
683
684 This option, like many others, will be inherited by the socket returned by
685 \fBaccept\fP(2), if it was set on the listening socket.
686
687 Further details on the user timeout feature can be found in RFC\ 793 and
688 RFC\ 5482 ("TCP User Timeout Option").
689 .TP 
690 \fBTCP_WINDOW_CLAMP\fP (Linux 2.4 以降)
691 .\" Precisely: since 2.3.41
692 広報するウィンドウのサイズをこの値に固定する。 カーネルによって最小サイズは SOCK_MIN_RCVBUF/2 に制限されている。
693 このオプションは移植性の必要なコードでは用いるべきでない。
694 .SS "ソケット API"
695 TCP は帯域外データ (out\-of\-band data) を限定的にサポートしており、 (1 バイトの) 緊急データという形である。 つまり
696 Linux においては、 接続先が (新しいやり方の) 帯域外データを送ってきた場合、 (古いやり方の)
697 緊急データは通常のデータとしてストリームに挿入されることになる (これは \fBSO_OOBINLINE\fP がセットされている場合でも同様である)。
698 これは BSD ベースのスタックとは異なる。
699 .PP
700 Linux は、デフォルトでは urgent ポインタフィールドの解釈に BSD 互換の方法を用いる。これは RFC\ 1122 に反しているが、
701 他のスタックと同時に動作させるにはやむを得ない。これは \fI/proc/sys/net/ipv4/tcp_stdurg\fP によって変更できる。
702
703 \fBrecv\fP(2)  の \fBMSG_PEEK\fP フラグを使うと、帯域外データを覗き見することができる。
704
705 Linux 2.4 以降では、 \fBrecv\fP(2)  (や \fBrecvmsg\fP(2))  の \fIflags\fP 引き数に \fBMSG_TRUNC\fP
706 を使うことができる。 このフラグを指定すると、受信データは、呼び出し元から渡されたバッファ にコピーされて返されるのではなく、廃棄されるようになる。
707 Linux 2.4.4 以降では、 \fBMSG_TRUNC\fP を、帯域外データを受信するための \fBMSG_OOB\fP
708 と組み合わせて使った場合にも、これと同じ効果を持つようになっている。
709 .SS ioctl
710 以下の \fBioctl\fP(2) 呼び出しは \fIvalue\fP に情報を入れて返す。
711 正しい書式は以下の通り。
712 .PP
713 .RS
714 .nf
715 \fBint\fP\fI value\fP\fB;\fP
716 \fIerror\fP\fB = ioctl(\fP\fItcp_socket\fP\fB, \fP\fIioctl_type\fP\fB, &\fP\fIvalue\fP\fB);\fP
717 .fi
718 .RE
719 .PP
720 \fIioctl_type\fP は以下のいずれか一つである:
721 .TP 
722 \fBSIOCINQ\fP
723 .\" FIXME http://sources.redhat.com/bugzilla/show_bug.cgi?id=12002,
724 .\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers
725 受信バッファのキューにある、まだ読んでいないデータの量を返す。ソケットは
726 LISTEN 状態にあってはならず、さもないとエラー (\fBEINVAL\fP) が返る。
727 \fBSIOCINQ\fP は \fI<linux/sockios.h>\fP で定義されている。
728 代わりに、\fI<sys/ioctl.h>\fP で定義されている、同義語の \fBFIONREAD\fP
729 を使うこともできる。
730 .TP 
731 \fBSIOCATMARK\fP
732 受信データストリームが緊急マークの位置であれば、真を返す (つまり \fIvalue\fP が 0 以外)。
733
734 \fBSO_OOBINLINE\fP ソケットオプションが設定されていて、 \fBSIOCATMARK\fP
735 が真を返した場合、次のソケットからの読み込みでは緊急データが 返される。 \fBSO_OOBINLINE\fP ソケットオプションが設定されておらず、
736 \fBSIOCATMARK\fP が真を返した場合、次のソケットからの読み込みでは緊急データに 続くデータが返される (実際に緊急データを読み込むには
737 \fBrecv(MSG_OOB)\fP とフラグをつける必要がある)。
738
739 データの一回の読み込みでは緊急マークを跨がっての読み込みは行われない。 アプリケーションが緊急データの存在を (\fIexceptfds\fP
740 引き数を使って)  \fBselect\fP(2)  経由または \fBSIGURG\fP シグナルの配送を通じて知らされた場合、 \fBSIOCATMARK\fP
741 のチェックと読み込み (何バイト読み込み要求をしてもよい) を \fBSIOCATMARK\fP
742 が偽を返さなくなるまで繰り返し行うことで、緊急マークの位置まで 読み進めることができる。
743 .TP 
744 \fBSIOCOUTQ\fP
745 .\" FIXME http://sources.redhat.com/bugzilla/show_bug.cgi?id=12002,
746 .\" filed 2010-09-10, may cause SIOCOUTQ to be defined in glibc headers
747 ソケットの送信キューに残っている未送信データの量を返す。ソケットは LISTEN 状
748 態にあってはならない。 LISTEN 状態の場合にはエラー (\fBEINVAL\fP) となる。
749 \fBSIOCOUTQ\fP は \fI<linux/sockios.h>\fP で定義されている。
750 代わりに、\fI<sys/ioctl.h>\fP で定義されている、同義語の \fBTIOCOUTQ\fP を
751 使うこともできる。
752 .SS エラー処理
753 ネットワークエラーが起こると、 TCP はパケットの再送を試みる。 何回かやっても成功しなければ、この接続に対して \fBETIMEOUT\fP
754 エラーか最後に受信したエラーが返される。
755 .PP
756 アプリケーションによっては、もっと早くエラーを知らせてほしい場合がある。 これには \fBIPPROTO_IP\fP レベルの \fBIP_RECVERR\fP
757 ソケットオプションを用いると良い。このオプションが有効になっていると、 到着したエラーはすべてただちにユーザープログラムに渡される。
758 このオプションは慎重に用いること \(em ルーティングの変更など、 通常ありうるネットワーク状態に対して TCP をより脆弱にしてしまう。
759 .SH エラー
760 .TP 
761 \fBEAFNOTSUPPORT\fP
762 \fIsin_family\fP に渡されたソケットアドレスのタイプが \fBAF_INET\fP ではなかった。
763 .TP 
764 \fBEPIPE\fP
765 接続先が予期しなかったかたちでソケットをクローズした。 またはシャットダウンされたソケットに読み込みが実行された。
766 .TP 
767 \fBETIMEDOUT\fP
768 接続先が、何回かデータを再送しても反応しない。
769 .PP
770 \fBip\fP(7)  で定義されているエラーや、ジェネリックなソケット層におけるエラーも TCP に返されることがある。
771 .SH バージョン
772 Explicit Congestion Notification、zero\-copy の \fBsendfile\fP(2)、 並び替えのサポート、SACK
773 拡張 (DSACK) などのサポートは 2.4 で導入された。 フォワード確認 (FACK)、TIME_WAIT リサイクル、接続ごとの
774 keepalive に対するソケットオプションは 2.3 で導入された。
775 .SH バグ
776 まだ説明されていないエラーがある。
777 .br
778 .\" Only a single Linux kernel version is described
779 .\" Info for 2.2 was lost. Should be added again,
780 .\" or put into a separate page.
781 .\" .SH AUTHORS
782 .\" This man page was originally written by Andi Kleen.
783 .\" It was updated for 2.4 by Nivedita Singhvi with input from
784 .\" Alexey Kuznetsov's Documentation/networking/ip-sysctl.txt
785 .\" document.
786 IPv6 に関する記述がない。
787 .SH 関連項目
788 \fBaccept\fP(2), \fBbind\fP(2), \fBconnect\fP(2), \fBgetsockopt\fP(2), \fBlisten\fP(2),
789 \fBrecvmsg\fP(2), \fBsendfile\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBip\fP(7),
790 \fBsocket\fP(7)
791 .sp
792 RFC\ 793: TCP の仕様。
793 .br
794 RFC\ 1122: TCP の要求事項と Nagle アルゴリズムの記述。
795 .br
796 RFC\ 1323: TCP のタイムスタンプ・ウィンドウスケーリング各オプション。
797 .br
798 RFC\ 1337: TIME_WAIT assassination hazard に関する説明。
799 .br
800 RFC\ 3168: Explicit Congestion Notification に関する説明。
801 .br
802 RFC\ 2581: TCP 輻輳制御アルゴリズム。
803 .br
804 RFC\ 2018 と RFC\ 2883: SACK とその拡張。
805 .SH この文書について
806 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.64 の一部
807 である。プロジェクトの説明とバグ報告に関する情報は
808 http://www.kernel.org/doc/man\-pages/ に書かれている。