再配達します!TCPの「再送制御」とは?

[voice icon=”https://tomslifestylelab.com/wp-content/uploads/2019/05/tom0212.png” name=”この記事を書いている人” type=”l”]

ネットワークエンジニア
Tom

Tomとかいうやつが何者なのか知りたい方は下のプロフィールをご覧ください。

プロフィール

[/voice]

こんにちは、Tomです。

今回は、

「TCPにおける再送制御」

についてお話していきます。

1.はじめに

1-1.再送制御とは?

TCPにおける再送制御とは、

「通信相手からの確認応答がない場合にデータを再送する制御」

のことです。

 

TCPで通信する場合、データを受信したホストは必ず、「確認応答」を送信者側に通知します。
「確認応答」とは、「データを確実に受け取りましたよ!」という返事のことです。

TCPでは、この確認応答が返ってこない場合、データをもう一度送信します。
その処理のことを「再送制御」というのです。

1-2.何秒待つの?

では、確認応答が返ってこない場合、送信者側は何秒待つのでしょうか?

答えは、

「ネットワーク環境によって異なる」

です。

あまり答えになっていない感じもします。しかし、本当にそうなのです。

 

TCPでは、ネットワークの環境を判断するために、データを送受信するたびに「ラウンドトリップ時間」というものを計測しています。
RTT(Round Trip Time)とも言います。

ラウンドトリップ時間は、あるデータを送信して、その確認応答が返って来るまでの時間です。

TCPでは、最初にコネクションを確立してデータを送受信します。

コネクションを確立するときも、データを送受信するときも、必ず確認応答を返しますので、
その時にラウンドトリップ時間を計測するのです。

 

再送制御の際に、確認応答を待つ時間はラウンドトリップ時間から算出します。

その時間を経過しても確認応答が返ってこない場合に、データを再送するのです。

1-3.無限には再送しない

確認応答が返ってこない場合にデータを再送しますが、何回送っても確認応答が返ってこないからと言って、無限に何回も再送するわけではありません。

一定回数再送しても確認応答が返ってこない場合は、送信者側が強制的にコネクションを切断します。

2.再送制御の流れ

それでは、実際に再送制御の流れを見ていきましょう。

 

まず、TCPの場合は通信を行うホストの間でコネクションを確立します。

今、3ウェイハンドシェイクを経て2台のホストの間にコネクションが確立されているとします。

3ウェイハンドシェイクについては、下の記事をご覧ください。

コンピュータが握手?3ウェイハンドシェイクとは?

 

確認応答が返ってこない原因は、大きく二つあります。

  • そもそもデータが相手に届いていない。
  • 相手からの確認応答が届かない。

 

これら二つの場合について見ていきます。

2-1.データが届かない場合

まずは、データが届かない場合です。

 

今、ホストAからホストBに対して、1000バイトのデータを送信したとします。

しかし、何らかの原因でそのデータがホストBに届かないとします。

 

そのとき、ホストAは自分が送ったデータが届いていないことはわかりません。
しかし、ホストBからの確認応答が返ってこないことはわかります。

 

一定時間経っても確認応答が返ってこないので、ホストAはもう一度データを送信します。

今度は無事、ホストBに届きました。

 

データを受け取ったホストBは、確認応答を返します。

データが届かない場合はこのような流れで再送を行います。

 

次に、相手からの確認応答が届かない場合を見てみましょう

2-2.確認応答が届かない場合

今、ホストAからホストBに対して、1000バイトのデータを送信したとします。

 

データを受信したホストBは確認応答を返します。
しかし、何らかの原因で確認応答がホストAに届きません。

そのとき、ホストAは自分が送ったデータがちゃんと届いたことはわかりません。
しかし、ホストBからの確認応答が返ってこないことはわかります。

 

一定時間経っても確認応答が返ってこないので、ホストAはもう一度データを送信します。

 

 

同じデータを受け取ったホストBは、もう一度確認応答を返します。

この場合、ホストBは同じデータを二回受信していますが、重複しているので一つを破棄します。

確認応答が届かない場合は、この流れで再送します。

3.まとめ

いかがでしたでしょうか?

TCPには今回お話した「再送制御」の他にさまざまな制御があります。

そちらに関しても記事を書いたので、併せてご覧ください。

シーケンス番号が手掛かり?TCPの「順序制御」とは? 一気に送っていいよ!TCPの「ウィンドウ制御」とは?

それでは、最後まで読んでくださり本当にありがとうございました。