2022-02-07 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

計(jì)算機(jī)網(wǎng)絡(luò)?https://www.runoob.com/w3cnote/summary-of-network.html#_label11

網(wǎng)絡(luò)協(xié)議是為計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說是約定的集合。

1.?計(jì)算機(jī)網(wǎng)絡(luò) 七層模型

網(wǎng)絡(luò)標(biāo)準(zhǔn)層次模型

自頂向下:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。

應(yīng)用層:處理網(wǎng)絡(luò)應(yīng)用。

表示層:數(shù)據(jù)表示。

會(huì)話層:互連主機(jī)通信。

傳輸層:端到端連接。舉例:TCP、UDP

網(wǎng)絡(luò)層:尋址和最短路徑。舉例:IP

數(shù)據(jù)鏈路層:接入介質(zhì)。

物理層:二進(jìn)制傳輸。







HTTP協(xié)議

超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。  HTTP?協(xié)議包括哪些請求?

GET:請求讀取由URL所標(biāo)志的信息。

POST:給服務(wù)器添加信息(如注釋)。

PUT:在給定的URL下存儲(chǔ)一個(gè)文檔。

DELETE:刪除給定的URL所標(biāo)志的資源。

  HTTP?中,?POST??GET?的區(qū)別

1)Get是從服務(wù)器上獲取數(shù)據(jù),Post是向服務(wù)器傳送數(shù)據(jù)。

2)Get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的Action屬性所指向的URL中,值和表單內(nèi)各個(gè)字段一一對應(yīng),在URL中可以看到。

3)Get傳送的數(shù)據(jù)量小,不能大于2KB;Post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。

4)根據(jù)HTTP規(guī)范,GET用于信息獲取,而且應(yīng)該是安全的和冪等的。

I. 所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說,GET請求一般不應(yīng)產(chǎn)生副作用。就是說,它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣,不會(huì)修改,增加數(shù)據(jù),不會(huì)影響資源的狀態(tài)。

II.冪等的意味著對同一URL的多個(gè)請求應(yīng)該返回同樣的結(jié)果。





TCP協(xié)議

TCP三次握手


PS:TCP協(xié)議中,主動(dòng)發(fā)起請求的一端稱為『客戶端』,被動(dòng)連接的一端稱為『服務(wù)端』。不管是客戶端還是服務(wù)端,TCP連接建立完后都能發(fā)送和接收數(shù)據(jù)。

起初,服務(wù)器和客戶端都為CLOSED狀態(tài)。在通信開始前,雙方都得創(chuàng)建各自的傳輸控制塊(TCB)。 服務(wù)器創(chuàng)建完TCB后便進(jìn)入LISTEN狀態(tài),此時(shí)準(zhǔn)備接收客戶端發(fā)來的連接請求。

第一次握手

客戶端向服務(wù)端發(fā)送連接請求報(bào)文段。該報(bào)文段的頭部中SYN=1,ACK=0,seq=x。請求發(fā)送后,客戶端便進(jìn)入SYN-SENT狀態(tài)。

PS1:SYN=1,ACK=0表示該報(bào)文段為連接請求報(bào)文。

PS2:x為本次TCP通信的字節(jié)流的初始序號(hào)。

TCP規(guī)定:SYN=1的報(bào)文段不能有數(shù)據(jù)部分,但要消耗掉一個(gè)序號(hào)。

第二次握手

服務(wù)端收到連接請求報(bào)文段后,如果同意連接,則會(huì)發(fā)送一個(gè)應(yīng)答:SYN=1,ACK=1,seq=y,ack=x+1。 該應(yīng)答發(fā)送完成后便進(jìn)入SYN-RCVD狀態(tài)。

PS1:SYN=1,ACK=1表示該報(bào)文段為連接同意的應(yīng)答報(bào)文。

PS2:seq=y表示服務(wù)端作為發(fā)送者時(shí),發(fā)送字節(jié)流的初始序號(hào)。

PS3:ack=x+1表示服務(wù)端希望下一個(gè)數(shù)據(jù)報(bào)發(fā)送序號(hào)從x+1開始的字節(jié)。

第三次握手

當(dāng)客戶端收到連接同意的應(yīng)答后,還要向服務(wù)端發(fā)送一個(gè)確認(rèn)報(bào)文段,表示:服務(wù)端發(fā)來的連接同意應(yīng)答已經(jīng)成功收到。 該報(bào)文段的頭部為:ACK=1,seq=x+1,ack=y+1。 客戶端發(fā)完這個(gè)報(bào)文段后便進(jìn)入ESTABLISHED狀態(tài),服務(wù)端收到這個(gè)應(yīng)答后也進(jìn)入ESTABLISHED狀態(tài),此時(shí)連接的建立完成!

為什么連接建立需要三次握手,而不是兩次握手?

防止失效的連接請求報(bào)文段被服務(wù)端接收,從而產(chǎn)生錯(cuò)誤。

PS:失效的連接請求:若客戶端向服務(wù)端發(fā)送的連接請求丟失,客戶端等待應(yīng)答超時(shí)后就會(huì)再次發(fā)送連接請求,此時(shí),上一個(gè)連接請求就是『失效的』。

若建立連接只需兩次握手,客戶端并沒有太大的變化,仍然需要獲得服務(wù)端的應(yīng)答后才進(jìn)入ESTABLISHED狀態(tài),而服務(wù)端在收到連接請求后就進(jìn)入ESTABLISHED狀態(tài)。此時(shí)如果網(wǎng)絡(luò)擁塞,客戶端發(fā)送的連接請求遲遲到不了服務(wù)端,客戶端便超時(shí)重發(fā)請求,如果服務(wù)端正確接收并確認(rèn)應(yīng)答,雙方便開始通信,通信結(jié)束后釋放連接。此時(shí),如果那個(gè)失效的連接請求抵達(dá)了服務(wù)端,由于只有兩次握手,服務(wù)端收到請求就會(huì)進(jìn)入ESTABLISHED狀態(tài),等待發(fā)送數(shù)據(jù)或主動(dòng)發(fā)送數(shù)據(jù)。但此時(shí)的客戶端早已進(jìn)入CLOSED狀態(tài),服務(wù)端將會(huì)一直等待下去,這樣浪費(fèi)服務(wù)端連接資源。

TCP四次揮手


TCP連接的釋放一共需要四步,因此稱為『四次揮手』。 我們知道,TCP連接是雙向的,因此在四次揮手中,前兩次揮手用于斷開一個(gè)方向的連接,后兩次揮手用于斷開另一方向的連接。

第一次揮手

若A認(rèn)為數(shù)據(jù)發(fā)送完成,則它需要向B發(fā)送連接釋放請求。該請求只有報(bào)文頭,頭中攜帶的主要參數(shù)為: FIN=1,seq=u。此時(shí),A將進(jìn)入FIN-WAIT-1狀態(tài)。

PS1:FIN=1表示該報(bào)文段是一個(gè)連接釋放請求。

PS2:seq=u,u-1是A向B發(fā)送的最后一個(gè)字節(jié)的序號(hào)。

第二次揮手

B收到連接釋放請求后,會(huì)通知相應(yīng)的應(yīng)用程序,告訴它A向B這個(gè)方向的連接已經(jīng)釋放。此時(shí)B進(jìn)入CLOSE-WAIT狀態(tài),并向A發(fā)送連接釋放的應(yīng)答,其報(bào)文頭包含: ACK=1,seq=v,ack=u+1。

PS1:ACK=1:除TCP連接請求報(bào)文段以外,TCP通信過程中所有數(shù)據(jù)報(bào)的ACK都為1,表示應(yīng)答。

PS2:seq=v,v-1是B向A發(fā)送的最后一個(gè)字節(jié)的序號(hào)。

PS3:ack=u+1表示希望收到從第u+1個(gè)字節(jié)開始的報(bào)文段,并且已經(jīng)成功接收了前u個(gè)字節(jié)。

A收到該應(yīng)答,進(jìn)入FIN-WAIT-2狀態(tài),等待B發(fā)送連接釋放請求。

第二次揮手完成后,A到B方向的連接已經(jīng)釋放,B不會(huì)再接收數(shù)據(jù),A也不會(huì)再發(fā)送數(shù)據(jù)。但B到A方向的連接仍然存在,B可以繼續(xù)向A發(fā)送數(shù)據(jù)。

第三次揮手

當(dāng)B向A發(fā)完所有數(shù)據(jù)后,向A發(fā)送連接釋放請求,請求頭:FIN=1,ACK=1,seq=w,ack=u+1。B便進(jìn)入LAST-ACK狀態(tài)。

第四次揮手

A收到釋放請求后,向B發(fā)送確認(rèn)應(yīng)答,此時(shí)A進(jìn)入TIME-WAIT狀態(tài)。該狀態(tài)會(huì)持續(xù)2MSL時(shí)間,若該時(shí)間段內(nèi)沒有B的重發(fā)請求的話,就進(jìn)入CLOSED狀態(tài),撤銷TCB。當(dāng)B收到確認(rèn)應(yīng)答后,也便進(jìn)入CLOSED狀態(tài),撤銷TCB。

為什么A要先進(jìn)入TIME-WAIT狀態(tài),等待2MSL時(shí)間后才進(jìn)入CLOSED狀態(tài)?

為了保證B能收到A的確認(rèn)應(yīng)答。 若A發(fā)完確認(rèn)應(yīng)答后直接進(jìn)入CLOSED狀態(tài),那么如果該應(yīng)答丟失,B等待超時(shí)后就會(huì)重新發(fā)送連接釋放請求,但此時(shí)A已經(jīng)關(guān)閉了,不會(huì)作出任何響應(yīng),因此B永遠(yuǎn)無法正常關(guān)閉。



在瀏覽器中輸入?http://www.baidu.com/?后執(zhí)行的全部過程。(一次完整的http請求過程)

整體流程:

  1. DNS域名解析

  2.?建立TCP連接

  3.?發(fā)送HTTP請求

  4.?服務(wù)器處理請求

  5.?返回響應(yīng)結(jié)果

  6.?關(guān)閉TCP連接

  7.?瀏覽器解析HTML

  8.?瀏覽器布局渲染

使用的協(xié)議:

  DNS、TCP、IP、OSPF(IP數(shù)據(jù)包在路由器中,路由選擇協(xié)議)、ARP、HTTP

詳細(xì):

1.DNS域名解析

    在瀏覽器輸入網(wǎng)址,其實(shí)就是要向服務(wù)器請求我們想要的頁面內(nèi)容,所以瀏覽器首先要確認(rèn)的是域名所對應(yīng)的服務(wù)器在哪里。

    將域名解析成對應(yīng)的服務(wù)器IP地址這項(xiàng)工作,是由DNS服務(wù)器來完成的。

    客戶端收到域名地址后,首先去找本地的hosts文件,檢查在該文件中是否有相應(yīng)的域名、IP對應(yīng)關(guān)系,如果有,則向其IP地址發(fā)送請求,如果沒有,再去找DNS服務(wù)器。

2.建立TCP連接

    三次握手:請求連接(SYN數(shù)據(jù)包),確認(rèn)信息(SYN/ACK數(shù)據(jù)包),握手結(jié)束(ACK數(shù)據(jù)包)

3.發(fā)起http請求

    與服務(wù)器建立了連接后,就可以向服務(wù)器發(fā)起請求了。

4.服務(wù)器處理請求

    服務(wù)器端收到請求后的由web服務(wù)器(準(zhǔn)確說應(yīng)該是http服務(wù)器)處理請求。

    web服務(wù)器解析用戶請求,知道了需要調(diào)度哪些資源文件,再通過相應(yīng)的這些資源文件處理用戶請求和參數(shù),并調(diào)用數(shù)據(jù)庫信息,最后將結(jié)果通過web服務(wù)器返回給瀏覽器客戶端。

5.返回響應(yīng)結(jié)果

    在http里,有請求就會(huì)有響應(yīng),哪怕是錯(cuò)誤信息。

    在響應(yīng)結(jié)果中都會(huì)有個(gè)一個(gè)http狀態(tài)碼,如200、301、404、500等。通過這個(gè)狀態(tài)碼可以知道服務(wù)器端的處理是否正常,并能了解具體的錯(cuò)誤。

6.關(guān)閉TCP連接

    為了避免服務(wù)器與客戶端雙方的資源占用和損耗,當(dāng)雙方?jīng)]有請求或響應(yīng)傳遞時(shí),任意一方都可以發(fā)起關(guān)閉請求。四次揮手。

7.瀏覽器解析HTML

    瀏覽器需要加載解析的不僅僅是HTML,還包括CSS、JS。以及還要加載圖片、視頻等其他媒體資源。

    瀏覽器通過解析HTML,生成DOM樹,解析CSS,生成CSS規(guī)則樹,然后通過DOM樹和CSS規(guī)則樹生成渲染樹。

    渲染樹與DOM樹不同,渲染樹中并沒有head、display為none等不必顯示的節(jié)點(diǎn)。

8.瀏覽器布局渲染

    根據(jù)渲染樹布局,計(jì)算CSS樣式,即每個(gè)節(jié)點(diǎn)在頁面中的大小和位置等幾何信息。

    HTML默認(rèn)是流式布局的,CSS和js會(huì)打破這種布局,改變DOM的外觀樣式以及大小和位置。




現(xiàn)在假設(shè)如果我們在客戶端(客戶端)瀏覽器中輸入 http://www.baidu.com, 而 baidu.com 為要訪問的服務(wù)器(服務(wù)器),下面詳細(xì)分析客戶端為了訪問服務(wù)器而執(zhí)行的一系列關(guān)于協(xié)議的操作:

1)客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個(gè)IP地址找到客戶端到服務(wù)器的路徑??蛻舳藶g覽器發(fā)起一個(gè)HTTP會(huì)話到220.161.27.48,然后通過TCP進(jìn)行封裝數(shù)據(jù)包,輸入到網(wǎng)絡(luò)層。

2)在客戶端的傳輸層,把HTTP會(huì)話請求分成報(bào)文段,添加源和目的端口,如服務(wù)器使用80端口監(jiān)聽客戶端的請求,客戶端由系統(tǒng)隨機(jī)選擇一個(gè)端口如5000,與服務(wù)器進(jìn)行交換,服務(wù)器把相應(yīng)的請求返回給客戶端的5000端口。然后使用IP層的IP地址查找目的端。

3)客戶端的網(wǎng)絡(luò)層不用關(guān)系應(yīng)用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達(dá)服務(wù)器,期間可能經(jīng)過多個(gè)路由器,這些都是由路由器來完成的工作,不作過多的描述,無非就是通過查找路由表決定通過那個(gè)路徑到達(dá)服務(wù)器。

4)客戶端的鏈路層,包通過鏈路層發(fā)送到路由器,通過鄰居協(xié)議查找給定IP地址的MAC地址,然后發(fā)送ARP請求查找目的地址,如果得到回應(yīng)后就可以使用ARP的請求應(yīng)答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳輸了,然后發(fā)送IP數(shù)據(jù)包到達(dá)服務(wù)器的地址。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容