[TCP/IP とインターネットの仕組み]に戻る
[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]

TCP/IPの概要

IP (Internet Protocol)

郵便のシステムに似ている IP

IPの仕事 IPの仕事は送りたい情報を入れたパケットを、 指定されたIPアドレスに届けることです。
パケットとは? 英語の packet(パケット) には小包という意味もありますが、IP で送られるパケットも データの小包のようなものです。
ヘッダは宛先ラベル 小包には宛先や送り主などを記入したラベルをつけて送りますが、 IP のパケットにもヘッダ (IPパケットのヘッダをIPヘッダと呼びます)と呼ばれるものが付いています。 このIPヘッダには宛先や送り主などの情報が書き込まれます。IPのパケットは 次のような形をしています。

IPパケット
IPヘッダ
データ

このような形のパケットをそれをネットワークに送り出すのです。

パケットはどのように送られるのか? では、このパケットはどのように相手に届くのでしょうか。ここで、 次のたとえを考えてください。 わたしたちが近くの家の人になにかを渡したい場合、 わざわざ郵便で物を送らず、直接自分で郵便物を相手のところに 持って行きます。でも、少し離れたところの人には、 郵便屋に依頼します。IPでパケットを送る場合もこれに 似ています。
ルータとは 送り主と受け取り主が同じセグメント (直接つながっているLAN)に存在する場合は、直接相手にデータを渡します。 しかし、送り先のマシンが離れたネットワークにある時には、 送り主に最も近い(同じセグメントに接続された) ルータ(ゲートウェイ) という機械にこのパケットを渡すのです。 すると、このルータがこのパケットを転送して宛先に届けてくれます。

IPによるパケット転送の例

ホームページを見ようとした時に起こること 例えば次のような例を考えて見ましょう。みなさんが FC-LABのホームページ(http://www.fc-lab.com/index.html) をWWWのブラウザ(Netscape NavigatorやInternet Exploreなど)で 見ようとしたとします。
コマンドの送出 この場合、ブラウザはWWWサーバwww.fc-lab.com(210.252.131.217)に対して、 "GET /index.html HTTP/1.0" というコマンドを送ります。 この時に、みなさんのコンピュータは"GET /index.html HTTP/1.0" という内容を含み「210.252.131.217行き」のヘッダがついたパケット をネットワークに送り出す(最寄りのルータに渡す)のです。
ルータによるパケットの転送 すると ルータがこのパケットを配送して、 最終的に210.252.131.217に届けてくれます。
ホームページのデータの送信 それに対する応答として 210.252.131.217のアドレスを持つサーバはホームページの情報が入ったパケットを送り返して くれるのです。このホームページの情報 (htmlファイルやgifファイルなど) も、 コマンドを送った時と同様にルータを経由して、最終的に情報を待っている マシンのブラウザに届き、ホームページが表示されるのです。
このようなパケット交換による通信の仕組みや通信の約束事を規定 しているのがIPなのです。

TCP(Transmision Control Protocol)

IPだけではデータの信頼性が保証されない IPは上に説明したように、宛先にパケットを届ける機能があるのですが、 このIPプロトコルだけでは、相手が間違いなく正しく受け取った ことが保障されません。
内容の誤り、データの欠落 例えば、通信の経路途中でデータが壊れたり(機械の不良、電源電圧低下、 強い電磁波を受ける電線を通ったり、電線不良などいろんな原因が考え られる)、受け取り手となるコンピュータの記憶容量や処理能力の問題で、 IPパケットを受け取ったものの、それを正しく処理できないことが 起こり得ます。 このような場合に届いたデータは送ったデータと異なるかもしれず、 また相手にパケットが全く届かないということが起こり得るのです。
到着順の誤り またIPパケットは送信された順番で、届くとは限りません。 複数の手紙を同じ人に分けて出さなければならない場合、 到着順はわかりませんし、郵便局にそれを指定することも できません。IPも同じように、到着順は保証されず、 後に出したパケットが先に届くこともあり得ます。 通常、大きなデータを送る場合には、それを小さなパケットに 分割して送り、受け取り手がそれをもう一度組み合わせて 元の大きなファイルを作りますので、元の内容を正しく復元 するためには、順番が正しくなければなりません。
エラーの検出(TCPの機能) TCP はこのような問題を解決するための機能を提供するのです。 TCPではエラーを検出するために、送る前にデータの チェックサムを計算して その情報を追加して送って、受け取り手はそれを 確認して、データが正しいか確かめます。 もし間違いがあれば、もう一度送ってもらうように要求します。
欠落データの回復 途中で失われて、届かなかったデータはどうするのでしょうか。 TCPでは、受け取り手は自分がパケットを受け取ったことを送り主に 知らせるために、ACKパケットと 呼ばれるパケットを送り手に送信する ように取り決められています。それで、送り主は確かにデータが届いた ことを知ることができるのです。ある程度の時間を待っても、 相手からそれを受け取ることができなければ、再送して、データの 欠落が内容にするのです。
データ順の回復 またパケットにシーケンス番号を付けて送出することにより、 送信した順序で到着しなかった場合にも、正しい順番を確認し、 必要であれば並べ換えを行うのです。
ウィンドウ制御 さらに、受け取り手の受信能力(ウィンドウと呼ぶ)を考えながら送信する機能もあります。
TCPの通信においても、以下に示すようなパケットを使った 通信がなされます。

TCPパケット
TCPヘッダ
データ
TCPヘッダの部分には上記の機能を実現するために必要な SEQ(送信順序番号),ACK(応答確認番号),windowサイズなどの情報が 含まれます。これらを用いて、信頼性を実現するのです。
このようにTCPは信頼性のある通信を提供するために通信の制御する規約なのです。

TCPとIPの関係

TCPとIPの機能は上で説明した通りですが、これら2つのプロトコルは どのような関係にあるのでしょうか。
プロトコル階層 プロトコルには階層があります。上位のプロトコルは下位の層の プロトコルを利用して通信します。TCPとIPも上下関係にあります。 TCPが上位プロトコルでIPが上位プロトコルです。そしてTCPの上位に 様々なアプリケーションのプロトコルが位置します。それで、 アプリケーションはTCPを制御するプログラムにデータの送信を 依頼すると、そのプログラムはTCPパケットを作り、そのパケットの 送信をIPに依頼します。つまり次に示すパケットをIPで送るのです。

送出されるパケット
IPヘッダ
TCPヘッダ
データ

実際にネットワークに送出されるパケットは、このように TCPパケットがIPパケットのデータとなる形になります。 これが転送されて相手に届くことになるのです。

受信ホストでの処理 このパケットが相手に届くと、そのマシンのIPをつかさどるプログラムが IPパケットを開き、ヘッダなどを検証したのち、データ部分を TCPの処理を行うプログラムに渡します。それを渡されたTCPのプログラム は、TCPパケットを開いて、データを確かめたり、順番に並べたり、 相手にACKを返したりして、正しいデータがそろったらアプリケーションに それを渡すのです。こうして送信されたものと同じ情報がアプリケーションに 届きます。
ブラウザでホームページを見た時 では、例として上で簡単にあつかったブラウザでホームページを見ようとしたときの 通信の内容を少し詳しく説明します。この場合TCPの上位のプロトコルはHTTP (Hyper Text Transfer Protocol)です。このHTTPプロトコルでは "GET /~fujiki/index.html HTTP/1.0"というコマンドを送れば、 サーバはその情報を返すという規約になっています。このように、 このプロトコルはWWWのブラウザとサーバの通信に関する約束ごとです。 この通信の際に、ブラウザは"GET /~fujiki/index.html HTTP/1.0"というデータを 相手マシンのWWWサーバのプログラムに送るようにTCPに依頼し、その TCPはIPに送信を依頼します。このとき上のパケットの「データ」の部分の 内容は"GET /~fujiki/index.html HTTP/1.0"となっています。これがWWWサーバに 届くと、WWWサーバが情報を送ってくるのです。
(ここで述べている内容は概念的なものを含んでおり、 必ず上記の通りに実装されているというわけではありませんのでご注意ください)


[TCP/IPの概要] [ルーティング] [プロトコル階層] [ポートの概念]
「TCP/IP とインターネットの仕組み」へ戻る