如果是兩次:
C發(fā)送請求,S應(yīng)答并分配資源
若S的應(yīng)答沒有到達(dá)C端膏秫,C認(rèn)為連接未建立右遭,而S認(rèn)為建立了
S會在一段時(shí)間內(nèi)保留分配的資源
如果大量C這樣請求,S會崩潰
如果是4次
而三次握手后,C和S至少可以確認(rèn)之前的通信情況窘哈,但無法確認(rèn)之后的情況言蛇。
在這個(gè)道理上說,無論是四次還是五次或是更多次都是徒勞的
為什么需要“四次揮手”宵距?
試想一下腊尚,假如現(xiàn)在你是客戶端你想斷開跟Server的所有連接該怎么做?第一步满哪,你自己先停止向Server端發(fā)送數(shù)據(jù)婿斥,并等待Server的回復(fù)。但事情還沒有完哨鸭,雖然你自身不往Server發(fā)送數(shù)據(jù)了民宿,但是因?yàn)槟銈冎耙呀?jīng)建立好平等的連接了,所以此時(shí)他也有主動(dòng)權(quán)向你發(fā)送數(shù)據(jù)像鸡;故Server端還得終止主動(dòng)向你發(fā)送數(shù)據(jù)活鹰,并等待你的確認(rèn)弱匪。其實(shí)馋吗,說白了就是保證雙方的一個(gè)合約的完整執(zhí)行涧尿!
為什么揮手之后客戶端是2ms的等待時(shí)間税手?
為了保證客戶端發(fā)送的最后一個(gè)ACK報(bào)文段能夠到達(dá)服務(wù)器镀裤。因?yàn)檫@個(gè)ACK有可能丟失拯辙,從而導(dǎo)致處在LAST-ACK狀態(tài)的服務(wù)器收不到對FIN-ACK的確認(rèn)報(bào)文坡椒。服務(wù)器會超時(shí)重傳這個(gè)FIN-ACK褂乍,接著客戶端再重傳一次確認(rèn)吁脱,重新啟動(dòng)時(shí)間等待計(jì)時(shí)器桑涎。最后客戶端和服務(wù)器都能正常的關(guān)閉。假設(shè)客戶端不等待2MSL兼贡,而是在發(fā)送完ACK之后直接釋放關(guān)閉攻冷,一但這個(gè)ACK丟失的話,服務(wù)器就無法正常的進(jìn)入關(guān)閉連接狀態(tài)遍希。
他還可以防止已失效的報(bào)文段等曼。客戶端在發(fā)送最后一個(gè)ACK之后孵班,再經(jīng)過經(jīng)過2MSL涉兽,就可以使本鏈接持續(xù)時(shí)間內(nèi)所產(chǎn)生的所有報(bào)文段都從網(wǎng)絡(luò)中消失。從保證在關(guān)閉連接后不會有還在網(wǎng)絡(luò)中滯留的報(bào)文段去騷擾服務(wù)器篙程。
注意:在服務(wù)器發(fā)送了FIN-ACK之后枷畏,會立即啟動(dòng)超時(shí)重傳計(jì)時(shí)器∈觯客戶端在發(fā)送最后一個(gè)ACK之后會立即啟動(dòng)時(shí)間等待計(jì)時(shí)器拥诡。