Web教材一覧ネットワーク

トランスポート層とTCP/UDP

学習のポイント

トランスポート層には2つの機能があります。

を持っています。ここでは,トランスポート層に属するTCPとUDPについて学習します。

TCPの位置づけ

キーワード

TCP,TCPヘッダ,ウインドウ制御,フロー制御,輻輳制御,UDP,ストリーミング


TCP(Trasmission Control Protocol)

TCPヘッダ

TCPヘッダは,次のようになっています。

TCPヘッダ

ポート番号

TCPから上位のプロトコルを示す番号です。これにより,HTTPやPOP3などのアプリケーションが起動します。その標準的なものはウェルノウン(well-known)ポート番号といいますが,その主なものを掲げます。

    ポート番号 プロトコル  サービス内容
      80  http   Webページ閲覧
     443  https  同上(セキュリティ)
      25  smtp   電子メール(送信・転送)
     110  pop3   同上(受信)
     143  imap   同上(IMAP)
      20  ftp    ファイルの転送(データ)
      21  ftp    同上(制御)
      23  telnet 遠隔ログイン
      53  DNS    名前解決(UDPでも使える)

ftpやhttpなどの詳細は,別章「インターネットのアプリケーション」で取扱います。

コネクション型通信

コネクション型通信

TCPは,コネクション型通信を行います。コネクション型とは,ホスト間で相互の状況を確認してからデータを送り,データの到着を確認してから次のデータを送るようにして,通信を確実に行う方法です(IP単独での通信,また後述のUDPはコネクションレス型であり,このような通信の保証はありません)。

コネクションの確立

データ送信に先立ち,ホストAとホストBの間で通信の準備をする必要があります。それをコネクションの確立といいます。
 まず,ホストAはホストBにSYN(SYNchronization:同期)を送ります。ホストBはそれを受けて要求を受け付けたACK(ACKnowledgement:確認応答)とSYNを返信します。それを受けてホストAはACKを送ります。
 これで送信する準備ができました。なお,このように3回のやりとりをするので,3ウエイハンドシェイクといいます。また,一般に相手との確認をとることをネゴシエーションといいます。

データの送信

ホストAは,データを送信します。ホストBはそれを受信するとホストAにACKを戻します。それを受けてホストAは次のデータを送ります。このとき,一定時間内にACKが来ないと,ホストAは同じデータを再送します。
 しかし,ACKが返信している間に再送すればデータが重複しますし,すべてのデータが同じ経路を通る保証はありませんから,ホストAが送信する順序とホストBに到着する順序が異なる場合があります。それを整理するのが,TCPヘッダにある「シーケンス番号」です。それにより,ホストBは次に受信するべきシーケンス番号をホストAに伝えます。このようにして,データが順序正しくホストBに送られます。

コネクションの解放

すべてのデータを送信完了したら,コネクションを解放します。まず,ホストAからFIN(FINish:終了)を送り,ホストBからACKを返信します。次に逆にホストBからFINを送り,ホストAがACKを戻すことにより終了します。
 なお,SYN,ACK,FINなどはTCPヘッダの「コントロールビット」に記入されます。

フロー制御

ウインドウ制御とフロー制御(流量制御)

データを1個送受信するたびにACKを取り交わすよりも,一度にいくつかのデータをまとめて送るほうが効率的です。ACKを待たずに送るデータの大きさをウインドウサイズといいます。
 ホストBが負荷が高い状況では,ホストAからのデータを受信しきれない場合があり,それにより再送が必要になって効率が下がる場合があります。それを防ぐために,ホストBはホストAに受信可能なサイズ,すなわちウインドウサイズを送ることにより,ホストAの送信量を制御します。これをフロー制御といいます。

輻輳(ふくそう)制御

輻輳とは,ネットワークが非常に混みあっており,正常な通信ができない状況のことです。通信が始まった直後では,経路のどこが混雑しているかわかりません。そのときに大量のデータを送信すると,輻輳が起こる危険があります。それを避けるために,輻輳ウインドウを設定しておき,通信開始時は一度に送る量を少なくして,ホストBから返されるウインドウサイズとを比較しながら,次第に増やしていく方法をスロースタートといいます。

UDP(User Datagram Protocol)

UDPは,TCPと同様トランスポート層のプロトコルですが,IPと同様のコネクションレス型の通信を行います。ポート番号を持つこと,チェックサムをすること以外には,IPとほとんど違いはありません。
 コネクション型通信をするための情報が不要なので,UDPヘッダは非常にシンプルです。

UDPヘッダの形式

コネクションレス型通信とは,ホストAとホストBが接続したら,直ちにデータを一方的に送りつける方式で,エラーがあってもわかりませんので再送機能もありませんし,フロー制御機能もありません。それだけ,信頼性が低いといえますが,逆に伝送効率は高くなります。
 それで,次のような用途に用いられます。

マルチメディア通信
動画や音声では,データの一部が失われても一瞬の出来事に過ぎず,数値や文字データのような深刻な影響はありません。逆に,伝送効率が悪いと途中で途切れてしまうので困ります。それで,ストリーミングでの音楽や映画の配信にはUDPが用いられます。
少量データの同報通信
送信するデータが少ないとき,TCPでは本来のデータ伝送時間に対するオーバーヘッドの時間の割合が大きくなります。しかも,多数の相手に同報するときはなおさらです。それで,ルーティングやDNS、NTP(Network Time Protocol、:コンピュータ内部時計をネットワークから標準時計に同期)などでは,UDPを用いるのが適切です。

ストリーミング

ストリーミング方式について補充しておきます。

通常のデータ伝送では、送信側にデータがすべて蓄積されており、それをすべて受信してから再生します。しかし、それではライブ動画などもいったん録画してからの送信になり、送信時間や再生時間がかかるので、視聴までに時間がかかりリアルタイム性が失われます。
 それに対して、ストリーミング方式とは、演技を撮影しつつデジタル化して送信し、受信したら同時に再生して視聴できるようにした方式です。データの完全性よりもリアルタイム性を優先した送信、例えばライブ動画のように映像や楽曲など大量マルチメディアデータをリアルタイムに視聴するのに適しています。

このような通信をリアルタイム通信といいますが、ストリーミング方式はリアルタイム通信の代表的方式です。ストリーミング方式のプロトコルには、UDP、UDPをベースにしたRTP(Real-Time Protocol)とそれを補助するRTCP(RTP Control Protokol)があります。

大量マルチメディアデータの伝送では、高速伝送が必要になります。TCPではパケット送受信のたびにネゴシエーションでの確認やにシーケンス番号での順序再編をするので、伝送効率が低くなります。それで、そのような処理を省略した、いわば垂れ流し方式のUDPを用いることにより、比較的低速な回線でも実現できます。
 UDPはデータの到着間隔が一定していない(それをジッタといいます)欠点があります。それによりデータが欠落することもあります。ジッタの発生は、取引情報のような正確性が重要なデータでは致命的ですが、動画データではデータの欠落があっても画面やスピーカーにちょっとしたノイズや音飛びが発生する程度で許容できます。しかも近年は、回線品質の向上により、このようなエラーが少なくなってきました。
 

ジッタの影響を防ぎ安定した再生をするためには、一定のデータ量をバッファに確保してから再生を開始します。バッファを大きくすればジッタを吸収できますが、バッファにデータが蓄積されるまでの遅延時間がかかります。そのため、ストリーミング方式でも厳密にはリアルタイムではないのです。

ストリーミング方式は、通常、再生したデータは消去されるので、全体のデータは保管されません。そのため、再度視聴することができません。しかし、著作権の観点では安全だといえます(法的にはいろいろな意見があります)。


理解度チェック

第1問

  1. TCP/IPでのトランスポート層に属するプロトコルに,TCPとIPがある。
    × IP→UDP IPはネットワーク層
  2. TCPはコネクション方式,UDP,IPはコネクションレス方式である。
  3. コネクションの確立とは,データの送信に先立ち,ホストAとホストBの間で通信の準備をすることである。
  4. コネクションの確立と解放を電話の例でいえば,受話器を取り上げたときがコネクションの確立で,受話器を置いたときが解放に相当する。
    × ダイアルを回して相手を確認したときが確立
  5. TCPでは,パケットの到達順序を送信した順序に並べ替えす機能がある。
  6. TCPヘッダのポート番号により,Webページ閲覧や電子メール送信などのアプリケーションにデータを渡す。
  7. TCPでウインドウを大きくすれば,転送効率は向上し,再送の確率は低くなる。
    × 再送の確率は高くなる
  8. TCPでは,転送効率を上げるために,当初はウインドウを大きくして転送し,輻輳が起こるようならウインドウを少なくする方法をとっている。
    × スロースタート
  9. UDPは,少量データの同報通信に適している。
  10. RTPは,ジッタを吸収することにより,音声や画像の乱れを防ぐので,リアルタイム通信に適している。

本シリーズの目次へ