3 Minutes NetWorking
No.48

3Minutes NetWorking

第48回レイヤ4 データ転送 まとめ

■ データ転送

インター博士

さて、これでレイヤ1〜4が終わったわけだ。
ここでネットワークモデルを復習してみよう。

レイヤ5〜7アプリケーション層HTTPFTPDHCPDNS
レイヤ4トランスポート層TCPUDP
レイヤ3インターネット層IP
レイヤ1〜2ネットワークインタフェース層Ethernet

[Table48-01:TCP/IPモデル]

ネット助手

TCP/IPモデルですね。
OSIじゃないんですか?

インター博士

うむ。TCP/IPの説明がメインだったからな。TCP/IPモデルの方が説明がしやすいのだよ。
なので、TCP/IPモデルで話す。

ネット助手

ははぁ。そういうもんですか。

インター博士

そういうものだ。
さて、上のモデルを見てわかるとおり、レイヤ5〜7はアプリケーション毎に仕様が違う

ネット助手

アプリケーション毎に仕様が違うって。
HTTPとFTPとDHCPとDNSでは違うってことですよね。

インター博士

うむ。それぞれ別のプロトコルだ。当然といえば、当然だな。
だが、TCP/IPである限りレイヤ4とレイヤ3はどのアプリケーションでも共通だ。

ネット助手

ん〜っと。
TCPかUDP、それとIPを必ず使うってことですね。

インター博士

そうだ。昔に話した例えで言えば、レイヤ4は緩衝材、レイヤ3がダンボールと宛名だったな。

ネット助手

第6回ですね。

インター博士

運ぶ中身がなんであれ、緩衝材とダンボール、そして宛名は必ず必要。
そういうことだ。

ネット助手

あぁ、なるほど。
でも、最近は紙袋でも送れちゃいますけどね。

インター博士

(ジロリ)

ネット助手

…ごめんなさい。

インター博士

まぁいいだろう。ともかく、レイヤ2はWANかLANのテクノロジーの違いでまた分かれるが、レイヤ3と4は共通だ。
レイヤ3のまとめは以前やったので、レイヤ4をまとめてみよう。つまりここからの説明は、今後どのアプリケーションでも必ず行っていることだということだ。

ネット助手

ははぁ、了解です。

■ TCP・UDP共通

インター博士

まず、アプリケーションが通信を要求する。
この時点で宛先IPアドレスと宛先ポート番号が決定される。

ネット助手

あれ? IPアドレスはレイヤ3じゃ?

インター博士

確かにそうだが。誰と通信するかはアプリケーションが決定する。
HTTPならばブラウザにURIを入力するのはユーザだろう?

ネット助手

そうか、そうですよね。
どのWebサイトを見に行くか、入力したり、リンクしたり、ブックマークから選択するのは自分ですよね。

インター博士

そうだ。なのでこの時点で、宛先が決定されるわけだ。

ネット助手

なるほど。
はい、宛先IPアドレス・ポート番号が決定しました。次は?

インター博士

次は通信するためにソケットを確立する。それによりアプリケーションとTCP・UDPが繋がるわけだな。
今回はそうだな1025番としよう。

レイヤ7〜5・ソケット確立

[Figure48-01:レイヤ7〜5・ソケット確立]

インター博士

これでレイヤ4に渡される。
TCPかUDPのどちらを使うことになるわけだ。

ネット助手

どちらを使うかはどうやって決定するんですか?

インター博士

大体はアプリケーションでTCP/UDPどちらを使うか決まっている
まずはTCPを使った場合から説明しよう。

■ TCPを使った通信

レイヤ4/TCP

[Figure48-02:レイヤ4/TCP]

インター博士

さて、TCPの1025番ポートを通ってデータがTCPに渡されたわけだ。
ネット君、TCPといえば何かね?

ネット助手

正確・確実が謳い文句のイヤミな優等生プロトコルです。

インター博士

いや、イヤミかどうかはわからんが。まぁ、あまり深くツッコむとネット君のトラウマに触れるから置いておこう。
ともかく、TCPが最初に行うのはなんだったかね?

ネット助手

スリーウェイハンドシェイクですよね。

インター博士

そうだ。
宛先との双方向コネクションを作るためにスリーウェイハンドシェイクを行う。

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

[Figure48-03:スリーウェイハンドシェイク]

インター博士

これによって、シーケンス番号確認応答番号ウィンドウサイズMSSが決定される。
これはなんの為に必要だったのかね?

ネット助手

確実に相手に届けるため、ですよね。
相手に届かないことがないように、バッファオーバフローを起こさせないように。

インター博士

うむうむ。よしよし。
シーケンス番号などが決定されることにより、相手に確実に届く事が保証されたわけだ。

ネット助手

です。

インター博士

つまり、レイヤ4だけ考えてみれば、以下のような形になる。

論理的接続

[Figure48-04:論理的接続]

インター博士

送信元の送信機と宛先の受信機。宛先の送信機と送信元の受信機。これが繋がっている形になる。

ネット助手

レイヤ4だけ見れば?

インター博士

そうだ。レイヤ4だけ見ればだ。実際は、IP、イーサネットを使いネットワーキングメディアを通ってして送受信されるわけだ。
ルーティングやCSMA/CDという制御を行いつつな。だが、前も言ったとおり下位層のことなど知ったことではない

ネット助手

知ったことではないって。それでいいんですか?

インター博士

「もしもし?」「もしもし?○○ですが」「××です。こんにちは」
電話でこのやりとりがあったなら、相手に繋がっていると言えるだろう?

ネット助手

そうですね。相手に繋がっていると普通考えますよね。

インター博士

電話機がどうやって音声を信号化して、NTTの交換機がどうやって相手に繋げているか。
そんな事は別に知らなくても、アプリケーション(電話する人)は相手と繋がっていて会話をする準備がOK。コネクションが確立さているわけだ。

ネット助手

会話をする準備がOK?

インター博士

すでに双方のウィンドウサイズをやりとりして、通信に使うバッファを決定してメモリをその分を確保したわけだ。
さらに、MSSを決定して、一度に送るデータサイズまで決定している。準備完了だろ?

ネット助手

確かに。
物理的にどう繋がっているかは関係なくって、論理的に接続されているってことですね。

インター博士

そういうことだ。
コネクションが確立されるとデータが転送される。TCPはこの際何を行うのだった?

ネット助手

スライディングウィンドウスロースタートアルゴリズムですね。

スライディングウィンドウ・スロースタートアルゴリズム

[Figure48-05:スライディングウィンドウ・スロースタートアルゴリズム]

インター博士

バッファオーバフローを防ぐためにスライディングウィンドウを。
輻輳を防ぐためにスロースタートアルゴリズムを使いこなしてデータを送るわけだな。

ネット助手

確実・正確ですね。

インター博士

そういうことだ。
宛先に届いたセグメントは、シーケンス番号順に整列してから上位アプリケーションに渡される。

宛先アプリケーションの識別

[Figure48-06:宛先アプリケーションの識別]

ネット助手

宛先ポート番号に対応したアプリケーションに渡すわけですね。

インター博士

そうだ。
宛先ポート番号がソケットとして確立していない場合(閉じている)や、ソケットを確立していても送ったデータと違うアプリケーションだった場合はエラーになる。

ネット助手

ポートが開いているだけじゃ駄目なんですね。

インター博士

それは当然だ。
メールサーバアプリケーションにHTTPのWebページ要求をしてもしょうがあるまい。

ネット助手

そういえばそうですね。

インター博士

さて、データの送受信が終わったらコネクションの切断を行わなければならない。
通信用に確保していたメモリなどを開放してやるわけだな。

ネット助手

スリーウェイハンドシェイクで接続して、またセグメントをやりとりして切断するわけですね。

インター博士

うむ。
せっかくなので、TCPの状態フローを見せておこう。

TCP状態遷移

[Figure48-07:TCP状態遷移]

インター博士

CLOSE/LISTENからESTABLISHEDまでで、赤の流れがコネクションを接続しようとした側の流れ。
青の流れはコネクションを接続される側の流れだ。

ネット助手

ということは。ESTABLISHEDからCLOSE/LISTENまで戻る流れは、赤が切断しようとした側。青が切断される側の流れですね。

インター博士

その通り。
こまめにnetstatを眺めていれば、このTCPフローそのままに動くのがわかるぞ。

ネット助手

netstat - a の後に数字を入れると自動的にその秒数に1回表示されるそうです。

■ UDPを使った通信

インター博士

次は、UDPを使った場合について話そう。
まず通信アプリケーションからUDPにデータが渡される。

レイヤ4/UDP

[Figure48-08:レイヤ4/UDP]

インター博士

受け取ったUDPは…。

ネット助手

UDPは?

インター博士

細かいことはすっとばしていきなり送信する

UDPのコネクションレス通信

[Figure48-09:UDPのコネクションレス通信]

ネット助手

……。

インター博士

以上。

ネット助手

豪快さんですね。

インター博士

そうだな。
届いたか届かないかも知ったことではないからな。

ネット助手

受信側は?

インター博士

シーケンス番号がないので受け取った順番で上位アプリケーションに渡す。
あとは上位アプリケーションの仕事だ。

宛先アプリケーションの識別

[Figure48-10:宛先アプリケーションの識別]

インター博士

宛先ポート番号がソケットとして確立していない場合(閉じている)や、ソケットを確立していても送ったデータと違うアプリケーションだった場合はエラーになる。
これはTCPと同じだ。

ネット助手

分かり易いプロトコルですよね。

■ TCPとUDP

インター博士

非常に対称的な2つのプロトコルがTCPとUDPだ。
違いをよく覚えておくように。

ネット助手

イヤミな優等生がTCP。
大雑把な不良がUDP、と。

インター博士

うぅむ。イヤな覚え方だ

ネット助手

そうですか?

インター博士

うむ。もうちょっと考えたまえ。
ともかく、今回はここまで。

ネット助手

はい。

インター博士

次回はレイヤ5だな。

ネット助手

いやぁ、とうとうレイヤ5ですか。
思えば遠くに来たもんですね

インター博士

そうか? まだまだお楽しみはこれからだ。
ではまた次回。

ネット助手

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

宛先が決定
本来ならばURIを入力した場合、DNSでURIからIPアドレスを入手するわけですが、今回は省略しIPアドレスはわかっているものとします。
どちらを使う
DNSのようにデータの大きさによってTCP/UDPを使い分けるアプリケーションもあります。
自動的にその秒数に1回表示される
netstat -a -p tcp 秒数
表示をやめたい場合は、CTRL+Cで中止してください。
思えば遠くに来たもんですね
全くです。
ネット助手ネット君の今日のポイント
  • TCP/IPではレイヤ3とレイヤ4は必ずIPとTCP/UDPを使う。
  • TCPとUDPの制御の違い・役割の違いは必ず覚えよう。

3 Minutes NetWorking No.48

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