簡(jiǎn)介 TCP 和 UDP 區(qū)別,他們位于哪一層?
TCP --- 傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。 理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接前,TCP 連接都將被一直保持下去。斷開連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開TCP連接的請(qǐng)求
UDP --- 用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)無(wú)連接的簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快
位于 OSI 七層模型的第四層(由下往上)傳輸層
路由器和交換機(jī)的工作原理大概是什么,他們分別用到什么協(xié)議,位于哪一層?
交換機(jī)主要基于網(wǎng)橋技術(shù),用于組建局域網(wǎng),局域網(wǎng)中的終端與終端可以進(jìn)行數(shù)據(jù)交換;路由器主要基于路由選擇技術(shù),用于將數(shù)據(jù)路由到上層網(wǎng)路的正確路徑中。
交換機(jī)工作在數(shù)據(jù)鏈路層(7層網(wǎng)絡(luò)協(xié)議的第二層);路由器工作在網(wǎng)絡(luò)層(7層網(wǎng)絡(luò)協(xié)議的第三層)。
交換機(jī)識(shí)別的是MAC地址;路由器識(shí)別的是IP地址。
描述TCP 協(xié)議三次握手,四次釋放的過程。
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
四次握手關(guān)閉連接:
(客戶端):我要關(guān)閉連接了。
(服務(wù)端):你那邊的連接可以關(guān)閉了。
(服務(wù)端):我這邊也要關(guān)閉連接了。
(客戶端):你那邊的連接可以關(guān)閉了。
由于連接是雙向的,所以雙方都要主動(dòng)關(guān)閉自己這一側(cè)的連接。
TCP 協(xié)議是如何進(jìn)行流量控制,擁塞控制的?
1、通信開始時(shí),發(fā)送方的擁塞窗口大小為 1。每收到一個(gè) ACK 確認(rèn)后,擁塞窗口翻倍。
2、由于指數(shù)級(jí)增長(zhǎng)非常快,很快地,就會(huì)出現(xiàn)確認(rèn)包超時(shí)。
3、此時(shí)設(shè)置一個(gè)“慢啟動(dòng)閾值”,它的值是當(dāng)前擁塞窗口大小的一半。
4、同時(shí)將擁塞窗口大小設(shè)置為 1,重新進(jìn)入慢啟動(dòng)過程。
5、由于現(xiàn)在“慢啟動(dòng)閾值”已經(jīng)存在,當(dāng)擁塞窗口大小達(dá)到閾值時(shí),不再翻倍,而是線性增加。
6、隨著窗口大小不斷增加,可能收到三次重復(fù)確認(rèn)應(yīng)答(發(fā)送方意識(shí)到接收方?jīng)]收到數(shù)據(jù),所以重發(fā)),進(jìn)入“快速重發(fā)”階段。
7、這時(shí)候,TCP 將“慢啟動(dòng)閾值”設(shè)置為當(dāng)前擁塞窗口大小的一半,再將擁塞窗口大小設(shè)置成閾值大小(也有說加 3)。
8、擁塞窗口又會(huì)線性增加,直至下一次出現(xiàn)三次重復(fù)確認(rèn)應(yīng)答或超時(shí)。
為什么建立連接時(shí)是三次握手,兩次行不行?如果第三次握手失敗了怎么處理
根據(jù)一般的思路,我們可能會(huì)覺得只要兩次握手就可以了,第三步確認(rèn)看似是多余的。那么 TCP 協(xié)議為什么還要費(fèi)力不討好的加上這一次握手呢?
這是因?yàn)樵诰W(wǎng)絡(luò)請(qǐng)求中,我們應(yīng)該時(shí)刻記住:“網(wǎng)絡(luò)是不可靠的,數(shù)據(jù)包是可能丟失的”。假設(shè)沒有第三次確認(rèn),客戶端向服務(wù)端發(fā)送了 SYN,請(qǐng)求建立連接。由于延遲,服務(wù)端沒有及時(shí)收到這個(gè)包。于是客戶端重新發(fā)送一個(gè) SYN 包。回憶一下介紹 TCP 首部時(shí)提到的序列號(hào),這兩個(gè)包的序列號(hào)顯然是相同的。
假設(shè)服務(wù)端接收到了第二個(gè) SYN 包,建立了通信,一段時(shí)間后通信結(jié)束,連接被關(guān)閉。這時(shí)候最初被發(fā)送的 SYN 包剛剛抵達(dá)服務(wù)端,服務(wù)端又會(huì)發(fā)送一次 ACK 確認(rèn)。由于兩次握手就建立了連接,此時(shí)的服務(wù)端就會(huì)建立一個(gè)新的連接,然而客戶端覺得自己并沒有請(qǐng)求建立連接,所以就不會(huì)向服務(wù)端發(fā)送數(shù)據(jù)。從而導(dǎo)致服務(wù)端建立了一個(gè)空的連接,白白浪費(fèi)資源。
在三次握手的情況下,服務(wù)端直到收到客戶端的應(yīng)答后才會(huì)建立連接。因此在上述情況下,客戶端會(huì)接受到一個(gè)相同的 ACK 包,這時(shí)候它會(huì)拋棄這個(gè)數(shù)據(jù)包,不會(huì)和服務(wù)端進(jìn)行第三次握手,因此避免了服務(wù)端建立空的連接。
關(guān)閉連接時(shí),第四次握手失敗怎么處理?
實(shí)際上,在第三步中,客戶端收到 FIN 包時(shí),它會(huì)設(shè)置一個(gè)計(jì)時(shí)器,等待相當(dāng)長(zhǎng)的一段時(shí)間。如果客戶端返回的 ACK 丟失,那么服務(wù)端還會(huì)重發(fā) FIN 并重置計(jì)時(shí)器。假設(shè)在計(jì)時(shí)器失效前服務(wù)器重發(fā)的 FIN 包沒有到達(dá)客戶端,客戶端就會(huì)進(jìn)入 CLOSE 狀態(tài),從而導(dǎo)致服務(wù)端永遠(yuǎn)無(wú)法收到 ACK 確認(rèn),也就無(wú)法關(guān)閉連接。
你怎么理解分層和協(xié)議?
HTTP 請(qǐng)求中的GET 和 POST 的區(qū)別,Session 和 Cookie 的區(qū)別。
GET 請(qǐng)求通常用于查詢、獲取數(shù)據(jù),而 POST 請(qǐng)求則用于發(fā)送數(shù)據(jù),除了用途上的區(qū)別,它們還有以下這些不同:
GET 請(qǐng)求可以被緩存,可以被收藏為書簽,但 POST 不行。
GET 請(qǐng)求會(huì)保留在瀏覽器的歷史記錄中,POST 不會(huì)。
GET 請(qǐng)求的長(zhǎng)度有限制(不同的瀏覽器不一樣,大約在幾 Kb 左右),URL 的數(shù)據(jù)類型只能是 ASCII 字符,POST 請(qǐng)求沒有限制。
GET 請(qǐng)求的參數(shù)在 URL 中,因此絕不能用 GET 請(qǐng)求傳輸敏感數(shù)據(jù)。POST 請(qǐng)求數(shù)據(jù)則寫在 HTTP 的請(qǐng)求頭中,安全性略高于 GET 請(qǐng)求。
注意:
POST 請(qǐng)求僅比 GET 請(qǐng)求略安全一點(diǎn),它的數(shù)據(jù)不在 URL 中,但依然以明文的形式存放于 HTTP 的請(qǐng)求頭中。
cookie 、session 這兩者的根本性區(qū)別在于,cookie 保存在客戶端上,而 session 則保存在服務(wù)器中。由此我們還可以拓展出以下結(jié)論:
1、cookie 相對(duì)來(lái)說不安全,瀏覽器可以分析本地的 cookie 進(jìn)行 cookie 欺騙。
2、session 可以設(shè)置超時(shí)時(shí)間,超過這個(gè)時(shí)間后就失效,以免長(zhǎng)期占用服務(wù)端內(nèi)存。
3、單個(gè) cookie 的大小有限制(4 Kb),每個(gè)站點(diǎn)的 cookie 數(shù)量一般也有限制(20個(gè))。
4、客戶端每次都會(huì)把 cookie 發(fā)送到服務(wù)端,因此服務(wù)端可以知道 cookie,但是客戶端不知道 session。
5、當(dāng)服務(wù)器接收到 cookie 后,會(huì)根據(jù) cookie 中的 SessionID 來(lái)找到這個(gè)客戶的 session。如果沒有,則會(huì)生成一個(gè)新的 SessionID 發(fā)送給客戶端。
談?wù)勀銓?duì) HTTP 1.1,2.0 和 HTTPS 的理解。
HTTPS是安全的HTTP