TCP/IPを勉強したい

学部の授業で少しやったけどあまり明確に理解できなかったTCP/IP。でも知っときたいよね、ということでまず「プロトコル」と「OSI参照モデル」についてもう一度勉強しようと思いました。 正しく理解できているかはわかりませんが、ご容赦を。あと、文章だけで図が一切ないので文字を読むのが好きな人は読むのもよいのではないでしょうか。


プロトコルは「異なるコンピュータがネットワークを介して通信するために決められた約束事」であるとよく言われています。これは、
- 機種やOSに依存せずに
- ネットワークを介して通信を行うための
- 仕様
と解釈することができます。

例えば、企業が独自にプロトコルを作ったとしたらどうでしょう。もし異なる企業が作った機器同士を通信しようと思って機器同士を直接接続しても通信することができない、という事態が生じるかもしれません。

そこで、ISOさんは国際標準としてOSIと呼ばれる通信体系を標準化しました。プロトコルが標準化されてすべての機器がこのプロトコルに準拠すれば、どんな機器、どんなOSの間でも通信できますね。橘あいちゃんが持っているHPの13.3型のWindowsのノートパソコンと私の持っているiiyamaのUbuntuのノートパソコンはメーカーもOSも違うのに通信することができます。それも標準化されたプロトコルのおかげですね。

しかし、OSIプロトコルは普及しておらず、TCP/IPという通信プロトコルが普及しています。これは、TCP/IPは実装や実用性を主眼にしてモデル化されているからだそうです。でも、OSIプロトコルを設計する際の指針として提唱された「OSI参照モデル」は通信に必要な機能をうまくまとめていること、ネットワークプロトコルについて考えるときに引き合いに出されることから学ぶ価値はあります。


OSI参照モデルでは、プロトコルを階層化しています。階層構造において、「インタフェース」と「プロトコル」というものがあります。それぞれ
インタフェース
- 自分の第k+1層と第k層の間でやり取りをするための仕様
プロトコル
- 通信相手の同じ階層とやり取りをするための仕様
という意味です。

階層化には
- ネットワークプロトコルを単純化することができる
- 各階層は独立 → 階層の仕様変更の影響がシステム全体に波及しない
などのメリットがあります。この階層化はソフトウェア開発のモジュール化に相当しています。

つまり、各層の通信仕様をそれぞれ独立に作って、それらをつなぎ合わせることで通信を可能にするという考えをとっています。


ここからOSI参照モデルについて見ていきます。上から
アプリケーション層
- 利用するアプリケーションの中で通信に関係する部分を定める
プレゼンテーション層
- アプリケーションに固有のデータ表現形式をネットワークに共通のものに変換する
セッション層
- 送受信間における通信の接続を管理する
トランスポート層
- コネクション(データの流れる論理的な通信路)の確立や切断を行う
ネットワーク層
- アドレスの管理と経路選択
データリンク層
- ビット列を意味のある塊(フレーム)に分けて直接通信された機器に伝える
物理層
- ビット列と信号(電圧の高低や光の点滅)の変換を行い、物理媒体を通して情報伝送を行う
となっています。

次に、OSI参照モデルではどのように通信をモデル化しているのか、というところを見ていきます。なんとなく理解できたらいいかなと思っているので、各階層の細かい処理の内容は専門書に譲ることにします。私はこのあたりから理解できなくなってきました。

OSI参照モデルでは
- 送信側は上位層から下位層にデータが伝えられる
- 受信側は下位層から上位層にデータが伝えられる
というモデルになっています。つまり、送信側の実データはアプリケーション層からプレゼンテーション層...物理層というように伝えられ、物理層から物理媒体 → ルータ → 物理媒体 → 受信側と情報が伝えられ、受信側の物理層...アプリケーション層というように伝えられたデータを受け取るというような通信のモデル化をしています。

送信側では、各階層の処理のために『上位層から伝えられたデータに自分の階層の処理に必要な情報を付与する』ことをしています。この処理に必要な情報を『ヘッダ』といいます。いわばタグのようなものです。

受信側では、送信側が付与したヘッダと上位層に伝えるデータを分離し、データのみを上位層に渡すという処理を物理層から繰り返し行うことで最終的に元のデータに復元されます。

繰り返しますが、階層化によって処理が分割され、各階層ではそれぞれの役割が実行されています。例えば、データリンク層では1区間(送信側からルータまで、など)の通信を実現しますが、ネットワーク層は最終目的地までの通信を実現します。

OSIの階層化、何度読んでも細かい処理が分からなかったので、階層化という考え方と通信のモデルだけおさえることにしました。


後半はかなりガバガバでわかりにくいですが、ここまでをまとめると
- 通信プロトコルはどんなデバイス同士でも通信できるように定められた仕様
- モジュールを作ってそれぞれのモジュールはインタフェースでくっつける
- 送信側の上位層から下位層に伝わったデータが物理媒体を通じて送信側の下位層に届き、送信側は送信側がつけたヘッダを切り離すことで最上位層でデータを得る
という感じです。

テキストだけで図がなかったからかなりわかりにくいって読み返して思いました(そもそもテキストだけでこういう内容やるのは無茶である)。

気が向いたらまた書くかもしれません。

橘あい


この記事が気に入ったらサポートをしてみませんか?