tl; dr多くの異なるデバイスが複数のOSIレベルに遭遇する可能性があります。レイヤー7プロトコル(HTTPなど)から何かを要求しているエンドポイントは、ワイヤーに配置する前に7つのレイヤーすべてを使用します。ルーターやスイッチなどの中間ノードは最初の3レイヤーまでしか使用しない場合があり、ファイアウォールまたはWANアクセラレーターはレイヤー4に影響を与える可能性があり、ロードバランサーも興味深いことを行います。
より詳細な回答に興味がある場合は、以下をご覧ください。私はそれをかなりシンプルに保つために(?)試し、実際の例を使用しました。
参考のために:
OSIモデル
出典:TCP / IPガイド
データをカプセル化するレイヤーは、データを生成するものによって異なります。一般に、カプセル化解除は、ネットワーク内のデータの現在の場所に関連するもの(ルーター上、ホスト上など)に対してのみ発生します。
つまり、私がルーターの場合、レイヤー3経由でトラフィックをルーティングするだけであれば、このパケットにHTTPリクエストが埋め込まれていてもかまいません。必要なものを手に入れ、仕事をして、次のパケットに進みます。
私たちは皆、何らかの方法で毎日インターネットを使用しているため、OSIモデルを考慮した典型的なHTTPリクエストは次のようになります。簡単にするために、ネットワークが利用可能であり、問題がないと想定できます。
- ブラウザに「http://google.com」と入力し、Enter キーを押します。
- [レイヤー7] PC /サーバーは、指定されたWebサーバーに送信するためのHTTP GETリクエストを生成します。この場合は、google.comについて話しています。上を見ると、「データ」と見なされるGETリクエストがあります。HTTPはレイヤー7プロトコルです。そのヘッダーを追加します。このレイヤーでは他に何もする必要がないため、レイヤー6に渡します。
- [レイヤー6]レイヤー6はデータのフォーマット方法と考えることができます。Webサイトの場合、ここでは実際には何も起こりませんが、管理者/開発者/エンジニアは、必要に応じてこれを行うことができます。PC /サーバーは、レイヤー7(HTTP)ヘッダーの上にヘッダーを追加し、それをレイヤー5に送信します。
- [レイヤー5]この時点で、PC /サーバーはWebサーバーに接続しようとしていることを認識しているため、アプリケーション全体が理解できる形式でこの要求を行う必要があります。これには、アプリケーションプログラムインターフェイス(API)を使用します。 。これは、アプリケーションセッションを管理するものです。これにより、Webサーバーは、データの一部である「ストリーム」を認識します。レイヤー5ヘッダーを追加して、レイヤー4に渡します。
- [レイヤー4]ネットワークエンジニアはすべてのデータに関心を持っていますが、ここからデータが特定され始めます。レイヤー4はトランスポートレイヤーです。ここでは、データがどのようにそこに到達するかを決定します。パスではなく、その方法(TCPまたはUDP)を決定します。この場合、PC /サーバーはWebサーバーとの接続を確立する必要があります。簡単にするためにいくつかスキップしますが、ここで典型的なTCP 3ウェイハンドシェイクが発生します。TCPヘッダーに現在あるものをカプセル化します。これには、送信元と宛先のポート番号、シーケンス番号と確認応答番号、TCPウィンドウ情報などが含まれます。
- [レイヤー3]ここに、私たちエンジニアが本当に気にしているもう1つのレイヤー、ネットワークレイヤーがあります。これは、パケットが宛先にアドレス指定される場所であり、ネットワーク上の場所に到達するにはIPアドレスが必要です。PC /サーバーは、送信元と宛先のIPアドレスを追加します。パケットが正しい宛先に到達するだけでなく、そのエンドポイントは、あらゆる種類のデータを送信する必要があるときに、送信元IPアドレスを使用してパケットを送信します。さて、ここで注意すべき点は、PC /サーバーでさえ複数のインターフェースを持つことができるので、正しい場所にデータを送信する必要があるということです。私たちのPC /サーバーは、ルーターと同じようにルーティングテーブルを持ちます。通常、ある種のホストの場合、パケットは宛先にどのように到達するかを知っていることを期待して、デフォルトゲートウェイにルーティングされます。そのIPヘッダーを追加して、データリンク層に渡します。
- [レイヤー2]私たちのPC /サーバーのネットワークインターフェイスカード(NIC)は、それ自体ではIPを話す方法を認識していないため、メディアアクセス制御(MAC)アドレスを使用してデータを移動します。PC /サーバーには、到達可能なIPごとにARPエントリーがあるため、この場合、デフォルトゲートウェイのエントリーがあります。ゲートウェイのIPアドレスは、宛先MACアドレスに関連付けられます。それでは、宛先MACアドレスにL2ヘッダーを追加しましょう。このヘッダーには、送信元としてPC /サーバーNICのMACアドレスも含まれています。これで、そのデータをビットとしてネットワークに送信するために必要なものがすべて揃いました。
- [レイヤー1]質問でおっしゃったように、これはデータがネットワーク上を流れる場所で、生の1と0が表示されます。これでレイヤー1ヘッダー自体はなくなりました。レイヤー2の図を見るとわかります。L7からL2までのすべてのヘッダーを持つ現在までのデータは、1と0に変換されます。
- これで、ビットがネットワーク上にあり、ゲートウェイルーターに到達します。この時点まで、PC /サーバーは、google.comのWebサーバーにバインドされたデータをカプセル化するすべての作業を実行しました。
- [レイヤ1]これで、ゲートウェイルータは1と0を受信します。ルーターのNIC(インターフェース)はそのデータを取得し、基本的に「これを読み取る方法がわかりません!」データを読み取ることができるように、それをレイヤー2に移動します。
- [レイヤー2]ゲートウェイルーターがL2フレームを検査します。「このMACから来たのはいいですね。宛先MACが私のMACアドレスに設定されているので、作業を続行できます。 L2ヘッダーのカプセル化を解除して、IPヘッダーを確認できるようにします(レイヤー3)。
- [レイヤー3]ゲートウェイルーターが送信元IPアドレスと宛先IPアドレスを調べます。「さて、あなたはこのソースから来ました。あなたの目的地はこのIPアドレスです。うーん、私はこのIPアドレスを所有していませんが、誰が持っているか知っています。」ルーティングテーブルで宛先IPアドレス(google.com)のルートを検索し、そのエントリを使用します。
- このすべての後、同じ一般的なプロセスが繰り返されます。パケットを送信するために必要なインターフェイスを確認し、そのインターフェイスのMACアドレスを使用して、ビットに変換して送信します。次のルーターも同じことを行います。一般に、これらのパケットは、最終的な宛先に到達したときにのみ、レイヤー7までストリップされます。前に述べたように、ルーターはパケットを宛先に送信することのみを考慮しているため、レイヤー3のみを考慮しているため、取得するために必要なもの以外に何かを見る必要はありません。その情報に。したがって、L1 / L2 / L3情報のみが表示されます。
- 最終的には、データが宛先のWebサーバーに到達すると、その時点で、データの外側のレイヤーがHTTPヘッダーまで完全に取り除かれ、Webサーバーが読み取り、その要求を処理するために必要なすべての処理が行われます。
注:他のものが典型的な動作を妨げる可能性があることを言及するのは公平です(ファイアウォール、NAT / PAT、ACLなど)しかし、理解するためにすべてのカプセル化とカプセル化解除が行われている場所を非常にしっかりと理解するのが最善です。それらがネットワークとトラフィックにどのように影響するか。