プロトコルの基礎

プロトコルはコンピュータ同士の約束事

ビジネスで初対面同士があいさつする場合、「まず名刺交換して」「笑顔で握手」「雑談で場を暖めてから」「交渉スタート」といったように、ある程度の決まり事があるように、コンピュータ同士のやり取りにも決まり事があります。

言語が異なると会話が通じない

コンピュータ同士のやり取りは、人間同士のやり取りよりも明確に決まり事を決めています。
人間であれば、多少会話が噛み合わなくても、行間を読んで会話を成立させることができますが、コンピュータは良くも悪くも「空気を読む」ことはできないので、コンピュータ同士がまったく別の言語で通信を行ってしまうと、お互いがお互いの会話を理解することができず会話が成立しません。

このような決まり事や手順のことを「プロトコル」といいます。

プロトコル

コンピュータネットワークでは、メールを送るためのプロトコル、受け取るためのプロトコル、ファイルを送るためのプロトコルなど、様々な通信ごとに決まり事を事前に決めた上で通信を行っています。

階層構造を理解しよう

コンピュータ同士が通信するためには、様々な手順が必要になります。
この手順をルールとして決めたものがプロトコルだということは説明しました。そしてこのプロトコルは役割ごとに階層化されていて、階層ごとにそれぞれの仕事をこなすことで一連の通信が行われます。

この「階層化という定義」が通信プロトコルのやっかいな所であり、入門者の最初の壁になる方も多いようです。ではなぜこんな階層化という分かりにくい定義をしているのでしょうか?実はそこには非常に合理的で無駄のないシステムが存在します。

まずはプロトコルの動きについて、日常生活の一部分に置き換えて見てみましょう。
例えば電話をする場合、次のような動作をします。

電話する時のフロー

このように、電話で相手と会話をするという行為にもいくつかの手順が存在します。

これと同じように通信を行う場合にも手順が存在します。コンピュータネットワークでは、この手順を複数の階層に分けて定義しています。
標準化団体のISO(International Organization for Standardization)はコンピュータ通信する国際標準としてOSI参照モデルというアーキテクチャを推進しています。

OSI参照モデル

OSI参照モデルは、7つの層から構成されていて、各層ごとに明確な役割が規定されています。
OSIはOpen Systems Interconnectionの略で、異なるベンダー同士での相互接続性を確保するため、ISOによって決められたネットワークの階層構造のモデルです。プロトコルを機能別に7つの階層に分け、それぞれの階層で実現する機能を定義しています。

ネットワークエンジニアが議論をするときに、よくこのOSI参照モデルを基にして話をすることがあります。それぐらいネットワークエンジニアにとって重要で避けては通れない考え方になります。

各階層の役割

第7層 アプリケーション層

各アプリケーション(メールやWWWブラウザなど)に合わせて通信を行えるように定めている部分です。最上位層に位置するアプリケーション層はユーザが直接接する部分で、コンピュータなどが通信相手を識別しネットワーク経由で送受信を行うものです。PCで動作しているソフトを思い浮かべればわかりやすいでしょうか。

第6層 プレゼンテーション層

プレゼンテーション層では、上位層であるアプリケーション層にデータを提供するために情報の符号化や変換を行います。ASCIIコードやEBCDICコードに変換して文字として読み取れるようにします。その他、画像フォーマットでJPEGやPICT、動画フォーマットでMPEGなどを表現するのがこの第6層になります。

第5層 セッション層

セッション層は、その名の通り通信の開始から終了までの手順を決める層です。送信元が実際にデータを送る前に「これから送ります」と相手に伝えることで通信を始めることを知らせます。アプリケーション間で論理的な通信路(コネクション)を確立し、通信ができる状態にします。

第4層 トランスポート層

トランスポート層は、ノード間のプロセスの健全性の確保を行います。そのために通信が正常に相手に届いたかの確認やエラーのチェックなどを行い、エラーが発生した場合は再送や回復処理、フロー制御などを行ないます。トランスポート層では、通信をする相手にデータを確実に送る役割をしています。

第3層 ネットワーク層

ネットワーク層では、データリンク層以下のプロトコルを利用し、送信元から宛先へ到達するためのネットワークの経路を定義しています。ネットワーク層で使用されるプロトコルで、有名なのがIPとよばれるプロトコルです。様々なアクセス方式を使用していたデータリンク層同士の通信を可能にするのがネットワーク層です。

第2層 データリンク層

データリンク層では、物理層での0,1のビット列をフレームというデータの固まりに分割し上位層に伝える働きをします。おもに送信元及び宛先の物理アドレスや送信制御、フロー制御を定義しています。各ネットワークインターフェースカード(NIC)には固有のアドレスを持たなければなりません。このアドレスをMACアドレスと呼び、このMACアドレスはデータリンク層に属します。またデータリンク層では、簡単なエラー検出を行っていてデータの破損やエラーを防ぎます。

第1層 物理層

物理層では、メディアタイプ、コネクタタイプ、シグナリングタイプといった物理メディアを定義します。ケーブルの材質やコネクタの形状、ビット列と電気信号の相互変換といった方式を定めています。

OSI参照モデルの7階層のうち、7層、6層、5層を合わせて上位層と呼び、4層、3層、2層、1層を合わせて下位層と呼びます。

各プロトコルの役割は、ここで説明した各層ごとの役割を担っています。したがって該当のプロトコルが、OSI参照モデルのどの層にいるのかを知れば、そのプロトコルが何をするためのものなのかをある程度知ることができます。

階層化によるデータ処理

階層化という考え方はネットワークの世界だけでなく、現実世界でも多く取り入れられています。会社の組織を例に見てみましょう。

例えばここでA社の秘書が辞めてしまった場合を考えてみます。もちろん秘書は必要ですので、A社は新しい秘書を雇わなければいけません。新しく雇われた秘書は、秘書の業務だけを引き継ぐだけで他の部署のことを知らなくても対応できます。このように各部署ごとに役割分担が決まっていれば、たとえ他の部署の役割を理解していなくても一連の作業を行うことができます。

これが階層化するメリットです。「階層ごとに作業を独立させることができる」ことにより、他の階層に依存することなく新しい人を雇う、すなわち「新しい機能を追加する」ことや、「各階層の作業を単純化させる」といったことが可能になります。

OSI参照モデルを使ったデータの流れ

AさんがBさんへメールを出したときのデータの流れを見てみましょう。このときのOSI参照モデルの流れは送信側では第7層のアプリケーション層から順に下の層にデータが送られ、受信側では第1層の物理層から順に上の層にデータが送られます。これにより、データをアプリケーションからアプリケーションへ渡すことができます。

OSI参照モデルを使ったデータの流れ

各層の主要プロトコル

OSI参照モデル各層には、その層が役割を担うためにプロトコルが割り当てられています。各層の主要プロトコルは以下の通りです。

主要なプロトコル一覧

データのカプセル化

OSI参照モデルでのデータ通信は上位層から順番に「ヘッダ」と呼ばれる制御情報を付加していきます。ヘッダには送信元や宛先の情報などが入っています。

例えばコンピュータからメールを送信した場合、そのデータがトランスポート層まで降りてくると、ヘッダを付与して下位層のネットワーク層に渡します。ネットワーク層でも同じようにヘッダを付加し第2層のデータリンク層に渡します。データリンク層では受け取った“データの先頭と最後にヘッダを付加し、第1層の物理層に渡します。最後の物理層で転送のために“0”と“1”のパターンに符号化し電気信号としてケーブル上に流し情報を送ります。

このように各層でヘッダを付加してデータグラムにすることを「カプセル化」と呼びます。

データのカプセル化

相手に届いたデータは、第1層から順にヘッダを外して、第7層で生のデータとなりコンピュータに到着します。
この各層がヘッダを取り外していくプロセスを、「非カプセル化」と呼びます。

ここで重要なのは上位層から受け取ったデータは中身がWebのデータだろうが、メールのデータだろうが、ただのデータとしてしか認識しないという点です。常にヘッダ部分を確認して次の層に渡すという動きをします。

またデータリンク層では、ネットワーク層から受け取ったデータにイーサネットの仕様に従ったヘッダ情報の他に、トレーラを付与します。トレーラとは、相手のコンピュータが受信したときに、情報が伝送途中に壊れていないか確認するためのチェックコードのことです。

このように各層で取り扱うデータの集まりを、OSIモデルでは「PDU(Protocol Data Unit)」と呼びます。PDUは各層によって名称が下図のように変わっていきます。どの名称がどの層のPDUを指しているのかについては、しっかり覚えておきましょう。

PDUについて

ネットワークに流れるデータをキャプチャしてみる

階層化という考え方は、モデル化されているだけでなく、実際にネットワークに流れるデータにも実装されています。ネットワークに流れるデータをパケットキャプチャでキャプチャして確認してみると、階層化されていることが分かります。

パケットのキャプチャ

ネットワークに流れるデータが階層化されていることは、トラブルシューティング時にも役立ちます。トラブルの事象によって、どの階層が怪しいのかをある程度当たりを付けて、キャプチャしたデータからその階層部分を重点的にチェックすることで効率良くトラブルシューティングを行うことができます。
パケットキャプチャは現場でも必ず実施するので、使い方を身に付けておきましょう。

パケットキャプチャとは?

ネットワークエンジニアの仕事をしていると、必ずトラブルシューティングを行う場面があります。

「メールが遅れない」
「通信が不安定」
「Webが見れない」

各ネットワーク機器のログ等を見ても、特に障害の原因となるログは見当たらない。こんな障害が発生したときに、あなたならどのように対応しますか?

もしネットワーク上に流れる「生のパケット」を見ることができれば、Webが見れないという障害が発生した場合、パケットキャプチャツールでWeb閲覧のシーケンスを追いかけることで、実はDNSへの名前解決が出来ていなかったことを見つけることができるかもしれません。

このように、ネットワーク上に流れる「生のパケット」をすくい取り、表示するためのツールをパケットキャプチャツールと呼びます。

パケットキャプチャツール「Wireshark」をインストールしよう

Wiresharkは代表的なパケットキャプチャツールです。

誰でも無料でに使用することができることから、多くのエンジニアが愛用しており、動作検証や障害切り分け等に威力を発揮してくれます。

サポートOSはWindowsの他にMAC OS、UNIX系OSにも対応し、350以上のネットワークプロトコルをサポートしています。

その他、Wiresharkの主な機能は以下の通りです。

・他のキャプチャソフトでキャプチャしたファイルを解析可能
・パケットフィルタ機能
・TCPセッションのストリームの復元機能

Wiresharkは開発元のサイトに、各OSに対応したバイナリが用意されているので、バイナリをダウンロードします。

Wiresharkのダウンロード

Wiresharkのダウンロード

ダウンロードしたファイルを実行するとインストーラーが起動しますので、そのまま進めていけばインストールが終了します。

早速キャプチャしてみよう

Wiresharkを起動すると、キャプチャ実行画面が表示されますので、キャプチャしたいインターフェースをダブルクリックすることでキャプチャを実行できます。

Wiresharkのダウンロード

キャプチャを始めるとキャプチャしたパケットの一覧がウィンドウに表示されます。キャプチャはメニューアイコンの■ボタンを押すと止めることができます。

Wiresharkのダウンロード

各ウインドウの説明

Wiresharkのメインウインドウについて説明します。

Wiresharkのダウンロード

パケットリスト画面

キャプチャしたパケットの一覧がリスト形式で表示されます。デフォルトは時系列に昇順(古いものから順に)表示されています。時系列以外にも、送信元アドレス、宛先アドレス、プロトコルごとでソートさせることも可能です。

ツリービュー画面

パケットリスト画面で選択したパケットの中身をツリー状に表示してくれます。フレーム、データリンク層、ネットワーク層、データリンク層、そしてアプリケーション層を分離して、各フィールドのデータを分かりやすく表示してくれます。障害調査などで、パケットの中身を解析したい場合は、非常に重要な画面になります。

データビュー画面

パケットリスト画面で選択したパケットの中身を16進のダンプ形式で表示されます。ツリービュー画面でフィールドを選択すると、その箇所のデータが反転して表示されます。

関連記事