1999/10/18
ネットワーク (16)
TCP (Transmission Control Protocol)
TCP はコネクション指向の、信頼性のあるバイト・ストリーム・サービスを
提供する。
- コネクション指向 --- TCPを利用する2つのアプリケーション(一方がサーバで、
他方がクライアントの場合が一般的)がデータを交換する前に、
相互にTCPコネクションを確立する。
- TCPはデータを通信に最適なサイズに分割する。
分割された断片は「セグメント(segment)」と呼ばれる。
- TCP はセグメントを送る時にタイマーを設定し、他方のエンドから
セグメントが受信されたことをしらせる確認応答を待つ。
時間内に確認応答が返ってこない場合は、セグメントを再転送する。
- TCPがセグメントを受け取ると、(数秒送らせて)確認応答を送る。
- TCPはヘッダでチェックサムを利用する。
チェックサムが一致しない場合は、確認応答を送らない。
- TCPは受け取ったセグメントを順番通りに並び替え、正しい順序で
アプリケーションに渡す。
- 重複したIPデータグラムを受け取った場合は、破棄する。
- フロー制御を行なう。
- byte stream service --- 8bitのbyte streamでデータが交換される。
TCPが(サイズなどの)情報をさしはさむことはないので、書き込み側が
どのようにデータを書いたか(たとえば10byte, 20byte, 50byteに分けて書く、など)
読みだし側ではわからない(まとめて受け取られるかもしれない)。
TCP Header
|<------------ IP Datagram ----------------->|
|<------- TCP Segment--------->|
+-------------+-------------+----------------+
| IP Header | TCP Header | TCP Data |
+-------------+-------------+----------------+
20bytes 20bytes
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgement Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| your data ... |
...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Source port --- 発信元のポート番号。
送り手のアプリケーションを特定するために必要。
- Destination port --- 宛先のポート番号。
受け手のアプリケーションを特定するために必要。
- Sequence Number --- 新しいコネクションが張られるとき、
SYNフラグがonになり、初期シーケンス番号 (Initial Sequence Number)
が送られる。以後、「ISP+それまで送られたデータの大きさ」が acknowledge
(確認応答番号)として使われる。「SYNフラグはデータ1の大きさを持つ」
とみなされるので、最初のデータのシケンス番号は 「ISP+1」となる。
- フラグ・ビット
- URG --- 緊急ポインタが有効
- ACK --- 確認応答番号が有効
- PSH --- 受け手は可能な限り早くアプリケーションにこのデータを渡すべき
- RST --- コネクションをリセット
- SYN --- コネクションを初期化するためにシーケンス番号を同期させる。
- FIN --- 送り手はデータの送信を終了した
IP Address と port番号の組を、socket(ソケット)と呼ぶ。
TCPコネクションにおける2つのエンド・ポイントを
socket pair (つまり、送信側のIP address とポート番号、
受信側のIP Addressとポート番号が含まれる)と呼ぶ。