はじめに
この連載では仮想的なLANを実装することにより、目に見えないTCP/IPプロトコル群を、手を動かして目で実際に確認しながら習得することを目的としています。ただし、TCP/IPのすべてを解説するのは分量上不可能ですし、余計に読者を混乱させてしまいますので、筆者が重要と考えている部分だけ解説します。またサンプルコードや本記事に出てくるIPアドレスとMACアドレスについては架空のものであり、実際にそのIPアドレスを取得した組織などを意識したものではありません。あらかじめご了承ください。
今回はトランスポート層のプロトコルとそれに関係する事柄について解説します。
トランスポート層の概要
この層の役割は、アプリケーション層のデータを2台のホスト間で、どのようにやり取りをするのかを既定することです。特徴は通信方式の信頼性です。
純全たるこの層のプロトコルは今の所2つしか存在しません。それは、UDP(User Datagram Protocol)とTCP(Transmission Control Protocol)です。簡潔に説明すると、TCPは信頼性のあるコネクション型通信を行うための機能を提供し、信頼性はないものの大量を素早く送信する、コネクションレス型通信を行うための機能を提供するのがUDPです。コネクション型とは、通信中に設定される仮想的な通信路のことです。この通信路は、送受信者それぞれのIPアドレスと、アプリケーション・ポート番号の組み合わせで識別される仮想的なものです。
なお、アプリケーション・ポート番号(一般的にはポート番号と呼ぶ)とは、アプリケーション層のプロトコルを識別するための番号だと考えてください。
これで概要の説明を終えましたので、次項でUDPについて詳しく説明します。
UDP
UDPはコネクションレス型のプロトコルで、データを伝送するための非常に簡易な機能だけを提供するプロトコルです。UDPを既定しているRFCも768だけです。アプリケーション・プログラムに対して、IPデータグラムをそのまま利用させる仕組みだと考えると良いでしょう。そのためヘッダフォーマットも単純です。
UDPの利点はデータが正しく送信されたかや、データの順序制御などを行わないその簡潔さにあります。一般的に信頼性のある通信は好ましいように思いがちです。しかし、信頼性を確保するにはさまざまな処理をする必要があり、オーバーヘッドを生むことになります。このオーバーヘッドが許容できず、高い信頼性を必要としないアプリケーション層のプロトコルにとって逆に高い信頼性はネックとなってしまいます。ですからUDPの簡潔さが利点となるのです。UDPは、DNS,TFTP,BOOTP,SNMP,DHCP,RADIUSなど多くのプロトコルが使用しています。
また、ブロードキャストとマルチキャストというUDP特有のデータ送信方式が使用できるのも利点です。ブロードキャストとマルチキャストは、複数の宛て先にデータを送信する通信方式です。TCPはコネクション型なので、ブロードキャストとマルチキャストはできません。
次項でブロードキャストについて詳しく説明します。