三次握手:
1.客戶端會(huì)發(fā)送一個(gè)SYN同步標(biāo)志和seq序列號(hào)為x的請(qǐng)求報(bào)文段給服務(wù)端(狀態(tài)處于SYN_SENT)肺孤;
2.服務(wù)端接收到客戶端的SYN請(qǐng)求報(bào)文段之后會(huì)發(fā)送給客戶端一個(gè)(SYN = 1, ACK = 1钾怔, Seq = y, Ack = x+1)請(qǐng)求加上確認(rèn)數(shù)據(jù)報(bào)段(狀態(tài)處于SYN_RECD)翩腐;
3.客戶端接收到服務(wù)端返回過(guò)來(lái)的請(qǐng)求數(shù)據(jù)報(bào)文段之后逐纬,會(huì)回復(fù)一個(gè)(ACK = 1, seq = x+1矢沿, ack = y+1)(狀態(tài)處于已連接狀態(tài))滥搭;
4.服務(wù)端接收到客戶端發(fā)送過(guò)來(lái)的確認(rèn)報(bào)文段后(狀態(tài)變?yōu)橐堰B接狀態(tài)),雙方連接成功捣鲸;
疑問(wèn):
1.三次握手變成兩次握手可以嗎论熙?
影響就是:服務(wù)器會(huì)處于忙等狀態(tài),浪費(fèi)資源摄狱。
客戶端發(fā)送SYN包A1脓诡,由于網(wǎng)絡(luò)鏈路的問(wèn)題无午,導(dǎo)致A1到達(dá)的時(shí)間滯后,因?yàn)榭蛻舳诉t遲收不到服務(wù)端發(fā)送過(guò)來(lái)的響應(yīng)就會(huì)重新發(fā)送一個(gè)B1祝谚,并且清理掉A1宪迟,結(jié)果B1的請(qǐng)求連接成功,之后A1的請(qǐng)求成功送達(dá)到了服務(wù)端交惯,此時(shí)服務(wù)就會(huì)以為是另外的一個(gè)請(qǐng)求連接次泽,然后成功的返回,并變成連接成功的狀態(tài)席爽,但是客戶端已經(jīng)建立了一個(gè)連接的請(qǐng)求意荤,就會(huì)把A1的響應(yīng)丟棄掉,這樣的話只锻,就會(huì)維護(hù)一個(gè)服務(wù)端的僵尸連接玖像。(簡(jiǎn)單點(diǎn)說(shuō)就是防止已經(jīng)失效的連接請(qǐng)求報(bào)文段發(fā)送到服務(wù)器,導(dǎo)致服務(wù)器維持一個(gè)僵尸連接)
2.三次握手變成四次握手可以嗎
主要的為了提高傳輸?shù)男势胍喜⒘耍蛻舳送秸?qǐng)求的確認(rèn)以及服務(wù)端同步請(qǐng)求)捐寥;
3.三次握手過(guò)程中還有其他的作用嗎?
(1)在雙方的請(qǐng)求報(bào)文段中的頭部都會(huì)加入各自隨機(jī)的隨機(jī)序列號(hào)
(2)接收窗口的窗口縮放系數(shù)祖驱;
(3)MSS(最大報(bào)文段長(zhǎng)度)握恳;
(4)是否支持SACK(選擇性確認(rèn));
4.第三次握手失敗了,會(huì)怎么處理捺僻?
此時(shí)服務(wù)端的狀態(tài)為SYN-RCVD乡洼,如果等不到客戶端發(fā)過(guò)來(lái)的ACK確認(rèn),服務(wù)端就會(huì)重新發(fā)送一個(gè)SYN和ACK給客戶端匕坯,如果服務(wù)端發(fā)重發(fā)了好幾個(gè)SYN+ACK給客戶端就珠,都沒(méi)接收到客戶端返回過(guò)來(lái)的ACK,就會(huì)發(fā)送RST包醒颖,強(qiáng)制關(guān)閉連接妻怎。
四次揮手:
1.客戶端會(huì)發(fā)送一個(gè)FIN斷開(kāi)連接標(biāo)志的請(qǐng)求報(bào)文段給服務(wù)端(客戶端處于終止等待1);
2.服務(wù)端收到了客服端發(fā)過(guò)來(lái)的FIN之后泞歉,發(fā)送一個(gè)ACK報(bào)文給客戶端(服務(wù)端處于關(guān)閉等待)逼侦,客戶端接收到服務(wù)端的ACk之后(客戶端處于終止等待2);
3.服務(wù)端發(fā)送一個(gè)FIN斷開(kāi)連接標(biāo)志的請(qǐng)求報(bào)文段給客戶端(服務(wù)端處于最后確認(rèn))腰耙;
4.客戶端接收到服務(wù)端的FIN報(bào)文段之后榛丢,發(fā)送ACK報(bào)文段給服務(wù)端(客戶端處于時(shí)間等待);
5.服務(wù)端接收到ACK報(bào)文段之后(服務(wù)端處于關(guān)閉)挺庞;
6.客戶端在進(jìn)過(guò)2MSL(Maximum Segment Lifetime)之后(客戶端處于關(guān)閉)晰赞;
疑問(wèn)
1.為什么TIME_WAIT狀態(tài)需要經(jīng)過(guò)2MSL(最大報(bào)文段生存時(shí)間)才能返回到CLOSE狀態(tài)?
網(wǎng)絡(luò)是不可靠的,當(dāng)服務(wù)端發(fā)送給客戶端的FIN之后一直得不到ACK的返回掖鱼,就會(huì)重新發(fā)送一個(gè)FIN報(bào)文段然走,這個(gè)時(shí)間差最大值就是2MSL,這樣的確保服務(wù)端能接收到客戶端發(fā)送給服務(wù)端的ACK報(bào)文段戏挡,然后客戶端和服務(wù)端就會(huì)處于關(guān)閉狀態(tài)芍瑞。
2.為什么釋放連接需要四次揮手?
tcp是全雙工模式褐墅,前兩次揮手表示的是一方?jīng)]有數(shù)據(jù)發(fā)送和另外一方的確認(rèn)拆檬, 后兩次揮手就是另外一方?jīng)]有數(shù)據(jù)發(fā)送和一方的確認(rèn)。這是一個(gè)雙方的斷開(kāi)行為妥凳。