今では、ネットショッピングは私たちの生活にすっかり定着しています。
その仕組みについて考えたことはありますか。
今回は、ブラウザでネットショッピングをする場合を例に、その流れを詳しく見ていきましょう。
ブラウザで https://www.amazon.com/ を入力すると、これは単なる URL(ドメイン名) にすぎません. ブラウザはこの URL だけでは、どのサーバーにアクセスすればよいのかを判断できません. 実際に通信を行うためには、https://www.amazon.com/ に対応する IP アドレス(例:112.102.125.12) を取得する必要があります. このドメイン名と IP アドレスの対応関係を管理・保存している仕組みが DNS(Domain Name System) であり、いわばインターネット上の「住所録」です. そして、この住所録を参照して IP アドレスを問い合わせるための通信ルールが DNS プロトコル です. さらに、従来の DNS よりも高い精度で名前解決を行う仕組みとして、HTTPDNS という方式も存在し、名前解決の正確性を向上させることができます.
現在、アドレス帳を通じてすでにアドレスは分かっています.このアドレスは、現実世界で言えば「○○小区の○○棟の○○号室」のようなもので、この時点ではあくまで部屋番号(門牌号)そのものを指しているだけです.
ブラウザは宛先アドレスを把握すると、次にリクエストの送信を開始します.
現在、主流のブラウザでは、ほぼすべてのリクエストに HTTPS プロトコルが使用されています.
以前のブラウザでは、通常の閲覧リクエストには HTTP が使われ、
一方で、ここでいうショッピングのように暗号化が必要な場面では、HTTPS プロトコルが用いられることが一般的でした.
ユーザーがブラウザでリクエストを送信すると、一般的なユーザーの場合、しばらく待つとページに「注文成功」と表示され、支払いを促されます.支払いが完了すると、販売者は商品の準備をして発送し、ユーザーが商品を受け取った後に受け取り確認を行い、販売者は代金を受け取ります.これで一連の流れが完了します.しかし、ネットワークの観点から見ると、具体的な技術的な詳細があり、コンピュータネットワークのプロセスに関わります.ここで先ほど扱ったHTTP、HTTPS、DNSなどのプロトコルは、コンピュータネットワーク上ではアプリケーション層のプロトコルに分類されます.
ブラウザがリクエストを送信した後、ブラウザはアプリケーション層のリクエストを次の層へ転送します.ここでいう次の層とはトランスポート層のことです.トランスポート層には、TCPプロトコルとUDPプロトコルという二つの通信プロトコルがあります.そのうち、TCPはコネクション指向であり、UDPはコネクションレスです.現実世界では、トランスポート層における通信の多くはTCPを利用しています.今回のリクエストもTCPプロトコルを使用しています.なぜなら、TCPはリクエストが確実に宛先へ到達することを保証するからです.もし到達できなかった場合でも、TCPプロトコルは再送処理を行い、リクエストが確実に届くようにします.
TCPがこのリクエストを受け取ると、「どのようにしてこのリクエストを送信し、ECサイトに注文内容を伝えるべきか」を考えることになります.この一連の処理は、TCPプロトコルそのものが担っている役割です.TCPプロトコルには二つのインターフェースが存在し、通常、一つのTCP接続は一つのプロセス、またはスレッドに対応しています.ただし、ここではプロセスやスレッドの詳細を理解する必要はありません.一つのTCPが通信を行っていると考えれば十分でしょう.現在地から目的地へ移動する必要があるのと同様に、TCPではブラウザ側のポートとECサーバー側のポートが、それぞれ通信の起点と終点となります.
TCPはリクエストを受け取った後、そのリクエストをオペレーティングシステムに渡す必要があります.TCP自体はリクエストを送信することができず、リクエストはオペレーティングシステムのネットワーク層を経由して送信されます.TCPはパケットの組み立てを行った後、それをオペレーティングシステムのネットワーク層に渡し、ネットワーク層を通じてリクエストが送信されます.ネットワーク層がリクエストを受け取った後、そのリクエストをECサーバーに送信する必要があります.では、どのようにしてECサーバーのアドレスを知るのでしょうか.それは、事前にDNSプロトコルを通じて取得されているからです.ネットワーク層にはIPプロトコルがあり、IPプロトコルでは送信元IPアドレス、つまり注文を行った自分のコンピュータのIPアドレスと、送信先IPアドレス、つまりECサーバーのIPアドレスを設定する必要があります.
相手のアドレスが分かったあと、ではどのようにしてリクエストを送信すればよいのでしょうか.たとえば、Amazonで注文をすると、そのリクエストは遠く離れたAmazonのサーバーに送られ、途中で多くの経路を通過することになります.
まず、リクエストは自宅の端末から送信されますが、端末のOSは、宛先IPアドレスを見て、その通信が家庭内のものか、外部宛てのものかを判断します.
家庭内通信であれば、そのまま送信されますが、外部宛ての場合は家庭用ルーターを経由する必要があります.
そのため、OSは最初にルーターへリクエストを送りますが、ではOSはどのようにしてルーターの場所を知るのでしょうか.
実は、OSは家庭内のすべてのネットワーク機器に対して「誰がルーターか」をブロードキャストで問い合わせます.
一般的に、多くの家庭用ルーターの初期IPアドレスは192.168.1.1に設定されています.
ルーターはその問い合わせを受け取ると、自分がルーターであることを通知し、同時にMACアドレスをOSに伝えます.
IPアドレスは宛先を示しますが、実際の通信ではMACアドレスが必要です.
なぜなら、ルーターは第2層の機器であり、MACアドレスを持つフレームしか受信しないからです.
IPアドレスからMACアドレスを取得するための仕組みを、ARPプロトコルと呼び、この層をMAC層と言います.
要求が MAC 層に到達すると、この時点でその要求はローカルコンピュータのネットワークカード上にあります.
ネットワークカードはゲートウェイのアドレスを把握しているため、その要求をゲートウェイへ送信します.
ネットワークカードがパケットを送信すると、ゲートウェイはその要求を受信します.
ここで、次のような疑問を持つかもしれません.
ゲートウェイは、どのようにして要求をどこへ送れば、アマゾンの EC サーバーに到達できると判断しているのでしょうか.
ゲートウェイとは、私たちの家庭で使用しているルーターのことであり、これはルーター内部のルーティングテーブルによって実現されています.
ここから分かるように、家庭内のローカルネットワークでは、ネットワーク機器同士の通信にMACアドレスが使われている.
しかし、その要求を遠隔地、つまり広域ネットワークへ送信する場合は、IPアドレスを用いなければならない.
たとえば、アマゾンのECサーバーに要求を送るには、多くのルーターやゲートウェイを経由する必要がある.
途中のルーターはOSPFやBGPなどのルーティングプロトコルによって経路を判断し、最終的に目的のサーバーへ要求が届けられる.
では、ECサーバーは要求を受信した後、どのように処理するのだろうか.
まず、リクエストがEC(電子商取引)サーバーに到達するまでに、どのような流れをたどるのかを理解する必要があります.
実際には、リクエストはアプリケーション層から始まり、トランスポート層、ネットワーク層、MAC層を経て、最終的に物理リンク層へと送られます.
物理リンク層を除く各層では、下位のプロトコルが上位層の情報を順にカプセル化しながら、次の層へと渡していきます.
そして最終的に送信されるデータは、MACヘッダ、IPヘッダ、TCPヘッダ、HTTPヘッダなどが重なった形になっています.
このように、ネットワークリクエストの仕組みは非常に複雑です.
では、ECサーバーはこのリクエストを受け取った後、どのように処理するのでしょうか.
実際には、サーバーはこのリクエストを受け取ると、まずリクエスト内の MACアドレス が自分自身のものかどうかを確認する.
ちょうど自分のものであることが分かると、MACヘッダー情報を取り出し、オペレーティングシステムのネットワーク層に渡す.
そこで IPアドレス が自分のものかどうかを確認し、IPも一致していると判断されると、そのリクエストは トランスポート層に渡される.
トランスポート層では、送信側の TCP が、リクエストが確実に ECサイト側の TCP に届いたかどうかを確認する.
もし届いていない場合は、再送を行い、リクエストが確実に受信されたことを保証する.
その確認方法としては、リクエストに対して 意味のある応答 が返ってくるかどうかを見るのが最も簡単である.
応答を受け取ることができれば、通信が正常に行われたと判断できる.
その後、ECサイトは TCP ヘッダー内の アプリケーションポート番号 をもとに該当するアプリケーションを特定し、リクエストを渡す.
ECアプリケーションは、HTTP ヘッダーから具体的な 注文情報 を取得し、自身の業務ロジックに従って処理を行う.
処理が完了すると、「注文成功」という応答を返し、その応答は来たときと同じ経路を通って、最終的に家庭内のブラウザに戻り、画面上に注文成功と表示される.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme