さて、「サーバー構築」、「セキュリティ」ときて、ついにTCP/IPの解説に入ります。ここでは、TCP/IPの基礎的な事に絞って解説を進めていきます。というのも、TCP/IPを解説しようとしたら、いくつでもサイトができてしまいそうなほど幅が広いので、サーバーを構築するにあたって知っておいた方が良いと管理人が判断した知識に絞って解説をしていきたいと思います。
■TCP/IPとは
TCP/IP(Transmission Control Protocol/Internet Protocol)は、現在、インターネットで最も広く利用されているプロトコルの1つです。プロトコルと聞くといかにも難しいように聞こえますが、決して難しいものではなく、多少なりともコンピュータを使用したことがある方なら誰でも、プロトコルであると意識することなく、様々なプロトコルに触れているのです。ブラウザを使用してネットサーフィンしてみたり、ファイルをダウンロードしたり、メールでコミュニケーションをとったりと普段、当たり前のように利用していることですが、それを実現しているのはまさにプロトコルの働きによるものなのです。
例えば2台のコンピュータをケーブルで繋いで、互いにデータをやり取りするようなケースを考えてみましょう。コンピュータAがコンピュータBと通信をとるためには、どんな方法でデータを送ったら良いのか、どういったデータの流れに沿って送るのかといったある一定の約束事がなくてはいけません。コンピュータの場合は人間とは違い、臨機応変な対応ができないため、忠実にやりとりを実現させる必要があります。コンピュータの世界ではこのやり取りを実現させるめの約束事が存在し、そのような約束事のことを「プロトコル」と呼んでいます。ここで紹介しているTCP/IPもそのプロトコルの一種なのです。
■OSI参照モデル
コンピュータ同士が実際に通信を円滑に行うためにはある特定の取り決め事が必要であるということは上述したとおりですが、実際には、これらの取り決めごとはそれぞれに役割分担されており、分割、階層化することによって管理しているのです。サッカーで例えれば、トルシエ監督、日本の正ゴールキーパー楢崎、ダブルボランチ・稲本と戸田、ムードメーカー中山雅史、そしてサブの選手たち、それぞれに役割分担されて初めて日本代表として機能しています。プロトコルも同様に、分割、階層化されており、その通信プロトコルの国際標準モデルが、ISO(International
Organization for Standardization)が提唱する「OSI(Open
System Interconnection)参照モデル」です。OSI参照モデルはそれぞれの役割ごとに7つの階層にわかれており、各階層を独立して扱うことによって、機能の強化や修正を容易にし、柔軟性に富んだプロトコルの開発ができるように設計されているのです。
◎OSI7層モデル
上位層 |
第7層 |
アプリケーション層 |
アプリケーションに対応したプロトコル。 |
第6層 |
プレゼンテーション層 |
データの種類や送信ビット数に関する規定。具体的には、データを圧縮したり、暗号化したりする。 |
第5層 |
セッション層 |
通信モードや同期方式に関する規定。下位層との間に信頼できるリンクを提供し、同期やフロー制御を行う。 |
下位層 |
第4層 |
トランスポート層 |
送受信の確認やアプリケーションの識別に関する規定。 |
第3層 |
ネットワーク層 |
通信経路の選択や識別アドレスに関する規定。 |
第2層 |
データリンク層 |
通信路の確保やエラー訂正に関する規定。 |
第1層 |
物理層 |
物理的な回線や機器類、電気信号に関する規定。 |
|
さて、上の表をみるといかにも難しそうな構造をしていますが、各層の内容を分析していくとそれほど難しいものではないことに気がつくと思います。最上位層であるアプリケーション層では、ユーザーが利用する通信サービスが位置しており(メールクライアントソフトや、FTP、ブラウザなど)、最下位層の物理層ではLANボードや通信回線などに相当する物理的な媒体が位置しています。例えば、電子メールソフトでメールソフトをやり取りする場合を考えてみましょう。電子メールは、一見するとメールソフト同士が直接にやり取りをしているように見えるのですが、実際には上表の手順を踏んで、いろいろな取り決めごとに則して必要な情報が付加されていくことで、メールの送受信が行われています。このように階層を7層に分けることによって、ネットワークを構築するための複雑なプロトコルの関係がわかりやすくなりますし、トラブルが発生した際なども、どこでデータの流れが中断されているのかといった原因を突き止めやすくなっているのです。
■TCP/IPモデル
上記で説明したように、OSI参照モデルでは、7つの階層ごとにわかれています。TCP/IPもまた、階層化構造の概念にもとづいて機能ごとに役割分担して一連の処理をこなしています。TCP/IPプロトコルは、厳密にはOSI参照モデルのトランスポート層に相当するTCP、ネットワーク層に相当するIPの2層を中核とした多数の細かな取り決めごとの総称、すなわち「TCP/IPプロトコル群」によって構成されています。インターネット上のやりとりは、このTCPとIPを中心として行われているので、プロトコル全体も「TCP/IP」の名称で呼ばれるようになっているのです。TCP/IPモデルは以下の5階層に分かれており、それぞれのレイヤーには個々のプロトコルが存在し、その数は100種類以上にものぼります。
◎TCP/IPモデルとTCP/IPプロトコル群
TCP/IPモデル(5階層) |
|
TCP/IPプロトコル群 |
第5層 |
アプリケーション層 |
第4層 |
トランスポート層 |
第3層 |
インターネット層 |
第2層 |
データリンク層 |
第1層 |
物理層 |
|
|
HTTP、SMTP、POP、FTP、TELNET、DNS、DHCP、NTPなど |
TCP、UDP |
IP、ARP、RARP、ICMP |
PPP、LANボード |
回線、各種ケーブル |
|
|
■パケットの構造
データ通信の世界では、「パケット」(Packet)と呼ばれる制御情報を付加したデータの小さなまとまりの単位でデータを送受信するようになっています。コンピュータは0と1という2つのデータしか扱っていないので、いくら高画質な画像であっても、どんなに人を感動させる文章をタイピングしようとも、コンピュータの内部では0と1の羅列としてしか扱うことができません。このように0と1のデータしか扱うことができないのであれば、その細切れにしたデータをひとつのかたまりにすることもできます。この0と1のデータを適度な値でひとかたまりにしたものがパケットであり、このパケットを単位としてデータの送受信が行われているわけです。そして、データをパケットに分割して送受信する通信方式を
パケット通信と呼び、ネットワーク技術ではこのパケット通信がデータ転送の基礎となっています。どのようなデータであっても必ずパケットに分割されて社内ネットワークやインターネットを送受信されるのです。ただし、ひとつ注意しなければいけないことは、このパケットと呼ばれる名称で扱ってもよいのはネットワーク層で処理されているデータ形式のときだけです(以下後述)。
では、パケットは実際にどのような構造となっているのでしょうか?パケットには多くの場合、2つの情報が含まれており、ひとつはメールの文書やプログラム、画像といった実際のデータが格納された部分(
ユーザーデータ)と、もうひとつは、そのデータの宛先や送信元情報、エラーチェック情報といった管理用のデータが格納される部分(
ヘッダ情報)です。
◎パケットの構造
パケット自体は上記の図のような構造になっています。では、2台のコンピュータで電子メールを送受信するケースを考えてみます。コンピュータAがメールを送信すると、アプリケーション層で、データが発生し、トランスポート層でユーザーデータにヘッダ情報が付与され、インターネット層でさらに新たなヘッダ情報が追加され、下位の層へ行くにつれ、それぞれの層でヘッダ情報が付与されていきます。逆に、受信する側のコンピュータは、そのヘッダ情報を徐々に取り外して、最終的にコンピュータBに到着した時には目的となるデータの抽出を行うといった過程を踏んでいます。わかりやすくいうと、郵便小包みと同じで、特定の人に商品を贈る場合には、「包装紙」でくるんで、「宛名」と「「送り先」を書いて、郵便屋さんへ持っていきます。そして、郵便屋さんが相手の家へその商品を届けたあと、商品を受け取った人は、包装紙を徐々に取っていくわけです。ここでは、郵便屋さんがコンピュータでいう物理層に相当し、「包装紙」「宛名」「「送り先」などがそれぞれの層で付加されるヘッダ情報にあたるわけです。
このようにデータ通信時には、階層が異なると、それを新たな別の「データ」として扱う傾向があるために、これらのデータのかたまりは階層ごとに異なった名称で定義されています。つまり、全てのレイヤーでヘッダ情報とユーザーデータを組み合わせたものを「パケット」という名称で呼ぶわけではなく、それぞれの階層ごとに固有の呼び名があるのです。しかし、実際にはその呼び名の事を知らなかったり、あるいは混乱を避けるために敢えて全ての階層で取り扱われるデータ形式をまとめて「パケット」と呼ぶケースが多いようです。なお、各階層ごとの呼び名を以下に記しておきますので参考にしてください。
TCP/IPプロトコルモデル |
取り扱われるデータの単位(PDU) |
アプリケーション層 |
メッセージ |
|
トランスポート層 |
セグメント |
|
インターネット層 |
パケット/データグラム |
|
データリンク層 |
フレーム |
|
物理層 |
ビット(電気信号) |
|