インターネットの要はパケット通信である。ARPANETが1969年に誕生した当初はIMP(Interface Message Processor)という機器が搭載するNCP(Network Control Program)というプログラムを使って通信を行っていた。1983年、ARPANETはNCPに代わってTCP/IPを採用した。インターネットのパケット通信の基本的な形はこのときにできたといっていいだろう。

 もっとも、TCPとIPが現在のような独立したプロトコルになるまでには様々な経緯があった。現在のTCP/IPの基になったのは、ボブ・カーン氏とビントン・サーフ氏が1974年に発表した「TCP」というプロトコルである。現在のTCPとは異なるので、旧TCPと呼ぶことにしよう。

TCPとIPはもともと一つだった
[画像のクリックで拡大表示]

 今のインターネットでは、TCPがトランスポート層の処理を担当し、IPがネットワーク層の処理を担当する。IPはルーティングを行い、宛先のIPアドレスにパケットを送るための経路を決定する。一方TCPは、ネットワーク層でどのような経路でパケットが送られるかには関知しない。TCPはIPが確保した経路の上でコネクションを確立し、このコネクションを使ってアプリケーションのデータを転送する。

 一方、旧TCPは、ネットワーク層の機能とトランスポート層の機能の両方を担っていた。つまり、現在のTCPとIPの両方の処理を行っていた。

 旧TCPにも、現在のTCPが備える様々な機能が既に盛り込まれていた。パケット通信では元のデータを複数のパケットに分割して送る。旧TCPでは、途中でパケットの最大サイズ(MTU)が小さくなっても転送を継続するため、ルーターでパケットを再分割する「フラグメント」という処理を行う。また、現在のTCPのポート番号に相当する機能や確実にデータを届けるための再送制御などの機能も備えていた。

 ただ、旧TCPは多くの機能を持つため、ルーターがこれらのすべての処理を行うと負荷が高くなってしまう。そこで、前述のサーフ氏、米南カリフォルニア大学の情報科学研究所(ISI)に所属していたジョン・ポステル氏、ダニー・コーエン氏の3人は旧TCPの機能を分離しようと考えた。そのために、ルーターが持つべき機能と端末が持つべき機能を仕分けしていった。

ルーターでのパケットの処理方法が変化
[画像のクリックで拡大表示]

 例えば、送信元や宛先に指定するアドレスの仕様はIPが受け持ち、アプリケーションを指定する番号や再送制御などをTCPが受け持つことにした。

 また、フラグメント処理も変更した。旧TCPでは送信端末で行うアプリケーションデータの分割とルーターで行うフラグメント処理は同じだった。送信端末がデータを分割し、TCPヘッダーを付けて送信する。ルーターはMTUに合わせてTCPパケットを分割する。TCPパケットを受け取った側は、それらを結合してデータを取り出す。

 この処理をトランスポート層とネットワーク層に分離した。送信端末ではTCPでデータを分割し、ルーターではIPでフラグメンテーション処理を行うようにした。

 こうした議論を経て、旧TCPは1978年にTCPとIPに分離した。1981年にはIPの仕様であるRFC 791とTCPの仕様であるRFC 793が公開された。