自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當(dāng)我們向?yàn)g覽器輸入網(wǎng)址后會(huì)發(fā)生什么?

系統(tǒng) 瀏覽器 網(wǎng)絡(luò)
本文會(huì)從如何生成 HTTP 消息展開,接著介紹 DNS 服務(wù)器是怎么幫我們查詢 IP 地址的,最后介紹協(xié)議棧最終是怎么把消息發(fā)送出去的。

前言

當(dāng)我們向?yàn)g覽器輸入網(wǎng)址后會(huì)發(fā)生什么呢,大家有沒有想過,這背后有著什么神奇的事情發(fā)生,今天,蛋蛋我就一層一層為大家揭秘瀏覽器背后的故事。

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

一、生成 HTTP 請(qǐng)求消息

1、 解析 URL

網(wǎng)址,其實(shí)應(yīng)該叫 URL 。一般網(wǎng)址都是以 “http://" 開頭,但也不乏有其他開頭的,例如:"ftp://" , "file://" 等等。

這部分文字表示的是瀏覽器使用的訪問方法。當(dāng)訪問 Web 服務(wù)器時(shí),使用 HTTP 協(xié)議,訪問 FTP 服務(wù)器則使用的是 FTP 協(xié)議。

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

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

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

這就是瀏覽器工作的第一步,對(duì) URL 進(jìn)行解析。

2、HTTP 基本工作原理

通過對(duì) URL 進(jìn)行解析,我們已經(jīng)知道訪問的目的地是哪了,接下來瀏覽器就會(huì)通過 HTTP 協(xié)議 來訪問 Web 服務(wù)器,HTTP 協(xié)議是一個(gè)很重要的知識(shí)點(diǎn),后期我會(huì)專門出個(gè)專欄進(jìn)行詳細(xì)講解,這里我先簡(jiǎn)單介紹下,讓大家有個(gè)概念。

HTTP 協(xié)議定義了客戶端和服務(wù)器之間交互的消息內(nèi)容與步驟。如上圖所示,客戶端會(huì)向服務(wù)器發(fā)送請(qǐng)求消息,請(qǐng)求可以有不同的操作,HTTP 通過方法來表示不同的操作:

Web 服務(wù)器收到請(qǐng)求后,完成自己的處理,會(huì)將處理的結(jié)果存放在響應(yīng)消息中,響應(yīng)消息會(huì)發(fā)生回客戶端,然后客戶端讀取結(jié)果進(jìn)行展示。

3、 HTTP 請(qǐng)求消息生成

HTTP 請(qǐng)求消息對(duì)格式是有要求的,因此瀏覽器會(huì)按照規(guī)定的格式來生成請(qǐng)求消息。

  • 請(qǐng)求行:請(qǐng)求消息的第一行叫作請(qǐng)求行,這里面有三個(gè)重要的參數(shù),請(qǐng)求方法,告訴了服務(wù)器應(yīng)該進(jìn)行怎樣的操作;URL :指定了需要訪問的服務(wù)器地址及路徑,最后是協(xié)議版本,HTTP 協(xié)議有不同的版本,需要標(biāo)明 HTTP 的版本號(hào)。
  • 請(qǐng)求頭:請(qǐng)求頭用來放置一些額外的詳細(xì)信息,例如客戶端支持的數(shù)據(jù)類型、語言、壓縮格式、日期等。
  • 消息體:這里存放你需要發(fā)送的數(shù)據(jù)。

這里我給大家舉個(gè)真實(shí)的例子,來一探究竟。

例如我們?cè)L問 www.baidu.com

第一行就是請(qǐng)求行,從請(qǐng)求行可以看出,是 GET 請(qǐng)求,訪問路徑是 / ,協(xié)議版本是 1.1。

從第一行往下都是請(qǐng)求頭,因?yàn)闆]有需要發(fā)送的數(shù)據(jù),所以沒有請(qǐng)求體。

4、請(qǐng)求消息后收到響應(yīng)

響應(yīng)消息的格式和請(qǐng)求消息大致是相同的,區(qū)別只在第一行。

響應(yīng)消息的第一行內(nèi)容為請(qǐng)求協(xié)議、狀態(tài)碼和響應(yīng)短語,用來表示請(qǐng)求的執(zhí)行結(jié)果是成功還是出錯(cuò)。

二、如何查詢 IP 地址

1、IP 地址的基本知識(shí)

生成 HTTP 消息后,我們就會(huì)通過操作系統(tǒng)將消息發(fā)送給你 Web 服務(wù)器。通過操作系統(tǒng)發(fā)消息之前,還有一件重要的事情要做,就是查詢域名對(duì)應(yīng)的 IP 地址。

互聯(lián)網(wǎng)中的局域網(wǎng)都是基于 TCP/IP 來設(shè)計(jì)的。通過一些小的子網(wǎng),使用路由器連接起來組成一個(gè)大的網(wǎng)絡(luò),就形成了一個(gè)網(wǎng)絡(luò)。網(wǎng)絡(luò)中,所有設(shè)備都會(huì)被分配一個(gè)地址,就像你住的地方,叫“xx 號(hào) xx 室”, 這個(gè)號(hào)就是分配給整個(gè)子網(wǎng)的,室是分配給子網(wǎng)中的計(jì)算機(jī)的,整體就叫作 IP 地址。發(fā)送者發(fā)出的消息首先會(huì)經(jīng)過子網(wǎng)的集線器轉(zhuǎn)發(fā)到距離最近的路由器,再由路由器根據(jù)目的地地址發(fā)送給下一個(gè)路由器,不斷重復(fù)這個(gè)過程最終抵達(dá)目的地。

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

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

  1. 我們通過 IP 地址就能直接確定目標(biāo)地址,為啥還要用域名呢?
  2. 能不能直接用域名確定訪問對(duì)象?

先解答第一個(gè)問題,IP 地址是一串?dāng)?shù)字,但是想想實(shí)際情況,如果每次讓你訪問網(wǎng)站都輸入 IP 地址,估計(jì)你很難記得住,而使用名稱就好記的多,而且更有辨識(shí)度。

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

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

3、 如何查詢 IP 地址

通過 DNS 服務(wù)器 我們就可以查到 IP 地址。我們計(jì)算機(jī)都會(huì)有一個(gè) DNS 客戶端 用來向 DNS 服務(wù)器發(fā)起請(qǐng)求,我們把它叫作 DNS解析器,通過 DNS 查詢 IP 地址的操作就是域名解析。

三、 DNS 服務(wù)器詳解

1、DNS 服務(wù)器基本工作流程

其基本工作就是接收來自客戶端的查詢消息,然后根據(jù)消息內(nèi)容返回響應(yīng)信息。

一般來說,客戶端的查詢消息會(huì)包含三個(gè)部分:

  • 域名:服務(wù)器的名字。
  • Class : Class 的值永遠(yuǎn)是代表互聯(lián)網(wǎng)的 IN。
  • 記錄類型:表示域名對(duì)應(yīng)的類型。類型為 A ,表示域名對(duì)應(yīng)的是 IP 地址,類型為 MX ,表示域名對(duì)應(yīng)的是郵件服務(wù)器。

DNS 服務(wù)器 會(huì)從域名與 IP 地址的對(duì)照表中查找相應(yīng)的記錄進(jìn)行返回。

2、 如何根據(jù)域名的結(jié)構(gòu)快速查找

當(dāng)前域名的數(shù)量是海量的,不可能都放在一臺(tái) DNS 服務(wù)器中,因此這些信息會(huì)被分布保存在多臺(tái) DNS 服務(wù)器 中,這些 DNS 服務(wù)器相互接力配合,查找出最終的結(jié)果。

DNS 中的域名是用句點(diǎn)來分隔的,例如 www.lab.glasscom.com ,如果按照公司的組織架構(gòu),com 就代表 集團(tuán),glass com 代表事業(yè)部 ,lab 代表 小組。在一個(gè)層級(jí)的部分叫作域。

一個(gè)域的信息會(huì)作為一個(gè)整體存放在 DNS 服務(wù)器中,一臺(tái)服務(wù)器可以存放多個(gè)域的信息。

我們?cè)趺凑业揭L問的服務(wù)器的信息歸宿哪一臺(tái) DNS 服務(wù)器管呢? 首先,我們可以將負(fù)責(zé)管理下級(jí)域的 DNS 服務(wù)器的 IP 地址 注冊(cè)到 其上級(jí) DNS 服務(wù)器中,然后上級(jí) DNS 服務(wù)器 的 IP 地址再注冊(cè)到更上一級(jí)的 DNS 服務(wù)器,以此類推。這樣做的好處是什么呢?假如我們要查詢 www.lab.glasscom.com,那么我們可以通過 com 域的 DNS 服務(wù)器向下查到 保存 glasscom.com 域的 DNS 服務(wù)器,一直往下,最終我們就能查到需要的 域名所對(duì)應(yīng)的 IP 地址。

在現(xiàn)實(shí)生活中,有一種保存根域的服務(wù)器,什么是根域,就是比 com 還要上一級(jí)的域,一般不會(huì)在 域名中體現(xiàn),但其是真實(shí)存在的,它管理著所有下級(jí) DNS 服務(wù)器的信息,根域服務(wù)器的 IP 地址全世界只有 13 個(gè)。這些地址不會(huì)發(fā)生改變,因此所有的 DNS 服務(wù)器都會(huì)保存這 13 個(gè) IP 地址。

我們來看下具體是怎么找目標(biāo) DNS 服務(wù)器的。

客戶端首先會(huì)訪問最近的一臺(tái) DNS 服務(wù)器,然后因?yàn)樽罱?DNS 服務(wù)器沒有保存我們需要的域名對(duì)應(yīng)的 IP 地址,因此我們需要從頂層往下找,通過根域服務(wù)器向下查找,直到找到目標(biāo) DNS 服務(wù)器,從而獲得我們需要的 IP 地址。

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

四、委托協(xié)議棧發(fā)送消息

1、數(shù)據(jù)收發(fā)過程

當(dāng)我們通過 DNS 服務(wù)器拿到需要的 IP 地址后,就能夠讓操作系統(tǒng)內(nèi)部的協(xié)議棧向目標(biāo) IP 發(fā)送消息了。

收發(fā)數(shù)據(jù)是通過 使用 Socket 庫來完成的,如下圖所示:

在收發(fā)數(shù)據(jù)之前,客戶端和服務(wù)端都要先建立起管道,這個(gè)管道的關(guān)鍵就是管道的數(shù)據(jù)出入口,我們把它叫作套接字。

所以我們需要先創(chuàng)建套接字,才能建立起管道。服務(wù)器會(huì)先創(chuàng)建套接字,客戶端也會(huì)創(chuàng)建一個(gè)套接字,然后連接到服務(wù)端上。當(dāng)數(shù)據(jù)都發(fā)送完,連接到管道就會(huì)斷開,通信擦操作就結(jié)束了。

我們把這個(gè)過程可以分為 4 個(gè)階段:

  • 創(chuàng)建套接字。
  • 將管道連接到服務(wù)端套接字上。
  • 收發(fā)數(shù)據(jù)。
  • 斷開管道并刪除套接字。

2、 創(chuàng)建套接字

套接字是怎么創(chuàng)建的呢?其實(shí)就是調(diào)用 Socket 庫中的 socket 組件,創(chuàng)建好后,協(xié)議棧會(huì)返回一個(gè)描述符,程序收到這個(gè)描述符存放在內(nèi)存當(dāng)中,這個(gè)描述符是用來識(shí)別不同的套接字,因?yàn)闉g覽器可能會(huì)存在多個(gè)請(qǐng)求,那么就會(huì)創(chuàng)建多個(gè)套接字,所以就要有一個(gè)標(biāo)志來識(shí)別。例如當(dāng)大家住酒店的時(shí)候,多個(gè)人同時(shí)來辦理入住,為了確保大家入住不同的房間,會(huì)給每個(gè)人發(fā)一個(gè)房間卡來當(dāng)作唯一標(biāo)識(shí),這樣服務(wù)員就能根據(jù)房間卡來找到對(duì)應(yīng)的人。

3、怎么連接管道

套接字創(chuàng)建好后,我們需要和服務(wù)端進(jìn)行連接,這里調(diào)用了 Socket 庫中的 connect 組件來完成,調(diào)用connect組件需要傳遞描述符、服務(wù)器 IP 地址和端口號(hào)這3個(gè)參數(shù)。前面兩個(gè)參數(shù)大家都已經(jīng)知道,這個(gè)端口號(hào)是起什么作用呢?大家想象一下,IP 地址可以讓我們找到對(duì)應(yīng)服務(wù)器,但是服務(wù)器可能會(huì)部署多個(gè)應(yīng)用,例如部署兩個(gè)web服務(wù),我們單純根據(jù) IP 是無法識(shí)別的,因此我們還需要加上端口號(hào)來找到具體的服務(wù)??赡軙?huì)有人說了,咱不是有描述符嗎,這個(gè)是唯一的啊?這個(gè)是行不通的,因?yàn)榉?wù)端是無法知曉這個(gè)描述符的。

4、 傳遞消息及收發(fā)數(shù)據(jù)結(jié)束

傳遞消息就很簡(jiǎn)單了,就是將數(shù)據(jù)送入套接字,就會(huì)被發(fā)送到對(duì)方的套接字中。這個(gè)過程也是通過 Socket 庫的 write 程序組件來完成的。當(dāng)消息返回后,接收消息是通過 Socket 庫中的 read 組件來完成。當(dāng)服務(wù)器發(fā)送完響應(yīng)消息后,就會(huì)主動(dòng)執(zhí)行斷開操作,通過 調(diào)用 close 組件來完成。當(dāng)客戶端接收完數(shù)據(jù)后,也會(huì)調(diào)用 close 來進(jìn)行斷開??偨Y(jié)當(dāng)瀏覽器輸入網(wǎng)址后,瀏覽器首先會(huì)進(jìn)行 URL 解析,然后我們會(huì)生成 HTTP 請(qǐng)求消息并介紹了 HTTP 協(xié)議基本概念,因?yàn)槲覀兪峭ㄟ^域名訪問,所以需要借助 DNS 拿到目標(biāo)訪問對(duì)象的 IP 地址,最后我們介紹了借助 協(xié)議棧(TCP IP)真正將消息發(fā)送給服務(wù)端,并完成數(shù)據(jù)接收。

一個(gè)網(wǎng)址的請(qǐng)求背后涉及到的知識(shí)是多方面的,做到知其然,知其所以然,才能真正學(xué)到更有價(jià)值的知識(shí)。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-04-14 10:47:56

瀏覽器網(wǎng)址TCP

2018-01-03 15:17:26

2020-09-01 11:40:01

HTTPJavaTCP

2020-10-09 08:59:55

輸入網(wǎng)址解密

2010-07-06 10:11:25

瀏覽器

2023-05-04 00:16:39

數(shù)字化轉(zhuǎn)型運(yùn)營

2024-11-04 09:10:00

2023-01-14 16:11:27

瀏覽器URL回車

2024-05-06 10:53:22

瀏覽器TCPHTTPS

2018-11-16 09:21:06

2024-11-04 08:10:00

2023-12-13 17:04:51

終端命令shell

2021-12-27 08:24:08

漏洞網(wǎng)絡(luò)安全

2021-08-19 17:27:41

IT數(shù)據(jù)中心災(zāi)難

2022-03-11 21:28:31

部署開發(fā)服務(wù)器

2024-11-04 10:00:00

瀏覽器網(wǎng)絡(luò)

2023-08-26 07:44:13

系統(tǒng)內(nèi)存虛擬

2017-09-22 13:24:20

2019-12-24 11:19:44

容器DockerLinux

2020-11-16 15:47:05

SaaS軟件轉(zhuǎn)型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)