〇 インターネットの標準技術「TCP/IP」、どうやってデータを送っているのか。
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットや企業ネットワークで、事実上の標準技術として広く利用されている通信プロトコル群だ。インターネット・プロトコル・スイートなどとも呼ばれる。インターネットの原型となった米国の実験ネットワーク「ARPANET」のプロジェクトで開発された。
様々なプロトコルで構成するが、その中でも中心的な役割を担うのが「TCP」と「IP」というプロトコルであることから、TCP/IPと呼ばれるようになった。
機能別に4つの階層で構成
通信プロトコルは機能ごとに階層に分けられ、各層に属するプロトコルは他の層から独立している。プロトコルを各層に分けるメリットは、ある層のプロトコルに変更があっても、他の層に影響が及ばないことだ。
例えば、新たなプロトコルを開発したり既存のプロトコルを改良したりしたとき、他の層に影響を与えずに差し替えや追加ができる。
国際標準化機構(ISO:International Organization for Standardization)などが定めた「OSI参照モデル」が7層なのに対して、TCP/IPの階層モデル(TCP/IPモデル)は4層で成り立っている。TCP/IPモデルの一番下に位置する「リンク層」の役割は、同じネットワークにある機器間でデータをやりとりできるようにすることだ。イーサネットなどのプロトコルがこの階層に属している。
インターネットは、多数のネットワークがつながることで成り立っている。TCP/IPモデルの下から2番目に位置する「インターネット層」は、こうしたネットワークの相互接続を実現するための階層だ。異なるネットワーク間での通信を可能にするIPや、ネットワークの動作状態を診断するためのICMPといったプロトコルが属している。
インターネット層のIPを使えば、複数のネットワークを経由して別のネットワークにある機器にデータを送れる。ただし、データを確実に送れるとは限らない。一部のデータが途中で失われたり、データの届く順番が入れ替わったりすることがあるからだ。信頼性が求められるアプリケーションでは、データが正しく届くように制御する必要がある。
逆に信頼性よりも効率性を重視するアプリケーションでは、そうした制御は不要だ。また、受信側では複数のアプリケーションが動作しているので、どのアプリケーションにデータを渡すのかも制御しなければならない。
このような制御の役割を担うのが、インターネット層の1つ上の「トランスポート層」だ。代表的なプロトコルとして、信頼性を重視する通信で使われるTCPと、効率性を重視する通信で使われるUDP(User Datagram Protocol)がある。
TCP/IPモデルの一番上に位置する「アプリケーション層」は、アプリケーションがどんな手順でデータをやりとりするのかを定める階層だ。Webアクセスに使われるHTTP(HyperText Transfer Protocol)や名前解決に使われるDNS(Domain Name System)、メールの転送に使われるSMTP(Simple Mail Transfer Protocol)といったプロトコルがこの階層に属している。
各階層で「ヘッダー」を付加
TCP/IPでは、アプリケーションは次の手順でデータをやりとりする。送信側のアプリケーションはまず、データを適当なサイズに分割する。次にトランスポート層では、分割したデータに「TCPヘッダー」と呼ぶ情報を付加してTCPセグメントを作成する。TCPヘッダーには、データが正しく届くようにするための制御情報などが含まれる。
画2、TCP/IPにおけるデータの流れ。
インターネット層では、トランスポート層から受け取ったTCPセグメントに「IPヘッダー」と呼ぶ情報を付加してIPパケットを作成する。IPヘッダーには、インターネットの住所に当たる「IPアドレス」などの情報が含まれる。
続いてリンク層では、インターネット層から受け取ったIPパケットに「イーサネットヘッダー」と呼ぶ情報を付加してイーサネットフレームを作成する。イーサネットフレームには、リンク層での住所に相当する「MAC(Media/Medium Access Control)アドレス」などの情報が含まれる。
そしてイーサネットフレームは電気信号に変換され、LANケーブルなどを通じて宛先のネットワーク機器に送信される。
受信側では、送信側とは逆の順番でアプリケーションのデータを復元する。リンク層でイーサネットフレームからイーサネットヘッダーを外してIPパケットを取り出す。次に、インターネット層でIPパケットからIPヘッダーを外してTCPセグメントを取り出す。
最後に、トランスポート層でTCPセグメントからTCPヘッダーを外してアプリケーションデータを取り出し、分割前と同じ状態に復元してアプリケーションに渡す。
.