はじめに
文系の身からWebエンジニアとして働き初めて1年半。
最近はネットワークを学んでおこうという機運が高まっているのですが、その上でOSI基本参照モデルは避けて通れないとのこと。
以前に少し勉強はしたものの、依然としてなんとなくの理解しかできていなかったため、この機会にアウトプットを含めてアウトラインを学習してみることにしました。
OSI基本参照モデルの概要
その昔、各ベンダが独自のネットワークアーキテクチャに基づいた製品を作っていた時代には、異なるベンダの製品を組み合わせてネットワークを構築することができず、ユーザーにとっては大変不便な状況が続いていました、そんな中、異なるベンダの製品間でも問題なく自由に通信できる環境を整備するために、ISO(国際標準化機構)がOSI(開放型システム間相互接続)と呼ばれる通信体系を標準化しました。
その過程で、通信プロトコルを設計する際の指標としてOSI基本参照モデルが提唱されました。
これは通信に必要な機能を7つの階層に分割し、複雑なネットワークのプロトコルを単純化しようというものでした。
7つの階層
OSI参照モデルは7つの階層からなる通信モデルで、各階層は自分より下の階層から特定のサービスを受け取り、上位層にまたサービスを提供します。
各階層の名称は以下のようになっています。番号の若い方がより低い階層です。
階層 | 階層名 |
---|---|
7 | アプリケーション層 |
6 | プレゼンテーション層 |
5 | セッション層 |
4 | トランスポート層 |
3 | ネットワーク層 |
2 | データリンク層 |
1 | 物理層 |
OSI基本参照モデルにおいては、これらの階層に当てはまるモジュールをそれぞれ作成し、つなぎ合わせることで通信が可能になります。
また、各階層は完全に独立しているため、特定の階層のモジュールを変更しても影響はその階層のみにとどまります。つまり、変更に強く柔軟なネットワークシステムの構築が可能になるということです。
そして同時に、階層ごとの機能や責務範囲を切り分けて考えられるため、各階層のプロトコルの実装が行いやすくなるというメリットもあります。
ただ、OSI基本参照モデルは各階層の役割や責務範囲を定めている「ガイドライン」に過ぎず、実際のプロトコルやインターフェースの詳細を事細かに定めているわけではありません。
ですが多くのプロトコルの仕様などはこのモデルをベースに開発されているため、ネットワークの知識基礎としてOSI基本参照モデルを学ぶことには大きな意義があります。
各階層の役割
第7層:アプリケーション層
利用されるアプリケーションの通信に関する部分を定める階層で、メール送信(SMTP)、ファイルの転送(FTP)などを行うためのプロトコルはここに属します。
データの送信を行う際はここが起点となり、データに「宛先」や「データの内容」などを示すヘッダ(タグ)を付与して下位層に送り出します。
逆にデータの受信においてはここが終着点となり、データに付与されたヘッダを解析し、データの表示や保存、エラーの表示などアプリケーション固有の処理を行います。
第6層:プレゼンテーション層
アプリケーションが使用する情報を通信を行いやすいようなデータ形式に変更したり、下位層から渡ってきたデータを、上位層が処理できる形式に変換する役割を持ちます。
つまりは文字コードなどのデータの表現形式に責任を持つ層で、コンピュータやソフトウェア間のデータ表現形式の差異を解消する仕事を行なっています。
具体的には、ホスト固有の表現形式を一度「ネットワーク全体で統一された表現形式」へと変換し、その変換情報をデータのヘッダに追加する、といった処理になります。
データ受信の際には、ヘッダの情報からホストが解釈できる表現形式へとデータを再変換します。
第5層:セッション層
ネットワークの通信路としてのコネクションの確立と切断、転送データの分割箇所の設定など、データの転送に関する役割を持つ層です。
この階層ではデータの送り方(直列で送るか、並列で送るか)や手順、タイミング等が検討・決定され、その情報が上層から降りてきたデータにヘッダとして追加されます。
第4層:トランスポート層
送信先のアプリケーションに対して、確実にデータを送信する責任を持つ層です。
セッション層以上の階層では、データが相手に届いた際の処理や変換方法、データの送り方等が決められてヘッダに加えられてきましたが、実際にデータを送り出す機能はありませんでした。
実際のデータ送信に関する枠割というのは、ここトランスポート層以下4つの階層が担っています。
トランスポート層では、セッション層で定められた方法で相手とのコネクションを確立し、データ送信の準備が行われます。
また送信が完了した際のコネクションの切断も担当しています。
さらに、宛先にデータがきちんと届いたかどうかのチェックを行い、届いていなければ該当データの再送を行うなどのお節介を焼きます。
このように、宛先との論理的な通信手段を確保し、その信頼性を保証するのがトランスポート層の大事な役割になります。
そのために、送り出すデータにはそれをそれと識別するためのヘッダが付与されます。トランスポート層はここを使うことで届いたかどうかを監視し、再送の判断等をしているのです。
第3層:ネットワーク層
宛先実際にデータを届ける役割を持つ層です。
データの送信元と宛先との間には多くのネットワーク(経路)が存在していますが、どこをどう通ってデータを送るのか、といった判断がここネットワーク層で行われます。
宛先にデータを送信するには宛先の住所(IPアドレス、MACアドレス等)が必要となるため、経路情報と合わせて送信データのヘッダに付与し、次のデータリンク層へと送り出します。
第2層:データリンク層
物理層で繋がった2つのノード(PC)間の通信を可能にする役割を持ち、0と1からなる数列を、意味のある塊(フレーム)として分割してデータの送信先に伝える役割を持ちます。
ネットワーク層が最終目的地となるデータの送信先までの責任を負っているのに対し、データリンク層はその中の1区間のデータ配送についてのみ責任を負っています。
第1層:物理層
0と1からなるビット列を、電圧の高低や光の点滅に変換したり、その逆を行ったりします。
電圧や光パルスに変換された情報は、ネットワーク層で付与されたアドレス情報と一緒に物理的な通信媒体に流し込まれます。
まとめ
一通り見てきたわけですが、まだまだうわべだけの理解に止まっているため、引き続き学習を続けていきたいと思います。