TCP 三向交握

來源:互聯網
上載者:User

TCP 三向交握 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/IP協議的串連建立與釋放

在TCP/IP協議中,TCP協議提供可靠的串連服務,採用三向交握建立一個串連,如圖1所示。

(1)第一次握手:建立串連時,用戶端A發送SYN包(SYN=j)到伺服器B,並進入SYN_SEND狀態,等待伺服器B確認。

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

(3)第三向交握:用戶端A收到伺服器B的SYN+ACK包,向伺服器B發送確認包ACK(ACK=k+1),此包發送完畢,用戶端A和伺服器B進入ESTABLISHED狀態,完成三向交握。

完成三向交握,用戶端與伺服器開始傳送資料。

 

圖1 TCP三向交握建立串連

 

由於TCP串連是全雙工系統的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料發送任務後就能發送一個FIN來終止這個方向的串連。收到一個 FIN只意味著這一方向上沒有資料流動,一個TCP串連在收到一個FIN後仍能發送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

(1)用戶端A發送一個FIN,用來關閉客戶A到伺服器B的資料傳送(報文段4)。

(2)伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1(報文段5)。和SYN一樣,一個FIN將佔用一個序號。

(3)伺服器B關閉與用戶端A的串連,發送一個FIN給用戶端A(報文段6)。

(4)用戶端A發回ACK報文確認,並將確認序號設定為收到序號加1(報文段7)。

TCP採用四次揮手關閉串連如圖2所示。

 

圖2  TCP四次揮手關閉串連

 

1.為什麼建立連線協定是三向交握,而關閉串連卻是四次握手呢。

這是因為服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文裡來發送。但關閉串連時,當收到對方的FIN報文通知時,它僅僅表示對方沒有資料發送給你了;但未必你所有的資料都全部發送給對方了,所以你可以未必會馬上會關閉SOCKET,也即你可能還需要發送一些資料給對方之後,再發送FIN報文給對方來表示你同意現在可以關閉串連了,所以它這裡的ACK報文和FIN報文多數情況下都是分開發送的。

2.為什麼TIME_WAIT狀態還需要等2MSL後才能返回到CLOSED狀態。

這是因為雖然雙方都同意關閉串連了,而且握手的4個報文也都協調和發送完畢,按理可以直接回到CLOSED狀態(就好比從SYN_SEND狀態到ESTABLISH狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後發送的ACK報文會一定被對方收到,因此對方處於LAST_ACK狀態下的SOCKET可能會因為逾時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發可能丟失的ACK報文。

 

本文摘自:

《TCP串連的狀態轉換圖深度剖析》

http://www.diybl.com/course/6_system/linux/Linuxjs/2007104/76065.html

參考:

《TCP/IP詳解-卷1》第18章《TCP串連的建立與終止》

http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.