tcp連接建立和斷開


       TCP協議作為傳輸層主要協議之一,具有面向連接,端到端,可靠的全雙工通信,面向字節流的數據傳輸協議。

 

1、TCP報文段

雖然TCP面試字節流,但TCP傳輸的數據單元卻是報文段。TCP報文段分為TCP首部和數據部分,TCP報文段首部的前20個字節是固定的,后面有4n字節是更具需要而增加的選項,最大為40字節

 

  • 源端口和目的端口 各占兩個字節,TCP的分用功能也是通過端口實現的。
  • 序號 占4個字節,范圍是[0,232],TCP是面向字節流的,每個字節都是按順序編號。例如一個報文段,序號字段是201,攜帶數據長度是100,那么第一個數據的序號就是201,最后一個就是300。當達到最大范圍,又從0開始。
  • 確認號 占4個字節,是期望收到對方下一個報文段的第一個字節的序號。若確認號=N,則表示序號N前所有的數據已經正確收到了。
  • 數據偏移 占4位,表示報文段的數據部分的起始位置,距離報文段的起始位置的距離。間接的指出首部的長度。
  • 保留 占6位,保留使用,目前為0.
  • URG(緊急) 當URG=1,表明緊急指針字段有效,該報文段有緊急數據,應盡快發送。
  • ACK(確認) 僅當ACK=1時,確認號才有效,連接建立后,所有的報文段ACK都為1。
  • PSH(推送) 接收方接收到PSH=1的報文段,會盡快交付接收應用經常,不再等待整個緩存填滿再交付。實際較少使用。
  • RST(復位) RST=1時,表明TCP連接中出現嚴重差錯,必須是否連接,再重連。
  • SYN(同步) 在建立連接時用來同步序號。當SYN=1,ACK=0,則表明是一個連接請求報文段。SYN=1,ACK=1則表示對方同意連接。TCP建立連接用到。
  • FIN(終止) 用來釋放一個連接窗口。當FIN=1時,表明此報文段的發送方不再發送數據,請求釋放單向連接。TCP斷開連接用到。
  • 窗口 占2個字節,表示自己的發送方自己的接收窗口,窗口值用來告訴對方允許發送的數據量。
  • 校驗和 占2字節,檢驗和字段查驗范圍包括首部和數據部分。
  • 緊急指正 占2字節,URG=1時,緊急指針指出本報文段中的緊急數據的字節數(緊急字節數結束后為普通字節)。
  • 選項 長度可變,最長可達40字節。例如最大報文段長度MSS。MSS指的是數據部分的長度而不是整個TCP報文段長度,MSS默認為536字節長。窗口擴大,時間戳選項等。

 

2、TCP建立連接-三次握手

 

第一次:客戶端發送連接請求報文給服務端,其中SYN=1,seq=x。發送完畢后進入YSN_END狀態。

第二次:服務端接收到報文后,發回確認報文,其中ACK=1,ack=x+1,因為需要客戶端確認,所以報文中也有SYN=1,seq=y的信息。發送完后進入SYN_RCVD狀態。

第三次:客戶端接收到報文后,發送確認報文,其中ACK=1,ack=y+1。發送完客戶端進入ESTABLISHED狀態,服務端接收到報文后,進入ESTABLISHED狀態。到此,連接建立完成。

 

3、TCP斷開連接-四次揮手

第一次揮手:客戶端發送FIN=1,seq=x的包給服務端,表示自己沒有數據要進行傳輸,單面連接傳輸要關閉。發送完后,客戶端進入FIN_WAIT_1狀態。

第二次揮手:服務端收到請求包后,發回ACK=1,ack=x+1的確認包,表示確認斷開連接。服務端進入CLOSE_WAIT狀態。客戶端收到該包后,進入FIN_WAIT_2狀態。此時客戶端到服務端的數據連接已斷開。

第三次揮手:服務端發送FIN=1,seq=y的包給客戶端,表示自己沒有數據要給客戶端了。發送完后進入LAST_ACK狀態,等待客戶端的確認包。

第四次揮手:客戶端收到請求包后,發送ACK=1,ack=y+1的確認包給服務端,並進入TIME_WAIT狀態,有可能要重傳確認包。服務端收到確認包后,進入CLOSED狀態,服務端到客戶端的連接已斷開。客戶端等到一段時間后也會進入CLOSED狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM