Skip to content
Latchkey

TCP 接続とは? 信頼できるバイトストリーム

TCP 接続は、handshake で確立される 2 つのエンドポイント間の信頼できる順序付きチャネルで、バイトが無傷かつ順序どおりに到着することを保証するか、さもなくば接続が失敗します。

HTTP や gRPC を含むほとんどのアプリケーションプロトコルは、TCP の上で動作します。TCP は、データの確認応答、損失の再送信、すべての正しい順序付けを行うことで、信頼できないパケットネットワークを信頼できるバイトストリームに変えます。CI の job が connection reset や timeout を報告するとき、それは使用していたプロトコルの下層にある TCP レベルの障害です。

three-way handshake

TCP 接続は、データが流れる前に双方を同期する SYN、SYN-ACK、ACK の交換で開きます。handshake が完了してはじめて、アプリケーションはバイトを送信できます。

信頼できて順序付き

TCP はバイトに番号を付け、受信を確認応答し、失われたものを再送信するため、アプリケーションはきれいで順序どおりのストリームを見ます。この信頼性が、TCP が非常に多くのトラフィックを支える理由です。

ポートがエンドポイントを識別する

接続は、送信元と宛先の IP に加えてポートで識別されます。クライアントは、HTTPS 用の 443 のような well-known なサーバーポートに対して、一時的なローカルポートを開きます。

TCP エラーが CI でどう現れるか

  • Connection refused:そのポートで何もリッスンしていません。
  • Connection reset:peer がストリームの途中で接続を切断しました。
  • Connection timed out:期限内に応答がありませんでした。

接続とデプロイ

デプロイ中、再起動しているバックエンドは、再びリッスンするまで接続を拒否または reset します。health check とリトライがこの短い期間をならすため、caller はハードな障害を目にしません。

パイプラインでの一時的な reset

一瞬の不具合による reset や timeout は、idempotent なリクエストでは通常リトライして安全です。Latchkey の runner は、一般的なエンドポイントへのこうした一時的な TCP レベルの障害を自動的にリトライするため、1 回の接続切断が job を失敗させることはありません。

重要なポイント

  • TCP は、three-way handshake で確立される、信頼できる順序付きのバイトストリームを提供します。
  • reset、拒否、timeout は、多くの CI 障害の背後にある TCP レベルのエラーです。
  • idempotent なリクエストでの一時的な reset は、一般にリトライして安全です。

関連ガイド