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 の変数
-
- 診断
-
- 関連項目
-
- 歴史
-
Time: 07:07:25 GMT, January 12, 2009