開発から40年以上経過するも、いまだ使われ続けているインターネットの基幹プロトコルであるTCP/IP。その概要を解説。
「TCP/IP(Transmission Control Protocol/Internet Protocol)」は、コンピュータやアプリケーション同士の通信のために、現在最も多く使われている基幹ネットワークプロトコルである。インターネット、イントラネットを問わず、組み込み機器からPC、サーバ、スーパーコンピュータに至るまで、あらゆるコンピュータや通信機器がTCP/IPを使って通信やサービスを実現している。
「TCP/IP」という呼び方は、「TCP」と「IP」という2つの中核となるプロトコルから名付けられている*1。だが実際には「UDP」「ICMP」「ARP」など、幾つかの補助的なプロトコルも含む総称である。
*1 TCP/IPという呼び方について
TCP/IPの原型は「Transmission Control Program」という、ARPAnet(米国防総省が開発していたネットワークシステム)上でストリーム型の通信を行うためのプログラムにある。その後、さまざまシステム上に実装するために「TCP(Transmission Control Protocol)」として仕様がまとめられ、さらに下位のプロトコルが「IP(Internet Protocol)」として分離された結果、まとめてTCP/IPと呼ばれるようになった。UDPが追加されたのは、そのさらに後である。
各階層の役割は次の通りである。
TCP/IPを使うアプリケーションは、TCPかUDPのいずれかのプロトコルを利用して、他のコンピュータ上にあるアプリケーションと通信する。
IPは、TCPやUDPが内部的に利用するためのプロトコルであり、2台のコンピュータ間での通信を担当する。
TCPとUDPは通信方法が少し異なっており、目的に応じてどちらかを利用する。
以下、もう少し詳しく見ていく。
「TCP(Transmission Control Protocol)」は、2つのアプリケーション間で、「信頼性のあるコネクション型の通信」(ストリーム型とも言う)を行うためのプロトコルである。WebサーバとWebブラウザ間、メールサーバとメールクライアント間など、ほとんどのネットワークサービスで利用されている。TCPの機能や特徴は次の通り。
TCPが信頼性のある通信路を実現してくれるため、アプリケーションはネットワークの状態に関係なく(混雑で遅くなったり、送信が失敗したりしても気にせずに)、データをやり取りできる。
「UDP(User Datagram Protocol)」は、「信頼性のないデータグラム指向の通信」を行う。「信頼性がない」とは、送信したパケットの到着順序が入れ替わったり、(混雑などによって)消失したりする可能性があるということだ。
UDPプロトコルの機能は次の通りである。
TCPと比較すると、相手にデータが届いたかどうかの確認や、通信路の開始/終了、送信失敗時の再送信処理などがない分、高速・軽量である。エラー検出や失敗時の再送信が必要なら、アプリケーション自身で対応する。
相手と確実に通信できるかどうか分からないUDPだが、用途によってはこれでも十分である。例えばDNSサービスのパケットでは、単純な問い合わせとその応答をUDPパケット1つずつで済ませている。またビデオ配信やオンラインゲームのような用途では、全てのデータが確実に届くことよりも、リアルタイム性の方が重要だろう。そんな用途にはUDPの方が向いている。
TCPやUDPで送信するデータは、実際にはIPプロトコルを使って通信相手のコンピュータにまで届けられる。
IPプロトコルではネットワーク上の2台のコンピュータ間で片方向の「データグラム指向」の「ベストエフォート」通信を行う。
ベストエフォートとは、相手に届くように最善の努力はするが、場合によっては(例:ネットワークの混雑時など)送信に失敗することもある、という通信形態のことである。送信失敗時の再試行は、必要なら上位プロトコル(TCPの場合)か、アプリケーション自身(UDPの場合)で行う。
TCP/IPネットワークにつながっているコンピュータには、全て「IPアドレス」という固有の識別用の情報が割り当てられている(利用するIPアドレス体系の違いにより、IPv4とIPv6の2種類がある)。連続するIPアドレスを持つコンピュータは何台かずつまとめてネットワークグループを構成し、そのグループ間を「IPルータ」が相互に接続している。
IPプロトコルの役目は、このような構成になっているネットワークを使って、2台のコンピュータ間でデータをやりとりすることである。
同じネットワークグループ内にあるコンピュータ同士なら直接相互に通信してパケットを届ければよい。
通信相手が異なるグループにいる場合は「IPルータ」に依頼して、まずは隣接するネットワークへデータを送信する。データを受け取ったIPルータは、宛先が自分の所属しているネットワークグループ内にいるかどうかを調べ、存在しなければ、さらに隣接するIPルータへ転送を依頼する。
このようにしてIPルータ同士でパケットを順次バケツリレー方式でやりとりすることにより、目的のコンピュータまで届けられる。
TCP/IPは1970年代中頃に開発が開始され、それから既に40年ほど経っているが、現在でもまだ使われ続けている。ネットワーク速度の高速化や接続されるコンピュータ数の増加などに応じて今でも改良が続けられており、今後もその重要性は変わらず、使われ続けるだろう。
■関連リンク
Copyright© Digital Advantage Corp. All Rights Reserved.