【NET技術.004】TCPとUDPについて①
佐藤@IT雑貨屋です。
私が一時期、ISMSコンサルタントを行っていた時、この技術情報に関しては正直不足していました。その事から技術的な事については的確な事を話せなかったという事があります。その後、現在の職場で嫌が応にもネットワーク関連の知識が必要になり、独学で学んできましたが、やはりこういった事の基礎的な部分については理解をしておくに越したことがありません。
という事で振り返りを含めてまとめていますので、よろしくお願いします。
◆TCPとUDPについて
IPと並んでインターネット通信で標準的に使われるプロトコルのTCPは、トランスポート層のプロトコルとなります。またこのトランスポート層で使用されるプロトコルとしてUDPもあります。
◆トランスポート層の役割
トランスポート層はネットワーク層と並んでインターネット通信の中核と部分となります。
<ユーザー・アプリケーションなど>
TCP/IPプロトコル群 OSI基本参照モデル
[アプリケーション層 ]→[ アプリケーション層]7層
[プレゼンテーション層]6層
[ セッション層 ]5層
[トランスポート層 ]→[ トランスポート層 ]4層
[インターネット層 ]→[ ネットワーク層 ]3層
[ネットワークインターフェース層]→[ データリンク層 ]2層
[ 物理層 ]1層
<通信回線・ケーブル等>
このトランスポート層の一番の役割は、通信するアプリケーションに適切にパケットを渡すことです。コンピュータの内部で動作する、様々なアプリケーションのうち、そのアプリケーションのデータを渡せば良いか、このトランスポート層で判断して渡します。
クライアントは、宛先ポート番号にサーバ内の目的とするプロ恨むに対応するポート番号を設定いてパケットを送信します。例えばホームページを表示するためにWebサーバでHTTPプロトコルによる通信を行いたい場合には、宛先ポートに80番を設定します。このポートはプロトコル毎に予め決められていて、それをウェルノウンポート番号と言います。
◆TCP(Transmission Control Protocol)
TCPはコネクション型プロトコルと呼ばれ、通信相手との間に事前にコネクションを確立することで、信頼性のある通信を行います。これによって切れ目なくデータを送ることができるストリーム型の通信を実現します。これはTCPの持つ順番制御の機能によるもので、TCPでは順番制御を行い、複数のパケットを送った順に管理することで、区切りの無いデータ通信を可能にしています。
TCPでは信頼性を確保するために、順番制御の他、再送制御やフロー制御など、多くの機能を備えています。ただしこの信頼性を確保するために様々な制御を行うために、その分、ネットワークに負荷をかけ処理が遅くなります。
◆UDP(User Datagram Protocol)
UDPはコネクションレス型プロトコルと呼ばれ、単独のパケットだけでデータを送るデータグラム型の通信を提供します。パケットの到達確認など、細かい処理はアプリケーションに魔佳節ので、通信時のネットワークへの負荷はかからず高速で通信を行う事が出来ます。
UDPは信頼性は高くありませんが、高速に通信を行う事が出来るので、リアルタイム性を要求されるアプリケーションに向いています。例えば音声通信や動画配信などのRTP(Real time Transport Protocol)もUDPを使用しますが、これらは途中のパケットが失われても一部が乱れるだけで大きな影響はありません。
◆ポート番号
トランスポート層で通信を行うためには、送信元と宛先の両方でポート番号が必要になります。クライアント/サーバモデルでは、サーバー側では一般的にどのポートを使うかは、先にも述べたウェルノウンポート番号で決められています。
ウェルノウンポート番号には、0~1023までの場合が割り当てられていますが、データベースサーバーなど、それ以外の番号が割り振られていることもあり、クライアントとサーバ間の通信で変更されるケースもあります。
クライアント側では通常、通信の際に利用するポート番号はOSで動的に割り当てます。このポート番号が異なる事で、それぞれが別通信である事が識別できますが、この番号は1024番号以上の任意の番号が割り当てられます。また最近のOSでは49152~65535のポート番号を割り当てる場合もあります。
代表的なウェルノウンポート番号を以下に示します。