教養としてのネットワーク入門 - レイヤーごとのプロトコルを知る編

IT技術 教養としてのテクノロジー入門

以前エンジニア職じゃなくても理解したいネットワーク知識として以下の2種類の記事を投稿しました。

しかしながら、IT領域に携わる場合、エンジニア職でなくてもさらに深い技術知識が求められることも多々あると実感しています。

例えば以下の記事に書きましたがプロバイダ責任制限法の運用に関する課題を理解するにはレイヤー構造のプロトコルの関係を理解する必要があります。

この記事ではそのような背景を踏まえて、エンジニア職ではないかたでも理解したいネットワークにおけるレイヤー構造について解説したいと思います。

目次

おさらい

この記事は冒頭にご紹介した以下2記事の知識前提にしておりますが、最低限の知識をまずおさらいしたいと思います。

IPアドレスとポート番号2つの値を利用して通信する

インターネット上のクライアントとサーバの通信にあたっては、システムの居場所の情報であるIPアドレスと実際に送受信する「窓口」の情報であるポート番号を双方がもつことによって実現します。

クリックすると拡大できます

ルーターを中継して通信をおこなう

インターネット上のターゲットとなるサーバに直接クライアントが接続できているわけではありません。

ルーターという中継システムが各ネットワークを接続し、通信の仲介をすることで通信が実現されています。

クリックすると拡大できます

なお、ルーターにもIPアドレス・ポート番号が付与されており、ルーターとしての接続元・接続先情報を持っています。

ネットワークを辿っていくときこの点に注意することが必要です。

ここまでが最低限抑えたいおさらいでした。

ここからはこの各種中継を経て実現するインターネット通信を支える、レイヤーごとのプロトコル定義による役割分担をご紹介します。

OSI参照モデルによるレイヤーごとのプロトコル設定による役割分担

通信にあたってはさまざまな「プロトコル」という開発者間での仕様設定の約束事があります。
この約束事によって、メーカーやソフトウェアが全く異なるシステムであっても正しく通信ができる仕組みになっています。

プロトコルはさまざまな種類があり主にレイヤーで分類されています。以下はOSI参照モデルというレイヤーの関係を表した図です。

クリックすると拡大できます

ここまで述べてきたIPアドレスやポート番号もプロトコルの一種です。レイヤー4の通信層のプロトコルに所属しています。

プロトコルがレイヤーに分かれることのメリットとして、各開発者が担当するレイヤーのプロトコルだけを覚えて開発すれば良いというメリットがあります。上の図の右が一般的な各レイヤーの担当開発者です。

今回、この記事を執筆する私も、すべてのレイヤーのプロトコルに詳しいわけではありません。ある程度詳しく知っているものはレイヤー4以上が限界です。もちろんレイヤー4以上もスペシャリストを自負できるほどでもありません。そのほかのレイヤーについては一般教養程度にとどまっております。

レイヤーごとの通信の仕組み

いきなりレイヤーといわれてもピンとくる人は少ないと思うので実際に図で通信のイメージをしてみましょう。

下の図はとあるクライアントアプリケーションがサーバのアプリケーションに通信するまでの図です。

クリックすると拡大できます

上の図からあるように、一般的にアプリケーション部分で通信するときはそのアプリケーションが通信をするにあたってサーバに渡したい最低限のデータしか作成しません。

それをアプリケーションを動かすベースとなるミドルウェアレイヤーが受け取り、ミドルウェア処理上で必要なデータをさらに付与していき、さらにOSレイヤーがデータを付与して、ルーターに渡すという仕組みをとっています。

ルーターにおいてはOSレイヤーのデータは次のルーターに渡すためにデータを入れ替えますが、ミドルウェアレイヤー以上のデータには干渉せずそのまま渡します。

このようにしてカプセル構造のデータ処理を実現することで、各レイヤーのエンジニアはそのレイヤーの通信プロトコルの処理に専念することができます。

これがレイヤーごとにプロトコルが定義される仕組みの強みです。

WEBチャットアプリの通信例

WEBチャットアプリで通信を行う例を見てみましょう。

クリックすると拡大できます

まずクライアントのアプリケーションレイヤーで、相手に届けたいテキストデータを作成します。

その後、ミドルウェアレイヤーでWEBチャットのWEB通信プロトコルであるHTTP通信に必要なメタデータを付与します。
HTTPの場合、ここでブラウザアプリケーションの情報であるUserAgent、ユーザー識別子が保管されたCookieなどの情報を付与します。

続いてOSが送信元のIPアドレスとポート番号を付与します。これでできたデータの塊をルーターに渡します。

渡されたルーターはミドルウェア層までつくられたデータは手を加えず、発信元のIPアドレスとポート番号だけをルーターのIPアドレスとポート番号に変えて次のルーターに渡します。

このようにして最終的にサーバに到着して、OSがIPアドレスとポート番号を受け取り、残りをミドルウェアに渡し、ミドルウェア側もミドルウェア側で必要なデータを取り出した後、残りデータであるメッセージテキストをアプリケーションに渡して受信を完了します。

このようにしてレイヤーごとの通信プロトコルの役割分担を通じた通信が行われます。

なお、もしもアクセス元の情報が知りたい場合、IPアドレスやポート番号を辿ることが一般的ですが、OSレイヤーでサーバが受け取る情報ではあくまでルーターのIPアドレスしか取得できていないという点は注意が必要です。

もしもアクセス元の情報が知りたい場合は、さらにルーターに問い合わせてIPアドレスを辿っていくか、上位プロトコルの情報をもとに調べる必要があります。

たとえばミドルウェアレイヤーのHTTPのプロトコルにおける、Cookieにユーザー情報があればそのCookie情報を頼りにユーザー情報を把握したり、同じくHTTPプロトコルでよく使われるX-Forwarded-ForというHeaderデータを利用してIPアドレスのこれまでの経路を調べることで特定する必要があります。

さらに注意すべき点として、この構造の場合、アプリケーションレイヤーしか担当していない運営者の場合、自力で特定する術はほぼありません。

その際は、ミドルウェアレイヤーの担当者に問い合わせて特定してもらう必要があります。

同一会社であればまだコミュニケーションは楽ですが、下のレイヤーが他社であるとそのコミュニケーションが難しくなります。場合によっては他社のポリシーでそれ以降の問い合わせは拒否される可能性もあります。

レイヤーごとの通信プロトコル定義はこのように、システム開発と運用においては役割分担を便利にしますが、横断的な通信実態を調べる際には各々のレイヤーと情報連携をする必要がでてくるという弱点も存在します。

そのため、願わくば各レイヤーの業務専門のエンジニアであっても、教養として他のレイヤーの通信プロトコルの知識をある程度は持つことが望ましいと私個人は思っています。

TCP/IPプロトコルスイートとは

レイヤー構造の仕組みとしてまずOSI参照モデルをご紹介しました。

しかしながら実際のところ、OSI参照モデルのように細かくレイヤーを分けた状態で全ての通信プロトコルが作られているわけではありません。

プロトコルによっては複数レイヤーの処理をまとめて行なっているものもあります。

その都合上、特にインターネットの通信においてはTCP/IPプロトコルスイートというレイヤーのグルーピングがよく使われています。

以下がOSI参照モデルとの関係と、それぞれの担当エンジニアと代表プロトコルです。

クリックすると拡大できます

OSI参照モデルと同様、エンジニアでない方がもしもエンジニアとネットワークとコミュニケーションするときには、その人がどのレイヤーの担当をしているのかを把握して、その領域のプロトコルをある程度知っているとコミュニケーションがより円滑になると思います。ぜひ概要だけでも覚えてみてください。

参考文献

さらに詳細を知りたい方は情報処理技術者試験の本やネットワークの専門書をぜひ手に取ってみてください。

以下は代表的な本ですが、書店やネットを探せばたくさん存在します。よさそうというものをぜひ一冊購入してみることをお勧めします。

終わりに

最後まで読んでいただきありがとうございました。

ネットワークについてより深い理解を得られれば幸いです。

Photo by: Nicole De Khors on burst

 みやうデジタルラボ - にほんブログ村