👏

ネットワークの基礎①-ブラウザからネットワークにアクセスする流れ

2024/05/02に公開

概要

このページは書籍「なぜネットワークはつながるのか」を筆者が読み学んだ内容について記載しているページです。全部で6つに分けて記載していこうと思っています。

  1. ネットワークの基礎①-ブラウザからネットワークにアクセスする流れ
  2. 今後作成予定
  3. 今後作成予定
  4. 今後作成予定
  5. 今後作成予定
  6. 今後作成予定

ぼやき

筆者はWEBエンジニアとして開発を進めている中で正直ネットワークに知識がなくても一定の段階まで開発はできると思います。しかし、クラウドサービスを使用したインフラ開発や障害が発生した際はネットワーク知識が必須になると思います。(エンジニアならネットワークについて最低限知っておくことが当たり前かもしれませんが..)
なので普段の業務で意識することはないかもしれませんが、ネットワークについてどういったものなのか把握することで、エンジニアとしてレベルがあげることができるのではないでしょうか~!(^^)!

このページで説明する領域

ネットワークは範囲が広いので4回にわけて記事を投稿しようと考えていますが、このページではWEBブラウザにURLを入力するとどうなるのかといったところについて記載していこうと思います。
普段みなさんがネットワークを使用する時ってブラウザにURLを入力してページや情報を取得する時だと思うのですが、その入り口の箇所を取り扱おうと思います。
(下記画像の赤枠の箇所)

WEBブラウザがリクエストを処理する

ブラウザにURLを入力した後、どうやってネットワーク通信を行っているのでしょうか?
実はブラウザにURLを入力後、以下の順番で処理を実行してネットワークにアクセスしています!

  1. リクエストURLを解読してリクエスト・メッセージを作成する
  2. 送信先のIPアドレスをDNSサーバーに問い合わせる
  3. DNSサーバーの
  4. 送信先のIPアドレスが判明したら、リクエストを送信するようにOSに依頼する

リクエストURLを解読してリクエスト・メッセージを作成する

まずブラウザは入力されたURLを分解して情報を解読していきます。
解読の内容は以下の通りです(^▽^)/

  • 確認するポイント
    ・プロトコルを確認
    ・ドメインを確認
    ・ポート番号の確認
    ・パスの確認

※URLのパス省略した場合は、送信先で予め設定されているファイルが表示されることになることが通例

今回の例でいうと、URLを解析した後、HTTPプロトコルを使用してアクセスするリクエストを作成します!

※ITメディアの記事から引用(https://atmarkit.itmedia.co.jp/ait/articles/1508/31/news016_3.html)

送信先のIDアドレスをDNSサーバーに問い合わせる

送信先へのメッセージを作成したら、OSに依頼してメッセージを送信してもうらようにしますが、現時点では送信先がわかっていません。そこでドメイン名からIPアドレスを調べる必要があり、ブラウザは「リゾルバ(Socketライブラリ)」を使用してOSに
最寄りのDNSサーバーにドメインからIPアドレス取得するようにリクエストを行う。

具体的にはブラウザは以下の順番でDNSサーバーにリクエストを送信しています。

  1. リゾルバ(Socketライブラリ)を使用する。※OSに組み込まれているライブラリ。
    使用する際は、リゾルバののプログラム名と調べるドメインを引数に呼び出せば使用することができます。
  2. リゾルバからのレスポンスにIPアドレスが記載されているので、ブラウザが使用しているメモリー領域に書き込むことで完了。
  3. ブラウザがOSにメッセージ送信依頼を行う際は、メモリー領域からIPアドレスを取り出す。

DNSサーバーの動き

またリゾルバからリクエストを受け付けたDNSサーバーの動きを記載します。
DNSサーバーには名前、クラス、タイプの3つの情報が格納されていてます。

DNSは上記画像の表からリクエストされているIPアドレスをレスポンスとして返します。しかし、もし仮にDNSサーバーにIPアドレスがなかった場合、ドメインの階層を利用して他のDNSサーバーにリクエストを送ります。

ドメインの階層とは
ドメインは一番最後のカンマ区切り毎に細分化することができ、細分化されているドメインの情報からDNSサーバーを探すことができます!
例えば以下のようなドメインだとこのように細分化することができます。

www.engineer.hoge.co.jp

jp:トップレベルと言われる(他にはcomなど..)
co
hoge
engineer
www

住所に例えると、jp国、co県、hoge市、enginner町、www丁目
こんな感じにイメージできます。
最寄りのDNSサーバーは細分化されたドメインのトップレベルのDNSサーバから次のドメインを管理しているサーバにリクエストすることで、欲しいIPアドレス情報を取得することができます。(郵便配達をイメージするとわかりやすいかも)

※DNSサーバーにはキャッシュ機能があるため、一度調べたドメインのIPアドレスは次回以降他のDNSサーバーにアクセスしなくても取得することができるので毎回上記のような動作をするとは限らない。

豆知識
DNSサーバーへメッセージを送信するときも、DNSサーバーのIPアドレスが必要ですが、それはTCP/IP設定項目のひとつとしてコンピュータに予め設定されているため、改めて調べる必要はないようです。

OSにメッセージ送信を依頼する

DNSサーバーから送信先IPアドレスを教えてもらったブラウザはついにリクエスト先にリクエストを送信します。この際も「Socketライブラリ」を使用してOSにリクエスト送信してもらうようにリクエストをOSに送ります。
リクエストを受け取ったOSは以下の順番でリクエスト先にリクエストを送ります。

  1. ソケットを作る(ソケット作成フェーズ)
  2. リクエスト先のソケットにパイプをつなぐ(接続フェーズ)
  3. データを送受信する(送受信フェーズ)
  4. パイプを外してソケットを抹消する(切断フェーズ)

実はリクエスト送る前にリクエスト先との通信を確立するために、ソケットと言われる
パイプなようなものでリクエスト先とつながった状態を作ります。
その後通信を行いソケットを削除する流れを実施しています。(TCPを使用)

まとめ

ネットワークについてよくわかっていない部分が多かったですが、どうやってブラウザがURLから通信を行っているのか理解することができました。
次はより細かい粒度でネットワークについて学んでいきたいと思います。

番外編

TCP/IPの考え方
TCP/IPは、下記の図のように、サブネット(ハブによって複数のPCがつながっている)という小さなネットワークをルーターで接続することによって全体のネットワークが出来上がっているものです。

IPアドレスの読み方
IPアドレスは下記画像のように読むことができる。
・ネットワーク番号:住所でいう丁目
・ホスト番号:住所でいう番地
・ネットマスク:どこまでがネットワーク番号なのか表した番号

ホスト番号がすべて0ものは個々のコンピューターを指すのではなくサブネット自体を指し、1のものはサブネット全体にデータを送付するブロードキャストという。
例:10.11.12.0 ←ここが0/23、10.11.12.1 ←ここが1/23

Discussion