IP(Internet Protocol)は、データを確実に送る仕組みを備えていない。TCP(Transmission Control Protocol)/IPでは、トランスポート層のプロトコルであるTCPがその役割を担う。

 TCPは通信の信頼性と効率を高めるために、「3ウエイハンドシェーク」「データの再送」「ウインドウ制御」「スロースタートアルゴリズム」という大きく4つの仕組みを備える。

 3ウエイハンドシェークは、相手の同意を得てから仮想的な通信路(コネクション)を確立する仕組みだ。

「3回の握手」でコネクションを確立
「3回の握手」でコネクションを確立
[画像のクリックで拡大表示]

 3ウエイハンドシェークでは、まず送信側がTCPヘッダーの「コントロールビット」と呼ばれる領域にあるSYN(SYNchronize)というフラグ(SYNフラグ)を「1」にしたTCPセグメント(SYNセグメント)を送る。

 SYNセグメントを受け取った受信側は、正しく受け取ったことを伝えるため、コントロールビットのACK(ACKnowledgement)というフラグ(ACKフラグ)とSYNフラグを「1」にしたセグメント(ACK+SYNセグメント)を返す。

 これを受け取った送信側は、ACKフラグを「1」にしたセグメント(ACKセグメント)を送る。こうしてコネクションを確立してからデータのやりとりを始める。

送受信の順番を番号で管理

 データの再送は、データが受信側に届かなかったときに機能する仕組みだ。TCPでは、受信側が1個のTCPセグメントを受け取るたびに確認応答を返す。確認応答が一定時間内にないと、送信側はデータを送ることができなかったと判断してそのセグメントを再送する。

 TCP/IPでは、アプリケーションのデータを分割して送る。これは、再送を効率化するためでもある。大容量のデータを1度に送ると、受信側に届かなかった場合にデータ全体を再送しなければならない。複数のTCPセグメントに分割して送ることで、無駄なく再送できる。

 TCPでは分割したセグメントに「シーケンス番号」という情報を付与して送る。また、受信側が確認応答を返すときに「確認応答番号」という情報を送る。複数のTCPセグメントに分割して送ると、送信した順番通りに届かないことがある。確認応答も同様だ。そこで、どのセグメントが届いたのかをシーケンス番号と確認応答番号で管理する。

確認応答がない場合はデータを再送
確認応答がない場合はデータを再送
[画像のクリックで拡大表示]

この先は日経クロステック Active会員の登録が必要です

日経クロステック Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。