一、三次握手的作用
為了確認(rèn)雙方具有接收和發(fā)送的能力。
二、三次握手的原因
1.?可以阻止重復(fù)歷史連接的初始化(主要原因)。
2.?可以同步雙方的初始序列號(hào)。
3. 可以避免資源的浪費(fèi)。
三、分析原因
1.?為了防止舊的重復(fù)連接初始化造成混亂。
當(dāng)客戶端發(fā)送了一個(gè) SYN 報(bào)文后,突然宕機(jī)了,并且這個(gè) SYN 報(bào)文還被網(wǎng)絡(luò)阻塞了,這時(shí)服務(wù)端還沒有接收到客戶端發(fā)過來的報(bào)文,之后,當(dāng)客戶端重啟后,又重新向服務(wù)端建立連接,再次發(fā)送 SYN 報(bào)文(注意這次發(fā)送的 SYN 報(bào)文與之前發(fā)送的 SYN 報(bào)文的序列號(hào)是不同的,屬于兩個(gè)不同的報(bào)文)。
對(duì)于兩個(gè) SYN 報(bào)文,服務(wù)端是先接收 [舊 SYN 報(bào)文],再接收 [新 SYN 報(bào)文],那么當(dāng) [舊 SYN 報(bào)文] 先到達(dá)服務(wù)端后,服務(wù)端就會(huì)返回一個(gè) SYN+ACK 報(bào)文給客戶端。
三次握手時(shí),客戶端收到后可以根據(jù)自身的上下文,判斷是否是一個(gè)歷史連接(序列號(hào)過期或超時(shí)),那么客戶端就會(huì)發(fā)送 RST 報(bào)文給服務(wù)端,表示終止這一次連接。如果是兩次握手,就無法阻止歷史連接,因?yàn)榭蛻舳藳]有中間狀態(tài) RST 給服務(wù)端來阻止連接,導(dǎo)致會(huì)建立一個(gè)歷史連接,造成資源浪費(fèi)。
2.?同步雙方初始序列號(hào)?
TCP 協(xié)議通信的雙方,都必須維護(hù)一個(gè)序列號(hào),序列號(hào)是可靠傳輸?shù)囊粋€(gè)關(guān)鍵因素,作用是:
- 接收方可以去除重復(fù)的數(shù)據(jù);
- 接收方可以根據(jù)數(shù)據(jù)包的序列號(hào)按序接收;
- 可以標(biāo)識(shí)發(fā)送出去的數(shù)據(jù)包中,哪些是已經(jīng)被對(duì)方收到的;
客戶端發(fā)送攜帶 [初始序列號(hào)] SYN 報(bào)文給服務(wù)端后,服務(wù)端也需要回一個(gè) ACK 應(yīng)答報(bào)文,標(biāo)識(shí)客戶端發(fā)送的報(bào)文已被成功接收,當(dāng)服務(wù)端發(fā)送 [初始序列號(hào)] 給客戶端時(shí),依然也需要客戶端的應(yīng)答回應(yīng),這樣一來一回,才能確保雙方的初始序列號(hào)能被可靠的同步。
四次握手也能夠可靠的同步雙方的初始化序號(hào),但可以進(jìn)行優(yōu)化一下,就成了三次握手了。文章來源:http://www.zghlxwxcb.cn/news/detail-598377.html
3.?避免資源的浪費(fèi)
如果只有兩次握手,當(dāng)客戶端的 SYN 請(qǐng)求連接在網(wǎng)絡(luò)中阻塞,客戶端沒有接收到 ACK 報(bào)文,就會(huì)重新發(fā)送 SYN,由于沒有第三次握手,服務(wù)器不清楚客戶端是否接收到了自己發(fā)送的建立連接的 ACK 確認(rèn)信號(hào),所以服務(wù)器每收到一個(gè) SYN 就只能先主動(dòng)建立一個(gè)連接,就會(huì)建立多個(gè)冗余的無效鏈接,造成不必要的資源浪費(fèi)。所以,兩次握手不具備可靠性。文章來源地址http://www.zghlxwxcb.cn/news/detail-598377.html
到了這里,關(guān)于TCP為什么需要三次握手進(jìn)行連接,二次或四次不可以嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!