前言#
コンピュータは私たちが最も馴染みのあるツールです。地球上にはたくさんのコンピュータがありますが、それらの 2 つのコンピュータはどのようにして情報をやり取りしているのでしょうか?
多くの人はおそらく、それはコンピュータの 5 層モデルのおかげだと言うでしょうが、それらの役割を知っていますか?
以下がその 5 層モデルです
正直言って、この 5 層モデルは非常に複雑ですが、今日は最も簡潔な言葉で 2 つのコンピュータがどのように通信するかを説明します。コンピュータネットワークを学んだことがなくても理解できるでしょう。
1. 物理層#
1 つのコンピュータともう 1 つのコンピュータが通信するためには、もちろん 2 つのコンピュータを接続する必要があります
つまり、物理層は 2 つのコンピュータを接続し、高低の電圧を使用して 0 と 1 のような電気信号を伝送します。
2. データリンク層#
前述のように、物理層は単に 2 つのコンピュータを接続し、その間で電気信号を伝送するだけですが、この電気信号が規格に準拠していない場合、誰が理解できるでしょうか?
したがって、コンピュータが理解できるようにするためのルールが必要であり、それがイーサネットプロトコルです。
2.1. イーサネットプロトコル#
イーサネットプロトコルでは、一連の電気信号はデータパケットであり、このデータパケットを「フレーム」と呼びます。各フレームにはヘッダ(Head)とデータ(Data)の 2 つの部分があります。
ヘッダ(Head) | データ(Data) |
---|
ヘッダには送信元と受信先の情報が格納されており、データには送信するデータが格納されています。
1 台のコンピュータのデータを物理層とデータリンク層を介して別のコンピュータに送信する場合、誰が誰に送信するのか、コンピュータ間でどのように区別するのか、一意の識別子が必要ですよね?
そこで、MAC アドレスが登場します。
2.2.MAC アドレス#
ネットワークに接続されたすべてのコンピュータにはネットワークインターフェースカードがあり、各ネットワークインターフェースカードには一意のアドレスである MAC アドレスがあります。コンピュータ間のデータ転送は、MAC アドレスを使用して一意に検索および転送されます。
2.3. ブロードキャストと ARP プロトコル#
2.3.1 ブロードキャスト
別の質問を考えてみましょう。コンピュータ A はコンピュータ B だけでなく、他のコンピュータにも接続されています。コンピュータ A はコンピュータ B の MAC アドレスを知っていますが、コンピュータ A はコンピュータ B がどのルートに分散されているかを知りません。この問題を解決するために、ブロードキャストが登場しました。
同じサブネット内では、A は B にデータパケットを送信し、このデータパケットには B の MAC アドレスが含まれています。送信時、A はブロードキャスト形式で送信され、このデータパケットを受信するのは B、C、D のすべてです。次に、データパケットを受信したコンピュータは、データパケットから MAC アドレスを取り出し、自身の MAC アドレスと比較します。一致する場合は、このデータパケットを受け入れます。一致しない場合は、このデータパケットを破棄します。
この方法は、あなたが遊んでいるとき、母親たちが子供たちを家に呼び戻すためにブロードキャストの形式で呼びかけるのと似ています。もしこの名前があなたのものなら、あなたはそれに応じるでしょうが、そうでない場合は無視します。
2.3.2ARP プロトコル
次に、先ほど説明が終わっていない部分を続けます。A が B の MAC アドレスをどのように知るのでしょうか?この時、ARP プロトコルが登場し、IP アドレスに関連する話になります。しかし、私たちは後で IP アドレスについて話す予定です。したがって、一旦置いておきましょう。ただし、ARP プロトコルが存在するということだけ覚えておいてください。これにより、サブネット内の他のコンピュータの MAC アドレスを知ることができます。
3. ネットワーク層#
先ほど「サブネット」という言葉を使いましたが、私たちがいるネットワークは無数のサブネットで構成されています。ブロードキャストは同じサブネット内でのみ行うことができます。
サブネットの区別について考えてみましょう。もしサブネットが存在しない場合、コンピュータ A がコンピュータ B にデータパケットをブロードキャストすると、他のすべてのコンピュータもこのデータパケットを受け取り、比較して破棄します。世界中にはたくさんのコンピュータがありますが、すべてのコンピュータが他のすべてのコンピュータのデータパケットを受け取ることができたら、大変ですよね。それでは破綻します。したがって、サブネットというものが生まれました。
では、MAC アドレスがどのサブネットに属しているかをどのように区別するのでしょうか?同じサブネットの場合、データを相手にブロードキャスト形式で送信し、同じサブネットでない場合はデータをゲートウェイに送信して転送させます。
この問題を解決するために、IP プロトコルが登場しました。
3.1IP プロトコル#
IP プロトコルは、その定義により、IP アドレスと呼ばれるアドレスを提供します。IP プロトコルには 2 つのバージョンがあります。IPv4 と IPv6 です。ただし、現在は主に IPv4 のバージョンを使用しています。ここでは IPv4 のバージョンのプロトコルについてのみ議論します。
ネットワークに接続されたすべてのコンピュータには IP アドレスがあります。IP アドレスは 2 つの部分に分かれており、前半がネットワーク部、後半がホスト部を表しています。ネットワーク部とホスト部のビット数は固定されていません。
では、問題が発生します。固定されていない場合、ネットワーク部が何ビット、ホスト部が何ビットであるかをどのように判断するのでしょうか?つまり、2 つの IP アドレスが同じサブネットにあるかどうかをどのように判断するのでしょうか?
これには、サブネットマスクというキーワードが関連してきます。
サブネットマスクは、IP アドレスと同様に 32 ビットのバイナリ数であり、ネットワーク部はすべて 1、ホスト部はすべて 0 と規定されています。
例えば:192.168.43.1 と 192.168.43.2、これらの IP アドレスのネットワーク部が 24 ビットで、ホスト部が 8 ビットである場合、それらのサブネットマスクは 11111111.11111111.11111111.00000000、つまり 255.255.255.0 です。
では、サブネットマスクを知ったら、IP アドレスが同じサブネットにあるかどうかをどのように判断するのでしょうか?各 IP アドレスとそのサブネットマスクを AND 演算し、結果を比較するだけです。比較結果が同じであれば、同じサブネットであることを意味し、そうでなければ同じサブネットではありません。
例えば、192.168.43.1 と 192.168.43.2 のサブネットマスクはどちらも 255.255.255.0 です。IP とサブネットマスクを AND 演算すると、両方が 192.168.43.0 になります。したがって、彼らは同じサブネットに存在します。
3.2ARP プロトコル#
先ほど説明が終わっていない部分を続けます。コンピュータ A がコンピュータ B にデータを送信する場合、ARP プロトコルを使用してコンピュータ B の MAC アドレスを取得できます。ARP プロトコルはどのように機能するのでしょうか?
例えば、コンピュータ A がコンピュータ B にデータを送信する場合、A はまだ B の MAC アドレスを知りません。そのため、A はサブネットのすべてのコンピュータに、受信者の IP アドレスを含むデータパケットを送信します。相手はこのデータパケットを受信すると、IP アドレスを取り出して自身と比較します。一致する場合は、自身の MAC アドレスを相手に返信します。一致しない場合は、このデータパケットを破棄します。これにより、コンピュータ A はコンピュータ B の MAC アドレスを知ることができます。
3.3 DNS サーバー#
次に、もう一つの問題が発生します。受信者の IP アドレスをどのように知るのでしょうか?
特定のウェブサイトにアクセスしたい場合、IP を入力してアクセスすることもできますが、ほとんどの人はドメイン名を入力します。たとえば、百度にアクセスする場合、www.baidu.com というドメイン名を入力します。実際には、このドメイン名を入力すると、DNS サーバーと呼ばれるものがこのドメイン名を解析し、対応する IP を返してくれます。
したがって、ネットワーク層の機能は、広大な人々の中で他のコンピュータがどこにあるか、同じサブネットに属しているかどうかなどを見つけることができるようにすることです。
4. トランスポート層#
物理層、データリンク層、およびネットワーク層を介してデータを正常にコンピュータ A からコンピュータ B に送信することができましたが、コンピュータ B にはさまざまなアプリケーションがあります。コンピュータはこれらのデータが誰に向けられているのかをどのように知るのでしょうか?この時、** ポート(Port)** が登場します。つまり、コンピュータ A からコンピュータ B にデータを送信する際には、特定のポートを指定して特定のアプリケーションが受け取り処理できるようにする必要があります。
トランスポート層で最も一般的な 2 つのプロトコルは TCP プロトコルと UDP プロトコルです。そのうち、TCP プロトコルと UDP プロトコルの最大の違いは、TCP が信頼性のある転送を提供し、UDP が信頼性のない転送を提供することです。
つまり、トランスポート層の機能は、ポートからポートへの通信を確立することです。ネットワーク層の機能は、ホストからホストへの通信を確立することです。
5. アプリケーション層#
最後のレイヤーに到達しました。アプリケーション層は、ユーザーに最も近いレイヤーです。
トランスポート層から受け取ったデータはさまざまな形式であり、HTML 形式や MP4 形式などさまざまです。あなたはそれらを理解できる自信がありますか?
したがって、データの形式規則を指定し、受信後に解釈およびレンダリングできるようにする必要があります。たとえば、私たちが最も一般的に使用する HTTP データパケットでは、このデータパケットがどの形式のファイルであるかを指定します。