前に、アマゾンで注文するという流れを通して、全体の仕組みを説明しました.
見終わってから、オンラインショッピングという一見簡単な操作でも、実は多くの下位技術が関わっており、非常に複雑であることが理解できたと思います.
「なぜそこまで複雑にする必要があるのか」「ただインターネットで買い物をしているだけなのに」と疑問に思うかもしれません.
実は、その疑問の核心は、なぜネットワークの通信は階層化されているのかという点にあります.
ネットワークを分層する本当の理由について、ここで詳しく説明していきます.
ここでは専門的な知識は紹介せず、まず一つの場面を考えてみましょう.
あなたは西友のスーパーで買い物をしています.
野菜や果物、肉、スナック菓子を買うつもりです.
そのため、まず西友のスーパーに行かなければなりません.
西友のスーパーは何階もあり、
1階(地上階、正面入口があり、最もにぎやかなフロア)には、
生鮮売り場(野菜果物、鮮魚、精肉、寿司や刺身の実演販売コーナー)、
惣菜、弁当、パン、搾りたてジュース、揚げ物、
一部の冷凍、冷蔵食品があり、
レジも主にこの階にあります.
2階(または一部店舗の上階):
加工食品(お菓子、飲料、米、麺、調味料、缶詰)、
日用品(洗剤、トイレットペーパー、ティッシュ歯磨き粉など)、
酒類コーナー(ビール、日本酒、焼酎、ワイン)、
化粧品、個人用ケア用品.
一部の店舗では、ドラッグストア商品やペット用品も扱っています.
一部の大型店舗(スーパ―センター形式)には、追加のフロアやエリアがあり、
衣料品(紳士服・婦人服・子供服・下着)、
家庭用品(調理器具・収納用品・寝具)、
小型家電、文房具、玩具などを扱っている.
ごく一部の大型店舗では、少量の大型家電も展示されている.
欲しい商品をすべて買うためには、
違う階に行って選んだり、
一つの売り場で買い物を済ませた後、
別の売り場へ移動したりする必要がある場合があります.
もし西友のスーパーが、
すべての商品を同じ階の同じ場所に集めていたら、
多くの人が一か所に集中し、
店内は大混雑になってしまうでしょう.
そうなれば、
買い物に何時間もかかる可能性があるだけでなく、
財布の盗難や物の紛失など、
さまざまなトラブルが起こりかねません.
そのため、
スーパーでは売り場を階やエリアごとに分け、
客が案内に従ってそれぞれの場所で買い物をすることで、
全体の流れがスムーズになるようにしているのです.
同様に、コンピュータネットワークにおいても同じことが言える.
もし階層化されていなければ、送信側が受信側に要求を送る場合、利用者が一人だけなら問題なく届くかもしれない.
しかし、現在は世界中に数十億の利用者やネットワーク機器が存在しており、それらが同時に通信を行ったら、どれほど混乱するか想像もできない.
ある利用者がウェブサイトにアクセスした際、すぐに表示されることもあれば、数秒待たされることもあり、場合によっては一定時間待った末にタイムアウトになることもある.
そのような状況になれば、誰でも不満を感じ、思わず文句を言いたくなるだろう.
このことから、ネットワークに階層が必要な理由が分かる.
簡単に言えば、効率性や信頼性、さらには安全性などを確保するためである.
専門的に言えば、ネットワークは非常に複雑であり、通信要求の処理は複雑な過程であるため、分層することで全体の効率と信頼性を高めている.
これは目に見えないルールだと言える.
ここでは、コンピュータネットワークの視点から、階層化されたネットワークでのリクエストの全体的な流れを説明します.
あなたがリクエストを送ると、まず家庭用ルーターに届きます.このときルーターは、そのリクエストが家庭内ネットワークの機器向けか、それとも外部向けかを判断します.
家庭用ルーターの内部について簡単に説明すると、ルーターは主にルーティング機能(Layer 3)、スイッチ機能(Layer 2)、Wi-Fiアクセスポイント(AP)で構成されています.
スマートフォン、タブレット、ノートパソコンはWi-Fiでルーターに接続し、テレビやセットトップボックスはWi-FiまたはLANポート経由でルーターに接続しま.
ルーティング機能(Layer 3)は異なるネットワーク間の転送やNAT、インターネット接続を担当し、スイッチ機能(Layer 2)は同一ネットワーク内の機器間の高速転送を担当します(これはLANポートやWi-Fiブリッジに相当します).
無線APは、Wi-Fi機器をスイッチに接続します.
物理的には、ルーターの中にはCPU(ルーティング、NAT、ファイアウォール、DHCPなどLayer 3以上の処理を担当)と1つ以上のスイッチチップ(Layer 2転送やMACアドレス処理を担当)があり、背面には4~8個のLANポートがあり、これらはスイッチチップに直結しています。Wi-Fiも無線チップを介して同じスイッチに接続されます.
これを基に、リクエストの流れを整理することができます.
ルーターはまずリクエストを受け取り、内部にある処理方法を仮に processMAC と名付けて処理する.
この処理では、リクエストからヘッダーを取得し、ヘッダー内の MAC 情報を基に、自分の MAC アドレスと一致するかどうかを確認する.
一致した場合は、上位層にリクエストを渡すと同時に、この層のヘッダーを取り除く.
次の層では、IP ヘッダーから IP アドレスを取得し、自分の IP と一致すれば、この処理を processIP と呼ぶ.
その後も同様にヘッダーを取り除き、次の層で、プロトコルが TCP であれば processTCP、UDP であれば processUDP を呼び出す.
さらに、通常のデータであれば HTTP 層に渡し、ここでは processHTTP として、アプリケーションが処理を行う.
処理結果はブラウザに返され、ユーザーの確認後、HTTP レスポンスとして TCP 層に送られる.
TCP 層では sendTCP により TCP ヘッダーを付加し、次に sendIP で IP ヘッダーを追加し、最後に sendMAC によってMAC ヘッダーを付けて送信する.
同時に分かるのは、要求と応答を送信するたびに、上位層で要求ヘッダを構築する際、必ず下位層のヘッダが先に作られているという点である.
つまり、ネットワーク上で送信されるパケットは、まず下位層の情報を構築し、その後に順に上位層の情報を構築する必要がある.
下位層だけが存在することはあっても、上位層だけが存在することはない.
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