日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
TCP(4) FreeBSD カーネルインタフェースマニュアル TCP(4) 名称 tcp -- インターネット送信制御 (トランスミッションコントロール) プロトコル 書式 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> int socket(AF_INET, SOCK_STREAM, 0); 解説 TCP プロトコルは、信頼性があり、フロー制御された、双方向のデータ送信を提 供します。それは、SOCK_STREAM 抽象化をサポートするために使用されるバイト ストリーム型プロトコルです。TCP は、標準のインターネットアドレス形式を使 用し、さらに、ホストごとの ``ポートアドレス'' の集まりを提供します。した がって、各アドレスは、ピア (相手) エンティティを識別するホストで特定の TCP ポートを備えた、ホストとネットワークを指定するインターネットアドレス で構成されています。 TCP プロトコルを利用するソケットは、``アクティブ'' (能動) か ``パッシブ'' (受動) のいずれかです。アクティブ (能動) のソケットは、パッシブ (受動) の ソケットに接続を開始します。デフォルトでは、TCP ソケットは、アクティブで 作成されます。パッシブのソケットを作成するためには、bind(2) システムコー ルでソケットをバインドした後に、listen(2) システムコールを使用しなければ なりません。パッシブのソケットだけが着信接続を受け付けるために accept(2) 呼び出しを使用できます。クティブのソケットだけが接続を開始するために connect(2) 呼び出しを使用できます。 パッシブのソケットは、複数のネットワークからの着信接続要求に合わせるため に、それらの位置を ``あいまいに指定'' することができます。この技術は、 ``ワイルドカードアドレシング'' と呼ばれ、単一のサーバが複数のネットワーク でクライアントに対するサービスを提供できます。すべてのネットワークで lis ten する (接続を受け付ける) ソケットを作成するためには、インターネットア ドレス INADDR_ANY がバインドされていなければなりません。TCP ポートは、こ の時点でも指定できます。ポートが指定されていないと、システムがポートを割 り当てます。接続がいったん確立されると、ソケットのアドレスは、ピア (相手 側) エンティティの位置によって固定されます。ソケットが割り当てられたアド レスは、パケットが送受信されているネットワークインタフェースに関連してい るアドレスです。通常、このアドレスは、ピア (相手側) エンティティのネット ワークに一致しています。 TCP は、setsockopt(2) で設定して getsockopt(2) でテストすることができる多 くのソケットオプションをサポートしています: TCP_INFO ソケットの基本的な TCP セッションに関する情報は、読み込 み専用オプション TCP_INFO を getsockopt(2) に渡すことに よって、検索されます。それは、単一の引数を受け付けます: struct tcp_info のインスタンスへのポインタです。 この API は、変更される可能性があります。このオプション によって、どのフィールドが現在書き込まれるかを決定する ために、ソースを調べます。FreeBSD 特有の追加は、ウィン ドウサイズの送信、ウィンドウサイズの受信と帯域幅で制御 されたウィンドウサイズを含みます。 TCP_CCALGOOPT 輻輳制御アルゴリズム特有のパラメータを設定するか、また は問い合わせます。詳細については、mod_cc(4) を参照して ください。 TCP_CONGESTION TCP が接続するために使用する輻輳制御アルゴリズムを選択 するか、または問い合わせます。詳細については、mod_cc(4) を参照してください。 TCP_FUNCTION_BLK この接続のために TCP が使用する関数の組を選択するか、ま たは問い合わせます。これによって、ユーザは、代替の TCP スタックを選択することができます。代替の TCP スタック は、カーネルにすでにロードされていなければなりません。 利用可能な TCP スタックをリストするためには、ずっと下の 「MIB 変数」セクションの functions_available を参照して ください。デフォルトの TCP スタックをリストするために は、「MIB 変数」セクションの functions_default を参照し てください。 TCP_KEEPINIT この setsockopt(2) オプションは、新しく確立されなかった TCP 接続のために、秒単位の u_int のソケットごとのタイム アウト引数を受け付けます。ミリ秒単位のグローバルなデ フォルトについては、さらに後ろの、「MIB の変数」のセク ションの keepinit を参照してくさい。 TCP_KEEPIDLE この setsockopt(2) オプションは、(有効にされていれば) keepalive プローブがこのソケットの接続のために送信さら れる前に、接続がアイドルでなければならない、秒単位の、 時間の量のための u_int の引数を受け付けます。listen し ている (接続を受け付けている) ソケットで設定されている なら、値は、accept(2) 上の新しく作成されたソケットに よって継承されます。ミリ秒単位のグローバルなデフォルト については、さらに後ろの、「MIB の変数」のセクションの keepinit を参照してくさい。 TCP_KEEPINTVL この setsockopt(2) オプションは、ピア (相手側) に送信さ れた keepalive プローブの間で、秒単位のソケットごとの間 隔を設定するために u_int の引数を受け付けます。listen している (接続を受け付けている) ソケットで設定されてい るなら、値は、accept(2) 上の新しく作成されたソケットに よって継承されます。ミリ秒単位のグローバルなデフォルト については、さらに後ろの、「MIB の変数」のセクションの keepintvl を参照してくさい。 TCP_KEEPCNT この setsockopt(2) オプションは、u_int の引数を受け付 け、接続が落される前に、応答なしで、送信されたプローブ の数のソケットごとの調整を許可します。listen している (接続を受け付けている) ソケットで設定されているなら、値 は、accept(2) 上の新しく作成されたソケットによって継承 されます。グローバルなデフォルトについては、さらに後ろ の、「MIB の変数」のセクションの keepcnt を参照してくさ い。 TCP_NODELAY たいていの状況の下で、TCP は、データが存在するとき、そ れを送信します。未解決のデータがまだ肯定応答されていな いとき、肯定応答がいったん受信されると、単一のパケット で送信するために少量の出力データを集めます。応答を受け 取らないマウスイベントのストリームを送信するウィンドウ システムのような少数のクライアントに関しては、このパ ケット化は、深刻な遅延を引き起こすかもしれません。ブー ル (論理演算子) オプション TCP_NODELAY は、このアルゴリ ズムを無効にします。 TCP_MAXSEG デフォルトでは、送信側-TCP と受信側-TCP は、各接続に使 用される最大のセグメントサイズを決定するためにそれら自 体の間でネゴシエート (交渉) します。TCP_MAXSEG オプショ ンで、ユーザは、このネゴシエーション (交渉) の結果を決 定し、必要ならそれを減少することができます。 TCP_NOOPT 通常、TCP は、この実装で提供される様々な TCP 拡張に従っ て、各パケットでいくつかのオプションを送信します。ブー ル (論理演算子) オプション TCP_NOOPT は、接続ベースごと に使用される TCP オプションを無効にするために提供されて います。 TCP_NOPUSH 慣例により、送信側-TCP は、``push'' (プッシュ) ビットを 設定して、あらゆるユーザの write(2) か writev(2) の呼び 出しの終わりで、(許されるなら) 直ちに送信を始めます。こ のオプションが 0 以外の値に設定されるとき、TCP は、ソ ケットがクローズされるか、または内部の送信バッファが満 たされるまであらゆるデータの送信を遅らせます。 TCP_MD5SIG このオプションは、指定されたソケットへの書き込み時に (別名 TCP-MD5 として知られている) MD5 ダイジェストの使 用を可能にします。発信トラフィックが、ダイジェスト (要 約) されます。着信トラフィックに関するダイジェスト (要 約) は、検証されます。このオプションがソケットで有効に されるとき、すべて着信と発信 TCP セグメントは、MD5 ダイ ジェストで署名されなければなりません。 FreeBSD ルータ展開におけるこの一般的の使用は、基本とな るルータをピアとなるポイントで Cisco 機器で相互に作用で きるようにすることです。この機能のサポートは、RFC 2385 に適合しています。 このオプションを正しく機能するためには、管理者が setkey(8) ユーティリティを使用して tcp-md5 キーエントリ をシステムのセキュリティ関連データベース (SADB) に追加 するのことが必要です。現時点でホストベースごとで、この エントリのみを指定することができますだけです。 宛先 (終点) のための SADB エントリを見つけることができ ないなら、システムは、あらゆる発信セグメントを送信せ ず、あらゆる着信セグメントを落とします。 各落とされたセグメントは、TCP プロトコルの統計で考慮さ れます。 setsockopt(2) 呼び出しのためのオプションレベルは、getprotobyname(3) また は IPPROTO_TCP から入手できる TCP のプロトコル番号です。すべてのオプショ ンは、<netinet/tcp.h> で宣言されています。 IP 転送レベルにおけるオプションは、TCP で使用できます。ip(4) を参照してく ださい。指定経路制御 (ソースルート) された着信接続要求は、注意すべきで す、そして、逆向きの始点経路は、応答で使用されます。 TCP のためのデフォルトの輻輳制御アルゴリズムは、cc_newreno(4) です。 mod_cc(4) フレームワークを使用して他の輻輳制御アルゴリズムを利用可能にす ることができます。 MIB の変数 TCP プロトコルは、sysctl(3) MIB の net.inet.tcp ブランチでいくつかの変数 を実装しています。 TCPCTL_DO_RFC1323 (rfc1323) RFC 1323 のウィンドウのスケーリングとタイム スタンプのオプションを実装します (デフォルトは、真で す)。 TCPCTL_MSSDFLT (mssdflt) MSS ネゴシエーション (交渉) で反対の通知を受 信しないとき、デフォルト値は、最大のセグメントサイズ (``MSS'') を使用します。 TCPCTL_SENDSPACE (sendspace) 最大の TCP 送信ウィンドウ。 TCPCTL_RECVSPACE (recvspace) 最大の TCP 受信ウィンドウ。 log_in_vain 接続を受け付けるソケットがないポートに試みられるあらゆ る接続のログを登録します。1 の値は、ログの登録を SYN (接続の確立) パケットだけに制限します。2 の値は、ク ローズされたポートへのあらゆる TCP パケットをログに登 録します。上記に記載されないどんな値もログの登録を無効 にします (デフォルトは、0、すなわち、ログの登録は、無 効にされます)。 msl パケットのための、ミリ秒単位の、最大セグメント生存期 間。 keepinit 確立されない TCP 接続の、ミリ秒単位の、新しいタイムア ウト。デフォルトは、75000 ミリ秒です。 keepidle 接続がキープアライブ (生き続ける) プローブが (可能なら ば) 送信される前にアイドルとなるべき時間の合計。デフォ ルトは、7200000 ミリ秒 (2 時間) です。 keepintvl keepidle プローブで応答が受信されないとき、キープアラ イブ (生き続ける) プローブがリモートマシンに送信される ミリ秒単位のインターバル。デフォルトは、75000 ミリ秒で す。 keepcnt 接続が落される前に、応答なしで、送信されたプローブの 数。デフォルトは、8 パケットです。 always_keepalive SO_KEEPALIVE がすべての TCP 接続で設定され、カーネル は、接続がまだあるか確かめるためにリモートホストへパ ケットを定期的に送信すると仮定します。 icmp_may_rst 特定の ICMP 到達不能メッセージは、SYN-SENT 状態で接続 をアボートできます。 do_tcpdrain システムの mbuf が少ないなら、TCP 再構築キューでパケッ トをフラッシュします。 blackhole 接続を受け付けるソケットがないポートに接続を試みると き、可能であれば、RST の送信を無効にします。 blackhole(4) を参照してください。 delayed_ack 試みるために ACK を遅らせ、データパケットにそれをピ ギーバック (積んで輸送) します。 delacktime 遅延の ACK が送信される前の、ミリ秒単位の、最大の合計 時間。 path_mtu_discovery パス MTU 発見を有効にします。 tcbhashsize TCP 制御ブロックハッシュテーブル (読み込み専用) のサイ ズ。これは、カーネルオプション TCBHASHSIZE を使用する か loader(8) の net.inet.tcp.tcbhashsize を設定するこ とによって調整できます。 pcbcount アクティブなプロセス制御ブロックの数 (読み込み専用)。 syncookies SYN クッキーが外向きの SYN-ACK パケットのために生成さ れるかどうかを決定します。SYN クッキーは、SYN ラッド (大量送り付け) 攻撃の間にとても役に立ち、デフォルトで 有効にされます。(syncookies(4) 参照)。 isn_reseed_interval 秘密データが RFC 1948 の初期シーケンス番号計算でどれく らいの頻度で使用したかを指定する間隔 (秒単位) は、再 シード (種) されるべきです。デフォルトで、この変数は、 再シードが起こらないことを示す 0 に設定されます。再 シードは、必要ではなく、数分間 TIME_WAIT リサイクリン グをブレークします。 rexmit_min, rexmit_slop TCP のために再送信タイマ計算を調整します。スロップ (slop) は、最小が絶対最小を指定している間、SRTT (ラウ ンドトリップ時間を平滑化 (smoothed round trip time)) が適応することができない、時々の変化を考慮に入れるため に生の計算に通常加えられます。多くの TCP RFC が最小の 1 秒を提案している一方、これらの RFC は、ストリーミン グの振る舞いに焦点を合わせる傾向があり、それらのケース は、速い再送信コードによってカバーされなかった大変速い が損失の多い接続である、802.11b 無線リンクのように、最 小の 1 秒が損失の多いインタラクティブ接続上の深刻で有 害な影響があるという事実に対処できません。この理由で、 我々は、スロップ (slop) の 200ms と (Linux と同様の) 200ms の有効な最小を我々に与える、near-0 最小を使用し ます。 initcwnd_segments セグメントの数の初期の輻輳ウィンドウを指定する能力を有 効にします。デフォルト値は、RFC 6928 によって推奨され る 10 です。急いで値を変更することは、ホストキャッシュ から輻輳ウィンドウを使用する接続に影響しません。警告: これは、最初の RTT に送信されることを許可されるパケッ トのバースト (破裂) を調整します。値は、リンクの容量と 関連するべきです。低い容量のリンクのための小さい値で開 始します。大きいバーストは、ルータに小さなバッファがあ るか、リンクが輻輳を経験しているなら、バッファのオーバ ランとパケットの落下を起こすかもしれません。 rfc3042 RFC 3042 で説明される Limited Transmit アルゴリズムを 有効にします。それは、損失の多いリンクで、そして短い転 送のときに起こるような輻輳 (混雑) ウィンドウが小さいと き、タイムアウトを避けるのに役立ちます。 rfc3390 最大のセグメントサイズによって、新しい接続のときに可変 サイズの開始輻輳 (混雑) ウィンドウを認める、RFC 3390 のサポートを有効にします。これは、一般的にスループット (処理能力) に役立ちますが、特に短い転送と高帯域の大き い伝播遅延接続に影響します。 sack.enable 受信側がすべての成功して到着したセグメントに関して送付 側に通知するのを許し、送付側が欠落したセグメントだけを 再送するのを許す、TCP Selective Acknowledgment オプ ションである、RFC 2018 のサポートを有効にします。 sack.maxholes 接続毎の SACK ホールの最大数。デフォルトは、128 です。 sack.globalmaxholes すべての接続に渡るシステム毎の SACK ホールの最大数。デ フォルトは、65536 です。 maxtcptw TCP 接続が TIME_WAIT 状態に入るとき、わずかなサイズと 使用であるので、関連ソケット構造は、解放されます、そし て、新しい構造は、圧縮された TCP TIMEXWAIT 状態と呼ば れる、この状態で接続を持続するために必要な最小量の情報 を含むように割り付けられます。この構造がソケット構造よ り小さいので、かなりの量のシステムメモリを節約すること ができます。net.inet.tcp.maxtcptw MIB 変数は、割り付け られたこれらの構造の最大数を制御します。デフォルトで、 それは、kern.ipc.maxsockets / 5 に初期化されます。 nolocaltimewait 両方の終点がローカルである接続のために圧縮された TCP TIMEXWAIT 状態の作成を抑制します。 fast_finwait2_recycle ソケットが SBS_CANTRCVMORE としてマークされるとき、TCP FIN_WAIT_2 接続を、より速くリサイクルします (ユーザプ ロセスでは、ソケットがオープンされず、ソケットで受信さ れたデータは、読み込むことができません)。ここで使用さ れたタイムアウトは、finwait2_timeout です。 finwait2_timeout TCP FIN_WAIT_2 接続の速いリサイクルに使用するタイムア ウト。デフォルトは、60 秒です。 ecn.enable TCP Explicit Congestion Notification (明示的な輻輳通 知) (ECN) のサポートを有効にします。ECN によって、TCP の送信側は、パケットの落下を回避するために転送速度を減 少することができます。設定は、次の通りです: 0 ECN を無効にします。 1 着信接続が、ECN を要求することを許可しま す。発信接続は、ECN を要求します。 2 着信接続が、ECN を要求することを許可しま す。発信接続は、ECN を要求しません。 ecn.maxretries 特定の接続のとき、ECN を無効にする前の (SYN または SYN/ACK の再送の) 再試行の数。これは、壊れているファイ アウォールがネットワーク経路にあるとき、接続の確立に役 に立つために必要です。 pmtud_blackhole_detection 自動的なパス MTU ブラックホール検出をオンに切り替えま す。再送信の場合に、OS は、それが MTU 問題かどうかを チェックするために MSS を低下させます。現在の MSS が試 みるために設定された値より大きいなら、それは、設定され た値に設定され、そうでなければ、MSS は、デフォルト値 (net.inet.tcp.mssdflt と net.inet.tcp.v6mssdflt) に設 定されます。 pmtud_blackhole_mss PMTU ブラックホール検出がオンにされたなら、IPv4 に対し て試みる MSS。 v6pmtud_blackhole_mss PMTU ブラックホール検出がオンにされたなら、IPv6 に対し て試みる MSS。 pmtud_blackhole_activated ダウンシフトの試みで使用された設定された値の回数。 pmtud_blackhole_activated_min_mss ダウンシフトの試みで使用されたデフォルトの MSS の回 数。 pmtud_blackhole_failed MSS ダウンシフトの後でさえ継続される再転送のための接続 の数。 functions_available 利用可能な TCP 関数ブロックのリスト (TCP スタック)。 functions_default デフォルトの TCP 関数ブロック (TCP スタック)。 insecure_rst RST セグメントを受け付けるための RFC5961 の代わりに RFC793 で定義されている基準 (criterias) を使用します。 デフォルトは、false です。 insecure_syn SYN セグメントを受け付けるための RFC5961 の代わりに RFC793 で定義されている 基準 (criterias) を使用しま す。デフォルトは、false です。 エラー ソケット操作は、失敗すれば、次のエラーのうちの 1 つを返します: [EISCONN] 既に接続があるソケットに接続を確立しようとしたとき。 [ENOBUFS] システムが内部のデータ構造のためのメモリを使い果たすと き。 [ETIMEDOUT] 接続が過度の再送信のため切れたとき。 [ECONNRESET] リモートピア (相手側) が強制的に接続をクローズさせられ るとき。 [ECONNREFUSED] リモートピア (相手側) が積極的に接続の確立を拒絶すると き (通常、どんなプロセスもポートを listen (接続を受け 付け) していないので)。 [EADDRINUSE] 既に割り付けられたポートがあるソケットを作成する試みを するとき。 [EADDRNOTAVAIL] ネットワークインタフェースが存在しないネットワークアド レスでソケットを作成する試みをするとき。 [EAFNOSUPPORT] ソケットをマルチキャストアドレスにバインドするか、また は接続する試みをするとき。 [EINVAL] セッションの無効のポイントで TCP 関数ブロックを変更し ようとするとき。 [ENOENT] 利用可能ではない TCP 関数ブロックを使用しようとすると き。 関連項目 getsockopt(2), socket(2), sysctl(3), blackhole(4), inet(4), intro(4), ip(4), mod_cc(4), siftr(4), syncache(4), setkey(8) V. Jacobson, R. Braden, and D. Borman, TCP Extensions for High Performance, RFC 1323. A. Heffernan, Protection of BGP Sessions via the TCP MD5 Signature Option, RFC 2385. K. Ramakrishnan, S. Floyd, and D. Black, The Addition of Explicit Congestion Notification (ECN) to IP, RFC 3168. 歴史 TCP プロトコルは、4.2BSD で登場しました。ウィンドウスケーリングとタイムス タンプに関する RFC 1323 拡張は、4.4BSD で追加されました。TCP_INFO オプ ションは、Linux 2.6 で導入され、変更される可能性があります。 FreeBSD 11.2 February 6, 2017 FreeBSD 11.2