[2] [DFN[[[TCP]]]] は、[[インターネット]]の最も主要な[[トランスポート層プロトコル]]です。

* 仕様書

[REFS[
- [6] [CITE@en[RFC 793 - Transmission Control Protocol]]
( ([TIME[2014-12-29 14:15:21 +09:00]] 版))
<https://tools.ietf.org/html/rfc793>
- [7] [CITE[RFC Errata Report]] ([TIME[2015-03-07 12:27:24 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=793>
- [8] [CITE@en[RFC 1122 - Requirements for Internet Hosts - Communication Layers]] ([TIME[2014-12-15 14:23:41 +09:00]] 版) <https://tools.ietf.org/html/rfc1122>
]REFS]

* TCP の機能

[28] 
[FIG(short list)[
- [[ポート]]
- [[セグメント]]
- [[three-way handshaking]]
- [[接続]]
- [[信頼性]]
- [[フロー制御]]
- [[輻輳制御]]
- [[SYN]]
- [[ACK]]
- [[FIN]]
- [[RST]]
- [[緊急データ]]
- [[URG]]
- [[PSH]]
- [[チェックサム]]
- [[piggyback]]
- [[ToS]]
- [[Nagleアルゴリズム]]
- [CODE[[[SO_KEEPALIVE]]]]
- [[MSS]]
- [[TCP Fast Open]]
]FIG]

* 関連技術

[FIG(short list)[
- [[RED]]
- [[NAPT]]
- [[TCPリセット問題]]
- [[SSL]]/[[TLS]]
- [[ソケット]]
- [[UDP]]
- [[SSH]]
]FIG]

* 下位層

[3] [[下位層]]の[[プロトコル]]としては、 [[IP]] を使います。

* 上位層

[4] 次の[[アプリケーション層プロトコル]]が [[TCP]] を使っています。
[FIG(short list)[
- [[HTTP]]
- [[SMTP]]
- [[POP]]
- [[IMAP]]
- [[telnet]]
- [[SSH]]
- [[FTP]]
- [[SIP]]
- [[RTSP]]
- [[IRC]]
- [[NNTP]]
- [[DNS]]
]FIG]

[5] また次の[[プロトコル]]も[[下位層]]として [[TCP]] を使っています。
[FIG(short list)[
- [[SSL]] / [[TLS]]
- [[SOCKS]]
]FIG]

[10] 次の [[API]] があります。
[FIG(short list)[
- [[Socket]]
]FIG]

[11] [[TCP]] を下位層として使う[[プロトコル]]は、次のような事項を規定する必要があります
(が、すべてを十分明確に規定していない[[プロトコル]]がほとんどです)。
[FIG(list)[
- [12] 利用する ([[サーバー]]の) [[ポート]]の選択方法
- [19] データの送信の時機と内容、[CODE[[[PSH]]]] や[[緊急ポインター]]の値
- [18] データを受信した時の処理
- [15] [[緊急データ]]を受信した時の処理
- [16] [[接続]]を閉じるべき状況
- [17] 正常または異常に[[接続]]が閉じられた時の処理
- [20] 受信しなかった時の処理 (タイムアウト)
- [21] 同じ相手との同時接続数の制限 (あれば)
]FIG]

[26] [[TCP]] を使う[[アプリケーション]]は、次のような事項を考慮する必要があります。

[FIG(short list)[
- [24] [[TCPリセット問題]]
- [25] [[TIME_WAIT]]
- [23] [[virtual host]] 対応
- [22] [[cross-protocol attack]] 対策
]FIG]

* 派生プロトコル

[13] 次の[[プロトコル]]が [[TCP]] から派生しています。

[FIG(short list)[
- [[XCP]]
]FIG]

[14] 次の[[プロトコル]]は[[プロキシ]]として [[TCP]] のかわりに使われることがあります。
[FIG(list short)[
- [[SOCKS]]
- [[HTTP]] [CODE(HTTP)@en[[[CONNECT]]]]
]FIG]

* メモ

[1] [CITE[Kazuho@Cybozu Labs: TCP通信ではデータの送信をまとめて行うべき、もうひとつの理由(& サーバのベンチマーク手法の話)]]
([TIME[2009-12-02 00:25:29 +09:00]] 版)
<http://developer.cybozu.co.jp/kazuho/2009/12/tcp-064e.html>

[9] [CITE@en[RFC 7414 - A Roadmap for Transmission Control Protocol (TCP) Specification Documents]]
([TIME[2015-03-11 21:21:12 +09:00]] 版)
<https://tools.ietf.org/html/rfc7414>

[27] [CITE@en[RFC 7974 - An Experimental TCP Option for Host Identification]]
([TIME[2016-11-15 12:22:48 +09:00]])
<https://tools.ietf.org/html/rfc7974>