Linux道場ネットワーク編
第2回プロトコルについて
はじめに
前回はネットワークの成り立ち、ルール(プロトコル)、接続形態について取り上げました。
今回はネットワークのルール、「プロトコル」について焦点を絞り、「TCP/IP」について取り上げます。
プロトコルとは?
「プロトコル」とは何でしょうか。前回、コンピュータ同士が接続して通信を行う為の「ルール」と説明しました。
そのルールは多く存在し、目的に応じて使用するルール(今後はプロトコルと表記)は異なります。
コンピュータ同士で通信を行なう場合、目的に応じて同じプロトコルを使用することにより通信(データの送受信)が行なえます。当然、コンピュータ間で異なるプロトコルを使用した場合、通信することができません。
これだけだと分かりにくいので、コンピュータ間での通信を人間同士の会話に例えてみます。
「日本人Aさん」は「日本語と英語が使える」、「イタリア人Bさん」は「イタリア語と英語が使える」とし、二人が会話をする場合を想定します。二人が会話を行なう時に「日本人Aさん」が「日本語」、「イタリア人Bさん」が「イタリア語」を使用した場合、使用する言語が異なるので理解することができません。(会話が成立しません)しかし、二人が共通して使える英語を使用して会話を行なった場合は理解することができます。(会話が成立します)このときの「会話」を「通信」、「言語」を「プロトコル」として捉えてください。人間が会話をするときに、使用する言語を統一しなければ理解できないのと同じく、コンピュータ同士で会話(通信)を行なう場合も言語(プロトコル)を統一しなければ理解できないのです。
言い換えれば、「プロトコル」とはコンピュータ同士が会話をする時の共通「言語」ともいえます。
(但し、目的(用途)に応じて使用する言語が異なります。)
図1.プロトコルを言語に例えた場合
様々なプロトコル
プロトコルの一例を表1に記します。表に挙げたプロトコルは「インターネット」(ホームページの閲覧)や「電子メール」の送受信をしたことがある人なら、(意識する・しないは別として)必ず一度は使用しています。
表1.プロトコルの一例
一例のなかで、使用していることが分かりやすいプロトコルは「HTTP」です。
「HTTP」は基本的にWebブラウザ(Internet ExplorerやMozilla Firefox)で、Webページを閲覧する時に使用します。
Webページを閲覧するときにブラウザに対象となる「アドレス」(URL)を入力しますが、先頭には(一般的に)「http」がつきます。これはWebサーバーとWebブラウザ間で「HTTP」を使用して通信を行なうことを意味しています。
「パケット」について
「TCP/IP」の前に、「パケット」について知っておく必要があります。「パケット」とはデータを細かく分割するときの単位です。
図3のようにコンピュータ同士でデータの送信を行なう場合、送信するデータを「パケット」単位で分割してから、その「パケット」を受信先に送信しています。送られたパケットは受信先で、元のデータへの再構築が行なわれます。
- ※パケットには「小包」という意味があります。また、データ分割する単位として「パケット」の他に「フレーム」、「セル」などがありますが、今回は「パケット」に統一して説明します。
図2.パケット送信
必ず出てくる「OSI参照モデル」と「TCP/IP」
「ネットワーク」、「プロトコル」を取り扱う場合、必ずといってよいほど「OSI参照モデル」と「TCP/IP」という単語が出てきます。簡単な説明として「OSI参照モデル」とは、複雑なプロトコルを分かりやすくするためにISO(国際標準化機構)が発表した参照モデルです。(OSI =「Open System Interconnection」、日本語では開放型システム間相互接続といいます。)
「TCP/IP」ですが、「TCP/IP」という一つのプロトコルではなく、「TCP」と「IP」という二つのプロトコルです。
しかし、「TCP/IP」、「TCP」、「IP」では言葉の使われ方で意味が異なるので注意が必要です。(詳しくは後述)
また、「OSI参照モデル」と「TCP/ IP」では「階層」という考え方が出てきます。
下記の表2は「階層」、「OSI参照モデル」、「TCP/IP階層モデル」、「主なプロトコル」、「処理」を纏めた一覧です。
表2をもとに「OSI参照モデル」と「TCP/IP」について説明をしていきます。
表2.OSI参照モデルとTCP/IP階層モデル
「OSI参照モデル」について
OSI参照モデルとはプロトコルを理解しやすくする為に機能別に7つの階層に分け単純化したモデルです。
コンピュータ同士の通信は、理論上7つの階層を介して行なわれており、その階層別に役割を持っていると理解してください。
表3.OSI参照モデル階層別の機能一覧
「TCP/IP」の歴史
「TCP/TP」は、アメリカ国防総省で軍事目的の研究開発の過程で誕生しました。コンピュータ通信は軍事技術の中で重要な位置を占めており、「パケット」通信方式の実用性を試験する「ARPNET」と呼ばれるネットワークが構築されました。
(「ARPNET」はインターネットの起源と言われています。)「TCP/IP」はこの「ARPNET」内の研究グループよって開発が行われ、バークレー版Unix(BSD)に実装されました。当時、BSD Unixが広く使われており、このOSに実装されたことで、「TCP/IP」が普及しました。(※「ARPNET」で使われていた「TCP/IP」と現在使われている「TCP/IP」ではプロトコル群に違いがあります。)
「TCP」について
「TCP/IP」について説明をする前に、「TCP」について説明します。「TCP」とは「Transmission Control Protocol」の略で伝送制御プロトコルと呼ばれます。順序制御や再送制御を行なう、信頼性のあるコネクション型(※後述参照)の参照プロトコルです。(他にもフロー制御(流量制御)やふくそう制御(ネットワークの混雑解消)などの機能も持ちます。)
「IP」について
「IP」とは「Internet Protocol」の略で、情報の伝達(パケットを配送するため)のプロトコルです。
「IP」はコネクションレス型(※後述参照)のプロトコルです。
「TCP/IP」について
「TCP/IP」は、確かに「TCP」と「IP」の二つのプロトコルをさしますが、「TCP/IP」として言葉を使う場合、「IP」を利用して通信を行うときに使われるプロトコル群(IP,ICMP,TCP,UDP,FTP,HTTP,NTP,SMTP,POP等)を総称して「TCP/IP」と呼びます。
「TCP/IP」はインターネットで標準的に使われるプロトコルの集まりです。
コネクション型とコネクションレス型について
「TCP」は「コネクション型」のプロトコル、「IP」はコネクションレス型のプロトコルと説明しましたが、データ送信には「コネクション型」と「コネクションレス型」の2種類があります。「コネクション型」は、データ送信前に送信元と受信先で通信確認(回線接続)を行い、受信先からの応答を確認してからデータの送信を開始します。データ送信中も受信先からの応答を確認し、終了時は切断処理を行ないます。対して「コネクションレス型」は通信確認を行わず、送信元が受信先に対して、一方的にデータの送信を行ないます。受信先の確認をしないので、受信先が存在しない場合でもデータの送信を行ないます。コネクション型に対してコネクションレス型はデータ送信の信頼性はありませんが、通信を行なうときの処理を単純化することができるので、転送速度が速くなります。コネクションレス型のプロトコルとして、「UDP」と「IP」があります。
「UDP」とは「User Datagram Protocol」の略で、信頼性のないコネクションレス型のトランスポート層のプロトコルです。
「TCP」に対して、「UDP」は転送速度が高く、信頼性が低いです。「UDP」は映像配信や音声配信を行なう時に使用されます。
(マルチキャスト複数のホスト(端末)に対しての一斉送信)やブロードキャスト(同一ネットワークの全ホスト(端末)に対しての一斉送信))を行なう場合もUDPが使われます。尚、1対1の通信はユニキャストといいます。)
図3.「TCP」と「UDP」によるパケット配送の違い
「TCP/IP階層モデル」について
TCP/IP階層モデルは、TCP/IPが開発され、標準化が行なわれる中、「プロトコルを実装する」ことを中心に考え出されたモデルです。「OSI参照モデル」から実装に向けて、第1階層と第2階層、第5階層から第7階層までが纏まっています。
「OSI参照モデル」でのコンピュータ同士の通信は理論上7つの階層に分かれて行なわれますが、実際に「TCP/IP」を使用した通信では、4つの階層に分かれて行なわれています。階層ごとに取り扱うプロトコルと処理(表2参照)が異なります。
「TCP/IPモデル」の各階層の機能と使用する主なプロトコル、処理について纏めた表を表4に示します。
アプリケーション層で使用するアプリケーションプロトコル(HTTP,FTPなど)はアプリケーションが、トランスポート層とインターネット層で使用するプロトコル(TCP,UDP,IPなど)はOSが、ネットワークインターフェース層で使用するプロトコル(PPP,物理的な接続)はハードウェアが処理を担当します。
プロトコル階層化は、各階層でそれぞれのプロトコルにしたがって処理を行なうことで、他の階層の処理が解らなくても一連の処理(通信)が行なえることにあります。また、階層ごとに処理が独立しているので、他の階層に影響されずに処理の単純化や機能追加が可能になります。プロトコルの階層化を「会社」に例えてみると(一般的な)会社は役割ごとに部門(部署)に別れています。部門に所属している人間は、その部門の業務を理解していれば、他の部門の業務を理解していなくても仕事が行なえます。部門ごとに別れているので、他の部門に影響されず、業務内容の単純化や新しい業務を追加することができます。部門を「階層」、部門に所属する人間を「プロトコル」として捉えてみてください。
表4. TCP/IP階層モデル
「ヘッダ」について
「TCP/IP」を利用して通信を行なう時、各階層ではデータに「ヘッダ」という情報を付加します。データは付加された「ヘッダ」の情報をもとに、送信先や送信先で引き渡すアプリケーションなどの判断を行ないます。
ヘッダとはデータに貼り付ける荷札だと思ってください。
図4はTCP/IP階層モデルでの通信例です。データの流れとしては、「送信元:アプリケーション層」→「送信元:トランスポート層」→「送信元:インターネット層」→「送信元:ネットワークインターフェース層」→「通信ケーブル」→「受信先:ネットワークインターフェース層」→「受信先:インターネット層」→「受信先:トランスポート層」→「受信先:アプケーション層」になります。
図4.TCP/IP階層モデルでの通信例
おわりに
ネットワークの根幹であるプロトコル(TCP/IP)について取り上げました。次回は実際にLinux OSを使用してネットワークに関連する用語とコマンドについて取り上げたいと思います。
コラム執筆/森谷 仁
マイクロテクノロジー株式会社 管理本部 情報システム室
〒101-0021
東京都千代田区外神田5-1-2末広ビル
TEL 03-3833-8080