摘要:介紹超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。年美國(guó)人構(gòu)思了一種通過計(jì)算機(jī)處理文本信息的方法,并稱之為超文本這成為了超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基。
Http介紹
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。1960年美國(guó)人Ted Nelson構(gòu)思了一種通過計(jì)算機(jī)處理文本信息的方法,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基。以上并非此次文章重點(diǎn),更詳細(xì)的http介紹請(qǐng)移步 www.baidu.com
Http是一種網(wǎng)絡(luò)協(xié)議,而且是無狀態(tài)的超文本協(xié)議,基于Tcp/Ip協(xié)議的應(yīng)用層協(xié)議。
我要IP當(dāng)用戶請(qǐng)求某個(gè)域名的資源,比如在瀏覽器敲入http://www.qq.com的時(shí)候,瀏覽器首先會(huì)根據(jù)輸入的域名去查詢IP地址。去哪查呢?這里就需要引入DNS的概念,可以把DNS看做是域名映射IP的賬簿。
當(dāng)客戶端發(fā)送一個(gè)DNS請(qǐng)求的時(shí)候,首先本地的DNS服務(wù)器會(huì)接收到請(qǐng)求,會(huì)在本地先查詢緩存中有沒有當(dāng)前域名和IP的映射關(guān)系,如果有則直接返回IP信息,如果沒有,則會(huì)詢問其他DNS服務(wù)器,這里簡(jiǎn)單說一下網(wǎng)絡(luò)上DNS服務(wù)器的結(jié)構(gòu),DNS服務(wù)器在網(wǎng)絡(luò)上是樹狀結(jié)構(gòu)的,存在一個(gè)根服務(wù)器,根服務(wù)器的子節(jié)點(diǎn)是一級(jí)域名服務(wù)器(比如 .com, .cn),一級(jí)域名服務(wù)器的子節(jié)點(diǎn)又稱為權(quán)威(權(quán)限)DNS服務(wù)器
當(dāng)本地DNS服務(wù)器沒有相關(guān)查詢信息的時(shí)候會(huì)依照以上樹的順序查詢域名和IP的對(duì)應(yīng)關(guān)系,查到之后會(huì)緩存到本地DNS,這個(gè)過程最終的結(jié)果就是獲取到相關(guān)域名對(duì)應(yīng)的IP地址,如果客戶端輸入的是IP地址信息,則省略了以上查詢IP的過程了。
訪問互聯(lián)網(wǎng)的任何網(wǎng)站本質(zhì)上都是依據(jù)IP來尋址的。建立Tcp連接
當(dāng)一個(gè)http請(qǐng)求發(fā)出之后,并且獲取到了正確的服務(wù)器IP地址,這個(gè)時(shí)候就可以建立連接了。有一點(diǎn)需要明確:http協(xié)議是基于Tcp協(xié)議的。所以第一步就需要建立Tcp連接,這個(gè)過程就是很多網(wǎng)絡(luò)文章所說的三次握手:
Client:Hi,我是 Client。
Server:您好 Client,我是 Server。
Client:您好 Server...
這里是三次握手可以以這樣的順序來表示:client的問->server的答->client的答
有的面試官無聊會(huì)問為什么是三次握手而不是兩次或者四次五次呢?你可以理解,當(dāng)兩個(gè)人A和B要想互相聯(lián)系的時(shí)候,最簡(jiǎn)單的方式就是A提問然后能收到B的回答,B提問能收到A的回答。這也是三次握手的核心。
平時(shí)所說的Tcp是面向連接的,這里的連接其實(shí)是雙方約定一定格式來進(jìn)行通信的過程(包括發(fā)包的順序,buffer的大小等約定),在邏輯上好像是維持了一條連接而已。我要出網(wǎng)關(guān)
一旦Tcp連接建立起來,http請(qǐng)求就可以組織數(shù)據(jù)發(fā)送報(bào)文了。目前http協(xié)議的版本大部分是1.1,在這個(gè)版本中有一個(gè)屬性 Keep-Alive,這個(gè)屬性標(biāo)示要保持此http連接建立的TCP連接,默認(rèn)是開啟的。
網(wǎng)絡(luò)上有文章大篇幅描述http的長(zhǎng)連接信息,其實(shí)是錯(cuò)誤的說法,長(zhǎng)連接是針對(duì)tcp連接,http連接打開keepalive選項(xiàng)只不過保持了tcp連接不斷開而已。
HTTP 的報(bào)文大概分為三大部分。第一部分是請(qǐng)求行,第二部分是請(qǐng)求頭(header),第三部分是請(qǐng)求體(body)。這里具體的http協(xié)議其他概念不再展開討論,因?yàn)閮?nèi)容有點(diǎn)多。http協(xié)議位于應(yīng)用層,所以要發(fā)送的報(bào)文首先會(huì)把http協(xié)議相關(guān)的內(nèi)容包含在包中,然后傳給下一層。
.png)
下一層是傳輸層,這一層主要有兩個(gè)協(xié)議:Tcp和Udp,http協(xié)議選擇的是tcp協(xié)議,tcp會(huì)有兩個(gè)端口信息,一個(gè)是源端口,一個(gè)是目標(biāo)端口,比如http請(qǐng)求一般目標(biāo)端口是80。傳輸層把端口信息封裝完畢,接著把請(qǐng)求包傳給網(wǎng)絡(luò)層。
.png)
網(wǎng)絡(luò)層的協(xié)議是IP協(xié)議,在這一層會(huì)把源Ip地址和目標(biāo)IP地址封裝進(jìn)去(目標(biāo)IP就是請(qǐng)求的網(wǎng)站ip,查詢dns獲得)。
.png)
操作系統(tǒng)知道了要發(fā)往的IP地址,會(huì)判斷這個(gè)ip是否在本地局域網(wǎng)內(nèi)(根據(jù)子網(wǎng)掩碼來判斷),如果不在的話,則需要網(wǎng)關(guān)把這個(gè)請(qǐng)求發(fā)送出去(網(wǎng)關(guān)的ip一般是DHCP協(xié)議配置的)。操作系統(tǒng)怎么獲取網(wǎng)關(guān)在哪呢?這個(gè)過程基本上靠的是廣播,應(yīng)用的協(xié)議是ARP協(xié)議,當(dāng)局域網(wǎng)內(nèi)的所有設(shè)備接收到ARP協(xié)議的內(nèi)容之后會(huì)判斷ip是否和網(wǎng)關(guān)ip相同,如果相同就會(huì)回復(fù),經(jīng)過這個(gè)過程,系統(tǒng)找到了網(wǎng)關(guān),獲取到了網(wǎng)關(guān)的MAC地址,并把網(wǎng)關(guān)的MAc地址和本機(jī)的MAc地址封裝進(jìn)請(qǐng)求包,發(fā)給下一層MAC層,最后網(wǎng)卡把消息發(fā)往網(wǎng)關(guān)。
.png)
MAC地址主要用在同一個(gè)局域網(wǎng)內(nèi)定位某個(gè)計(jì)算機(jī),是在局域網(wǎng)內(nèi)才有效的地址到達(dá)目標(biāo)服務(wù)器
請(qǐng)求包到達(dá)網(wǎng)關(guān),網(wǎng)關(guān)會(huì)根據(jù)消息的MAC地址來判斷是否和自己的mac相同,如果相同則把消息接收下來。接著會(huì)判斷消息中目標(biāo)IP,如果目標(biāo)IP未在自己的局域網(wǎng)中,則需要根據(jù)自己的路由規(guī)則把消息發(fā)送給下一個(gè)相連的網(wǎng)關(guān)。網(wǎng)關(guān)和網(wǎng)關(guān)之間是通信的,至于網(wǎng)關(guān)怎么計(jì)算出最優(yōu)路徑這里不再展開。我們以常見的家庭路由器為例,每個(gè)路由器的網(wǎng)關(guān)IP其實(shí)是運(yùn)營(yíng)商給分配的,并且網(wǎng)絡(luò)包發(fā)送出去一般都是采用修改IP的方式(NAT)。具體步驟:
網(wǎng)關(guān)檢查目標(biāo)IP是否在自己的局域網(wǎng)內(nèi),如果不在,則獲取要傳送的下一個(gè)網(wǎng)關(guān)mac和IP,把目標(biāo)IP和mac修改為下一個(gè)網(wǎng)關(guān)的IP和mac,并把來源IP和mac修改為當(dāng)前網(wǎng)關(guān)的IP(外網(wǎng)IP)和mac。
下一個(gè)網(wǎng)關(guān)收到消息,首先檢查mac是否和自己匹配,如果匹配接會(huì)檢查目標(biāo)IP是否在自己的局域網(wǎng)內(nèi),如果不在則重復(fù)以上步驟
重復(fù)以上步驟直到目標(biāo)服務(wù)器所在的網(wǎng)關(guān)。
目標(biāo)服務(wù)器所在的網(wǎng)關(guān)收到消息,會(huì)判斷出來當(dāng)前的目標(biāo)IP在我的局域網(wǎng)范圍,就不會(huì)在跳躍下一個(gè)網(wǎng)關(guān),而是向局域網(wǎng)內(nèi)發(fā)ARP請(qǐng)求尋找目標(biāo)服務(wù)器,目標(biāo)服務(wù)器收到請(qǐng)求會(huì)響應(yīng),網(wǎng)關(guān)會(huì)把具體的請(qǐng)求發(fā)送給目標(biāo)服務(wù)器。
目標(biāo)服務(wù)器收到消息會(huì)解析請(qǐng)求的消息,在對(duì)比完mac和IP信息之后,會(huì)得到端口的信息,目標(biāo)服務(wù)器則在本機(jī)尋找監(jiān)聽這個(gè)端口的程序,http服務(wù)器很有可能是nginx或者其他web服務(wù)器。
請(qǐng)求通過端口傳送給具體的處理的程序,程序會(huì)解析http請(qǐng)求的內(nèi)容,根據(jù)內(nèi)容作出相應(yīng)的回復(fù)。
請(qǐng)求按照以上所有步驟把響應(yīng)返回給請(qǐng)求方(網(wǎng)關(guān)路由器會(huì)記住來源路徑),至此一個(gè)http請(qǐng)求結(jié)束。
網(wǎng)關(guān)(路由器)之間通過路由表來決定下一個(gè)跳躍的網(wǎng)關(guān)地址寫在最后
以上只是http請(qǐng)求的一個(gè)大概過程,其實(shí)每一步都非常復(fù)雜,沒有詳細(xì)展開。比如:路由協(xié)議、ip的分配 等等。
添加關(guān)注,查看更精美版本,收獲更多精彩
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/54055.html
摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請(qǐng)加顆小星星,沒有收獲的話可以 反對(duì) 沒有幫助 舉報(bào)三連 有心的同學(xué)應(yīng)該會(huì)看到我這個(gè)noteBook下面的其它知識(shí),希望對(duì)你們有些許幫助。 本文地址 時(shí)間點(diǎn):2017-11 一個(gè)16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時(shí)候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...
摘要:響應(yīng)由三個(gè)部分組成,分別是狀態(tài)行消息報(bào)頭響應(yīng)正文。詳情參考小汪之前寫的文章瀏覽器內(nèi)核之解釋器和模型解釋解釋過程是指從字符串經(jīng)過解釋器處理后變成渲染引擎內(nèi)部規(guī)則的表示過程。 showImg(https://segmentfault.com/img/remote/1460000016404846); 前言 小汪最近在看【W(wǎng)ebKit 技術(shù)內(nèi)幕】一書,說實(shí)話,這本書寫的太官方了,不通俗易懂。...
摘要:我覺得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以及面試,說實(shí)話,我個(gè)人覺得這些東西還挺重要的。在本文里,我將介紹我這段時(shí)間里更新簡(jiǎn)歷和面試的相關(guān)經(jīng)歷。 分享一篇很不錯(cuò)的文章!本文作者曾經(jīng)寫過《Java Web輕量級(jí)開發(fā)面試教程》和 《Java核心技術(shù)及面試指南》這兩本書。我覺得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以...
摘要:面試官比較著急了,跟我溝通的時(shí)候,我才知道返回值不一定非要跟原生的一樣。騰訊一面平常開發(fā)怎么設(shè)計(jì)組件的??偨Y(jié)騰訊面試的感覺就是,沒有那么正式,都是部門的技術(shù)直接聯(lián)系的你,然后二面就是部門負(fù)責(zé)人了,決定了是否入職。 引入 面試過去了這么久,把八月份面試題和總結(jié)發(fā)一下吧,雖然年底大家可能都不換工作~ 還是可以看看的。 關(guān)于面試,引用葉老濕的一句話。你的簡(jiǎn)歷是自己工作的答卷,項(xiàng)目經(jīng)歷是你給面...
摘要:軟件測(cè)試自學(xué)秘訣面試失敗一天,心態(tài)穩(wěn)的一批,因?yàn)槊嬖嚨娜峭獍耸聨臀衣?lián)系的公司,工資全都是一萬以上,之前只有四五千的自己根本不覺得自己能勝任。 個(gè)人是去年年底零基礎(chǔ)轉(zhuǎn)行,兩三千培訓(xùn)費(fèi)學(xué)出來,學(xué)完后也是稀里糊涂,僅是知道功能測(cè)試就是找問題,其他接口,性能,數(shù)據(jù)庫,python基礎(chǔ),虛擬機(jī)搭建網(wǎng)站都實(shí)現(xiàn)了課程展示那樣。面試資...
閱讀 2658·2021-10-08 10:04
閱讀 2748·2021-09-06 15:02
閱讀 839·2019-08-30 13:50
閱讀 1566·2019-08-30 13:21
閱讀 2599·2019-08-30 11:15
閱讀 2126·2019-08-29 17:19
閱讀 1593·2019-08-26 13:55
閱讀 1270·2019-08-26 10:15