一.計(jì)算機(jī)網(wǎng)絡(luò)
1.get請(qǐng)求和post請(qǐng)求的區(qū)別
- get和post都是http協(xié)議里發(fā)送請(qǐng)求方式之一。
- 最直觀的區(qū)別是get把參數(shù)包含在url里面;post通過(guò)request body來(lái)傳遞參數(shù)。
- 比較微觀的是:get方式請(qǐng)求,瀏覽器會(huì)把:header和data一起發(fā)送,服務(wù)器相應(yīng);post方式請(qǐng)求,瀏覽器先發(fā)送header,然后服務(wù)器響應(yīng),然后瀏覽器再發(fā)送data,服務(wù)器再響應(yīng)。
2.在瀏覽器網(wǎng)址輸入一個(gè)url后直到瀏覽器顯示頁(yè)面的過(guò)程 (這邊面試官可能會(huì)詳細(xì)的考察DNS服務(wù)器的知識(shí))
-
輸入地址
- 此時(shí)瀏覽器已經(jīng)在匹配url
-
瀏覽器查找url對(duì)應(yīng)ip地址:
- 瀏覽器查找hosts文件,如果文件里面有,直接利用hosts里面的ip地址。
- hosts沒(méi)有時(shí),瀏覽器發(fā)送DNS請(qǐng)求到本地的DNS服務(wù)器(本地DNS服務(wù)器一般會(huì)接入運(yùn)營(yíng)商,如電信、聯(lián)通等)
- 查詢到網(wǎng)址的dns請(qǐng)求后,本地dns先查詢自己的緩存,如果有直接返回,沒(méi)有則向根dns服務(wù)器查詢。
- 根dns服務(wù)器沒(méi)有記錄具體域名與ip地址的對(duì)應(yīng)關(guān)系,指揮告訴本地dns服務(wù)器對(duì)應(yīng)的根服務(wù)器地址,讓本地dns服務(wù)器去跟地址請(qǐng)求。
- 本地dns繼續(xù)向域名服務(wù)器發(fā)送請(qǐng)求,對(duì)應(yīng)域名服務(wù)器也不會(huì)直接返回域名與ip地址的對(duì)應(yīng)關(guān)系,而是告訴本地dns域名解析服務(wù)器的地址。
- 本地dns收到域名解析服務(wù)器地址后,發(fā)送請(qǐng)求,就收到ip地址與域名的對(duì)應(yīng)關(guān)系。
- 收到后,本地dns服務(wù)器不僅要將此關(guān)系返回,還要緩存此關(guān)系,下次用戶訪問(wèn)時(shí),直接從緩存區(qū)取出,加速訪問(wèn)。
-
TCP連接
- 客戶端發(fā)送一個(gè)帶 SYN=1,Seq=X 的數(shù)據(jù)包到服務(wù)器端口(第一次握手,由瀏覽器發(fā)起,告訴服務(wù)器我要發(fā)送請(qǐng)求了)
- 服務(wù)器發(fā)回一個(gè)帶 SYN=1, ACK=X+1, Seq=Y 的響應(yīng)包以示傳達(dá)確認(rèn)信息(第二次握手,由服務(wù)器發(fā)起,告訴瀏覽器我準(zhǔn)備接受了,你趕緊發(fā)送吧)
- 客戶端再回傳一個(gè)帶 ACK=Y+1, Seq=Z 的數(shù)據(jù)包,代表“握手結(jié)束”(第三次握手,由瀏覽器發(fā)送,告訴服務(wù)器,我馬上就發(fā)了,準(zhǔn)備接受吧)
-
發(fā)送http請(qǐng)求報(bào)文。
- 請(qǐng)求行包含請(qǐng)求方法、url、協(xié)議版本。
- 請(qǐng)求頭包含請(qǐng)求的附加信息,由關(guān)鍵字、值對(duì)組成,每行一對(duì),關(guān)鍵字和值用英文冒號(hào)“:”隔開(kāi)。
- 請(qǐng)求體,可以承載多個(gè)請(qǐng)求參數(shù)的數(shù)據(jù),包含回車(chē)符、換行符和請(qǐng)求數(shù)據(jù),并不是所有請(qǐng)求都有請(qǐng)求數(shù)據(jù)。
服務(wù)器處理請(qǐng)求并返回http報(bào)文。
-
瀏覽器解析渲染頁(yè)面。
- 根據(jù)html解析dom樹(shù)
- 根據(jù)css解析生成css規(guī)則樹(shù)
- 結(jié)合dom和css生成渲染樹(shù)
- 根據(jù)渲染樹(shù)計(jì)算每一個(gè)節(jié)點(diǎn)的信息
- 根據(jù)計(jì)算好的信息繪制頁(yè)面
-
斷開(kāi)連接(tcp四次揮手)
- 發(fā)起方被動(dòng)發(fā)送報(bào)文:fin、ack、seq,表示已經(jīng)沒(méi)有數(shù)據(jù)傳輸了,并進(jìn)入fin-wait-1狀態(tài)。(第一次揮手由瀏覽器發(fā)送,表示自己報(bào)文已經(jīng)發(fā)送完成,讓服務(wù)器準(zhǔn)備關(guān)閉)。
- 被動(dòng)方發(fā)送報(bào)文:ack、seq,表示同意關(guān)閉請(qǐng)求,并進(jìn)入fin-wait-2狀態(tài)。(第二次揮手:由服務(wù)器發(fā)起,告訴瀏覽器:我的請(qǐng)求報(bào)文接收完了,我準(zhǔn)備關(guān)閉了,你也準(zhǔn)備吧)
- 被動(dòng)方發(fā)起報(bào)文fin、ack、seq,請(qǐng)求關(guān)閉連接,并進(jìn)入last-ack狀態(tài)。(第三次揮手,由服務(wù)器發(fā)起,告訴瀏覽器我的報(bào)文已經(jīng)發(fā)送完畢了,你準(zhǔn)備關(guān)閉吧)
- 發(fā)起方發(fā)送報(bào)文,ack、seq,然后進(jìn)入等待狀態(tài),一定時(shí)間內(nèi)沒(méi)有回復(fù),則正常關(guān)閉。(第四次揮手:由瀏覽器發(fā)起,告訴服務(wù)器,我的響應(yīng)報(bào)文接受完了,你也準(zhǔn)備吧)
(補(bǔ)充)dns服務(wù)器是什么,有什么用?
- DNS是domain name system ,域名系統(tǒng)。
- 是英特網(wǎng)上作為域名和ip地址的相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更加方便的訪問(wèn)互聯(lián)網(wǎng),而不是去記住ip地址串。通過(guò)主機(jī)名,最終得到ip地址的過(guò)程叫做域名解析。
- 域名解析的好處是我們不用記住ip地址串了,直接記住域名即可,壞處是可能dns被污染或劫持,使相應(yīng)的用戶無(wú)法訪問(wèn)對(duì)應(yīng)的網(wǎng)站(主機(jī))。
3.tcp三次握手和四次揮手的過(guò)程 (為什么不可以兩次握手,為什么握手要三次,揮手需要四次)
三次握手
- tcp服務(wù)器進(jìn)程先船艦傳輸控制模塊tcb,時(shí)刻準(zhǔn)備接受客戶端進(jìn)程的連接邀請(qǐng),此時(shí)服務(wù)器進(jìn)入了listen(監(jiān)聽(tīng))狀態(tài)
- tcp客戶端進(jìn)程也是先創(chuàng)造tcb傳輸控制模塊,然后向服務(wù)器發(fā)送請(qǐng)求報(bào)文,這時(shí)報(bào)文首部syn=1.同時(shí)選擇一個(gè)初始序列號(hào)seq=x,此時(shí),tcp客戶端進(jìn)入syn-sent(同步已發(fā)送狀態(tài))。tcp規(guī)定,syn報(bào)文不能攜帶數(shù)據(jù),但是需要消耗一個(gè)序號(hào)。
- tcp服務(wù)器收到請(qǐng)求報(bào)文后,如果同意連接,發(fā)送確認(rèn)報(bào)文。確認(rèn)報(bào)文中,ack=1,syn=1,確定號(hào)是ack=x+1,為自己初始化一個(gè)seq=y,此時(shí),tcp服務(wù)器進(jìn)入syn-rcvd(同步收到)狀態(tài)。這個(gè)報(bào)文也不能攜帶數(shù)據(jù),消耗一個(gè)序號(hào)。
- tcp收到確認(rèn)后,還要向服務(wù)器給出確認(rèn)。確認(rèn)保溫ack=1,seq=x+1,ack=y+1.此時(shí),tcp連接,客戶端進(jìn)入established(已連接)狀態(tài)。tcp規(guī)定,ack報(bào)文可以攜帶數(shù)據(jù),如果不懈怠,則不消耗序號(hào)
- 服務(wù)器收到tcp的確認(rèn)后,也進(jìn)入ESTABLLISHED狀態(tài),此后雙方可以正常通信。
為什么tcp客戶端最后還要發(fā)送一次確認(rèn)?
- 防止已失效的連接請(qǐng)求報(bào)文又重新傳到服務(wù)器,從而發(fā)生錯(cuò)誤。
- 假設(shè)是兩次握手,tcp客戶端發(fā)送了一個(gè)請(qǐng)求,沒(méi)有丟失但是在網(wǎng)絡(luò)節(jié)點(diǎn)滯留時(shí)間很長(zhǎng),由于tcp認(rèn)為服務(wù)器沒(méi)有收到,再發(fā)送一個(gè),結(jié)果第二個(gè)連上了,第一個(gè)才到,那么就再次建立連接。
四次揮手
客戶端發(fā)送釋放報(bào)文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部Fin=1,序列號(hào)為seq=u(前一個(gè)發(fā)送過(guò)來(lái)的序號(hào)+1),此時(shí),客戶端進(jìn)入fin-wait-1(終止等待)狀態(tài)。tcp規(guī)定,fin報(bào)文段不懈怠數(shù)據(jù),也要消耗一個(gè)字段。
服務(wù)器收到連接釋放報(bào)文,發(fā)出確認(rèn)報(bào)文ACK=1,ack=u+1,并且?guī)献约旱男蛄刑?hào)seq=v,此時(shí),服務(wù)端就進(jìn)入了close-wait(關(guān)閉等待)狀態(tài)。tcp服務(wù)器通知高層應(yīng)用進(jìn)程,客戶端要向服務(wù)端釋放了,這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但是服務(wù)器如果發(fā)送數(shù)據(jù),客戶端也照常接受。這個(gè)狀態(tài)要持續(xù)一段時(shí)間,就是整個(gè)close-wait狀態(tài)持續(xù)時(shí)間。
客戶端收到服務(wù)器請(qǐng)求后,就進(jìn)入fin-wait-2狀態(tài)等待服務(wù)器發(fā)送連續(xù)釋放報(bào)文(在這之前還要服務(wù)器發(fā)送最后的數(shù)據(jù))。
服務(wù)器最后數(shù)據(jù)發(fā)送完畢后,向客戶端發(fā)送連接釋放報(bào)文。fin=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器可能又發(fā)送一些數(shù)據(jù),假定此時(shí)的序號(hào)為seq=w,此時(shí),服務(wù)器進(jìn)入了last-ack(最后確認(rèn))狀態(tài)。
客戶端收到服務(wù)器的連接釋放報(bào)文之后,必須發(fā)出確認(rèn),ACK=1,ack=w+1,而自己的序列號(hào)是seq=u+1,此時(shí),客戶端就進(jìn)入time-wait狀態(tài)。注意此時(shí)tcp連接還沒(méi)有釋放,必須經(jīng)過(guò)2msl(最長(zhǎng)報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷(xiāo)相應(yīng)的tcb后,才進(jìn)入closed狀態(tài)。*
服務(wù)器只要接收到客戶端的確認(rèn),立刻關(guān)閉,同樣,撤銷(xiāo)tcb后,就結(jié)束了這次tcb連接。可以看到,服務(wù)器結(jié)束tcp連接的時(shí)間比客戶端早一點(diǎn)。
為什么客戶端最后還要等待2MSL?
MSL(Maximum Segment Lifetime),TCP允許不同的實(shí)現(xiàn)可以設(shè)置不同的MSL值。
第一,保證客戶端發(fā)送的最后一個(gè)ACK報(bào)文能夠到達(dá)服務(wù)器,因?yàn)檫@個(gè)ACK報(bào)文可能丟失,站在服務(wù)器的角度看來(lái),我已經(jīng)發(fā)送了FIN+ACK報(bào)文請(qǐng)求斷開(kāi)了,客戶端還沒(méi)有給我回應(yīng),應(yīng)該是我發(fā)送的請(qǐng)求斷開(kāi)報(bào)文它沒(méi)有收到,于是服務(wù)器又會(huì)重新發(fā)送一次,而客戶端就能在這個(gè)2MSL時(shí)間段內(nèi)收到這個(gè)重傳的報(bào)文,接著給出回應(yīng)報(bào)文,并且會(huì)重啟2MSL計(jì)時(shí)器。
第二,防止類(lèi)似與“三次握手”中提到了的“已經(jīng)失效的連接請(qǐng)求報(bào)文段”出現(xiàn)在本連接中??蛻舳税l(fā)送完最后一個(gè)確認(rèn)報(bào)文后,在這個(gè)2MSL時(shí)間中,就可以使本連接持續(xù)的時(shí)間內(nèi)所產(chǎn)生的所有報(bào)文段都從網(wǎng)絡(luò)中消失。這樣新的連接中不會(huì)出現(xiàn)舊連接的請(qǐng)求報(bào)文。
4.七層OSI模型或TCP/IP協(xié)議模型 (各層分別實(shí)現(xiàn)了什么協(xié)議)
應(yīng)用層
- 應(yīng)用層(application-layer)的任務(wù)是通過(guò)應(yīng)用進(jìn)程間的交互來(lái)完成特定網(wǎng)絡(luò)應(yīng)用。應(yīng)用層協(xié)議定義的是應(yīng)用進(jìn)程(進(jìn)程:主機(jī)中正在運(yùn)行的程序)間的通信和交互的規(guī)則。對(duì)于不同的網(wǎng)絡(luò)應(yīng)用需要不同的應(yīng)用層協(xié)議。在互聯(lián)網(wǎng)中應(yīng)用層協(xié)議很多,如域名系統(tǒng)DNS,支持萬(wàn)維網(wǎng)應(yīng)用的 HTTP協(xié)議,支持電子郵件的 SMTP協(xié)議等等。我們把應(yīng)用層交互的數(shù)據(jù)單元稱(chēng)為報(bào)文。
傳輸層
-
傳輸層(transport layer)的主要任務(wù)就是負(fù)責(zé)向兩臺(tái)主機(jī)進(jìn)程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù)。應(yīng)用進(jìn)程利用該服務(wù)傳送應(yīng)用層報(bào)文。“通用的”是指并不針對(duì)某一個(gè)特定的網(wǎng)絡(luò)應(yīng)用,而是多種應(yīng)用可以使用同一個(gè)運(yùn)輸層服務(wù)。由于一臺(tái)主機(jī)可同時(shí)運(yùn)行多個(gè)線程,因此運(yùn)輸層有復(fù)用和分用的功能。所謂復(fù)用就是指多個(gè)應(yīng)用層進(jìn)程可同時(shí)使用下面運(yùn)輸層的服務(wù),分用和復(fù)用相反,是運(yùn)輸層把收到的信息分別交付上面應(yīng)用層中的相應(yīng)進(jìn)程。
傳輸層主要使用以下兩種協(xié)議:
- 傳輸控制協(xié)議 TCP(Transmission Control Protocol)--提供面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)。
- 用戶數(shù)據(jù)協(xié)議 UDP(User Datagram Protocol)--提供無(wú)連接的,盡最大努力的數(shù)據(jù)傳輸服務(wù)(不保證數(shù)據(jù)傳輸?shù)目煽啃?/strong>)。
網(wǎng)絡(luò)層
在 計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行通信的兩個(gè)計(jì)算機(jī)之間可能會(huì)經(jīng)過(guò)很多個(gè)數(shù)據(jù)鏈路,也可能還要經(jīng)過(guò)很多通信子網(wǎng)。網(wǎng)絡(luò)層的任務(wù)就是選擇合適的網(wǎng)間路由和交換結(jié)點(diǎn), 確保數(shù)據(jù)及時(shí)傳送。 在發(fā)送數(shù)據(jù)時(shí),網(wǎng)絡(luò)層把運(yùn)輸層產(chǎn)生的報(bào)文段或用戶數(shù)據(jù)報(bào)封裝成分組和包進(jìn)行傳送。在 TCP/IP 體系結(jié)構(gòu)中,由于網(wǎng)絡(luò)層使用 IP 協(xié)議,因此分組也叫 IP 數(shù)據(jù)報(bào) ,簡(jiǎn)稱(chēng) 數(shù)據(jù)報(bào)。
這里要注意:不要把運(yùn)輸層的“用戶數(shù)據(jù)報(bào) UDP ”和網(wǎng)絡(luò)層的“ IP 數(shù)據(jù)報(bào)”弄混。另外,無(wú)論是哪一層的數(shù)據(jù)單元,都可籠統(tǒng)地用“分組”來(lái)表示。
這里強(qiáng)調(diào)指出,網(wǎng)絡(luò)層中的“網(wǎng)絡(luò)”二字已經(jīng)不是我們通常談到的具體網(wǎng)絡(luò),而是指計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)模型中第三層的名稱(chēng).
互聯(lián)網(wǎng)是由大量的異構(gòu)(heterogeneous)網(wǎng)絡(luò)通過(guò)路由器(router)相互連接起來(lái)的?;ヂ?lián)網(wǎng)使用的網(wǎng)絡(luò)層協(xié)議是無(wú)連接的網(wǎng)際協(xié)議(Internet Protocol)和許多路由選擇協(xié)議,因此互聯(lián)網(wǎng)的網(wǎng)絡(luò)層也叫做網(wǎng)際層或IP層。
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層(data link layer)通常簡(jiǎn)稱(chēng)為鏈路層。兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專(zhuān)門(mén)的鏈路層的協(xié)議。 在兩個(gè)相鄰節(jié)點(diǎn)之間傳送數(shù)據(jù)時(shí),數(shù)據(jù)鏈路層將網(wǎng)絡(luò)層交下來(lái)的 IP 數(shù)據(jù)報(bào)組裝成幀,在兩個(gè)相鄰節(jié)點(diǎn)間的鏈路上傳送幀。每一幀包括數(shù)據(jù)和必要的控制信息(如同步信息,地址信息,差錯(cuò)控制等)。
在接收數(shù)據(jù)時(shí),控制信息使接收端能夠知道一個(gè)幀從哪個(gè)比特開(kāi)始和到哪個(gè)比特結(jié)束。這樣,數(shù)據(jù)鏈路層在收到一個(gè)幀后,就可從中提出數(shù)據(jù)部分,上交給網(wǎng)絡(luò)層。 控制信息還使接收端能夠檢測(cè)到所收到的幀中有無(wú)差錯(cuò)。如果發(fā)現(xiàn)差錯(cuò),數(shù)據(jù)鏈路層就簡(jiǎn)單地丟棄這個(gè)出了差錯(cuò)的幀,以避免繼續(xù)在網(wǎng)絡(luò)中傳送下去白白浪費(fèi)網(wǎng)絡(luò)資源。如果需要改正數(shù)據(jù)在鏈路層傳輸時(shí)出現(xiàn)差錯(cuò)(這就是說(shuō),數(shù)據(jù)鏈路層不僅要檢錯(cuò),而且還要糾錯(cuò)),那么就要采用可靠性傳輸協(xié)議來(lái)糾正出現(xiàn)的差錯(cuò)。這種方法會(huì)使鏈路層的協(xié)議復(fù)雜些。
物理層
物理層(physical layer)的作用是實(shí)現(xiàn)相鄰計(jì)算機(jī)節(jié)點(diǎn)之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質(zhì)和物理設(shè)備的差異, 使其上面的數(shù)據(jù)鏈路層不必考慮網(wǎng)絡(luò)的具體傳輸介質(zhì)是什么?!巴该鱾魉捅忍亓鳌北硎窘?jīng)實(shí)際電路傳送后的比特流沒(méi)有發(fā)生變化,對(duì)傳送的比特流來(lái)說(shuō),這個(gè)電路好像是看不見(jiàn)的。
5.各種io模型的知識(shí) (BIO,NIO,AIO)
1.BIO (同步阻塞I/O模式)
數(shù)據(jù)的讀取寫(xiě)入必須阻塞在一個(gè)線程內(nèi)等待其完成。
這里使用那個(gè)經(jīng)典的燒開(kāi)水例子,這里假設(shè)一個(gè)燒開(kāi)水的場(chǎng)景,有一排水壺在燒開(kāi)水,BIO的工作模式就是, 叫一個(gè)線程停留在一個(gè)水壺那,直到這個(gè)水壺?zé)_(kāi),才去處理下一個(gè)水壺。但是實(shí)際上線程在等待水壺?zé)_(kāi)的時(shí)間段什么都沒(méi)有做。
2.NIO(同步非阻塞)
同時(shí)支持阻塞與非阻塞模式,但這里我們以其同步非阻塞I/O模式來(lái)說(shuō)明,那么什么叫做同步非阻塞?如果還拿燒開(kāi)水來(lái)說(shuō),NIO的做法是叫一個(gè)線程不斷的輪詢每個(gè)水壺的狀態(tài),看看是否有水壺的狀態(tài)發(fā)生了改變,從而進(jìn)行下一步的操作。
3.AIO (異步非阻塞I/O模型)
異步非阻塞與同步非阻塞的區(qū)別在哪里?異步非阻塞無(wú)需一個(gè)線程去輪詢所有IO操作的狀態(tài)改變,在相應(yīng)的狀態(tài)改變后,系統(tǒng)會(huì)通知對(duì)應(yīng)的線程來(lái)處理。對(duì)應(yīng)到燒開(kāi)水中就是,為每個(gè)水壺上面裝了一個(gè)開(kāi)關(guān),水燒開(kāi)之后,水壺會(huì)自動(dòng)通知我水燒開(kāi)了。
6.http協(xié)議和tcp協(xié)議的區(qū)別
tcp是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸?shù)膯?wèn)題,而http是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)的問(wèn)題。
把ip想象成一條高速公路,它允許其他協(xié)議在上面行駛并找到其他電腦的出入口。TCP和UDP使用該協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò)。把ip想象成一種高速公路,tcp和udp就是上面的卡車(chē),用來(lái)運(yùn)輸http等各種協(xié)議
7.https和http的區(qū)別
- 端口:http的url由“http://”其實(shí)并且使用80端口,而https的url由“https://”起始且默認(rèn)使用端口443
- 安全性和資源:http協(xié)議運(yùn)行在tcp之上,所有傳輸都是明文,客戶端和服務(wù)器都無(wú)法驗(yàn)證對(duì)方身份,https運(yùn)行在ssl/tsl之上的http協(xié)議,所有傳輸內(nèi)容都經(jīng)過(guò)加密,采用對(duì)稱(chēng)加密,但對(duì)稱(chēng)加密的密鑰服務(wù)器方的證書(shū)使用了非對(duì)稱(chēng)加密。所以說(shuō),http安全性沒(méi)有https高,但是https比http消耗了更多的服務(wù)器資源。
8.https的請(qǐng)求過(guò)程
- 瀏覽器向服務(wù)器發(fā)起443端口請(qǐng)求,請(qǐng)求攜帶了瀏覽器支持的加密算法和哈希算法。
- 服務(wù)器收到請(qǐng)求,選擇瀏覽器支持的加密算法和哈希算法。
- 服務(wù)器將數(shù)字證書(shū)返回給瀏覽器。
- 瀏覽器進(jìn)入數(shù)字證書(shū)認(rèn)證環(huán)節(jié),這部分是瀏覽器內(nèi)置的tsl完成的
- 瀏覽器會(huì)從內(nèi)置的證書(shū)列表中索引,查找對(duì)應(yīng)的機(jī)構(gòu)。如果沒(méi)有找到,那么會(huì)提示這個(gè)證書(shū)不是權(quán)威機(jī)構(gòu)頒發(fā),是不可靠的。如果找到,則取出對(duì)應(yīng)機(jī)構(gòu)的公鑰。
- 用機(jī)構(gòu)的公鑰解密得到數(shù)字證書(shū)的內(nèi)容和證書(shū)簽名,內(nèi)容包括網(wǎng)站網(wǎng)址、網(wǎng)站公鑰、證書(shū)的有效期等。瀏覽器會(huì)先驗(yàn)證證書(shū)簽名的合法性,簽名通過(guò)后,瀏覽器驗(yàn)證證書(shū)記錄的網(wǎng)址是否和當(dāng)前網(wǎng)址一致,如果一致,就開(kāi)始安全使用公鑰,不一致提示用戶。
- 瀏覽器生成一個(gè)隨機(jī)數(shù)r,用公鑰進(jìn)行加密。
- 瀏覽器將加密的r發(fā)送給服務(wù)器。
- 服務(wù)器用自己的私鑰解密得到r。
- 服務(wù)器將r作為密鑰使用對(duì)稱(chēng)加密算法加密網(wǎng)頁(yè)內(nèi)容并且將內(nèi)容傳輸給瀏覽器。
- 瀏覽器以r作為密鑰使用之前約定好的解密算法獲取網(wǎng)頁(yè)內(nèi)容。
9.http協(xié)議的發(fā)展歷程
10.lvs,nginx,HA在七層網(wǎng)絡(luò)協(xié)議中分別作用于哪層,各自的區(qū)別
11.tcp如何實(shí)現(xiàn)可靠傳輸 (如何實(shí)現(xiàn)udp的可靠傳輸)
- 數(shù)據(jù)被分割為tcp認(rèn)為最合適發(fā)送的數(shù)據(jù)塊。
- tcp給發(fā)的每一個(gè)包進(jìn)行編號(hào),接收方對(duì)數(shù)據(jù)包進(jìn)行排序,把有序數(shù)據(jù)傳給應(yīng)用層。
- 校驗(yàn)和:tcp將保持它首部和數(shù)據(jù)的校驗(yàn)和。這是一個(gè)端到端的校驗(yàn)和,檢測(cè)數(shù)據(jù)在傳輸過(guò)程中有無(wú)任何變化,如果有差錯(cuò),則棄之不用。
- tcp接收端會(huì)丟棄重復(fù)數(shù)據(jù)。
- 流量控制:tcp連接的每一方都有固定大小的緩沖空間,tcp的接收端只允許發(fā)送端發(fā)送接收端緩沖區(qū)能夠接納的數(shù)據(jù)。用滑動(dòng)窗口控制。
- 擁塞控制:當(dāng)網(wǎng)絡(luò)擁塞時(shí),減少數(shù)據(jù)發(fā)送。
- arq協(xié)議:為了實(shí)現(xiàn)可靠傳輸,他的基本原理是每發(fā)完一個(gè)分組停止發(fā)送,直到收到對(duì)方的確認(rèn)。
- 超時(shí)重傳:當(dāng)tcp發(fā)出一個(gè)分組后,啟動(dòng)計(jì)時(shí)器,當(dāng)收不到確認(rèn),重新發(fā)送該報(bào)文。
arq協(xié)議
Automatic Repeat-reQuest,自動(dòng)重傳協(xié)議,是ois模型直以,包括停止等待協(xié)議和連續(xù)arq協(xié)議。
- 停止等待arq協(xié)議:停止等待是為了實(shí)現(xiàn)可靠傳輸,他發(fā)了一組就停止等待確認(rèn),過(guò)了一段時(shí)間沒(méi)有回復(fù)就重新發(fā)送。
- 連續(xù)arq協(xié)議:設(shè)置一個(gè)發(fā)送窗口,凡是發(fā)送窗口內(nèi)的分組都連續(xù)發(fā)送出去,不需要等待對(duì)方確認(rèn)。接收方進(jìn)行累計(jì)確認(rèn)。
12.tcp和udp的區(qū)別
| 類(lèi)型 | 特 | 點(diǎn) | 性 | 能 | 應(yīng)用場(chǎng)景 | 首部字節(jié) | |
|---|---|---|---|---|---|---|---|
| 是否面向連接 | 是否可靠 | 傳輸形式 | 傳輸效率 | 所需資源 | |||
| tcp | 面向連接 | 可靠 | 字節(jié)流 | 慢 | 多 | 要求通信可靠 | 20-60 |
| udp | 無(wú)連接 | 不可靠 | 數(shù)據(jù)報(bào)文段 | 快 | 少 | 要求通信速度高 | 8 |
- udp在傳輸數(shù)據(jù)之前不需要建立連接,遠(yuǎn)程主機(jī)接收到報(bào)文不需要給出任何確定。
- tcp提供面向連接服務(wù),必須進(jìn)行三次握手,四次揮手,不提供廣播或者多播服務(wù),只提供可靠的、面向連接的服務(wù)。