三次握手(3次握手)

三次握手

3次握手一般指本詞條

所謂的“三次握手”:為了對每次傳送的數據量進行跟蹤與協商,確保數據段的傳送和接收同步,根據所接收到的數據量而確認數據傳送、接收完畢後何時撤消聯繫,並建立虛連線。

為了提供可靠的傳送,TCP在傳送新的數據之前,以特定的順序將數據包的序號,並需要這些包傳送給目標機之後的確認訊息。TCP總是用來傳送大批量的數據。當應用程式在收到數據後要做出確認時也要用到TCP。

基本介紹

  • 中文名:三次握手
  • 外文名:Three-way handshake
  • 別稱:TCP握手協定
  • 套用學科:計算機傳輸協定
  • 適用領域範圍:計算機
簡介,過程,第一次,第二次,第三次,改進的三次握手,

簡介

為了建立連線TCP連線,通信雙方必須從對方了解如下信息:
三次握手三次握手
1、對方報文傳送的開始序號。
2、對方傳送數據的緩衝區大小。
3、能被接收的最大報文段長度MSS。
4、被支持的TCP選項。
在TCP協定中,通信雙方將通過三次TCP報文段彭對以上信息的了解,並在此基礎上建立一個TCP連線,而通信雙方的三次TCP報文段的交換過程,也就是通常所說的TCP連線建立實現的三次握手(Three-Way Handshake)過程。
當連線建立完成之後,則:
1、TCP連線的通信雙方均可知道連線上對方將被傳送的第一個位元組的序列號(發給對方的確認號,A發給B的確認號就是B將傳送的序列號,同樣B也是);
2、雙方均可知道連線上能傳送的MSS,從而即可選取握手階段雙方交換的SYN報文和SYN+ACK報文中MSS選項中較小的值作為實際值;
3、雙方均可知道對方的接收緩衝區大小;
4、雙方均可知道對方能否使用SACK、視窗縮放等選項。
基於這些信息,雙方即可建立一個TCP連線(x,y)並基於該連線開始報文段的傳輸。
採用三次握手法建立TCP連線,如果有兩台主機同時企圖在同樣的套接字之間建立一個連線,則結果將只有一個連線被建立起來(這兩個連線被看作完全相同,即為同一個連線),因為所有的連線都是由它們的端點來標識的。若第一個請求導致建立了一個由(x,y)標識的連線,而第二個請求也建立了一個由(X,y)標識的連線,則在TCP實體內部只會存在一個TCP連線表項(x,y)。

過程

第一次

第一次握手:建立連線時,客戶端傳送syn包(seq=j)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

第二次

第二次握手伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(seq=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態。

第三次

第三次握手:客戶端收到服務器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED(TCP連線成功)狀態,完成三次握手。
完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念:
(1)未連線佇列
三次握手協定中,伺服器維護一個未連線佇列,該佇列為每個客戶端的SYN包(seq=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連線在伺服器處於 Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
(2)Backlog參數
表示核心為相應套接字排隊的最大連線個數。SYN-ACK重傳次數伺服器傳送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連線信息從半連線佇列中刪除。注意,每次重傳等待的時間不一定相同。
三次握手協定三次握手協定
(3)半連線存活時間
是指半連線佇列的條目存活的最長時間,也即服務器從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連線存活時間為Timeout時間、SYN_RECV存活時間。

改進的三次握手

對於一個已經建立的連線,TCP使用改進的三次握手來釋放連線(使用一個帶有FIN附加標記的報文段)。TCP關閉連線的步驟如下:
第一步,當主機A的應用程式通知TCP數據已經傳送完畢時,TCP向主機B傳送一個帶有FIN附加標記的報文段(FIN表示英文finish)。
第二步,主機B收到這個FIN報文段之後,並不立即用FIN報文段回復主機A,而是先向主機A傳送一個確認序號ACK,同時通知自己相應的應用程式:對方要求關閉連線(先傳送ACK的目的是為了防止在這段時間內,對方重傳FIN報文段)。
第三步,主機B的應用程式告訴TCP:我要徹底的關閉連線,TCP向主機A送一個FIN報文段。
第四步,主機A收到這個FIN報文段後,向主機B傳送一個ACK表示連線徹底釋放。

相關詞條

熱門詞條

聯絡我們