ブラウザにURLを入力してEnterキーを押すとどうなりますか?
What Happens When I Enter Url Browser
私たちはあなたが訪問したいと思っていると仮定します www.baidu.com 必要なものを見つけてください。
- あなたはするであろう www.baidu.com ブラウザのアドレスバーを入力します。
- ブラウザはキャッシュ内のDNSレコードをチェックして検索します www.baidu.com 対応するIPアドレス。
DNS(ドメインネームシステム)は、Webサイト名(URL
)とその特定のIPアドレスを維持するために使用されるデータベースです。インターネット上の各URLには一意のIPアドレスがあります。 IPアドレスは、アクセスを要求しているWebサイトのサーバーをホストしているコンピューターに属しています。例えば、 www.baidu.com IPアドレスは183.232.231.174
です。したがって、必要に応じて、ブラウザに入力できます。183.232.231.174
www.baidu.comにアクセスしてください 。 DNSは、電話帳が名前とそれに対応する電話番号のリストであるのと同じように、URLとそのIPアドレスのリストです。
DNSの主な目的は、人間によるナビゲーションです。ブラウザに正しいIPアドレスを入力することで、簡単にWebサイトにアクセスできますが、頻繁にアクセスするすべてのWebサイトについて、異なる番号のセットを覚えておく必要があると想像してみてください。したがって、URLを使用してWebサイトの名前を覚え、DNSを機能させ、正しいIPにマップする方が簡単です。
DNSレコードを見つけるために、ブラウザは4つのキャッシュをチェックします。
- まず、ブラウザのキャッシュをチェックします。ブラウザは、以前にアクセスしたWebサイトの固定時間DNSレコードリポジトリを維持します。したがって、DNSクエリを実行する最初の場所です。
- 次に、ブラウザはオペレーティングシステムのキャッシュをチェックします。オペレーティングシステムはDNSレコードのキャッシュも保持しているため、ブラウザのキャッシュに見つからない場合、ブラウザは基盤となるコンピュータのオペレーティングシステムでシステムコール(つまり、Windowsではgethostname)を実行してレコードを取得します。
- 第三に、ルーターのキャッシュをチェックします。コンピュータで見つからない場合、ブラウザは独自のDNSレコードキャッシュを維持しているルーターと通信します。
- 第4に、ISPキャッシュをチェックします。すべての手順が失敗した場合、ブラウザはISPに転送されます。 ISPはDNSレコードのキャッシュを含む独自のDNSサーバーを維持しており、ブラウザはレコードをチェックし、最後に要求されたURLを見つけることを望んでいます。
なぜこれほど多くのキャッシュがこれほど多くのレベルで維持されているのか不思議に思うかもしれません。キャッシュした情報はあまり快適ではありませんが、キャッシュに関しては、ネットワークトラフィックを調整し、データ転送時間を改善するためにキャッシュが重要です。
-
要求されたURLがキャッシュにない場合、ISPのDNSサーバーはホストを見つけるためにDNSルックアップを開始します。
www.baidu.com
サーバーのIPアドレス。
前述のように、コンピューターとホスティングwww.baidu.com
サーバー接続を取得するには、www.baidu.com
IPアドレスが必要です。 DNSクエリの目的は、Webサイトの正しいIPアドレスが見つかるまで、インターネット上の複数のDNSサーバーを検索することです。このタイプの検索は、必要なIPアドレスが見つかるか、見つからないというエラー応答が返されるまで、DNSサーバーからDNSサーバーまで検索が続行されるため、再帰検索と呼ばれます。
この場合、ISPのDNSサーバーを参照します。DNS recursor
その役割は、インターネット上の他のDNSサーバーに回答を求めることにより、ターゲットドメインの正しいIPアドレスを見つけることです。他のDNSサーバーは、Webサイトのドメイン名のドメインスキーマに基づいてDNS検索を実行するため、ネームサーバーと呼ばれます。
さらに混乱することなく、次の図を使用してドメインアーキテクチャを説明したいと思います。
今日私たちが遭遇するWebサイトのURLの多くには、第3レベルのドメイン、第2レベルのドメイン、およびトップレベルのドメインが含まれています。これらの各レベルには、DNSルックアッププロセス中に照会される独自のネームサーバーが含まれています。
forwww.baidu.com
、まず、DNS recursor
ルートネームサーバーに接続します。ルートネームサーバーはそれを.com
ドメインネームサーバーにリダイレクトします。 .comネームサーバーはそれをgoogle.comネームサーバーにリダイレクトします。baidu.com
ネームサーバーはその中にあります'DNS record'
見つかりましたwww.baidu.com
IPアドレスを一致させてあなたに返しますDNS recursor
そしてそれをブラウザに送り返します。
これらの要求は、要求されたコンテンツや宛先IPアドレス(DNSリカーサーのIPアドレス)などの情報を含む小さなパケットを使用して送信されます。これらのパケットは、正しいDNSサーバーに到達する前に、クライアントとサーバーの間で複数のネットワークデバイスによって送信されます。デバイスはルーティングテーブルを使用して、パケットが宛先に到着する最速の方法を決定します。これらのパケットが失われると、要求失敗エラーが発生します。それ以外の場合は、正しいDNSサーバーに到達し、正しいIPアドレスを取得して、ブラウザーに戻ります。 -
ブラウザはサーバーへのTCP接続を開始します。
ブラウザが正しいIPアドレスを受信すると、サーバーとの接続を確立してIPアドレスと一致させ、情報を転送します。ブラウザはインターネットプロトコルを使用してそのような接続を構築します。多くの異なるインターネットプロトコルを使用できますが、TCPはあらゆるタイプのHTTP要求に対して最も一般的なプロトコルです。
コンピュータ(クライアント)とサーバー間でパケットを転送するには、TCP接続を確立することが重要です。この接続は、TCP / IPスリーウェイハンドシェイクと呼ばれるプロセスを使用して確立されます。これは、クライアントとサーバーがSYN(同期)メッセージとACK(確認応答)メッセージを交換して接続を確立する3段階のプロセスです。
- クライアントはSYNパケットをインターネット経由でサーバーに送信し、新しい接続用に開いているかどうかを尋ねます。
- サーバーに新しい接続を受け入れて開始できるオープンポートがある場合、サーバーはSYNパケットの確認応答にSYN / ACKパケットで応答します。
- クライアントはサーバーからSYN / ACKパケットを受信し、ACKパケットを送信して確認します。次に、データ転送用のTCP接続を確立します。
- ブラウザはHTTPリクエストをWebサーバーに送信します。
TCP接続が確立されると、データの転送を開始できます。ブラウザは、www.baidu.com
Webページを要求するGETリクエストを送信します。資格情報を入力するかフォームを送信する場合、それはPOSTリクエストである可能性があります。このリクエストには、ブラウザID(User-Agentヘッダー)、受け入れるリクエストのタイプ(Acceptヘッダー)、他のリクエストに対してTCP接続をアクティブに保つために必要な接続ヘッダーなどの追加情報も含まれます。 。また、このドメインのブラウザからストレージを渡します。cookie
で取得した情報。
サンプルのGETリクエスト(タイトルが強調表示されています):
(舞台裏で何が起こっているのか知りたい場合は、Firebug、Fiddler、その他のツールを使用してHTTPリクエストを表示できます。私たちの知らないうちにクライアントとサーバー間で受け渡される情報を見るのは常に興味深いことです)。
Fidderインターフェース表示:
-
サーバーは要求を処理し、応答を送り返します。
サーバーには、ブラウザーから要求を受信し、それらを要求ハンドラーに渡して応答を読み取って生成するWebサーバー(Apache、IIS)が含まれています。リクエストハンドラはプログラムです( ASP.NETを使用 、PHP、Rubyなど)、リクエスト、タイトル、Cookieを読み取り、リクエストの内容を確認し、必要に応じてサーバー上の情報を更新します。次に、特定の形式(JSON、XML、HTML)の組み合わせで応答します。
-
サーバーはHTTP応答を送信します。
サーバーの応答には、要求したWebページとステータスコード、圧縮タイプ(Content-Encoding)、ページのキャッシュ方法(Cache-Control)、設定するCookie、プライバシー情報などが含まれます。
HTTPサーバーの応答例:
上記の応答を見ると、最初の行にステータスコードが表示されています。これは、応答のステータスを示すため、非常に重要です。数値コードを使用して、5種類の状態を詳しく説明します。
- 1xx 情報メッセージのみを意味します
- 2xx ある程度の成功を示します
- 3xx クライアントを別のURLにリダイレクトする
- 4xx クライアントエラーを示します
- 5xx 部分的なサーバーエラーを示します
したがって、エラーが発生した場合は、HTTP応答をチェックして、受け取ったステータスコードタイプをチェックできます。
- ブラウザにHTMLコンテンツが表示されます(最も一般的なHTML応答の場合)。
ブラウザはHTMLコンテンツを段階的に表示します。まず、ベアボーンHTMLスケルトンをレンダリングします。次に、HTMLマークアップをチェックし、画像、CSSスタイルシート、JavaScriptファイルなどのページ上の他の要素にGETリクエストを送信します。これらの静的ファイルはブラウザによってキャッシュされるため、次にページにアクセスしたときに再度取得する必要はありません。最後に、www.baidu.com
がブラウザに表示されます。
ただ!
これは非常に面倒な拡張プロセスのように見えますが、キーボードを押してからWebページに入るのに数秒もかからないことはわかっています。これらの手順はすべて、気付く前に数ミリ秒以内に行われます。