コンピュータ ネットワークのチュートリアル – ネットワーク アプリケーションがインターネット上で通信する方法
ネットワーク アプリケーションは、コンピュータ ネットワークに参加するコンピュータ アプリケーションです。これらのアプリケーションは、ネットワークに接続することで相互に通信します。
たとえば、google.com にアクセスすると、ブラウザは、インターネットを利用して Google のコンピュータで実行されているネットワーク アプリケーションと対話するネットワーク アプリケーションとして機能します。
通常、この通信の仕組みは、アプリケーション開発者から離れて抽象化されています。
表面的には、この通信は、同じコンピューター上で実行されている 2 つのアプリケーション間のプロセス間通信のように見えるかもしれません。しかし、ネットワーク通信には別の課題があります。
たとえば、通信にはコンピューター時間で永遠にかかることがあります。光が地球を一周するには、0.1337 秒 (2 * 3.14 * 6400 / 30000) かかります。 1 GHz で動作する適度な CPU を想定すると、1 秒で 10^9 の演算を実行できます。
プロセス (同じマシン上で実行されている) が通信するのに、およそ 10^-7 - 10^-8 秒の数の操作が必要であるとします。これは、地球の反対側にあるコンピュータとの通信速度が 100 万倍も遅いことを意味します!
この記事では、特にインターネットを介して、ネットワーク アプリケーションがどのように相互に通信するかについて説明します。インターネットの概要については、この記事を参照してください。
コンピュータ ネットワークの概要
ネットワーク通信に関連する追加の複雑さは、そこにあるエンド システム (携帯電話、ラップトップ、Windows、Mac) の多様性です。この複雑さは、違いを抽象化し、プロトコルと呼ばれる統一されたルール セットを導入することで管理されます。 .
プロトコルは、ネットワーク アプリケーション間の通信の構成要素です。一般的なプロトコルには、HTTP、TCP、IP、SMTP などがあります。人間の言語 (英語など) が多様な人々の有意義なコミュニケーションを可能にするのと同様に、プロトコルはネットワーク コミュニケーションにおける同様のギャップを埋めます。
ネットワークに固有の規模と不確実性により、ネットワーク通信は困難です。
たとえば、リンクが詰まる可能性があり、その結果、パケットがドロップされます。複雑な問題を解決する 1 つの戦略は、問題を部分問題に分割し、部分問題を解決し、それらを組み合わせて元の問題を解決することです。
プロトコル スタックは、このアイデアを使用してネットワーク通信を解決します。
ピザを販売する Web サイトを構築しているとします。ユーザーが Web サイトを操作するとき、フロントエンドはバックエンド サーバーと通信する必要があります。データがフロントエンドからバックエンド サーバーにインターネット経由でどのように渡されるかを気にせずに、オンライン ピザ ストアの構築に専念できたらいいと思いませんか?
プロトコル スタックは、ネットワーク通信を処理します。アプリケーション (フロントエンド) は、アプリケーション層を使用して別のアプリケーション (バックエンド) と通信します。
アプリケーション層は、トランスポート層によって提供される「サービス」を使用して、ネットワークを介して情報を送信します。また、トランスポート層は、ネットワーク層によって提供されるサービスを使用して、サービス契約を履行します。
このように、上位層は下位層によって提供されるサービスを使用して、ネットワークを介して他のアプリケーションと通信します。物理層は、電気信号を運ぶワイヤを構成します。
本質的に、プロトコル スタックにはさまざまなレイヤーが含まれており、各レイヤーはより大きな問題の一部を解決することに重点を置いています。
プロトコルはサブ問題の解決策を記述し、プロトコル スタックという名前が付けられます。一般に、プロトコルは、次のような 2 つのエンティティ間の通信規則を定義します。
- リクエスト メッセージやレスポンス メッセージなどのメッセージの種類
- メッセージ内のフィールドなど、さまざまなメッセージ タイプの構文
- フィールドのセマンティクス、つまりフィールド内の情報の意味
- メッセージの送信と返信のタイミングと方法を決定するルール
プロトコル スタックを上から順に見ていきましょう。
アプリケーション層
ビジネス アプリケーションは、アプリケーション層を使用してネットワーク経由で通信します。たとえば、オンライン ピザ ストアでの注文は、アプリケーション層を使用して行われます。 HTTP は、バックエンド サーバーに情報を送信するための 1 つのオプションです。
アプリケーション層プロトコルは、異なるエンド システムで実行されているアプリケーションが互いにメッセージを渡す方法を定義します。通信のルール (プロトコル) に加えて、アプリケーションには、お互いを見つける方法、つまり、お互いにアドレス指定する方法も必要です。アプリケーションのアドレスは以下によって定義されます:
<オール>アプリケーションのアドレスはネットワーク上での ID を定義し、プロトコルは通信のルールを定義します。これらを合わせて、ソケット アドレス (プロトコル タイプ、IP アドレス、ポート番号) を形成します。
ソケット アプリケーション層とトランスポート層の間のインターフェースです。これはネットワークへのエントリ ポイントとして機能します。つまり、アプリケーションはソケットを介してネットワーク メッセージを送受信します。
要約すると、アプリケーションはアプリケーション層プロトコルを使用して相互に通信します。アプリケーション層は、トランスポート層によって提供されるサービスに依存して、エンド システム間でデータを渡します。 IP アドレスとポート番号のペアがアプリケーションを識別します。情報は、そのソケットを介してアプリケーションからネットワークに流れます。
HTTP を使用してインターネット上で通信する 2 つのアプリケーションの例を見てみましょう。
HTTP は、一般的なアプリケーション層プロトコルです。通信は、Web ブラウザーとアプリケーション サーバー (ilovecookies.com) の間で行われます。このアドレスを Web ブラウザーに入力すると、HTTP 要求メッセージがアプリケーション サーバーに送信されます。
このリクエスト メッセージに関するいくつかの注意事項:
- リクエストのタイプはGETです
- メッセージの送信先ホストは ilovecookies.com (ホスト名と呼ばれる人間が読める IP アドレスのバージョン) です
- ソース マシンは、特定の応答形式、言語などを受け入れます。
この構造は、2 つのアプリケーション間の通信規則を定義する HTTP の一部です。ホスト アプリケーションがこのメッセージを受信すると、応答メッセージで応答します。
応答メッセージには、ステータス コード (200)、コンテンツ タイプなどのプロトコル固有のデータと、HTML データ (収まるように切り捨てられています) が含まれていることがわかります。要求と応答のペアは、画面上に Web ページ (ilovecookies.com) を正常にレイアウトする 2 つのアプリケーション間のネットワーク通信を構成します。
トランスポート層
次に、プロトコル スタックを 1 レベル下って、トランスポート層がネットワーク通信にどのように役立つかを理解しましょう。
トランスポート層は論理を提供します 異なるホストで実行されているアプリケーション間の通信:アプリケーションの観点からは、2 つのホストが直接接続されているかのように見えます。トランスポート層によって提供される通信は論理的であり、物理的ではないことに注意してください。エンド ホスト間に直接リンクやワイヤはありません。
トランスポート層は、アプリケーション メッセージを小さなチャンクに変換し、ヘッダーを含むトランスポート メッセージに各部分をカプセル化し、そのチャンクをネットワーク層に渡します。
情報を細分化する理由は、ネットワークを効率的に利用するためです。インターネットは非常に広大であるため、複数の並列パスが 2 つのエンド ホスト間でデータを送信します。
たとえば、ニューヨークとスタンフォードの間を移動するには 2 つの経路が考えられます。インターネットは、この考えのやや極端なバージョンです。
パケットの相対的な順序付けは、チャンク化と効率的なネットワーク利用に関する自然な疑問です。チャンクは、受信ホストで同じ順序に戻す必要があります。受信側ホストのトランスポート層は、ピースを適切な順序でつなぎ合わせる役割を果たします。
トランスポート層には、その機能に関連する追加データも必要です。たとえば、チャンクに相対シーケンス番号を追加して、アプリケーション メッセージを元に戻します。
トランスポート層固有の情報のもう 1 つの例は、ポート番号です。受信ホストでは、宛先ポート番号はメッセージを正しいアプリケーションにルーティングするのに役立ちます。
インターネットでは、次の 2 つのトランスポート層プロトコルを利用できます:
- ユーザー データグラム プロトコル (UDP)
- 伝送制御プロトコル (TCP)
2 つのプロトコルは、アプリケーション層に提供するトランスポート サービスが若干異なります。
TCP | UDP |
---|---|
信頼できるデータ転送 | 信頼できないデータ転送 |
紛失または破損した情報は、再送信によって復元されます | 紛失または破損したデータを回復するメカニズムがない |
通信の信頼性を犠牲にして遅延が大きくなる | 信頼性の低い通信を犠牲にして低遅延 |
どのプロトコルを選択するかは、アプリケーションのサービス要件によって決まります。たとえば、支払いシステムには信頼性の高い通信 (TCP) が必要ですが、ビデオ ストリーミング サービスでは、より高速なストリーミング (UDP) のために一部の情報が失われても問題ない場合があります。
要約すると、トランスポート層はアプリケーション メッセージをチャンクに分割し、トランスポート層固有の情報を含むメッセージにカプセル化します。断片は受信側システムで正しい順序に戻されてメッセージが再作成され、ポート番号を使用して適切なアプリケーションに渡されます。
Web ブラウザとアプリケーション サーバー間の HTTP 通信の例を続けましょう。
右下のデコードされたバイトは、ブラウザがアプリケーション サーバーに対して行った HTTP GET 要求を表しています。 HTTP リクエストは、このパケットの TCP ペイロード フィールドとして表示されます。
さらに、パケットはシーケンス番号 1 の相対順序で最初に表示されます。また、Web ブラウザーのタブに関連付けられたポート番号 (65012) と、アプリケーション サーバーの宛先ポート番号 (80) も含まれています。
HTTP 応答からの最初の 2 つのパケット (57 の TCP パケット) がここに表示されます。両方の画像の右下に、HTTP 固有の情報と、Web ページ ilovecookies.com に対応する HTML が表示されています。
ポート番号やシーケンス番号など、トランスポート層固有の情報も確認できます。送信元と宛先のポート番号が、要求メッセージ パケットと比較して反転していることに注意してください。
ネットワーク層
トランスポート層とは対照的に、ネットワーク層は 2 つのエンド ホスト間の論理通信を提供します。トランスポート層サービスとネットワーク層サービスの微妙な違いに注意してください。
ネットワーク層は、トランスポート層からトランスポート パケットを受け取り、それをネットワーク パケットにカプセル化します。カプセル化は、ネットワーク層プロトコルの機能に固有の情報を追加するのに役立ちます。
ネットワーク層は、2 つのホスト間でデータを移動するためのベスト エフォート サービス (タイミング、相対的な順序付け、最終的な配信は保証されません) を提供します。ベストエフォート サービスは、TCP の背後にある動機です。ネットワーク層プロトコルは本質的に信頼できないため、TCP には信頼性の高いデータ転送を保証する追加のロジックが含まれています。
ネットワーク層は、送信ホストから受信ホストへのパケットの移動を担当します。エンド ホストに加えて、ネットワーク層プロトコルもルーターで実行されます 、ネットワークコアの一部。ルーターは、パケットの転送を担当するパケット交換デバイスです。
エンド ホスト 1 がパケットをエンド ホスト 2 に送信するとします。エンド ホスト 1 はパケットをルータに渡します。ルーターはネットワーク パケット内の情報を調べて、エンド ホスト 2 が接続されているリンク 2 でパケットを転送する必要があることを判断します。
すべてのルーターには、パケットの正しい転送リンクを解決するために、RAM に格納された (動的に構築された) 転送テーブルがあります。たとえば、上記のセットアップのルーティング テーブルは次のようになります。
住所 | リンク |
---|---|
192.168.1.1 | リンク 1 |
168.134.1.1 | リンク 2 |
172.158.1.2 | リンク 3 |
ルーターは、ネットワーク パケットからの情報 (宛先ホスト アドレス) を使用して、このテーブルにインデックス (ビット単位の XOR) を付けます。次のコマンドを実行すると、コンピューターでルーティング テーブルを表示できます。
Mac: netstat -nrf inet
Linux: netstat -nr
Windows: Get-NetRoute -AddressFamily IPv4
デフォルト ゲートウェイと呼ばれるルーティング テーブルの特定のエントリ、デフォルトまたは 0.0.0.0 に注意してください。どのエントリも宛先アドレスと一致しない場合、パケットはデフォルト ゲートウェイにルーティングされます。
インターネットには、パケットを転送して 2 つのエンド ホスト間の論理通信を可能にするこのようなデバイスが多数含まれています。
誰もがインターネット上でデータを運ぶルーターとワイヤを共有するため、ルーターには、送信パケットがルーターによって処理 (/転送) されるときに受信パケットを保持するキューが含まれます。キューがいっぱいになると、ネットワーク層プロトコルに信頼性がなくなり、トラフィックが増加するにつれてキューがいっぱいになる可能性があります。
インターネット ネットワーク プロトコルは、インターネット プロトコル (IP) と呼ばれます。インターネット ネットワーク層の主要コンポーネントは、
<オール>要約すると、ネットワーク層は 2 つのエンド ホスト間の論理通信を提供します。ネットワーク層プロトコルは、エンド ホストおよびルーターなどのネットワーク コア デバイスで実行されます。ルーターはネットワーク パケットを転送し、2 つのエンド ホスト間の論理通信を形成するのに役立ちます。
ilovecookies.com との通信の例を続けましょう。
Web ブラウザーが HTTP 要求メッセージ (アプリケーション層プロトコル) を作成し、それをトランスポート層に渡します。トランスポート層は、Web ブラウザー アプリケーションとサーバー アプリケーション (ilovecookies.com) 間のエンドツーエンド通信に TCP プロトコルを使用します。 ).
ネットワーク パケットが TCP パケットをカプセル化し、TCP パケットがアプリケーション パケットをカプセル化していることがわかります。緑で強調表示されたテキストはネットワーク パケットの内容を表し、黄色はトランスポート パケットを表し、GET で始まる残りのテキストはアプリケーション パケットです。
ネットワーク パケット フィールドは、その機能に関連しています。たとえば、ソース アドレスは私のマシンの IP アドレスであり、宛先アドレスは ilovecookies.com サーバー アドレスです。
パケットに含まれるカプセル化とレイヤー固有の情報は、ホストとホスト上で実行されているアプリケーション間の論理通信の概念にも関連しています。
たとえば、ネットワーク パケットにはエンド マシンの IP アドレスが含まれますが、トランスポート パケットにはポート番号のみが含まれます。トランスポート層はネットワーク層に依存して、エンド マシン間でデータを移動します。データが受信デバイスに到達すると、トランスポート層が引き継ぎ、トランスポート パケットに含まれるポート番号を使用して、パケットを正しいアプリケーションにルーティングします。
リンク層
これまで見てきた層と比較すると、リンク層の範囲はより狭く、エンド ツー エンド パスの個々のリンクを介してパケットを移動するサービスを提供します。
たとえば、リンクは赤い点線です (上の図を参照)。リンク層は、パス内の単一のリンクを介したネットワーク層パケットのノード間移動を可能にします。
リンク層プロトコルは以下を定義します:
- リンクの両端にあるノード間で交換されるパケットの形式
- それらのノードがパケットに対して実行したアクション
ネットワーク アダプタは、リンク層プロトコルを実装します。ネットワーク アダプタは、コンピュータがネットワークに接続して情報を交換できるようにする物理ハードウェアを構成します。
次のコマンドを実行して、コンピューターのネットワーク アダプターのリストを表示してみてください:
Mac: networksetup -listallhardwareports
Linux: lshw -class network -short
Windows: Get-NetAdapter -Name *
出力では、各デバイスに MAC アドレスと呼ばれるリンク層アドレスがあることがわかります。アダプタの ROM には、製造時に割り当てられた永続的な MAC アドレスが含まれています。各ノード (ホストとルーター) には、パスに沿ったリンク層アドレスがあります。
先ほど、デバイスの識別子でもある IP アドレスについて説明しました。この状況は、複数の識別子 (自宅住所と社会保障番号) を持つ場合に似ています。ノードが MAC アドレスとネットワーク層アドレスを持つ理由はいくつかあります。
- 異なる層のプロトコルは代用可能であると想定されています。たとえば、IPX はネットワーク層アドレスを使用しません。
- IP アドレスは RAM に保存され、アダプタが移動または電源投入されるたびに (つまり一時的に) 再構成されます。
- プロトコルで MAC アドレスが省略されているとします。アダプタは、受信した各パケットをプロトコル スタックに渡す必要があります。ネットワーク層は、IP アドレスの一致をチェックします。ただし、これを何度も行うと非効率になる可能性があります。割り込みは、高価なパケットを渡すのに役立ちます。
要約すると、レイヤーがネットワーク アーキテクチャの独立したビルディング ブロックであるためには、多くのレイヤーにそれぞれのアドレス指定スキームが必要です。
簡単に要約すると、これまでに 3 種類のアドレスに遭遇しました。
- アプリケーション層のホスト名 (ilovecookies.com)。これらは、DNS を使用して対応する IP アドレスに変換されます。
- ネットワーク層の IP アドレス
- リンク層の MAC アドレス
ホスト名から IP アドレスを解決するのに役立つドメイン ネーム システムと同様に、アドレス解決プロトコル (ARP) は、IP アドレスから (宛先) MAC アドレスを決定するのに役立ちます。
ARP は、IP アドレスから MAC アドレスへのマッピングを含むテーブルを RAM に作成します。プロトコルには、このテーブルを自動的に作成するための仕様 (特定のパケットなど) が含まれています。
ネットワーク層は、宛先ノードのパケットと MAC アドレス (ARP テーブルから) をリンク層に渡します。リンク層は、パケットをリンク層パケットにカプセル化し、リンクに沿って宛先ノードに移動します。
上記のセットアップで、ホスト 222.222.222.220 が別のホスト 222.222.222.222 にパケットを送信したいとします。ネットワーク層は ARP を使用して、対応する MAC アドレスを 49-BD-D2-C7-56-A2 として解決し、パケットと MAC アドレスをリンク層に渡します。リンク層は、2 つのホスト間のリンクを介してパケットを移動します。
次に、ホストが別のネットワーク上の別のホストにパケットを送信する必要がある、より複雑なシナリオを考えてみましょう。たとえば、私のコンピューターから ilovecookies.com へのパケットは、私のホーム ネットワークから別のネットワークへ移動します。
この写真で注目すべき点が2つあります。まず、ルーターには 2 つの IP アドレスがあります。ルーターは 2 つの異なるネットワークに参加しているため、それぞれのネットワークでルーターを識別するために 2 つの IP アドレスが必要です。詳細については、こちらをご覧ください。
第 2 に、2 つの別個のネットワークはサブネットと呼ばれます。サブネットは、ネットワーク デバイス管理をよりアクセスしやすくするネットワーク デバイスの論理グループです。
このセットアップで、ホスト 222.222.222.222 がホスト 111.111.111.111 にパケットを送信する必要があるとします。これには、クロスネットワーク トリップが含まれます。サブネット内の宛先ホスト (111.111.111.111) を特定せず、パケットをデフォルト ゲートウェイ (ルーター) に転送します。
ネットワーク層は ARP テーブルを使用して、MAC アドレスを 88-B2-2F-54-1A-0F として解決します。ルーターは、ルーティング テーブルを使用して、他のサブネットに接続しているリンクにパケットを配信します。ここでも、ARP テーブルは宛先ホストの MAC アドレスの解決に役立ち、パケットはリンクに沿って移動します。
要約すると、コンピューター ハードウェアのアダプター部分は、リンク層プロトコルを実装します。リンク層プロトコルは MAC アドレスと呼ばれるアドレッシング方式を定義し、ARP は IP アドレスを MAC アドレスにマッピングするために使用されます。リンク層は、ネットワーク層のパケットをカプセル化し、それらをリンク上で移動します。
一般的なリンク層プロトコルの 1 つにイーサネットがあります。例 (ilovecookies.com) を続けて、実際のイーサネット プロトコルを調べてみましょう。
イーサネット パケットには宛先と送信元の MAC アドレス (省略) が含まれており、IP パケットがカプセル化されていることがわかります。
まとめ
以下の図を使用して、この記事で見たことを要約しましょう。
2 つの異なるシステム (ホストと呼ばれる) で実行されているコンピューター アプリケーションは、プロトコルを使用して通信します。
プロトコルは、2 つのホスト間の通信を管理する規則です。プロトコル スタックは、ネットワーク通信の問題を解決するために、複数のサブ問題を解決します。各層は、抽象化階層の下位層によって提供されるサービスを使用して下位の問題を解決することに重点を置いています。
アプリケーション層プロトコルは、最高レベルの抽象化で機能します。アプリケーションは、アプリケーション プロトコル (HTTP など) の規則に準拠したメッセージを送信することによって通信します。
DNS は、ホスト名 (www.ilovecookies.com) を IP アドレスにマップするために使用されます。これらのメッセージは、ソケット インターフェイスを介してプッシュされ、トランスポート層を使用してネットワーク経由で送信されます。
トランスポート層は、異なるホストで実行されている 2 つのアプリケーション間の論理通信を公開します。アプリケーション メッセージを小さな断片に分割し、追加情報 (ヘッダー) を含むパケットにカプセル化します。
アプリケーション メッセージはこれらのパケットから作成され、パケットのポート番号を使用してソケット インターフェイスを介してプッシュされます。これらのパケットは、ネットワーク層に依存してネットワーク経由で送信されます。
次に、ネットワーク層が引き継ぎ、2 つのホスト間の論理通信を提供します。また、トランスポート パケットをネットワーク パケットにカプセル化します。
インターネットには、RAM に格納され、ルーティング プロトコルを使用して動的に構築されたルーティング テーブルを使用して、ネットワーク パケットを転送するパケット交換デバイスが含まれています。ネットワーク層はリンク層に依存してパケットを移動します。
リンク層は、個々のリンクを介してパケットを移動する役割を果たします。アダプタと呼ばれるハードウェア デバイスは、リンク層プロトコルを実装し、MAC アドレスと呼ばれる永続的なアドレスが関連付けられています。 MAC アドレスは、この層の識別子として機能します。アドレス解決プロトコル (ARP) は、IP アドレスを MAC アドレスにマップします。
最後に、リンク層はパケットを物理層に渡します。物理層は、情報が移動するワイヤを構成します。
読んでくれてありがとう!今日、コンピュータ ネットワークについて何か新しいことを学んでいただければ幸いです。
ソース
コンピュータ ネットワーキング:トップダウン アプローチ、第 7 版コンピュータ ネットワーキング:トップダウン アプローチ、第 7 版 James F. Kurose、マサチューセッツ大学、アマースト Keith RossPearson Wireshark · 深く掘り下げます。-
インターネット経由で大容量のファイルを送信する方法
大きなファイルを送信するためのソリューションをお探しですか?ここでは、大きなファイルをオンラインで共有する優れた方法について説明します。 皆さんの誰もがメッセージに共感できると思います。ファイルが大きすぎます」、「送信しようとしているファイルは添付ファイルの上限である 25 MB を超えています」? 重要なファイルを送信しているときにこのメッセージが表示されると、イライラします。でも心配はいりません。この制限を無効にして、より大きなファイルをオンラインで送信する方法があります。 ここでは、大きなビデオや大きなファイルを誰にでも、どこにでも送信する最も簡単で効果的な方法について説明しま
-
KVM でブリッジ ネットワークをセットアップする方法 - チュートリアル
よし、これで、あなたは KVM にかなり精通したことになります。基本的な紹介と中間のセットアップと使用、ネットワークとストレージの構成、VirtualBox と一緒に KVM をセットアップするなど、いくつかのチュートリアルがありました。次の論理的なステップは、ポートを転送する必要がある場合に備えて、仮想マシンに使用可能な外部 IP アドレスを与えることができるように、ブリッジ ネットワークについて学習することです。 今日お見せする内容は、他のほとんどのチュートリアルで見たものとは少し異なります。つまり、他のチュートリアルで見た可能性のある力ずくのアプローチを回避しようとします。仮想マシン