弄清這個(gè)問題,我們需要先弄明白三次握手的目的是什么,能不能只用兩次握手來達(dá)到同樣的目的。
第一次握手:客戶端發(fā)送網(wǎng)絡(luò)包,服務(wù)端收到了。 這樣服務(wù)端就能得出結(jié)論:客戶端的發(fā)送能力、服務(wù)端的接收能力是正常的。
第二次握手:服務(wù)端發(fā)包,客戶端收到了。 這樣客戶端就能得出結(jié)論:服務(wù)端的接收、發(fā)送能力,客戶端的接收、發(fā)送能力是正常的。不過此時(shí)服務(wù)器并不能確認(rèn)客戶端的接收能力是否正常。
第三次握手:客戶端發(fā)包,服務(wù)端收到了。
這樣服務(wù)端就能得出結(jié)論:
客戶端的接收、發(fā)送能力正常,服務(wù)器自己的發(fā)送、接收能力也正常。 因此,需要三次握手才能確認(rèn)雙方的接收與發(fā)送能力是否正常。
試想如果是用兩次握手,則會(huì)出現(xiàn)下面這種情況:
如客戶端發(fā)出連接請(qǐng)求,但因連接請(qǐng)求報(bào)文丟失而未收到確認(rèn),于是客戶端再重傳一次連接請(qǐng)求。
后來收到了確認(rèn),建立了連接。
數(shù)據(jù)傳輸完畢后,就釋放了連接,客戶端共發(fā)出了兩個(gè)連接請(qǐng)求報(bào)文段,其中第一個(gè)丟失,第二個(gè)到達(dá)了服務(wù)端,但是第一個(gè)丟失的報(bào)文段只是在某些網(wǎng)絡(luò)結(jié)點(diǎn)長時(shí)間滯留了,延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)服務(wù)端,此時(shí)服務(wù)端誤認(rèn)為客戶端又發(fā)出一次新的連接請(qǐng)求,于是就向客戶端發(fā)出確認(rèn)報(bào)文段,同意建立連接,不采用三次握手,只要服務(wù)端發(fā)出確認(rèn),就建立新的連接了,此時(shí)客戶端忽略服務(wù)端發(fā)來的確認(rèn),也不發(fā)送數(shù)據(jù),則服務(wù)端一致等待客戶端發(fā)送數(shù)據(jù),浪費(fèi)資源。