スポンサーリンク

TCP(4) FreeBSD カーネルインタフェースマニュアル TCP(4)

名称

tcp − インターネットトランスミッションコントロールプロトコル

書式

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

int

socket(AF_INET, SOCK_STREAM, 0);

解説

TCP プロトコルは信頼性のある、フロー制御された、全二重のデータ転送を提供 します。本プロトコルは SOCK_STREAM として抽象化された機能をサポートするも のとして使用される、バイトストリーム型のプロトコルです。 TCP は標準のイン ターネットアドレスフォーマットを使用し、加えてホスト毎の ‘‘ポートアドレ ス’’ の集合も使用します。従って各アドレスは、ホスト及びネットワークを特定 するインターネットアドレスと、ホスト上のピアエンティティを識別する特定 TCP ポートから構成されます。

tcp プロトコルを利用しているソケットは ‘‘能動型’’ および ‘‘受動型’’ の 2 種類があります。能動型のソケットは、受動型のソケットに対しコネクションを 開始します。デフォルトでは TCP ソケットは能動型のものが作成されます。受動 型ソケットを作成するには、 bind(2) システムコールでソケットをバインドした 後、 listen(2) システムコールを使う必要があります。受動型ソケットのみが、 accept(2) コールを使用して、入力されるコネクション要求を受け付けることが できます。また、能動型ソケットのみが、 connect(2) コールを使用してコネク ションを開始することができます。 TCP はさらに、トランザクション TCP と呼 ばれるデータグラムの様なモードもサポートしています。本件に関しては ttcp(4) で述べられています。

受動型ソケットは複数のネットワークから来るコネクション要求に対処するため に、その位置を ‘‘明確に指定しない’’ ことができます。この技術は ‘‘ワイルド カードアドレッシング’’ と呼ばれ、単一のサーバが複数のネットワーク上のクラ イアントにサービスを提供することができます。全ネットワークからのコネク ション要求に応答するソケットを作成するには、インターネットアドレス INADDR_ANY をバインドする必要があります。この時点でも、 TCP ポートを指定 できます。もしポートが指定されていない場合はシステムがポートを割り当てま す。コネクションが一度確立されると、ソケットのアドレスはピアエンティティ の場所により固定されます。ソケットが割り当てられたアドレスは、ネットワー クインタフェースと結び付けられており、このネットワークインタフェースを通 してパケットが送受信されます。普通、このアドレスはピアエンティティのネッ トワークと一致します。

TCP はソケットのオプションをいくつかサポートしており、それらは setsockopt(2) により設定できます。また、 getsockopt(2) によりオプションの 設定を調べることができます:

       TCP_NODELAY

大抵の状況下において、 TCP はデータが現れるとそれを送信しま す。確認応答されていないデータが残っている場合は、確認応答 が受信された時すぐに一つのパケットで送信するために少量の出 力データを集めておきます。応答を受け取らないマウスイベント のストリームを送信するウィンドウシステムのような少数のクラ イアントにとっては、このパケット化は重大な遅延の原因となり ます。ブールオプション TCP_NODELAY によりこのアルゴリズムを 無効にすることができます。

TCP_MAXSEG
デフォルトでは、送信側及び受信側の TCP 間の各コネクションで 各々最大セグメントサイズの取り決めを行います。 TCP_MAXSEG オプションによりこの取り決めの結果をユーザが決定することが でき、また要求があればその値を減らすことができます。

TCP_NOOPT
TCP は普通、本実装において提供される様々な TCP 拡張機能に 従って、各パケット中でいくつかオプションを送信します。ブー ルオプション TCP_NOOPT は各コネクションで使用される TCP オ プションを無効化するために提供されています。

TCP_NOPUSH
慣例により、送信側の TCP は ‘‘push’’ ビットをセットし、(も し許可されていれば) write(2) または writev(2) が呼ばれる度 に即座に送信します。 TCP_NOPUSH オプションはトランザクショ ン TCP ( ttcp(4) を参照) をサーバが簡単に利用するために提供 されています。本オプションが 0 以外の値にセットされると、 TCP はソケットがクローズされるか内部の送信バッファがいっぱ いになるまで、あらゆるデータの送信を遅らせます。

setsockopt(2) コールにおけるオプションレベルは TCP のプロトコルナンバであ り、 getprotobyname(3) あるいは IPPROTO_TCP から得ることができます。オプ ションは、すべて ⟨netinet/tcp.h⟩ で定義されています。

IP トランスポートレベルでのオプションは TCP で使用可能です。本件は ip(4) を参照してください。ソースルートの入力コネクション要求が記載されており、 また逆向きのソースルートが応答で使用されます。

MIB の変数

tcp プロトコルは、 sysctl(3) MIB の net.inet ブランチで 3 つの変数を実装 しています。

       TCPCTL_DO_RFC1323

(tcp.rfc1323) RFC 1323 のウィンドウスケーリング及びタ イムスタンプのオプションの実装 (デフォルトは真)。

TCPCTL_DO_RFC1644
(tcp.rfc1644) トランザクション TCP の実装。 RFC 1644 で述べられています。

TCPCTL_MSSDFLT
(tcp.mssdflt) 最大セグメントサイズ (‘‘MSS’’) のデフォ ルト値。 MSS の取り決めの際に特に指示が無い場合に使用 されます。

診断

ソケット操作の失敗の際には次のエラーのうちの一つが返されます:

       [EISCONN]

既にコネクションが確立されているソケットに対しさらにコネ クションを確立させようとした時

[ENOBUFS]
内部的なデータ構造のためのメモリが不足した時

[ETIMEDOUT]
過度の再送信によりコネクションが落ちた時

[ECONNRESET]
リモートピアが強制的にコネクションをクローズした時

[ECONNREFUSED]
リモートピアが意識的にコネクションの確立を拒否してきた時 (大抵はそのポートを監視しているプロセスが無いためです)

[EADDRINUSE]
既に割り当てられているポートに対しソケットを作成しようと した時

[EADDRNOTAVAIL]
対応したネットワークインタフェースが存在しないネットワー クアドレスを指定し、ソケットを作成しようとした時

[EAFNOSUPPORT]
マルチキャストアドレスに対しソケットをバインドまたは接続 しようとした時

関連項目

getsockopt(2), socket(2), sysctl(3), inet(4), intro(4), ip(4), ttcp(4)

       V. Jacobson, R. Braden, and D. Borman,                                                TCP Extensions for HighPerformance,                    RFC 1323.
       R. Braden,                    T/TCP − TCP Extensions for Transactions,                                                               RFC 1644.

歴史

tcp プロトコルは 4.2BSD から登場しました。ウィンドウスケーリング及びタイ ムスタンプに関する RFC 1323 の拡張機能は 4.4BSD で追加されました。

4.2 Berkeley Distribution February 14, 1995 4.2 Berkeley Distribution

スポンサーリンク