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