TCP

Section: Devices and Network Interfaces (4)
索引 jman

BSD mandoc
BSD 4.2  

索引

名称

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

索引

書式

Fd #include <sys/types.h> Fd #include <sys/socket.h> Fd #include <netinet/in.h> Ft int Fn 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 から得ることができます。 オプションは、すべて Aq Pa netinet/tcp.h で定義されています。

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

索引

MIB の変数

プロトコルは、 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 の取り決めの際に特に指示が無い場合に使用されます。

 

索引

診断

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

Bq Er EISCONN
既にコネクションが確立されているソケットに対し さらにコネクションを確立させようとした時
Bq Er ENOBUFS
内部的なデータ構造のためのメモリが不足した時
Bq Er ETIMEDOUT
過度の再送信によりコネクションが落ちた時
Bq Er ECONNRESET
リモートピアが強制的にコネクションをクローズした時
Bq Er ECONNREFUSED
リモートピアが意識的にコネクションの確立を拒否してきた時 (大抵はそのポートを監視しているプロセスが無いためです)
Bq Er EADDRINUSE
既に割り当てられているポートに対しソケットを作成しようとした時
Bq Er EADDRNOTAVAIL
対応したネットワークインタフェースが存在しない ネットワークアドレスを指定し、ソケットを作成しようとした時
Bq Er 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 High Performance" RFC 1323
R. Braden "T/TCP - TCP Extensions for Transactions" RFC 1644
 

索引

歴史

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


 

索引

Index

名称
書式
解説
MIB の変数
診断
関連項目
歴史

jman



Time: 07:07:25 GMT, January 12, 2009