ついにトランスポート層であるTCPとUDPについて解説していきます。当サイトのページを読んでくれている方は局所的に読んでいると思われますが、管理人的にはTCP/IPの流れをまとめるために最初から記述していっているため、ついにここまで来たのかといった感じです。あー疲れた。なんていってる場合ではありません。TCP/IPを理解するという意味では実はこのトランスポート層がひとつの山場です。ここを乗り越えるとある程度、TCP/IPのことを理解できるようになり、ネットワークそのものも理解しやすくなってくることと思います。それでは頑張って読み進めていってください。
■TCPの概要
TCP(Transmission Control Protocol)は2つの端末上のプロセス間で、
信頼性のある通信を提供するためのプロトコルのことを指し、OSI参照モデルでいうトランスポート層に属しています。また、その仕様はRFC(Request
For Comment)-793などで規定されています。では、信頼性のある通信を提供するとはどういうことかというと、コンピュータ通信においては、コンピュータとコンピュータがデータ処理をするためには、「パケットが損傷していないか」「消失(ロス)していないか」「重複や遅延がないか」「到着順序にズレは生じていないか」などを考慮しなくてはなりません。TCPはデータ通信時にこのような事柄を検証して確固たる信頼性、伝達保証性を提供しています。それでは以下に、TCPが担っている信頼性確保のための代表的なものを解説します。
◎TCPの役割
■TCPセグメントフォーマット
TCPのパケット(これをTCPセグメントと呼びます)は、TCPヘッダとデータからなり、このTCPヘッダに上記で説明したTCPの信頼性確保のための仕組みが含まれていることになります(以下図参照)。
◎TCPセグメントフォーマット
■TCPの制御手順
下記の図はTCP/IPのシーケンスで①クライアントからSYN(Synchronize flag)パケットを送信、②サーバーからSYN+ACK(Acknowledgement
flag)パケットを送信、③クライアントからACKパケットを送信、という3段階の手順を踏んだ3ウェイハンドシェイク(3Way
Handshake)と呼ばれるものを表しています。TCP/IPではこのような手順を踏んで通信を確立するような仕組みとなっており、以下にその詳細について解説していきます。
◎3ウェイハンドシェイク
①接続を要求する
通信を行う側が、SYNフラグを「1」にしたセグメントを相手に送ります。受け取った側は通信できる状態にあれば同様に「1」のデータを返します。もし、通信できなければRST(Reset)フラグを「1」にしたセグメントを返します。
◎接続が成立する場合
◎接続が成立しない場合
②接続が確立される
双方の接続が確立された段階でバーチャルサーキットと呼ばれる通信路ができあがり、この回線は通信が終了するか、なんらかの理由で切断されるまでは維持され、以降はセグメントのやり取りに使用されます。
③データの転送
送信側は受信側が了解した量に見合ったサイズのセグメントを送り出します。
④受け取ったデータをチェックする
受信側は受け取ったセグメントのチェックサムからTCPヘッダのチェックサムの値と照合します(セグメントの破損の確認)。
⑤エラー対処(データの配送)
なんらかの原因によって受信側より一定時間、応答メッセージが返ってこない場合はもう一度データの再送を行います。
⑥フローコントロール[流量制御]
受信側はRWINの値で、受け入れるデータ量を送信側に示します。
⑦データ送信の終了
送信するデータがなくなったら、コードビットFINフラグを「1」にしたフラグを送ります。
⑧接続の切断(バーチャルサーキットの切断)
相手側も送信するデータがなければ、同様にFINフラグを「1」にしたセグメントを返してきます。その段階でバーチャルサーキットの接続が切断されます。この時に何度接続しようとも正常にデータが送れなかった場合は、RSTフラグを「1」にしたセグメントを相手に送信し、回線を強制的に切断します。
■UDPの概要
UDPはTCPとは違って、いたってシンプルなプロトコルです。TCPは伝達保証性を確保するという重要な機能を果たしているため、どうしてもエラーチェックや再送要求などのネゴシエーションが増え、高速にデータを届けるという点に関してはあまり得意ではありません。すなわち、動画や音声などをリアルタイムに転送するマルチメディアアプリケーションには不向きなプロトコルであるといえるのです。そこで、TCPの伝達保証性を省略するかわりに、
高速性を重視したプロトコルとして利用されているのがUDP(User
Datagram Protocol)なのです。
UDPは、コネクションを確立して通信状態を管理したり、誤り訂正のためにパケットを再送するといった信頼性を保証する機能がないため、TCPのような「コネクション型のプロトコル」に対して「
コネクションレス型のプロトコル」と呼ばれています。当然、ACKやSYNのフラグもなく、UDP自身が持っているのは、データが壊れていないかどうかを確認するチェックサムの仕組みだけです。その分だけいささか信頼性は乏しくなりますが、より高速に相手にデータ転送できる仕組みを確立しているのです。そのため、UDPは主に、DNSでの名前解決要求やDHCPなどのレスポンス重視の通信サービスや、リアルタイム再生型のアプリケーション(Real
PlayerやVDO Liveなど)などに有効なプロトコルであるといえます。UDPのパケットのヘッダ構成も以下のように非常にシンプルなものになっています。
◎UDPメッセージフォーマット
SRC PORT
送信元ポート番号
|
DST PORT
宛先ポート番号 |
Length
データ長
|
Checksum
チェックサム |
Data
データ |
|
■TCPとUDP/両プロトコルの相違
以上、説明してきたことをまとめると以下のようになります。
TCP |
|
UDP |
①信頼性重視 |
①高速性重視 |
|
②コネクション型のプロトコル |
|
②コネクションレス型のプロトコル |
|
③誤り訂正(エラー補正)や再送の機能を搭載 |
|
③プロトコルの処理が高速 |
|
④代表的なアプリケーション・プロトコル:HTTP、FTP、SMTP、POP、FTP、TELNETなど。 |
|
④代表的なアプリケーション・プロトコル:DNS、DHCP、TFTP、NTPなど |
|