tcp/ip協議狀態

TCP/IP(transmission control protocol/ internet protocol)

即傳輸控制協議/網際協議,提供點對點的鏈接機制和數據傳輸標準,通過協議堆棧的方式,實現出不同的通信協議。


在tcp報文首部中,需要了解的標誌位

  • URG:緊急指針標誌,1表示有效,0表示忽略;
  • ACK:確認序號標誌,1表示確認有效,0表示忽略確認字段;
  • PUSH:爲1表示指示接收方收到該報文後,儘快將報文交給應用程序而不是在緩衝區排隊;
  • RST:重置連接標誌,用於重置由於主機崩潰或其他原因出現的錯誤連接,或拒絕非法報文連接請求;
  • SYN:同步序號,用於建立連接過程中的連接請求;
  • FIN:用於釋放連接,爲1時表示發送方已經沒有數據發送了,關閉本端數據流。

三次握手建立連接:

  1. LISTEN:調用socket,bind,listen函數之後,服務器端進入等待連接的狀態,監聽客戶端發過來的連接請求
  2. SYN_SENT:客戶端調用connect函數,發送SYN給服務器,等待服務器端的確認
  3. SYN_RCVD:服務器端收到了客戶端的連接請求,服務器端的發送ACK+SYN給客戶端
  4. ESTABLISHED:客戶端收到服務器的ACK+SYN,立即迴應一個ACK,進入ESTABLISHED狀態,服務器端收到客戶端的ACK也會從SYS_RCVD進入ESTABLISHED狀態,客戶端和服務器端都準備進行傳輸數據了。

出於安全考慮,爲避免SYN Flood攻擊,實際上在accept函數之前已經完成了三次握手。

四次揮手終止連接:

主動打開:客戶端發送第一個SYN報文,主動發起建立tcp連接的請求

被動打開:服務器接收第一個SYN報文並且迴應一個SYN報文,響應tcp連接請求

  1. FIN_WAIT-1:主動關閉端調用close函數,發送FIN並等待ACK報文的狀態,一旦收到ACK報文就進入下一狀態
  2. CLOSE-WAIT:被動關閉端收到FIN後,已發送ACK報文但還未發送FIN報文,等待應用程序發出關閉連接的指令
  3. FIN_WAIT-2:主動關閉端收到被動關閉端的ACK並等待另一端FIN報文的狀態,等接收到另一端的FIN報文,狀態就變成了TIMA_WAIT
  4. LAST_ACK:被動關閉端,已經發送FIN等待ACK報文,接收到主動端的ACK,進入CLOSED狀態

TIMEWAIT 狀態的任務:可靠的終止連接(萬一被動關閉的一端未收到ACK,不停的發送FIN),丟棄遲來的數據(內核讓read返回值爲0通知應用層另一端已經停止向本段的數據傳輸)


TCP是一種提供可靠性交付協議,即傳輸的數據,無差錯,不丟失,不重複並且按序到達。

可靠性具體表現在傳輸數據的過程中:

確認重傳(positive acknowledgement with retransmission)

  • 數據被分割成合適發送的數據塊並使用序列號對數據進行編號,每個報文段都包含一個校驗碼,對收到報文段進行校驗若與校驗碼一致就回復確認,否則就丟棄,等待發送端超時重發;
  • 對失序的報文段進行重新排序,通過對數據序列號排序以正確的順序交給應用層;
  • 丟棄重複報文;
  • 發送方每發出一個報文段就會啓動一個定時器,等待被動方確認收到此報文,如果不能及時收到確認,將重發此報文;

流量控制(flow control using sliding window)

  • 滑動窗口(slide window):

防止發送方發送速度較快,導致接收方緩衝區溢出,只允發送方發送接收方緩衝區能接收的數據。

擁塞控制(congestion control)

擁塞控制是基於整個網絡的通信狀況,在網絡延時增加的情況下,重傳會導致網絡的負擔進而形成一個惡性循環。爲避免產生“網絡風暴”,提高網絡網絡利用率,保證每條數據流的公平性,TCP引入擁塞控制策略。

  • 慢啓動(slow start) 

剛開始發送數據時並不知道網絡的實際情況,需要一種試探的方式平滑的增加擁塞窗口(CWND)的大小,當擁塞窗口的大小超過慢啓動門限(ssthresh)將進入擁塞避免階段。

  • 避免擁塞(congestion avoidance)

使得擁塞窗口按照線性的方式增加,從而減緩其擴大。

  • 快速恢復(fast recovery)和快速重傳(fast retransmission)

接收方發現有報文段丟失,就會發送ACK報文主動告訴發送方重傳丟失的報文段,如果連續收到的3個重複確認報文,就啓動發送方的快速重傳和快速恢復,立即重傳丟失的報文段。

TCP狀態轉換圖詳解

圖解TCP-IP協議

TCP狀態轉換圖TCP/IP連接狀態變遷圖CLOSE_WAIT

TCP的狀態變遷圖《TCP/IP詳解》之一:連接建立、斷開

TCP/IP 建立連接、斷開連接的過程

《linux高性能服務器編程》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章