1. 程式人生 > >TCP為什麼是三次握手,而不是兩次

TCP為什麼是三次握手,而不是兩次

1. TCP的三次握手最主要是防止已過期的連線再次傳到被連線的主機。
如果採用兩次的話,會出現下面這種情況。
比如是A機要連到B機,結果傳送的連線資訊由於某種原因沒有到達B機;
於是,A機又發了一次,結果這次B收到了,於是就發信息回來,兩機就連線。
傳完東西后,斷開。
結果這時候,原先沒有到達的連線資訊突然又傳到了B機,於是B機發資訊給A,然後B機就以為和A連上了,這個時候B機就在等待A傳東西過去。

2. 三次握手改成僅需要兩次握手,死鎖是可能發生
考慮計算機A和B之間的通訊,假定B給A傳送一個連線請求分組,A收到了這個分組,併發送了確認應答分組。按照兩次握手的協定,A認為連線已經成功地建立了,可以開始傳送資料分組。可是,B在A的應答分組在傳輸中被丟失的情況下,將不知道A是否已準備好,不知道A建議什麼樣的序列號,B甚至懷疑A是否收到自己的連線請求分組。在這種情況下,B認為連線還未建立成功,將忽略A發來的任何資料分組,只等待連線確認應答分組。而A在發出的分組超時後,重複傳送同樣的分組。這樣就形成了死鎖