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を用いるのが適切です。

リアルタイム通信

リアルタイム通信とは,VoIP(IP電話),ライブ中継など,大量データを迅速に送信する通信です。通信効率を高めるためにTCPは向いていません。また,UDPはデータの到着間隔が一定していない(それをジッタといいます)欠点があります。ジッタが大きくなると,音声や画像が乱れますし,さらに大きくなると再生できないこともあります。
 それを解決するにはバッファを設けておき,それでジッタを吸収する方法がとられますが,バッファを大きくするとデータが蓄積されるまで待つので,遅延時間が大きくなります。これは電話や電子会議などの双方向通信には不向きです。
 このようなリアルタイム通信でのプロトコルに,UDPをベースにしたRTP(Real-Time Protocol)とそれを補助するRTCP(RTP Control Protokol)があります。


理解度チェック

第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は,ジッタを吸収することにより,音声や画像の乱れを防ぐので,リアルタイム通信に適している。

本シリーズの目次へ