名 前
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_SNDBUF や SO_RCVBUF ソ ケ ッ ト オ プ シ ョ ン を 用 い て setsockopt(2) コ ー ル を 用 い て 設 定 す れ ば よ い 。
SO_SNDBUF や SO_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 シ グ ナ ル を 送 信 す る 。 送 信 先 は SIOCSPGRP や FIOSETOWN 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
(ブ ー ル 値 ; デ フ
ォ ル ト : 無 効 ; 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 (ブ ー ル 値 ; デ フ ォ ル ト : 無 効 ; Linux 2.4 以 降 )
RFC 2884 の Explicit Congestion Notification を 有 効 に す る 。 こ れ を 有 効 に す る と 、 間 違 っ た 振 舞 い を す る 古 い ル ー タ ー が 経 路 の 途 中 に あ る よ う な 接 続 先 に 対 し て 影 響 が 生 じ 、 場 合 に よ っ て は 接 続 が 落 ち る か も し れ な い 。
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: 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 の 他 の 部 分 と う ま く 連 携 で き な い か ら で あ る 。 cwnd と ssthresh は 直 ち に 半 分 に さ れ る 。
2 積 極 的 な 反 応 。 不 要 と 判 明 し た 輻 輳 制 御 の 測 定 情 報 を 取 り 消 す
(TCP が も っ と 注 意 深 く 扱 う べ き 再 送 が 失 わ れ る 可 能 性 を 無 視 す る )。 。 cwnd と ssthresh は タ イ ム ア ウ ト 前 の 値 に 戻 さ れ る 。
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 (ブ ー ル 値 ;
デ フ ォ ル ト : 無
効 ; 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 (ブ ー ル 値
; デ フ ォ ル ト : 有
効 ; 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 で は 、 デ フ ォ ル ト 値 は 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 (ブ ー ル 値 ; デ フ ォ ル ト : 有 効 ; 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: 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 (ブ ー ル 値 ; デ フ ォ ル ト : 有 効 ; 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 (ブ ー ル 値 ;
デ フ ォ ル ト : 無
効 ; Linux 2.4 以 降 )
TIME_WAIT ソ ケ ッ ト の 素 早 い 再 利 用 (fast recycling) を 有 効 に す る 。 通 常 の イ ン タ ー ネ ッ ト と 通 信 し た り NAT (ネ ッ ト ワ ー ク ア ド レ ス 変 換 ) を 使 う デ バ イ ス で は 、 こ の オ プ シ ョ ン を 有 効 に す る の は 推 奨 さ れ な い 。 い く つ か の NAT ゲ ー ト ウ ェ イ で は IP タ イ ム ス タ ン プ を そ の ま ま 通 過 さ せ る の で 、 一 つ の IP が 増 加 し な い タ イ ム ス タ ン プ を 持 つ よ う に 見 え る 。 RFC 1323 (PAWS), 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 接 続 で 大 き な (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
(ブ ー ル 値 ; デ フ
ォ ル ト : 無 効 ; Linux
2.6.26 以 降
) 有 効 に す る と
、 ウ ィ ン ド ウ
ス ケ ー リ ン グ
オ プ シ ョ ン を
受 信 し な い の
は 、 接 続 相 手
の TCP が 壊 れ て い
る と 考 え 、 ウ
ィ ン ド ウ を 符
号 付 き の 量 と
み な す 。 無 効
に す る と 、 接
続 相 手 か ら ウ
ィ ン ド ウ ス ケ
ー リ ン グ オ プ
シ ョ ン を 受 信
し な か っ た 場
合 で あ っ て も
、 接 続 相 手 の TCP
が 壊 れ て い る
と は み な さ な
い 。 ソ ケ ッ ト
オ プ シ ョ ン
TCP ソ ケ ッ ト の オ
プ シ ョ ン は 、
オ プ シ ョ ン レ
ベ ル 引 数 に
IPPROTO_TCP を 指 定 し
た setsockopt(2) で 設 定
で き 、 getsockopt(2) で
取 得 で き る 。
注 釈 が な い 限
り 、 optval は int へ
の ポ イ ン タ ー
で あ る 。 さ ら
に 、 ほ と ん ど
の IPPROTO_IP ソ ケ ッ
ト オ プ シ ョ ン
も TCP ソ ケ ッ ト に
対 し て 有 効 で
あ る 。 詳 細 は
ip(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)
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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。