3 Minutes NetWorking
No.39

3Minutes NetWorking

第39回レイヤ4 TCP コネクション

■ コネクション

インター博士

所謂、「コネ」という奴だな。

ネット助手

何がです?

インター博士

コネクションだ。

ネット助手

あぁ。
就職とかで言われる「コネ」とは「コネクション」の事だ、と。

インター博士

うむ。
不況の昨今、就職試験ではコネでポーカーをやりあって内定を決定するとかいう噂もあるとか。

ネット助手

ははぁ。
営業部長の3カードとかやるわけですね。

インター博士

だがしかし、それではCEOのワンペアに負けるな
ちなみに、政治家のカードも強いぞ

ネット助手

ポーカーっていうより、トレーディングカードゲームですね、それじゃ。
で、今回はそういう話なんですか?

インター博士

いやいや、そういうわけではない。今回はTCPの話だ。
TCPにはコネクションという言葉が付きまとう。

ネット助手

こねくしょん…。

インター博士

前回も話したとおり、レイヤ4はアプリケーション間を接続する
つまり、データの最終的なやり取りを行うわけだ。

ネット助手

エンドツーエンドでしたっけ。

インター博士

うむ、レイヤ3以下では所詮コンピュータからコンピュータへ受け渡しするだけだからな。
この、アプリケーション間のやり取りを行うデータの道のことをコネクションという。

ネット助手

データの道?

インター博士

そうだ。
レイヤ3以下は送りっぱなしであるし、ルーティングを行うので道はその時その場で違う可能性がある。決まった通信路を使うわけではない。

ネット助手

はぁ。

インター博士

なので、TCPで作られる通信路は仮想的な通信路と呼ばれる。
事前に専用の通信路を確保しておくことによって、確実にデータを届けるのだよ。

ネット助手

でも、レイヤ3以下ではどの通信路を使うかは決まってないんですよね。

インター博士

だから、「仮想的」なのだ。
実際は決まっていなくても、決まっているように見せかけるための制御を行うのだ。

[Figure39-01:仮想的な通信路]

ネット助手

なんか意味があるんですか?

インター博士

先ほども言ったが、確実・効率よく伝える為だ
通信路が不定、つまり相手までの道がわからない場合、もしかすると繋がっていないかもしれない。相手に届かない可能性もありうるし、何処かで詰まってる可能性もありうる。

ネット助手

確かにその可能性はありますよね。

インター博士

なので、データ転送を始める前に事前に確認のやりとりを行っておく
それにより、相手に確実に伝わることを確認するわけだ。

ネット助手

ははぁ。
電話の「もしもし?」みたいなものですか。

インター博士

あぁ、それはなかなかいい考え方かもしれん。
「もしもし」で通信が確実にできる = 通信路が繋がった、と考えるわけだ。この仮想通信路を作り出すことを、コネクションの確立と言う。

ネット助手

こねくしょんを、確立する。

■ TCPヘッダ

インター博士

そうだ。
どうやって確立するか、の話の前にTCPヘッダの説明をしよう。

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

[Table39-01:TCPヘッダ]

インター博士

後ろの括弧内の数字はビット数だ。
約20バイトと覚えてもらっていい。

ネット助手

ふむふむ。

インター博士

まあ、それぞれの意味は後々でてくるからよいとして。
6ビットの制御ビットの所をちょっと詳しく説明しよう。

U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N

[Table39-02:制御ビット] :

インター博士

制御ビットにはそれぞれ意味がある。
特に赤くしたACKSYNFINはよく使うので意味を覚えておくこと。

ネット助手

へぇ、どんな意味です?

インター博士

まぁ、待て。ちゃんと説明する。
では、コネクションの確立の話をしよう。

ネット助手

はい。

■ スリーウェイハンドシェイク

インター博士

TCPのコネクションの確立方法は、スリーウェイハンドシェイクと呼ばれる。

ネット助手

すりーうぇいはんどしぇいく?

インター博士

そうだ。
コネクション、つまり通信路を確立するためには相手がデータ転送を許可してくれないと駄目なのだ。

ネット助手

いきなり勝手にデータを送りつけてはいけないってことですか?

インター博士

いけないことはないが、勝手に送りつけたら相手が準備できてない可能性もあるだろう?
それでは確実なデータ転送ができないではないか。

ネット助手

ははぁ、そりゃそうですね。

インター博士

なので確実なデータ転送のための通信路を確保するため、相手にデータ転送の許可要求を出す。

ネット助手

「いまからデータ送るけど、準備いいかい?」って感じですか。

インター博士

そうだな。それで、要求を受けた相手は、許可を送信元に知らせる
相手に正しく伝わることが確認できたわけだ。これで通信路が確保されたことになる。

ネット助手

「準備OK。いつでもどうぞ。」って返事するわけですね。
お願いに対し、返事が届いたってことですから、相手に届くことがわかる、と。

インター博士

そして、それと同時に宛先側も送信元にデータ転送許可要求を出す。

ネット助手


相手側も、こちらにデータ転送するんですか?

インター博士

うむ。
それに対し、送信元もデータ転送許可を送る。これで双方向の通信路が確保されたわけだ。

ネット助手

はぁ。
それはどういうことですか?

インター博士

つまり、片方だけだと通信を要求した側からしかデータを転送できない。
じゃあ、相手にデータを送ってほしい場合はどうする?

ネット助手

そりゃ、相手からデータ転送許可要求をもらうんですよ。

インター博士

確かにそうだが、その相手は、こちらがデータを欲しがっていることをどうやって知るのだ?

ネット助手

…。
え〜っと。

インター博士

つまり、こちらから相手に「これこれこういうデータを送ってください」と頼むわけだ。その頼むために、「下さい」というデータを送る用に通信路を確立する必要がある。
逆に相手から頼んだデータを送ってもらう為に、相手からも通信路を確立する必要がある。

ネット助手

だから、双方向に通信路を確立するんですね。

インター博士

そういうことだ。
では、実際のTCPの動きを説明しよう。

[Figure39-02:コネクションの接続]

インター博士

このように、3回のデータ転送を行うことが、3方向(way)の握手(Handshake)、スリーウェイハンドシェイクと呼ばれる所以だ。

ネット助手

ははぁ。
3方向握手、ですか。

インター博士

そうだ。
転送許可要求がSYN転送許可がACKというのも覚えておくように。

ネット助手

SYN → ACK+SYN → ACKの流れですね。

インター博士

そうだ。
よくあるものの本では、以下のような図で示されることが多いな。

3Way HandShake

[Figure39-03:3Way HandShake]

ネット助手

この、SYN_RCVとか、ESTABLISHEDとかはなんです?

インター博士

うむ、TCPのコネクションの状態だ。
双方がESTABLISHEDになると、コネクションが確立された、という状態になる。

ネット助手

なるほど。CLOSEDは、閉まっていて通信なし。SYN_SENTはSYNを送った。SYN_RCVはSYNを受け取った、ですか。
LISTENってのは?

インター博士

それは、データ転送待ち状態だ。

ネット助手

CLOSEDではないんですか?

インター博士

うむ、CLOSEDでは完全に閉まっているので、相手からの通信を受け取れないのだよ。
なので、聞く(LISTEN)という待ち状態にしておく。これはポート番号の所で説明しよう。

ネット助手

はい。

■ コネクションの切断

インター博士

このように、コネクションを確立する際は非常に礼儀正しく握手するわけだが。
通信が終わる際にも、礼儀正しく終了する。

[Figure39-04:コネクションの切断]

ネット助手

今回は、終了要求のFINを使うんですね。

インター博士

うむ。
ポイントは、双方からデータ転送が可能にならなければコネクションが確立しなかったように。双方から終了しなければ、切断されないという点だな。

ネット助手

ははぁ。しかし、上の例のAはやけに待ちますね。
FIN_WAIT1 → FIN_WAIT2 → TIME_WAITと待ってから、ようやっとCLOSEDですからね。

インター博士

そうだな。やはり、双方向の通信路が開かれているせいだな。
自分が終わったからといって、相手からの転送が終わったとは限らないからな。

ネット助手

ふむふむ。

インター博士

FIN_WAIT1は、相手からのACK待ち。FIN_WAIT2は、相手からのFIN待ち。TIME_WAITは、相手にACKがちゃんと届いたかの確認待ち、だな。

ネット助手

相手にちゃんとACKが届かなかった場合、どうなるんです?

インター博士

もう一度、FINが送られてくる。
なので、その可能性があるので一定時間待つわけだ。流れをもう一度図にしておこう。

コネクション切断

[Figure39-05:コネクション切断]

ネット助手

ははぁ。
コネクションの確立にも、切断にも手間がかかってるんですねぇ、TCPって。

インター博士

うむ。
このコネクションの確立あってのTCPだからな。

ネット助手

合言葉は。
確実・正確ってところですか。

インター博士

ははは。そんな感じだ。
さて、コネクションが確立することによって、相手との通信路がオープンになったわけだ。

ネット助手

じゃ、いよいよデータ転送ですか?

インター博士

うむ。
というわけで、それは次回。

ネット助手

あらら。
3分間ネットワーキングでした〜♪

コネクション
[connection]
接続・連結。
CEO
[Chief Executive Officer]
経営最高責任者。
日本では、代表取締役を示すことが多い。
制御ビット
特に解説しない部分の説明をします。
URG…緊急に処理するデータがあることを示す。
PSH…受け取ったセグメントをすみやかにアプリケーションに引き渡すよう要求する。
RST…接続を強制的に切断する。
スリーウェイハンドシェイク
[3 Way Handshake]
ESTABLISHED
確立、確立された、の意。
終了要求のFIN
RST(リセット)を使えば、即切断することも可能です。
ネット助手ネット君の今日のポイント
  • TCPでのデータ転送には、コネクションの確立が必要。
  • コネクションは、仮想的なデータの通り道である。
  • 双方向にデータ転送ができる。
  • コネクションの確立はスリーウェイハンドシェイクで行う。
  • 双方がデータ転送要求を送りあって、ESTABLISHEDにする
  • コネクションの切断も、双方が終了要求を送りあう。

3 Minutes NetWorking No.39

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