にしのクエスト2

情報処理技術者試験と資格学校講師の日常

f:id:koharuwest:20191106221322p:plain

ネスペちゃん01 「TCP」(2)データの送信と再送 その1

<ネスペちゃん01について>
ネスペちゃん01はネットワークの用語やセキュリテ
ィのお話について、「難しい」イメージから「意外と
面白い」に変えるのが目的です。そのため、あえて大
胆なたとえや、表現を使っています。

そんなわけで、結果的に、緻密さを犠牲にする部分が
あります。詳しく知りたい方は、さらに勉強しよう!
ってことで。よろしくお願いします。(にしの)


----

(前回までのお話)

TCPの働きは3つ。

(1)通信路を確立すること
(2)データを送信すること
(3)エラーがあれば、再送すること

www.nsnq.tech 

f:id:koharuwest:20190608232358j:plain
前回は(1)の手順として「3WAYハンドシェイ
ク」について説明した。返答に応答を加えることで、
相互通信の許可の手数を減らすことができたにゃ。


復習すると

1 (クライアント)サーバさん、僕通信したいな。
2 (サーバ)いいけど、僕からも通信していい?
3 (クライアント)もちろん!オッケーだよ!


これ、ちょっと難しくやれば

1 SYN
2 SYN+ACK
3 ACK

ってなるのにゃ。

f:id:koharuwest:20190501112156p:plain

なんか、教科書でみたやつだ。

今回は前回のも踏まえつつ、(2)と(3)について
触れたいと思うにゃー。


え?3WAYハンドシェイクはもういいんじゃ?


いやいや、実は3WAYでデータのやり取りの確認作
業もやったりしてるにゃん。

データを送る

データは別に何Gでもまとめて送ればいいけど、もし
も送信途中で失敗すると、もう一度送り直さなければ
ならないにゃ。

地獄だよなー。


なので、データはセグメントという単位に分割される。

え?パケットじゃなくて?


お、鋭い! TCPではパケットのことをセグメント
と呼ぶ。ちなみに、パケットはIPでの呼び方。その
ほかにもフレームだとかデータグラムとかいう言い方
もするけど、ほとんど意味は一緒だから考えなくてい
い。

わっかりました。


分割される最大のセグメントの大きさをMSS(マック
ス・セグメント・サイズ)というにゃ。

セグメントを送信するときには先程の3WAYハンドシ
ェイクの考え方を使うにゃん。


たとえば、こうなる。

1 シーケンス番号としてランダムな数字を送信(たとえば10)
2 応答に1をプラスして返す(11)
3 シーケンス番号(11)にデータ(50バイト)を付けて送信
4 届いた印としてシーケンス番号にデータ量をプラスした値を返す(61)
5 シーケンス番号(61)にデータ(100バイト)を付けて送信
6 届いた印としてシーケンス番号にデータ量をプラスした値を返す(161)


これを送信側受信側双方向からやる。


たとえば、4のときにシーケンス番号が返ってこないと?

送信失敗したと考えて、再送する。

たとえば4のとき51とかいう数字が返ってくると?

送信失敗したと考えて、再送する。


じゃ、じゃあ62なら?

それも送信失敗と考える。TCPのこの送信話はまた次回も続く。


続くのかぃ。