Jason: このレッスンでは､
TCP､ UDPを含むIPプロトコルの種類と､
コネクションレス方式とコネクションオリエンテッド方式の概念について説明します｡
さて､ TCPとは何か？
TCPとはTransmission Control Protocol（伝送制御プロトコル）の略｡
これはコネクション指向のプロトコルであり､
ネットワーク上でセグメントを伝送する信頼性の高い方法であることを意味する｡
これで､ セグメントがドロップされた場合､
プロトコルは実際に毎回確認応答を求めることになる｡
そして､ 承認が得られなければ､
その情報を再送することになる｡
コネクションフル・プロトコルと呼ばれる所以は､
私があなたに情報を送り､ あなたがそれを受け取ったかどうかを私が確認し､
あなたが私に応答を返すという双方向の情報伝達があるからです｡
では､ この小さな図をちょっと見てみよう｡
左がクライアント､ 右がサーバーであることがわかるだろう｡
さて､ クライアントは同期パケットと呼ばれるものをサーバーに送る｡
サーバーはそれを受け取ると､
同期確認をクライアントに送り返す｡
さて､ クライアントはその確認応答を受け取ると､
サーバーに確認応答を送り返す｡
これを「アック」と呼ぶ｡
さて､ このsyn､ syn ack､ ackを行うとき､
私たちはこれを3ウェイ・ハンドシェイクと呼んでいる｡
基本的には､ クライアントが「おい､
サーバー､ 何か情報を得る準備はできたか？ するとサーバーは「もちろんです｡
なぜだ？
「情報を送ってくれ｡ そしてクライアントは､ 「よし､ 来た｡ そして､ 3者間のハンドシェイクが確立し､
双方が通信の準備ができていることがわかったので､
送信を開始する｡
「さあ､ 準備はいいかい？ 「はい､ そうです｡ "来たぞ｡ セグメントと呼ばれるこのデータがネットワークを介して送信されるたびに､
受信した確認応答があり､ 双方向通信が成功したことを教えてくれる｡
もしこのサーバーが100の情報を期待していたのに､
98の情報しか得られなかったとしたら､ クライアントにこう言うだろう｡
「足りないものを2つ送ってくれ｡ そして､ 再送信が行われる｡
こうすることで､ パケットをネットワーク上で再送信することができるため､
通信を円滑に進めることができる｡
現在､ これは最終目的地に到達するために保証が必要なすべてのネットワークデータに使用されている｡
私はこれを内容証明郵便のように考えたい｡
例えば､ 国税庁にメッセージを送りたい場合､
確実に受け取ってもらいたい｡
だから､ 少し余分にお金を払って､
配達証明付きの領収書を発行してもらい､ それにサインをしてもらって､
それを郵送してもらうこともある｡
そうすれば､ 領収書が戻ってきたときに､ 国税庁が私の郵便物を受け取ったことがわかる｡
それがTCPの仕組みだ｡
一方､ UDPという別のプロトコルもある｡
UDPはいわゆるコネクションレス・プロトコルで､
接続を待つ必要がない｡
UDPはUser Datagram Protocolの略｡
これをデータグラムと呼ぶのは､ UDPを使う場合､
このタイプのデータを使うからだ｡
これはデータグラムと呼ばれる｡
さて､ UDPについて話すと､ UDPは信頼性が低く､
データグラムと呼ばれるセグメントを送信する｡
そして､ もし落とされたとしても､
送り手はそのことに気づくことはない｡
さて､ なぜ送り主が気づかず､ 領収書ももらえないようなものを送りたいのだろう？
UDPはオーディオやビジュアルのストリーミングにとても適している｡
なぜなら､ UDPを使えば､ 大量のデータを送信してもオーバーヘッドが少ないからだ｡
つまり､ UDPを使えば､ 再送信がゼロになるので､
ネットワークのパフォーマンスを本当に向上させることができる｡
情報を垂れ流すだけになってしまう｡
さて､ それは悪いことではないのか？
なぜ情報を落としたいと思うのか？
まあ､ 特定の用途では､ それは本当に問題ではない｡
例えば､ あなたは今このビデオをストリーミングしている｡
それに､ もし私が1/100秒でも抜けたとしたら､
あなたはそれに気づくだろうか？
UDPが優れているのは､
1/100の時間でドロップしても､
再送信が発生しないことです｡
しかし､ TCPの場合､ 待たされ､
再送信され､ 適切な場所に置かれ､
再生されるため､ バッファリングが多くなる｡
そのため､ この映像の1秒1秒を認識し､
オーバーヘッドを発生させるため､ 結局､
映像が大きくなり､ 帯域幅を多く使うことになる｡
これが､ ビデオ・ストリーミングやオーディオ・ストリーミングにUDPを使う大きな理由のひとつだ｡
さて､ ここでTCPとUDPについて簡単にまとめてみよう｡
これは本当に､ 本当に重要なコンセプトだからだ｡
TCPとUDPの違いについて話すので､ もし今ノートを持っているのなら､
このグラフを書き留めておいてほしい｡
それは本当に重要なことだからだ｡
さて､ まずTCPは信頼性が高く､ 3ウェイ・ハンドシェイクを行うが､
UDPはあまり信頼性が高くない｡
三者間ハンドシェイクがないため､ 信頼性の低いプロトコルだ｡
TCPはいわゆるコネクションオリエンテッド､
あるいはコネクションフルのプロトコルだが､
これは確認応答で3ウェイハンドシェイクがあるからだ｡
火をつけて忘れる方法だ｡
私はただ情報を発信し始め､ うまくいけばそれを受け取ってもらえる｡
TCPはセグメント再送とフロー制御を使用し､ これはウィンドウウィングによって処理されている｡
一方､ UDPには再送信もウィンドウウィングもない｡
TCPでは､ すべての異なるセグメントのシーケンスをセグメンテーションしている｡
UDPの場合､ シーケンシングはない｡
さて､ これは何を意味するかというと､
私がすべてを送るとき､ 適切な順序で､
1から100まで送るつもりだということだ｡
TCPとUDPの両方でやってみよう｡
さて､ これらの断片のいくつかを見逃してしまった場合､
あるいはネットワーク上の経路が異なるために異なる順序で到着した場合､
TCPでは順序が決まっているため､ 1個から1000個まであることを認識し､
正しい順序に戻してくれる｡
UDPの場合､ 送られてきたものが何であれ､
それがブロードキャストされる｡
そして､ 1､ 50､ 2､
500､ 3､ 4､ 5､ 6､
20､ そんな風にランダムに来ることができる｡
そうやって聞くことになる｡
ビデオの場合､ フレームがずれているため､
少し音が飛んだり､ 甲高い音が聞こえたりすることがあります｡
さて､ TCPに戻ると､ TCPはそれぞれのセグメントを認識する｡
だから､ 私たちは認めている｡
もし受信できなかったら､ 受信できなかったことがわかるし､
再送信してもらって､
また受信できる｡
UDPでは､ 確認応答はない｡
UDPは､ コネクション､ ウィンドウウィング､
再送､ シーケンス､ 確認応答がないため､
オーバーヘッドが少ない｡
さて､ もしあなたが何かを届けなければならず､ 相手がそれを受け取ったことを確認したいのであれば､
TCPプロトコルを選択しなければならない｡
そのため､ 銀行やウェブサイト､ eコマースなどでTCPを使うことになる｡
しかし､ オーディオやビデオ・ストリーミングのような大量のデータがある場合､
UDPはそのようなファイルに対応できる｡
あちこち少し飛ばしてもいい｡
-TCPとUDPについては､ コネクションフル､ つまりコネクションオリエンテッドなプロトコルと､
コネクションレスなプロトコルがあるという話をしました｡
そこで､ TCPとUDPのどちらかを使うプロトコルの例をいくつか挙げてみよう｡
まず､ TCPとコネクションオリエンテッドまたはコネクションフルのプロトコルについて見てみよう｡
これにはSSHやHTTP､ HTTPSなどが含まれる｡
さて､ なぜこのような場合にコネクション指向が必要なのだろうか？
まあ､ SSHのようなものを使う場合は､ リモート・サーバーやリモート・ワークステーションを双方向通信でコントロールするわけだから､
ポート22でできるようにする｡
コネクション重視､ あるいはコネクションフルでやっていることを確認したい｡
そうすれば､ 私がコマンドを送ってサーバーをリブートしろと言えば､
そのコマンドが実際にそこに届き､ サーバーのリブートが起こることがわかる｡
同様に､ HTTPSを扱う場合､ TCPを使用したコネクション・フルまたはコネクション・オリエンテッドなプロトコルを使用することを確認したい｡
その理由は､ 繰り返しになるが､ 送信したものが実際にそこで受信されることを確認したいからだ｡
その中には､ ユーザー名とパスワードを使ってウェブサイトにログインしようとする際の認証のようなものも含まれるかもしれないし､
口座残高や銀行情報など､ ウェブサイトから得られる情報も含まれるかもしれない｡
一方､ プロトコルにUDPを使っている場合は､
コネクションレスでやりとりすることになる｡
さて､ 私たちがオーディオやビデオのストリーミングのようなことにいつもこれを使用しているという事実はすでに述べた｡
それに加えて､ DHCPやTFTPと呼ばれるTrivial File
Transfer Protocolなどにも使っている｡
DHCPはダイナミック・ホスト・コントロール・プロトコル（Dynamic Host Control
Protocol）と呼ばれ､ 67番と68番のポートで動作する｡
さて､ あるネットワークに参加すると､ あなたのデバイスがIPアドレスを動的に割り当てるように設定されていれば､
そのネットワーク上でDHCPサーバーを探すブロードキャスト・メッセージを発信します｡
これが､ コネクションレス・プロトコルとして使う理由だ｡
というのも､ 情報を発信して誰も反応しなければ､ クライアントは他の誰かが来てくれることを期待して､
また情報を発信するだけだからだ｡
これがDHCPの仕組みだ｡
ブロードキャスト・メッセージを発信し､
応答が返ってくるのを待つ｡
一定時間内にその応答を得られなかった場合､
単にメッセージを再ブロードキャストし､
再び新しいDHCPサーバーを探します｡
同様に､ ポート69で動作するTFTP（Trivial
File Transfer Protocol）は､ UDPをトランスポートとして使用し､
コネクションレスで動作する｡
その理由は､ TFTPがTrivial
File Transfer Protocolであるため､
すべてのパケットが確認応答付きで送受信されたという保証が不要であり､ TCPを使用するとより多くのオーバーヘッドが発生するからである｡
つまり､ UDPを使うことで､ FTPのようなコネクションフルなプロトコルを使う代わりに､
TFTPのようなものを使うときに､ より高速なファイル転送が可能になるのだ｡