3 Minutes NetWorking
No.40

3Minutes NetWorking

第40回レイヤ4 TCP シーケンス番号

■ TCPおさらい

ネット助手

しーけんす。

インター博士

うむ。

ネット助手

しーめんす、はドイツの電機メーカー。▼ link

インター博士

で?

ネット助手

いやあの、「で?」とか言われましても。
わりと有名ですよね?

インター博士

で?

ネット助手

それでその。
シーケンスとシーメンスは似てる、と…。

インター博士

で?

ネット助手

はぅっ。
あはは、おかしいね、と…。

インター博士

さて、意気揚々と始まった3分間ネットワーキング、第40回だが。
まず、前回のおさらいといこう。

ネット助手

うわ、何事もなかったかのように進められてる。

インター博士

TCPヘッダをもう一度見てもらおう。

送信元ポート番号(16)宛先ポート番号(16)
シーケンス番号(32)
確認応答番号(32)
データオフセット(4)予約(6)制御ビット(6)ウィンドウ(16)
チェックサム(16)緊急ポインタ(16)
オプション

[Table39-01:TCPヘッダ]

インター博士

前回は、この中の6ビットの制御ビットを使って、事前に通信路を作り出すことをやったわけだ。

ネット助手

制御ビット。
主にSYNとACKとFINでしたっけ。

インター博士

そうだ。
この事前の通信路の設定方法をスリーウェイハンドシェイクというんだったな。

ネット助手

SYN → ACK+SYN → ACKという流れで、お互いに通信する許可を得るんでしたよね。

インター博士

うむ。
それにより、お互いが確かに通信可能である、ということを確かめたわけだ。

ネット助手

でした。

インター博士

よって、今回は実際にデータがどのように送られるか、という話をする。
ここでの最初のキーワードは、シーケンス番号だ。

ネット助手

しーめんす…。

■ MSS

インター博士

まだ言うか。
くどいぞ、ネット君。

ネット助手

ううぅ。なんか悔しいんです。

インター博士

悔しがってどうする。
ともかく、シーケンス番号だ。シーケンスは順番、順序の意味がある。

ネット助手

順序?

インター博士

そうだ。データを送る順序だ。
だが、これの説明をする前に、MSSの話をしておかないとな。

ネット助手

えむえすえす?
うぅ、疑問が解決する前に、さらに疑問が。

インター博士

TCP/IPでは、データが長い場合は分割して送信する。
これは前も話したよな。

ネット助手

ええっと…。
第38回でそんな話をしてたような。

インター博士

うむ。
その分割するサイズの事がMSSだ。イーサネットでは、約1460バイトになる。

[Figure40-01:MSS] ▼

ネット助手

切り分けたデータが、セグメントなんですね。
その切り分けた単位でデータを転送する、ということですか。

インター博士

うむ。そういうことだ。
これが転送一回分ということだな。

ネット助手

ははぁ。
それで、シーメンス番号はどうなったんです?

インター博士

…。

ネット助手

あぅ、ごめんなさい…。

■ シーケンス番号

インター博士

ただこのセグメントをバラバラに送ったのでは、TCPの沽券にかかわる。
正確・確実がTCPの謳い文句だからな。

ネット助手

正確、確実ってことは。
バラバラに送らない?

インター博士

うむ。
元のデータと同じ順序で送る。その時使うのが、シーケンス番号だ。

ネット助手

シーケンスは順番・順序でしたっけ。
データの順番ってことですか。

インター博士

うむ。
実際には、最初のスリーウェイハンドシェイク時にシーケンス番号を決定する。これは言葉より動きを見たほうが早い。

[Figure40-02:シーケンス番号の決定] ▼

ネット助手

MSSがスリーウェイハンドシェイクで決定されるのはわかりましたけど。
このシーケンス番号やら、確認応答番号やらは何に使うんですか?

インター博士

そうだな、これだけではちょっとわかりづらいな。
まず、スリーウェイハンドシェイクが終わった段階で、これから使うシーケンス番号と確認応答番号が決定されたわけだ。

ネット助手

はい。

インター博士

そして、転送するデータに番号をつける。
データの1バイト目がシーケンス番号で決定された値にだ。
先ほどの例でいえば、2001番になる。

データとシーケンス番号

[Figure40-03:データとシーケンス番号]

ネット助手

はぁ。

■ 確認応答

インター博士

うむ。
で、やはり言葉より動きの方が説明しやすいので、そちらで見てもらおう。

[Figure40-04:確認応答]

ネット助手

ははぁ。
第38回で説明していた確認応答で使うんですね。

インター博士

そうだ。
シーケンス番号は送るデータの先頭バイト番号。確認応答番号は次に送って欲しいデータの先頭バイト番号になる。

ネット助手

ははぁ〜。

シーケンス・確認応答の流れ

[Figure40-05:シーケンス・確認応答の流れ]

インター博士

流れ的には、上のようになる。
データを分割したとしても、順番に、確実に送るための制御法だ。

ネット助手

ただ、「受け取りましたよ」ではなく。
次にもらう予定のデータの番号まで伝えるのですね。

インター博士

そうだ。
それによって、受信側がどのデータまで受け取ったかわかる。

ネット助手

どのデータまで受け取ったかわかる。
確かにそうですけど。

インター博士

うむ。「受け取りました」ではなく、「何番までのデータを受け取りました」と返ってくる。
ものすごく「確実」だろ?

ネット助手

ははぁ、確かに。

インター博士

この「何番までのデータを受け取りました」は特にフロー制御で重要だ。忘れないよう。
それはそれとして、エラーの場合の説明をしよう。

エラー・確認応答の流れ

[Figure40-06:エラー・確認応答の流れ]

インター博士

このように、データが相手に届かなかった、確認応答が届かなかった際は、再送を行う。

ネット助手

はい、確実に送るための制御でしたね。

インター博士

そうだ。
ポイントは、同じものをすぐ送るという点だ。

ネット助手

?
当たり前のような気がしますけど?

インター博士

そうかな?
とりあえず、順番に送っておいて、後で確認応答がなかったデータだけ送りなおす、でもいいはずだ。

ネット助手

あ〜、そうですね。
そう言われれば、それでもいいような気がしますね。

インター博士

そうだろう。だが、そうしない。
それは、元のデータ順に送るためだ。

ネット助手

ははぁ。
TCPの謳い文句、「正確・確実」の「正確」のためですね?

インター博士

うむ、その通り。

ネット助手

ちなみに、一定時間待つってのはどのぐらい待つんですか?

インター博士

これはRTTという値から判断する。
RTTは、これまで送ったデータに対し、確認応答が返ってくるまでにかかった時間から算出する。

ネット助手

はぁ。なんか論理的におかしいような。
確認応答が返ってくるのにかかった時間から算出って、いきなり返ってこなかったらどうするんですか?

インター博士

うむ。
初期値を約3秒にしておき、その後確認応答が返ってくるのにかかった時間から動的に変更する。

ネット助手

3秒なら3秒でいいじゃないですか。

インター博士

確かにそうだが。
だが、回線のスピード。例えば64Kbpsでの3秒と、100Mbpsでの3秒は同じ3秒での意味合いが違うだろう?

ネット助手

あぁ、なるほど。
遅い回線なら3秒待つのは普通でも、早い回線では3秒も待たなくてもいいってことですか。

インター博士

そうだ。
早い回線なら3秒もまたなくても、データの損失・確認応答の損失に気がつくわけだ。「今まで最低でも500μ秒で帰ってきてたのに、おかしい」というようにな。

ネット助手

なるほど。

インター博士

さて、今回は普通に送った場合の話だった。
次回はもうちょっと複雑になる。

ネット助手

複雑…、ですか。

インター博士

大丈夫だ。
ネット君ならわかる。

ネット助手

そうですか?
えへへ。

インター博士

露骨なおだてにひっかかったところで、また次回。

ネット助手

いい気分のまま終わらせてくださいよ。
3分間ネットワーキングでした〜♪

ドイツの電機メーカー
シーメンス[simens]のこと。
シーケンス
[sequence]
シークエンス、とも言う。
MSS
[Maximum Segment Size]
最大セグメント長。
MSSのサイズ
平均的なイーサネットの場合、最大パケット長(MTU)は1500バイト。
ここから、IPヘッダ(20バイト)、TCPヘッダ(20バイト)を引いて、1460バイト。
ランダムに決定される
シーケンス番号・確認応答番号ともに、32ビット。
つまり0〜42億9496万7296の中から任意。
RTT
[round trip time]
ネット助手ネット君の今日のポイント
  • 大きいデータは分割して転送する。
  • 分割するサイズのことをMSSという。
  • 転送されるデータには順番に番号がつけられる。
  • データを転送する際には、シーケンス番号に送るデータの先頭番号を入れる。
  • 確認応答を送る際には、確認応答番号に次に受け取る(予定の)データの先頭番号を入れる
  • 転送エラーが発生した際には、今送ったものと同じものを送る。
  • エラーが起きたかどうかは、確認応答が一定時間(RTT)返ってこなかったことによって判別する。

3 Minutes NetWorking No.40

管理人:aji-ssz(at)selene.is.dream.jp