TCP/IP-學習筆記6-TCP協議

一、TCP協議

TCP提供一種面向連接的、可靠的字節流服務。在一個 TCP 連接中,僅有兩方進行彼此通信。

TCP 提供可靠性的方法:

  • 應用數據被分割成TCP認爲最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。
  • 當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
  • 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒。(why?)
  • TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
  • IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
  • IP數據報會發生重複,TCP的接收端必須丟棄重複的數據。
  • TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的數據。這將防止較快主機致使較慢主機的緩衝區溢出。

TCP對字節流的內容不作任何解釋。TCP不知道傳輸的數據字節流是二進制數據,還是ASCII字符、EBCDIC字符或者其他類型數據。對字節流的解釋由TCP連接雙方的應用層解釋。


1.1報文

TCP首部通常是20字節。

 

每個TCP段都包含源端和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接。

一個IP地址和一個端口號也稱爲socket。

序號(32位)

用來標識從TCP發端向TCP收端發送的數據字節流,它表示在這個報文段中的的第一個數據字節。TCP用序號對每個字節進行計數。

確認序號(32位)

包含發送確認的一端所期望收到的下一個序號。因此,確認序號應當是上次已成功收到數據字節序號加1。只有ACK標誌爲1時確認序號字段纔有效。

首部長度(4位)

首部長度給出首部中32bit字的數目。需要這個值是因爲任選字段的長度是可變的。這個字段佔4bit,因此TCP最多有60字節的首部。然而,沒有任選字段,正常的長度是20字節。

6 個標誌比特(1位)

他們多個可同時被設置爲 1。

  • URG 緊急指針(urge pointer)爲1,表示後續緊急指針有效
  • ACK  爲1表示確認序號有效。
  • PSH  爲1 表示接收方應該儘快將這個報文段交給應用層
  • RST  爲1表示重建連接
  • SYN 爲1表示同步序號用來發起一個連接
  • FIN  爲1表示發送端完成發送

窗口大小(16位)

TCP的流量控制由連接的每一端通過聲明的窗口大小來提供。窗口大小爲字節數,起始於確認序號字段指明的值,這個值是接收端正期望接收的字節。

檢驗和(16位)

包含了TCP首部和數據的校驗。

緊急指針(16位)

只有當URG標誌位1時候,纔有效。緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。

什麼是緊急數據?

可選字段(32位)

最常見的可選字段是最長報文大小,又稱爲MSS(Maximum Segment Size)。每個連接方通常都在通信的第一個報文段(爲建立連接而設置SYN標誌的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。

 

TCP連接的建立(3次握手)

 

TCP連接的斷開(4次揮手)

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