0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

注文プロセスにおけるネットワークの流れを説明する。

0
Posted at

今では、ネットショッピングは私たちの生活にすっかり定着しています。
その仕組みについて考えたことはありますか。
今回は、ブラウザでネットショッピングをする場合を例に、その流れを詳しく見ていきましょう。
ブラウザで 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 ヘッダーから具体的な 注文情報 を取得し、自身の業務ロジックに従って処理を行う.
処理が完了すると、「注文成功」という応答を返し、その応答は来たときと同じ経路を通って、最終的に家庭内のブラウザに戻り、画面上に注文成功と表示される.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?