TCPとは

てぃーしーぴー

Transmission Control Protocolの略。トランスポート層のコネクション型のプロトコル。3ウェイハンドシェイクで接続を確立し、シーケンス番号、確認応答(ACK)、再送によって、データを欠けや重複なく、送った順に届ける。フロー制御と輻輳制御で送る量も調整する。Webのアクセス(HTTP/1.1・HTTP/2)、メール、SSHなどが使う。

「TCP」は、2分野の17問の練習問題に出てきます(ネットワークの基礎, Web技術の基礎など)。

この用語の分野: ネットワークの基礎

確実に届けるしくみ

TCPは、送るデータの1バイトごとに通し番号(シーケンス番号)を付けます。受信側は「次はこの番号から送ってください」という確認応答(ACK)を返し、送信側は決められた時間内にACKが来なければ、そのデータを送り直します(再送タイムアウト)。同じ番号のACK(重複ACK)を3つ受け取ったときは、タイムアウトを待たずに再送します(高速再送)。受信側は、順序が入れ替わって届いたデータを並べ直し、重複を捨て、チェックサムで壊れたデータを見つけます。アプリケーションからは、区切りのないバイトの流れ(ストリーム)として見えます。

ウィンドウで送る量を決める

送信側は、ACKを待たずに送ってよい量(ウィンドウ)の分だけ、続けてデータを送ります。受信側が伝える空きバッファの大きさ(受信ウィンドウ)に合わせるのがフロー制御、ネットワークの混み具合に合わせて送信側が持つ輻輳ウィンドウを増減するのが輻輳制御で、実際には両方の小さい方まで送ります。1往復の時間(RTT)に送れるのはウィンドウ分なので、スループットはおよそウィンドウ÷RTTになります。例えばウィンドウ64 KB、RTT 100 msでは約5 Mbit/sが上限で、速い回線を生かすにはウィンドウスケールのオプションでウィンドウを大きくします。

ヘッダと接続の管理

TCPのヘッダは、オプションなしで20バイトです。送信元と宛先のポート番号、シーケンス番号、確認応答番号、SYN・ACK・FIN・RSTなどのフラグ、ウィンドウの大きさ、チェックサムが入ります。1つの接続は、送信元と宛先のIPアドレスとポート番号の4つの組で区別されます。接続は3ウェイハンドシェイクで始め、両方向がそれぞれFINを送って閉じます。1つのセグメントが失われると、後ろのデータが届いていてもアプリケーションに渡せず待たされる(ヘッドオブラインブロッキング)ため、HTTP/3ではUDPの上のQUICが使われます。

TCPの練習問題に挑戦

TCP/IPの4階層のモデルで、TCPとUDPが属する層はどれか。

  1. Aアプリケーション層
  2. Bインターネット層
  3. Cトランスポート層
答えと解説を見る

正解:C. トランスポート層

TCP/IPのモデルは、下からリンク層(ネットワークインターフェース層)、インターネット層、トランスポート層、アプリケーション層の4つの層で表されます。TCPとUDPはトランスポート層のプロトコルで、ポート番号を使って、端末の中のどのアプリケーション宛ての通信かを区別します。インターネット層のIPは、端末から端末までパケットを届けることを担います。HTTPやDNSはアプリケーション層のプロトコルです。OSI参照モデルと対応させると、トランスポート層は第4層、インターネット層は第3層にあたります。

TCPでコネクションを確立する3ウェイハンドシェイクで、やり取りされるパケットの順序として正しいものはどれか。

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
答えと解説を見る

正解:C. SYN → SYN+ACK → ACK

3ウェイハンドシェイクでは、まずクライアントがSYNで接続を求め、自分が送るデータの最初の番号(初期シーケンス番号)を伝えます。サーバはSYN+ACKで、それを受け取ったことを確認(ACK)すると同時に、自分の初期シーケンス番号を伝えます。最後にクライアントがACKを返すと、両方向の通信の準備が整います。3回のやり取りで両方の向きの番号を確かめ合うことで、遅れて届いた古いパケットによる誤った接続などを防ぎます。このため、TCPではデータを送り始めるまでに少なくとも1往復の時間(RTT)がかかります。FINはコネクションを終了するときに使います。

よくある質問

TCPとUDPの違いは何ですか?

TCPはコネクションを確立し、確認応答と再送、順序の制御によってデータを確実に届けます。UDPは接続の手順も再送もなく、データグラムを送りっぱなしにするので、ヘッダが小さく遅れも少なくなります。確実さが必要なWebやファイルの転送にはTCP、少しの損失より遅れの少なさが大事な通話や、問い合わせが短いDNSにはUDPが使われます。

TCPの再送はいつ起きますか?

2つのきっかけがあります。1つは、送ってから再送タイムアウトの時間(RTTの測定から計算する)が過ぎてもACKが来ないとき、もう1つは、同じ確認応答番号のACKを3つ続けて受け取ったときで、後者を高速再送と呼びます。再送が続くと、タイムアウトの時間を倍々に延ばします。

TCPのスループットが回線の速度より低いのはなぜですか?

1往復の時間(RTT)に送れるのはウィンドウの大きさまでなので、遠くの相手ほど、ウィンドウが小さいほど、スループットが下がります。パケットの損失で輻輳制御がウィンドウを小さくしたときや、受信側のアプリケーションの読み出しが遅いときにも下がります。

解説の中の「TCP」

「TCP」が出てくる問題(17問)

  1. TCP/IPの4階層のモデルで、TCPとUDPが属する層はどれか。
  2. TCPでコネクションを確立する3ウェイハンドシェイクで、やり取りされるパケットの順序として正しいものはどれか。
  3. RTT(往復の時間)が100 msのWebサーバに、HTTPS(TCPの上のTLS 1.3)で新しく接続し、最初のリクエストを送って応答を受け取り始めるまでにかかる時間に最も近いものはどれか。DNSの名前解決は済んでおり、サーバの処理時間とデータの転送時間は無視する。
  4. TCPのフロー制御で、受信側がウィンドウサイズ(受信ウィンドウ)を送信側に通知する目的として正しいものはどれか。
  5. TCPの受信ウィンドウが65536バイトで一定、RTTが10 msの接続で、回線の帯域は十分に大きく、損失もないとする。この接続で得られるスループットの上限に最も近いものはどれか。
  6. TCPの輻輳制御の基本的な考え方として正しいものはどれか。
  7. TCPの送信側が、セグメントが失われたと判断して再送するきっかけとして正しいものはどれか。
  8. 1 Gbpsのイーサネットで、IPパケットの大きさがMTUいっぱいの1500バイトになるようにしてTCPのデータを送り続ける。IPv4ヘッダを20バイト、TCPヘッダを20バイト、イーサネットのヘッダとFCSを合わせて18バイト、プリアンブルとフレームの間の空き(フレーム間ギャップ)を合わせて20バイトとすると、アプリケーションのデータのスループットの上限に最も近いものはどれか。
  9. RTTが40 msのWebサーバから、HTMLを1つと、そこから参照される画像を4つ、1つずつ順番に取得する。TCPの接続の確立に1往復、各リクエストと応答に1往復かかるとし、データの転送時間、サーバの処理時間、TLS、接続の切断は考えない。オブジェクトごとに新しいTCP接続を張る場合と、1つのTCP接続を使い回す持続的接続の場合とで、かかる時間の差はどれか。
  10. 1.5 MBのテキストのデータを、gzipで3分の1の大きさに圧縮して送る。帯域が10 Mbps、RTTが100 msで、データを送り始める前に、TCPの接続、TLSのハンドシェイク、HTTPのリクエストで合わせて3往復かかるとする。1 MB = 10^6 バイトとし、圧縮と展開の時間、ヘッダ、TCPの輻輳制御による待ちは無視する。データを受け取り終えるまでの時間に最も近いものはどれか。
  11. OSI参照モデルで、IPアドレスのような論理的なアドレスを使い、異なるネットワークの間でパケットを中継して宛先まで届ける役割をもつ層はどれか。
  12. Webページのデータを送るとき、送信側でデータが上の層から下の層へ渡されるたびに起こることとして正しいものはどれか。
  13. UDPの特徴として正しいものはどれか。
  14. DNSの主な役割として正しいものはどれか。
  15. 100 MBのファイルを100 Mbpsの回線で送るのにかかる時間に最も近いものはどれか。ヘッダなどのオーバーヘッドや遅延は無視し、1 MB = 10^6 バイトとする。

ネットワークの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

この用語が出てくる比較

関連する用語

パケット HTTP RTT(往復遅延時間) IP(インターネットプロトコル) UDP DNS TLS QUIC 輻輳制御 ルータ

用語集の一覧へ