在线乱码卡一卡二卡新HD,最近韩国免费观看视频,国产色无码精品视频国产,亚洲男人的天堂久久香蕉

當我們向瀏覽器輸入網址后會發生什么?
來源:今日頭條    時間:2022-03-04 08:47:55
前言

當我們向瀏覽器輸入網址后會發生什么呢,大家有沒有想過,這背后有著什么神奇的事情發生,今天,蛋蛋我就一層一層為大家揭秘瀏覽器背后的故事。

本文會從如何生成 HTTP 消息展開,接著介紹 DNS 服務器是怎么幫我們查詢 IP 地址的,最后介紹協議棧最終是怎么把消息發送出去的,文章很長,你要忍住。

一、生成 HTTP 請求消息1、 解析 URL

網址,其實應該叫 URL 。一般網址都是以 “http://" 開頭,但也不乏有其他開頭的,例如:"ftp://" , "file://" 等等。

這部分文字表示的是瀏覽器使用的訪問方法。當訪問 Web 服務器時,使用 HTTP 協議,訪問 FTP 服務器則使用的是 FTP 協議。

整個 URL 除了有開頭需要指定的協議方法,還會包含服務器的域名和要訪問的文件路徑名等,如下圖所示:

我們以 HTTP 的協議來進行舉例講解:www.lab.glasscom.com 表示要訪問的服務器地址,而后面的路徑名 /dir/file1.html 表示訪問該服務器這個路徑下的 file1.html 文件。

可能有些小伙伴就有些疑問了,日常生活中我們有時候訪問的網站地址沒有指定具體要訪問的文件名,只有一個簡單的域名,一般這種情況服務器大多數會設置一個默認的訪問路徑,例如是 index.html 或者是 default.htm 等。

這就是瀏覽器工作的第一步,對 URL 進行解析。

2、HTTP 基本工作原理

通過對 URL 進行解析,我們已經知道訪問的目的地是哪了,接下來瀏覽器就會通過 HTTP 協議 來訪問 Web 服務器,HTTP 協議是一個很重要的知識點,后期我會專門出個專欄進行詳細講解,這里我先簡單介紹下,讓大家有個概念。

HTTP 協議定義了客戶端和服務器之間交互的消息內容與步驟。如上圖所示,客戶端會向服務器發送請求消息,請求可以有不同的操作,HTTP 通過方法來表示不同的操作:

Web 服務器收到請求后,完成自己的處理,會將處理的結果存放在響應消息中,響應消息會發生回客戶端,然后客戶端讀取結果進行展示。

3、 HTTP 請求消息生成

HTTP 請求消息對格式是有要求的,因此瀏覽器會按照規定的格式來生成請求消息。

請求行:請求消息的第一行叫作請求行,這里面有三個重要的參數,請求方法,告訴了服務器應該進行怎樣的操作;URL :指定了需要訪問的服務器地址及路徑,最后是協議版本,HTTP 協議有不同的版本,需要標明 HTTP 的版本號。請求頭:請求頭用來放置一些額外的詳細信息,例如客戶端支持的數據類型、語言、壓縮格式、日期等。消息體:這里存放你需要發送的數據。

這里我給大家舉個真實的例子,來一探究竟。

例如我們訪問 www.baidu.com

第一行就是請求行,從請求行可以看出,是 GET 請求,訪問路徑是 / ,協議版本是 1.1。

從第一行往下都是請求頭,因為沒有需要發送的數據,所以沒有請求體。

4、請求消息后收到響應

響應消息的格式和請求消息大致是相同的,區別只在第一行。

響應消息的第一行內容為請求協議、狀態碼和響應短語,用來表示請求的執行結果是成功還是出錯。

二、如何查詢 IP 地址1、IP 地址的基本知識

生成 HTTP 消息后,我們就會通過操作系統將消息發送給你 Web 服務器。通過操作系統發消息之前,還有一件重要的事情要做,就是查詢域名對應的 IP 地址。

互聯網中的局域網都是基于 TCP/IP 來設計的。通過一些小的子網,使用路由器連接起來組成一個大的網絡,就形成了一個網絡。網絡中,所有設備都會被分配一個地址,就像你住的地方,叫“xx 號 xx 室”, 這個號就是分配給整個子網的,室是分配給子網中的計算機的,整體就叫作 IP 地址。發送者發出的消息首先會經過子網的集線器轉發到距離最近的路由器,再由路由器根據目的地地址發送給下一個路由器,不斷重復這個過程最終抵達目的地。

2、域名和 IP 地址為何要共用

首先拋出兩個問題,大家先思考一下:

我們通過 IP 地址就能直接確定目標地址,為啥還要用域名呢?能不能直接用域名確定訪問對象?

先解答第一個問題,IP 地址是一串數字,但是想想實際情況,如果每次讓你訪問網站都輸入 IP 地址,估計你很難記得住,而使用名稱就好記的多,而且更有辨識度。

再來說說第二個問題,用域名來直接確定訪問對象,繞過 IP ,從實際運行效率來說,這是不可行的,IP 地址長度是 4 個字節,域名即使最短的也需要幾十個字節,字節越長,路由器處理數據時間會越長,路由器的速度是有極限的,目前的現實情況路由器性能已經快達到飽和了,所以直接訪問是行不通的,那有什么好辦法嗎?

就是通過讓人來使用名稱,讓路由器來使用 IP 地址,誰來建立域名和IP地址的關系呢,這個橋梁就是 DNS。

3、 如何查詢 IP 地址

通過 DNS 服務器 我們就可以查到 IP 地址。我們計算機都會有一個 DNS 客戶端 用來向 DNS 服務器發起請求,我們把它叫作 DNS解析器,通過 DNS 查詢 IP 地址的操作就是域名解析。

三、 DNS 服務器詳解1、DNS 服務器基本工作流程

其基本工作就是接收來自客戶端的查詢消息,然后根據消息內容返回響應信息。

一般來說,客戶端的查詢消息會包含三個部分:

域名:服務器的名字。Class :Class 的值永遠是代表互聯網的 IN。記錄類型:表示域名對應的類型。類型為 A ,表示域名對應的是 IP 地址,類型為 MX ,表示域名對應的是郵件服務器。

DNS 服務器 會從域名與 IP 地址的對照表中查找相應的記錄進行返回。

2、 如何根據域名的結構快速查找

當前域名的數量是海量的,不可能都放在一臺 DNS 服務器中,因此這些信息會被分布保存在多臺 DNS 服務器 中,這些 DNS 服務器相互接力配合,查找出最終的結果。

DNS 中的域名是用句點來分隔的,例如 www.lab.glasscom.com ,如果按照公司的組織架構,com 就代表 集團,glass com 代表事業部 ,lab 代表 小組。在一個層級的部分叫作域。

一個域的信息會作為一個整體存放在 DNS 服務器中,一臺服務器可以存放多個域的信息。

我們怎么找到要訪問的服務器的信息歸宿哪一臺 DNS 服務器管呢? 首先,我們可以將負責管理下級域的 DNS 服務器的 IP 地址 注冊到 其上級 DNS 服務器中,然后上級 DNS 服務器 的 IP 地址再注冊到更上一級的 DNS 服務器,以此類推。這樣做的好處是什么呢?假如我們要查詢 www.lab.glasscom.com,那么我們可以通過 com 域的 DNS 服務器向下查到 保存 glasscom.com 域的 DNS 服務器,一直往下,最終我們就能查到需要的 域名所對應的 IP 地址。

在現實生活中,有一種保存根域的服務器,什么是根域,就是比 com 還要上一級的域,一般不會在 域名中體現,但其是真實存在的,它管理著所有下級 DNS 服務器的信息,根域服務器的 IP 地址全世界只有 13 個。這些地址不會發生改變,因此所有的 DNS 服務器都會保存這 13 個 IP 地址。

我們來看下具體是怎么找目標 DNS 服務器的。

客戶端首先會訪問最近的一臺 DNS 服務器,然后因為最近的 DNS 服務器沒有保存我們需要的域名對應的 IP 地址,因此我們需要從頂層往下找,通過根域服務器向下查找,直到找到目標 DNS 服務器,從而獲得我們需要的 IP 地址。

一般來說,如果是我們經常查詢的域名信息, DNS 服務器本身具有緩存功能,會記錄你之前查詢過的域名,這樣當你請求的域名信息在緩存中時,DNS 服務器就會直接返回響應,省去了每次從根域找起的麻煩,減少了查詢的時間。

四、委托協議棧發送消息1、數據收發過程

當我們通過 DNS 服務器拿到需要的 IP 地址后,就能夠讓操作系統內部的協議棧向目標 IP 發送消息了。

收發數據是通過 使用 Socket 庫來完成的,如下圖所示:

在收發數據之前,客戶端和服務端都要先建立起管道,這個管道的關鍵就是管道的數據出入口,我們把它叫作套接字。

所以我們需要先創建套接字,才能建立起管道。服務器會先創建套接字,客戶端也會創建一個套接字,然后連接到服務端上。當數據都發送完,連接到管道就會斷開,通信擦操作就結束了。

我們把這個過程可以分為 4 個階段:

創建套接字。將管道連接到服務端套接字上。收發數據。斷開管道并刪除套接字。2、 創建套接字

套接字是怎么創建的呢?其實就是調用 Socket 庫中的 socket 組件,創建好后,協議棧會返回一個描述符,程序收到這個描述符存放在內存當中,這個描述符是用來識別不同的套接字,因為瀏覽器可能會存在多個請求,那么就會創建多個套接字,所以就要有一個標志來識別。例如當大家住酒店的時候,多個人同時來辦理入住,為了確保大家入住不同的房間,會給每個人發一個房間卡來當作唯一標識,這樣服務員就能根據房間卡來找到對應的人。

3、怎么連接管道

套接字創建好后,我們需要和服務端進行連接,這里調用了 Socket 庫中的 connect 組件來完成,調用connect組件需要傳遞描述符、服務器 IP 地址和端口號這3個參數。前面兩個參數大家都已經知道,這個端口號是起什么作用呢?大家想象一下,IP 地址可以讓我們找到對應服務器,但是服務器可能會部署多個應用,例如部署兩個web服務,我們單純根據 IP 是無法識別的,因此我們還需要加上端口號來找到具體的服務??赡軙腥苏f了,咱不是有描述符嗎,這個是唯一的啊?這個是行不通的,因為服務端是無法知曉這個描述符的。

4、 傳遞消息及收發數據結束

傳遞消息就很簡單了,就是將數據送入套接字,就會被發送到對方的套接字中。這個過程也是通過 Socket 庫的 write 程序組件來完成的。當消息返回后,接收消息是通過 Socket 庫中的 read 組件來完成。當服務器發送完響應消息后,就會主動執行斷開操作,通過 調用 close 組件來完成。當客戶端接收完數據后,也會調用 close 來進行斷開??偨Y當瀏覽器輸入網址后,瀏覽器首先會進行 URL 解析,然后我們會生成 HTTP 請求消息并介紹了 HTTP 協議基本概念,因為我們是通過域名訪問,所以需要借助 DNS 拿到目標訪問對象的 IP 地址,最后我們介紹了借助 協議棧(TCP IP)真正將消息發送給服務端,并完成數據接收。

一個網址的請求背后涉及到的知識是多方面的,做到知其然,知其所以然,才能真正學到更有價值的知識。

關鍵詞: 服務器的 我們需要 操作系統 一般來說 協議版本

上一篇:

下一篇:

X 關閉

X 關閉

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>