techman999の日記

とある大学の教員の日々の備忘録

TCP(1)

TCP/IP Illustrated Vol.1 2nd EditionのTCPの章を読み始めたので、備忘録として簡単なまとめを書いておく。

 

TCP: Transmission Control Protocol

 packet 転送中に、packet dropやbit errorに対してどうするのが一番素直?

  • ちゃんと届くまで、再送してやれば良い

 

再送する方法での要求:

  1. 受信者がpacketを受け取ったという確認できる方法
  2. 受け取ったpacketが送信者側が送ったpacketと同一であると確認できる方法

受信者は、送信者にpacketを受け取りましたよーという確認用のpacketを送信する(Acknowledgement/ACK)

 一連の流れ:

Sender: packetを送信、ACKを待つ

Receiver: packetを受信、ACKを送信

Sender: ACKを受信、他のpacketを送信

(以下、繰り返し)

 

ここで、疑問がでてくる。

  1. SenderはどのぐらいACKを待ち続けるのか?
  2. ACKが消失したらどうなる?
  3. packetを受信しても、それにerrorが含まれていたらどうなる?

<解答>

  1. 別の章で解説
  2. 送信側は、ACKが消失したのか、送ったpacketが届いてないのかを判断することはできないために、もう一度同じpacketを送る。(ただし、受信側は同じpacketを重複して受信する可能性あり)
  3. checksum と CRC使えばよい

 

packetを重複(duplicate)して受信したときはどうすればいい?

  • sequence numberを用いてpacketを識別
  • sequence numberは、unique

 

TCP: これまでの仕組みをみていると、信頼性はあるけど、効率的ではないよね。

  • 例えば、small packetを大量に送るとかすると、delayやlatencyが大きい回線(e.g. 衛星回線)を利用した場合とか
  • 送信側は、ひとつのpacketを送ると、ACKを受信するまでは待たなければならない
  • スループット性能(単位時間あたりにおけるデータ転送量): M/Rに比例 (M: packet size, R: RTT(応答遅延時間), ただし、packet loss等はなし)
  • スループット性能は、固定長packetで、R(RTT)が大きくなるとスループットは下がる
 
"Window" of packets