1. 程式人生 > >TCP 三次握手(相當於寄信需要回執,第一次握手:我寄給你一封信。第二次握手:你回我一封信。第三次握手:我再給你一個回執,這樣你才能確認我收到信了)

TCP 三次握手(相當於寄信需要回執,第一次握手:我寄給你一封信。第二次握手:你回我一封信。第三次握手:我再給你一個回執,這樣你才能確認我收到信了)

需要 flags 並發 如果 details live 丟失 tail 進行

TCP 連接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號並交換 TCP 窗口大小信息。以下步驟概述了通常情況下客戶端計算機聯系服務器計算機的過程:
1. 客戶端向服務器發送一個SYN置位的TCP報文,其中包含連接的初始序列號x和一個窗口大小(表示客戶端上用來存儲從服務器發送來的傳入段的緩沖區的大小)。
2. 服務器收到客戶端發送過來的SYN報文後,向客戶端發送一個SYN和ACK都置位的TCP報文,其中包含它選擇的初始序列號y、對客戶端的序列號的確認x+1和一個窗口大小(表示服務器上用來存儲從客戶端發送來的傳入段的緩沖區的大小)。
3. .客戶端接收到服務器端返回的SYN+ACK報文後,向服務器端返回一個確認號y+1和序號x+1的ACK報文,一個標準的TCP連接完成。

TCP 使用類似的握手過程來結束連接。這可確保兩個主機均能完成傳輸並確保所有的數據均得以接收

TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received 
<---SYN/ACK----
Send SYN (seq=y), ACK (x+1) 
3 Send ACK (y+1)
----ACK--->
ACK Received, Connection Established 
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server
  • TCP的三次握手最主要是防止已過期的連接再次傳到被連接的主機。

如果采用兩次的話,會出現下面這種情況。
比如是A機要連到B機,結果發送的連接信息由於某種原因沒有到達B機;
於是,A機又發了一次,結果這次B收到了,於是就發信息回來,兩機就連接。
傳完東西後,斷開。

結果這時候,原先沒有到達的連接信息突然又傳到了B機,於是B機發信息給A,然後B機就以為和A連上了,這個時候B機就在等待A傳東西過去。

  • 三次握手改成僅需要兩次握手,死鎖是可能發生

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

http://blog.csdn.net/w616589292/article/details/50956158

TCP 三次握手(相當於寄信需要回執,第一次握手:我寄給你一封信。第二次握手:你回我一封信。第三次握手:我再給你一個回執,這樣你才能確認我收到信了)