TCP三向交握詳解

來源:互聯網
上載者:User

摘自百度百科:

三向交握   鎖定 本詞條由“科普中國”百科科學詞條編寫與應用工作項目 審核 。 三向交握(three times handshake;three-way handshake)所謂的“三向交握”即對每次發送的資料量是怎樣跟蹤進行協商使資料區段的發送和接收同步,根據所接收到的資料量而確定的資料確認數及資料發送、接收完畢後何時撤消聯絡,並建立虛串連。 為了提供可靠的傳送,TCP在發送新的資料之前,以特定的順序將資料包的序號,並需要這些包傳送給目標機之後的確認訊息。TCP總是用來發送大批量的資料。當應用程式在收到資料後要做出確認時也要用到TCP。 中文名 三向交握 外文名 Three-way handshake 別    稱 TCP握手協議 應用學科 電腦傳輸協議 適用領域範圍 電腦 目錄 1 過程  第一次  第二次  第三次 2 未串連隊列 3 Backlog參數 4 TCP頭結構 5 關閉TCP串連:改進的三向交握 6 標誌控制 7 資料轉送 8 序列標識 9 基於三向交握的SYN洪水攻擊  基本原理  TCP協議棧的弱點 過程 第一次 第一次握手:建立串連時,用戶端發送syn包(syn=j)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。 第二次 第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態; 第三次 第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED(TCP串連成功)狀態,完成三向交握。 完成三向交握,用戶端與伺服器開始傳送資料,在上述過程中,還有一些重要的概念: 未串連隊列 在三向交握協議中,伺服器維護一個未串連隊列,該隊列為每個用戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的串連在伺服器處於 Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。 Backlog參數 表示核心為相應通訊端排隊的最大串連個數。SYN-ACK重傳次數 三向交握協議 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該串連資訊從半串連隊列中刪除。注意,每次重傳等待的時間不一定相同。 《UNIX 網路編程》中指出,關於backlog參數從未有過正式的定義,BSD 4.2手冊中宣稱它的定義是:“the maximum length the queue of pending connections may grow to”,即未處理串連構成的隊列可能增長到的最大長度,POSIX規範也逐字複製該定義。不過這個定義中並沒有明確到底這個串連指的是SYN_RCVD狀態的串連,還是未由進程接受的處於ESTABLISHED狀態的串連,亦或兩者皆可。 不論這個backlog參數到底指的是哪一個,對於伺服器而言,都需要儘快的去處理已經處於ESTABLISHED狀態的串連。而僅僅對於backlog來說,我們需要取一個比較大的值以應對大量的服務要求。 半串連存活時間 是指半串連隊列的條目存活的最長時間,也即伺服器從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半串連存活時間為Timeout時間、SYN_RECV存活時間。 TCP頭結構 連線導向的TCP三向交握是Syn Flood存在的基礎。 TCP協議頭最少20個位元組,包括以下的地區(由於翻譯不盡相同,文章中給出相應的英文單詞): TCP源連接埠(Source Port):16位的源連接埠其中包含初始化通訊的連接埠。源連接埠和源IP地址的作用是標示報文的返回地址。 TCP目的連接埠(Destination port):16位的目的連接埠域定義傳輸的目的。這個連接埠指明報文接收電腦上的應用程式地址介面。 TCP序號(序列碼,Sequence Number):32位的序號由接收端電腦使用,重新分段的報文成最初形式。當SYN出現,序列碼實際上是初始序列碼(ISN),而第一個數 據位元組是ISN+1。這個序號(序列碼)是可以補償傳輸中的 不一致。 TCP應答號(Acknowledgment Number):32位的序號由接收端電腦使用,重組分段的報文成最初形式。如果設定了ACK控制位,這個值表示一個準備接收的包的序列碼。 資料位移量(HLEN):4位包括TCP頭大小,指示何處資料開始。 TCP四次揮手結束串連 保留(Reserved):6位範圍,這些位必須是0。為了將來定義新的用途所保留。 標誌(Code Bits):6位標誌域。表示為:緊急標誌、有意義的應答標誌、推、重設串連標誌、同步序號標誌、完成發送資料標誌。按照順序排列是:URG、ACK、PSH、RST、SYN、FIN。 視窗(Window):16位,用來表示想收到的每個TCP資料區段的大小。 校正位(Checksum):16位TCP頭。源機器基於資料內容計算一個數值,收資訊機要與源機器數值結果完全一樣,從而證明資料的有效性。 優先指標(緊急,Urgent Pointer):16位,指向後面是優先資料的位元組,在URG標誌設定了時才有效。如果URG標誌沒有被設定,緊急域作為填充。加快處理標示為緊急的資料區段。 選項(Option):長度不定,但長度必須是一個位元組。如果沒有選項就表示這一個位元組的域等於0。 關閉TCP串連:改進的三向交握 對於一個已經建立的串連,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表示串連徹底釋放。[1] 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.