blog

コンピュータネットワーク - レイヤー5プロトコルモデル

序文\nコンピュータネットワークのレビューの章では、もちろん、基本的なOSIモデルから開始することです、コンピュータネットワークの基礎について話を始めました。\nOSI - オープンシステムインターコ...

Jun 25, 2020 · 10 min. read
シェア

序文

コンピュータ・ネットワーキングの基礎といえば、基本的なOSIモデルから始めることが重要です。

OSI - Open Systems Interconnectionの略。

物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層。

各層の機能は、オープンシステム環境における相互接続性、相互運用性、アプリケーションの移植性を実現するために、このフレームワークの中でさらに詳しく説明されています。

送信者は最上位レイヤから順にデータを送信し、各レイヤはそのレイヤの最初の部分を追加し、場合によってはデータを処理することによって、上位レイヤによって処理されたデータを受信します。

一方、受信側は順序を逆にし、最初のレイヤーから始め、そのレイヤーの対応する最初の部分でデータの内容を分割し、上位のレイヤーに渡します。

先ほどのOSIモデルの7レイヤーや4レイヤーなど、インターネットのレイヤー分けにはいろいろな方法がありますが、理解を深めるためには、個人的には5レイヤーが理解しやすいのではないかと思います。

プロトコルモデルのレイヤー5

アプリケーション層/トランスポート層/ネットワーク層/リンク層/物理層

そして、レイヤーがいくつあっても、各レイヤーの目的は、実際には、ユーザーとサーバー間のデータ通信に追加することです。

これらの目的を達成するためには、ルールがありません。そこで、誰もが従わなければならないルールを策定する必要があります。これらのルールは、コンピュータネットワークに配置され、 プロトコルと呼ばれます。

とインターネットの各層は、プロトコルの多くを開発しているので、各層のコアに次の紹介は、実際には、この層の主なプロトコルを紹介することです。

では、各レイヤーにはどのようなプロトコルがあり、何をするのでしょうか?下から順に見ていきましょう。

物理層

コンピュータ同士をネットワークでつなぐために必要な知識とは?

光ファイバー/ケーブル/ツイストペア/電波など。

つまり、これらの必須事項が物理層を構成しているのです:

コンピュータネットワークを構成する物理的な手段で、ネットワークの電気的特性を定義し、主に電気信号0と1の伝送に使用されます。

リンク層

定義

物理的ハードウェアからの0 1信号波は前のレイヤから得られますが、単純な0 1では意味がないので、デコードルールを定義する必要があります。各信号ビットの意味は?

これがリンク層の機能のひとつです:

物理層の上に位置するリンク層は、0と1をどのようにグループ化するかを決定します。

イーサネット・プロトコル

そして、この定義されたグループ化は、イーサネット・プロトコルと呼ばれるプロトコルでもあります。

イーサネット・プロトコルは

電気信号のセットは、パケットを構成し、次のように呼ばれる。" "各フレームは2つの部分に分かれている。各フレームはヘッダーとデータの2つの部分に分かれている。
ヘッダ 送信者/受信者/データ・タイプなどのパケット記述オプションを含みます。 固定18バイト
データ 送信するパケットの詳細 最小46バイト、最大1500バイト

以上のルールから、フレームサイズは最小64バイト、最大1618バイトとなります。送信するデータが非常に大きい場合は、複数のフレームに分割して送信する必要があります。

フレーム構成のデータはすでに知られていますが、ではヘッダのデータはどうでしょうか?ヘッダには送信者と受信者の情報が含まれていると言いましたが、問題はこの情報がどのようにマークされているかということです。

MACアドレス

イーサネットでは、ネットワークに接続されるすべてのデバイスが「NIC」インターフェースを持つ必要があります。パケットはあるNICから別のNICに送信されなければなりません。

NICのアドレスはパケットを送受信するアドレスで、これをMACアドレスと呼びます。

MACアドレスの長さは2進数48桁で、通常は16進数12桁で表されます。

上の図に示すように、最初の6桁の16進数は製造元の番号で、最後の6桁は製造元のNICシリアル番号です。MACアドレスで、NICとパケットの送信元と宛先を特定できます。

アドレスがわかったところで、2つの質問について考えてみましょう:

  1. あるNICはどうやって他のNICのMACアドレスを知っているのでしょうか? イーサネットパケットは、送信する前に受信側のMACアドレスを知っている必要があります。
  2. 宛先のMACアドレスで、どのように正確にデータをレシーバーに送るのでしょうか?

2番目の質問に対しては、「ブロードキャスト」と呼ばれる非常に原始的な方法が使われます:

ブロードキャスト

イーサネット・プロトコルは、パケットを受信者に正確に送信する代わりに、ネットワーク内のすべてのコンピュータに送信し、各コンピュータに受信者かどうかを判断させます。

上図のように

コンピュータ1は、コンピュータ2にパケットを送信したい、送信した後、コンピュータ3 4 5も同じパケットを受信し、その後、コンピュータは、受信者のMACアドレスを見つけるためにパケットのヘッダを読み、自分のMACアドレスが一致し、同じことが処理のために受け入れられ、それ以外の場合は破棄されます。

このプロセスは次のように呼ばれます: ブロードキャスト

これらの要素で

  • パケットの定義
  • ネットワークカードの固有識別子
  • ネットワーク上でのデータ送信方法

リンク層は、複数のコンピュータ間でデータを転送することができます。

ネットワーク層

先ほど学んだように、リンク層のイーサネット・プロトコルはMACアドレスに基づいてデータを送信するので、理論的には、深センのNICはニューヨークのNICを見つけることができます!

しかし、何が問題なのでしょうか?

  1. 非効率:イーサネットがブロードキャストを使用してパケットを送信する場合、ネットワーク下のすべてのサブコンピューターがそれぞれ1つのパケットを持つことになり、非効率です。

  2. 制限:イーサネットがブロードキャストでパケットを送信する場合、送信されるデータは送信者のサブネットワークに限定されるため、2台のコンピュータが同じサブネットワークにない場合、ブロードキャストは届きません。

    インターネットは無数のサブネットワークからなる巨大なネットワークです。

そのため、解決しなければならない問題があり、ここでネットワーク・レイヤーの役割が発揮されます。

ネットワーク層:ネットワーク層の役割は、新しいアドレスセットを導入して、同じサブネットワークに属する異なるコンピュータを区別できるようにすることです。この一連のアドレスは「ネットワークアドレス」、略して「URL」と呼ばれます。

つまり、「ネットワークレイヤー」の登場以降、各コンピュータはMACアドレスとネットワークアドレスの2種類のアドレスを持つことになります。この2つのアドレスには何の関連性もなく、MACアドレスはネットワークカードに、ネットワークアドレスは管理者によって割り当てられ、ランダムに組み合わされているだけです。

ネットワークアドレスは、コンピュータが置かれているサブネットワークを特定するのに役立ちます。

一方、MACアドレスは、そのサブネットワーク内の宛先NICにパケットを送ります。

したがって、ネットワークアドレスはMACアドレスの前に処理されなければならないことが論理的に推測できます。

ネットワーク・アドレスが存在するまでは、ネットワーク・アドレスをどう扱うか、ネットワーク・アドレスのルールは何か、という疑問が何度も生じます。

IPプロトコル

知りたい気持ちが強いので、教えます。

ネットワークアドレスを定義するプロトコルをIPプロトコルと呼びます!

そして、IPプロトコルで定義されたアドレスをIPアドレスと呼びます。

現在広く使われているIPプロトコルには2種類あります:

IPv4 32バイナリビット 192.168.20.99

11000000.10101000.10100000.01100110
IPv6

インターネット上のすべてのコンピュータにはIPアドレスが割り当てられています。このアドレスは2つの部分に分かれており、最初の部分はネットワークを表し、2番目の部分はホストを表しています。

以下はIPv4アドレスの例です:

たとえば、IPアドレス172.16.254.1は32ビットのアドレスで、最初の24ビットがネットワーク部分、最後の8ビットがホスト部分であるとします。同じサブネットワーク上のコンピュータは、IPアドレスの同じネットワーク部分を持つ必要があり、172.16.254.2は172.16.254.1と同じサブネットワーク上にあることを意味します。

しかし、問題はIPアドレスだけではネットワーク部分がわからないことです。172.16.254.1を例にとると、IPアドレスからは、ネットワーク部分が最初の24ビットなのか、最初の16ビットなのか、あるいは最初の28ビットなのかさえわかりません。

では、IPアドレスから2台のコンピュータが同じサブネットワークに属しているかどうかを判断するにはどうすればいいのでしょうか?これにはもう一つのパラメータ、サブネットマスクが必要です。

いわゆる「サブネットマスク」は、サブネットワークの特性を示すパラメータです。形式的にはIPアドレスと等価で、ネットワーク部分にすべて1、ホスト部分にすべて0を持つ32ビットの2進数です。

例えば、IPアドレス172.16.254.1の場合、ネットワーク部分が最初の24ビット、ホスト部分が最後の8ビットであることが分かっていれば、サブネットマスクは11111111.11111111.11111111.00000000となり、10進数では255.255.255.0と表記されます。

サブネットマスクを知っていれば、2つのIPアドレスが同じサブネットにあるかどうかを判断できます。その方法は、2つのIPアドレスをサブネットマスクでANDし、その結果が同じかどうかを比較します。

例として、IPアドレス172.16.254.1と172.16.254.233のサブネットマスクは255.255.255.0です。両方のサブネットマスクをANDすると172.16.254.0になるので、同じサブネットにあります。

つまり、ここで結論が出ます。

IPプロトコルの主な機能は2つあります:

1.各コンピュータにIPアドレスを割り当てること 2.どのアドレスが同じサブネットワーク上にあるかを判断すること。

IPパケット

IPプロトコルで送信されるデータはIPパケットと呼ばれます。そのため、IPアドレス情報をパケットに含める必要があります。

しかし、前述したようにイーサネットのパケットにはMACアドレスしか含まれておらず、IPアドレスのフィールドはありません。データ定義を変更して別のフィールドを追加する必要がありますか?

答えはノーです。IPパケットをイーサネットパケットの "data "部分に直接入れることができるので、イーサネットの仕様を変更する必要は全くありません。

これはインターネットの階層構造の利点であり、上位層の変更は下位層の構造に全く影響を与えません。

具体的には、IPパケットも「ヘッダー」と「データ」の部分に分かれています。

ヘッダー」部分には、バージョン、長さ、IPアドレスなどの情報が含まれます。これをイーサネットパケットに入れると、イーサネットパケットは次のようになります。

ARPプロトコル

IPパケットはイーサネットパケットで送信されるため、相手のMACアドレスとIPアドレスの2つのアドレスを同時に知る必要があります。

通常、相手のIPアドレスは知られていますが、MACアドレスは知られていません。

そのため、IPアドレスからMACアドレスを取得できる仕組みが必要です。

この仕組みは2通りの対応が必要です:

  1. 2つのホストが同じサブネットワーク上にない場合

    この場合、実際にはもう一方のホストのMACアドレスを取得する方法はないので、パケットは2つのサブネット間の接続にある「ゲートウェイ」に送られ、ゲートウェイがパケットを処理します。

  2. 同じサブネットワーク内の2つのホスト

    ARPプロトコルは、照会るホストのIPアドレスを含むパケットを送信し、もう一方のホストのMACアドレスフィールドに、それが「ブロードキャスト」アドレスであることを示すFF:FF:FF:FF:FF:FF:FFと記入します。サブネットワーク内のすべてのホストはこのパケットを受信し、IPアドレスを取り出し、自分のIPアドレスと比較します。もし同じであれば、自分のMACアドレスを相手のホストに報告して返信し、そうでなければパケットを破棄します。

ARPプロトコルを使えば、同じサブネットワークにいる他のホストのMACアドレスを取得し、そのパケットをどのホストにも送ることができます。

トランスポート層

リンク層とその前のネットワーク層では、MACアドレスとIPアドレスを取得することができ、この時点でインターネット上の任意の2つのホスト間で通信を確立することができます。

次に問題となるのは、同じホスト上にネットワークを利用する必要のあるプログラムが多数存在する場合です。例えば、オンラインで友人とチャットしながらウェブを閲覧している場合などです。インターネットからパケットが送信されたとき、それがウェブページの内容なのか、オンラインチャットの内容なのか、どうやって判断するのでしょうか?

つまり、どのプログラムがそのパケットを使用しているかを示すパラメータが必要なのです。このパラメータは「ポート」と呼ばれ、実際にはネットワークカードを使用する各プログラムの番号です。各パケットはホストコンピュータの特定のポートに送られ、異なるプログラムが必要なデータを取得できるようになっています。

ポート」は0から65535までの整数で、ちょうど16桁の2進数です。0から1023までのポートがシステムによって占有されているため、ユーザーは1023以上のポートしか使用できません。ウェブブラウジングでもオンラインチャットでも、アプリケーションはランダムにポートを選択し、サーバー上の対応するポートにコンタクトします。

トランスポート層

トランスポート層 - "ポート間 "通信を確立します。

対照的に、"ネットワーク層 "の機能は、"ホスト間 "の通信を確立することです。ホストとポートさえ特定できれば、プログラム同士の通信は可能です。そのため、Unixシステムではホスト+ポートを「ソケット」と呼んでいます。これを使えば、ネットワーク・アプリケーションを開発することができます。

そのため、ポート番号が必要な場合は、パケットにポート番号を入れ、新しいプロトコルが必要になります。

UDPプロトコル

UDPパケットも「ヘッダ」と「データ」の2つの部分で構成されています。

ヘッダ "の部分は主に送信ポートと受信ポートを定義し、"データ "の部分は具体的な内容です。

そして、UDPパケット全体がIPパケットの「データ」部分に入れられ、先ほど言ったようにIPパケットがイーサネットパケットに入れられるので、イーサネットパケット全体は以下のようになります:

UDPパケットはとてもシンプルで、「ヘッダ」部分は全部で8バイトしかなく、全長は65,535バイト以下です。

TCPプロトコル

UDPプロトコルの利点はシンプルで実装が簡単なことですが、欠点は信頼性が低いことで、一度パケットを送信すると、相手がそれを受信したかどうかを知る方法がありません。

この問題を解決し、ネットワークの信頼性を向上させるために、TCPプロトコルが誕生しました。TCPプロトコルは、UDPプロトコルに確認応答のメカニズムを追加したものと近似でき、送信されるパケットにはすべて確認応答が必要です。パケットを紛失した場合、確認応答がないため、送信者はパケットを再送する必要があることを知ることができます。

このように、TCPプロトコルはデータが失われないことを保証します。TCPプロトコルの欠点は、複雑な処理であること、実装が難しいこと、リソースを多く消費することです。

TCPパケットは、UDPパケットと同様に、IPパケットの「データ」部分に埋め込まれています。TCPパケットには長さの制限がなく、理論的には無制限にすることができますが、ネットワークの効率を確保するために、1つのTCPパケットを再度分割する必要がないように、TCPパケットの長さは通常、IPパケットの長さを超えません。

アプリケーション層

アプリケーション層はユーザーに最も近い層であり、トランスポート層からデータを受け取り、それを解釈します。しかし、異なるアプリケーションからのデータは非常に多様であるため、あらかじめフォーマットされていなければ、全く解釈することができません。アプリケーション層の役割は

アプリケーションのデータフォーマットの指定

例えば、TCPプロトコルは、電子メール、WWW、FTPなど、多種多様なアプリケーションにデータを配信することができます。

そのため、電子メールやWWW、FTPのデータ形式を規定するさまざまなプロトコルが存在するはずで、これらのアプリケーションプロトコルが「アプリケーション層」を構成しています。

この層のデータは、TCPパケットの「データ」部分に配置されます。したがって、イーサネットのパケットは次のようになります。

ここで、インターネットの5レイヤープロトコルモデル全体が終わり~~、次に詳細な解釈でより重要なプロトコルをいくつか~~。

Read next

Three.jsシェーダー

モデル行列には、ジオメトリの回転、平行移動、スケーリング変換が含まれます。シェーダコードを記述する際、モデル行列をプログラマが手動で宣言する必要はありません。Three.js のレンダラーが自動的に一様な mat4 を挿入します。

Jun 25, 2020 · 2 min read