背景
みなさまこんにちは、プレイライフの熊﨑です。
railsチュートリアル8章を見返していたときに、以下のような1文に出会いました。
セッションはHTTPプロトコルと階層が異なる(上の階層にある)ので、HTTPの特性とは別に(若干影響は受けるものの)接続を確保できます。
階層が違うってどういうこと??となったので、ここでまとめることにしました!
対象読書
- railsチュートリアルの8章をよんで、階層??となった方
- OSI参照モデルについてざっくりと理解したい方
OSI参照モデルとは
OSI参照モデルとは、コンピュータネットワークに求められる機能(通信機能)やルールを7階層の構造に分割し定義したものです。
OSI参照モデルの7つの階層
OSI参照モデルは下表のように7つの階層に分けられています。
層 | 名称 | 規格 | 概要 | 利用例 |
---|---|---|---|---|
7層 | アプリケーション層 | HTTP,FTP,DNS,SMTP,POPなど | 個々のアプリケーション | www,メール |
6層 | プレゼンテーション層 | SMTP,FTP,Telnetなど | データの表現形式 | HTML |
5層 | セッション層 | TLS,NetBIOSなど | 通信手段 | HTTPS |
4層 | トランスポート層 | TCP,UDP,NetWare/IPなど | エンド間の通信制御 | TCP,UDP |
3層 | ネットワーク層 | IP,ARP,RARP,ICMPなど | データを送る相手を決め最適な経路で送信 | IP |
2層 | データリンク層 | PPP,Ethernetなど | 隣接する機器同士の通信を実現 | Ethernet |
1層 | 物理層 | RS-232,UTP,無線 | 物理的な接続、電気信号 | UTPケーブル,光ファイバーケーブル |
第7層 アプリケーション層
利用者が使用するアプリケーションの通信ルールを決める。例えば、webサイトを閲覧する場合ならHTTP、メールを送るならSMTPと言ったように、決められています。
第6層 プレゼンテーション層
文字のコードや圧縮形式などをチェックし、データを共通の形に変換するのがプレゼンテーション層です。例えば文字化けや画像の表示ミスが起こらないように処理するのが、共通の形に変換するというプレゼンテーション層のひとつの仕事となります。異なるコンピューターでも同じ内容を表示できるようにサポートし、相互の意思疎通をさせることが役割です。
第5層 セッション層
連続する対話的な通信の開始や終了、同一性の維持などを行っています。アプリケーション間が連携して状態を共有し、一連の処理を一つのまとまり(セッション)として管理する機能を実現するもので、利用者の認証やログイン、ログアウトなどの状態管理を行っています。
例:
- 2者間の接続開始から終了までのルール
- 接続の維持や回復に関するルール
- 接続情報の管理に関するルール
などを定義しています。
第4層 トランスポート層
通信における信頼性を確保するのが、第4層のトランスポート層です。さまざまな制御を行って通信データに情報を付加し、通信を信頼できる形にします。
例:
- 確実な伝送orスピードどちらを優先するか?
- 異常があった時の対処に関するルール
などを定義しています。
第3層 ネットワーク層
通信相手が異なるネットワーク間にあってもデータのやり取りを可能とするのが、ネットワーク層の役割です。論理アドレスと呼ばれるIPアドレスを元にネットワークを識別し、転送に必要な情報を付け加えて定義します。
例:
- データの送信元と宛先の識別方法に関するルール
- 送信先から受け取り先までの経路選択の方法に関するルール
などを定義しています。
第2層 データリンク層
隣接する機器(ノード)間の通信に関するルールを規定する層。
例:
- データの送信元と、宛先の識別方法に関するルール
などを定義しています。
第1層 物理層
データを通信回線に送るのに必要な物理的な仕様を規定するのが、第1層の物理層です。コネクタの形状、ケーブルの種類、通信速度などの物理的な要素を決めることで、さまざまな機種同士でデータのやり取りが可能となります。
例:
- ケーブルの種類や長さに関するルール
- 通信速度、電気信号の符号化に関するルール
などを決めています。
実際に通信する際の流れ
コンピュータ間で通信する場合、送信側では7層〜1層の順番に処理を行っていきます。各層の規定通りに順番に処理されると、その処理した情報はヘッダとしてデータの前に付加されていきます。このように上位層の処理情報をヘッダとして下位層で包み込んでいくことをカプセル化といいます。そして、7層から順番に処理されていくと、1層の処理でデータが最終的に電気信号となって送信されます。
一方、受信側のコンピュータでは受信した電気信号を1層〜7層の順で処理していきます。1層では電気信号をビット列に変換してコンピュータ上に取り込んでいき、2層では2層のヘッダの情報に基づいて処理した上で2層のヘッダを取り外します。3層以降も同様に、ヘッダ情報に基づいて処理した上でヘッダをとりはずし、最終的には受信側のコンピュータのアプリケーション上でもとのデータを受け取れます。このように、下位層から上位層にいくにつれて各層のヘッダを取り外していくことを非カプセル化といいます。
HTTPとセッションの階層が違うことでどう影響があるのか?(個人的な見解)
今までの話からHTTPは第7層、セッションは第5層に存在することがわかったと思います。
しかし、冒頭にあった
セッションはHTTPプロトコルと階層が異なる(上の階層にある)ので、HTTPの特性とは別に(若干影響は受けるものの)接続を確保できます。
は結局どういうことだったのでしょうか??
階層が違うことにより、セッションとHTTPのデータは別のヘッダに存在することが考えられます。
そのため、HTTPの影響をほぼ受けずに、接続を確保できる。ということなのでしょうか?(こちらは個人的な見解ですので、理解が間違っている場合にはご指摘いただけますと幸いです。)
まとめ
- OSI参照モデルとは、コンピュータネットワークの通信機能に求められる仕様を7つの層に分けて定義されたものである。
- 実際に通信をする際には送信側では7〜1層の順番に処理を行い、その過程で上位層の処理情報をヘッダとしてデータの前につけていく。これをカプセル化と呼ぶ。
- 実際に通信をする際には受信側では1〜7層の順番に処理を行い、その過程でヘッダを取り外していく、これを非カプセル化と呼ぶ。非カプセル化することで、受信側のコンピュータでも元のデータを受け取れる。
参考文献
https://www.itmanage.co.jp/column/osi-reference-model/#anc002
https://www.infraexpert.com/study/networking3.html