プログラミングに役立つ情報をメモしています

エンジニアが押さえておきたいTCPの特徴まとめ

TCP

TCPは、OSI参照モデルにおける第4層、トランスポート層のプロトコルです。第4層はコンピュータ同士の転送をエンドツーエンド(End-to-End)で管理するためのプロトコルです。TCPはデータをパケットに分割し、相手先のTCPまで送り届けます。TCPは、流量制御、再送制御があり、パケットは重複なく、順番通り、確実に届きます。信頼性の高いプロトコルです。

TCPが使われている例

  • FTP(21)
  • HTTP(80)
  • POP3(110)
  • SSH(22)
  • Telnet(23)

TCPの特徴

  • コネクション型のプロトコル
    1対1のコネクションを確立してから通信を行います
  • データを小分けにして送信する
    小分けにするデータのサイズは、MSS(Maximum Segment Size)と呼ばれます。お互いのコンピュータは、TCPヘッダにMSSの値を設定し、小さい方の値がMSSとして利用されます
  • シーケンス番号
    TCPは1オクテット単位でデータにシーケンス番号を付与し、ヘッダに含めて送信します。TCPは、確認応答、再送、重複の検知、並び替えにシーケンス番号を使います
  • ウィンドウ制御(スライディングウィンドウ)
    1つのパケットごとに確認応答(ACK)を送ると通信が遅いため、TCPはウィンドウという概念を設けて通信の高速化を図っています。送信データの合計オクテット数がウィンドウサイズ以下であれば、送信側は、受信側のACKを待たずに次のデータを送信できます。ウィンドウサイズは、フロー制御と輻輳制御によって決まります。
  • フロー制御
    受信側はデータを大量に受け取ると処理できないため、確認応答(ACK)のTCPのヘッダのフィールドにウィンドウサイズ(MSSの整数倍)を指定します
  • 輻輳制御(Congestion Control)
    ネットワークの混雑を避けるため、TCPには輻輳制御の機能があります。送信側は、TCPのセッションごとに輻輳ウィンドウ(Congestion Window)を保持しています。輻輳ウィンドウは、Ackを受け取らずに送信できるデータ量をMSS単位で表しています。スロースタートのメカニズムが利用されており、最初の輻輳ウィンドウは 1 MSS(Maximum Segment Size) に設定され、ACKを受け取るたびにMSSの整数倍(2,4(または10))のように値を増やしていきます。フロー制御と異なり、送信側が決めます。

おまけ

TCP/IP

TCP/IPはインターネット・プロトコル・スイートとも呼ばれます。端的に表現すると、インターネット=TCP/IPプロトコルのネットワークです。

インターネットは異なるコンピュータのネットワークデバイス同士が接続されることによって成り立っています。

コンピュータが異なるコンピュータに送るデータは、TCP(Transmission Control Protocol)と、IP(Internet Protocol)を組み合わせた「TCP/IP」によって宛先のコンピュータに送り届けられます。

IP

IPは、OSI参照モデルにおける第3層、ネットワーク層のプロトコルです。第3層はアドレスを管理し、宛先までの経路を決定し、データを中継するプロトコルです。地図で例えるならば、正しい宛先にパケットを送り届けるGPSの役割を担います。IPはベストエフォート型のプロトコルであるため、データが重複したり、順番が変わったり、届かなかったりする場合があります。

第3層の通信は、ルーターによって行われます。ルーターはネットワーク同士、ネットワークとコンピュータを接続します。そのため、第1層から第3層までの接続機能を持っています。

BSDソケット

TCPはBSDソケットによって実現されています。BSDソケットは1983年にUNIX 4.2BSDで初めて実装されて以降、コンピュータネットワークのAPIとしてデファクト・スタンダードになり、すべての主流なOSで実装されています。

ソケットにはTCPを使うストリームソケット(Stream Socket)と、UDPを使うデータグラムソケット(Datagram Socket)の2種類があります。

ソケットは、クライアント・サーバー方式で通信します。クライアント側はサーバー側ソケットのIPアドレスとポート番号を知っている必要があります。