1999/10/18

ネットワーク (16)


TCP (Transmission Control Protocol)

TCP はコネクション指向の、信頼性のあるバイト・ストリーム・サービスを 提供する。
  1. TCPはデータを通信に最適なサイズに分割する。 分割された断片は「セグメント(segment)」と呼ばれる。
  2. TCP はセグメントを送る時にタイマーを設定し、他方のエンドから セグメントが受信されたことをしらせる確認応答を待つ。 時間内に確認応答が返ってこない場合は、セグメントを再転送する。
  3. TCPがセグメントを受け取ると、(数秒送らせて)確認応答を送る。
  4. TCPはヘッダでチェックサムを利用する。 チェックサムが一致しない場合は、確認応答を送らない。
  5. TCPは受け取ったセグメントを順番通りに並び替え、正しい順序で アプリケーションに渡す。
  6. 重複したIPデータグラムを受け取った場合は、破棄する。
  7. フロー制御を行なう。
  8. 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 ...                                     |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP Address と port番号の組を、socket(ソケット)と呼ぶ。 TCPコネクションにおける2つのエンド・ポイントを socket pair (つまり、送信側のIP address とポート番号、 受信側のIP Addressとポート番号が含まれる)と呼ぶ。