1. 程式人生 > >TCP三次握手中,為什麼需要第三次握手?

TCP三次握手中,為什麼需要第三次握手?

為什麼客戶端A還要傳送一次確認呢?(為什麼需要第三次握手)

  這主要是為了防止已失效的連線請求報文段突然又傳送到了B(伺服器端),因而產生錯誤。

  所謂“已失效的連線請求報文段”是這樣產生的:

正常情況A發出連線請求,但因連線請求報文丟失而未收到確認,於是A再重傳一次連線請求。 後來收到了確認,建立了連線。 資料傳輸完畢後,就釋放了連線。 A共傳送了兩個連線請求報文段,其中第一個丟失,第二個到達了B。  沒有“已丟失的連線請求報文段”。

異常情況,即A發出的第一個連線請求報文段並沒有丟失,而是在某些網路節點長時間滯留了,以致延誤到連線釋放以後的某個時間才能到達B。 本來這是一個早已失效的報文段。   但

B收到此失效的連線請求報文段後,就誤認為A又發出了一次新的連線請求。    於是又向A發出確認報文段,同意建立連線。    假定不採用三次握手,那麼只要B發出確認,新的連線就建立了。  由於現在A並沒有發出建立連線的請求,因此不會理財B的確認,也不會向B傳送資料。 但B卻以為新的運輸連線已經建立了,並一直等待A發來資料。 B的許多資源就這樣浪費了。

  採用三次握手的方法可以防止上述異常現象的發生。