網絡編程基礎(2)-協議概要-TCP首部

TCP的特點

爲了通過IP數據報實現可靠性傳輸,需要考慮很多事情,如數據的破壞、丟包、重複以及分片順序混亂等。TCP通過檢驗和、序列號、確認應答、重發控制、連接管理及窗口控制等實現了面向連接的可靠的字節流傳輸服務。有了這麼多的措施,所以TCP是一個很複雜的協議。理解它這些特點需要理解包括但不限於以下主題:
1) TCP的連接管理。通過三次握手建立連接,四次揮手斷開連接。
2) TCP的流量控制。通過滑動窗口協議進行流量控制。
3) TCP的超時重傳。通過超時定時器和重傳策略保證可靠性。
4) TCP的擁塞控制。通過慢啓動算法和擁塞避免算法進行擁塞控制。

後文將針對這些主題細節進一步描述。

TCP首部

TCP段被封裝在IP數據報中,如下圖:
這裏寫圖片描述

TCP首部格式如下圖:
這裏寫圖片描述

各字段的含義簡要敘述如下,後文將會詳細描述。

源目端口號:16位比特,用於表示發送端和接收端的應用進程。這兩個值加上IP首部中的源目IP唯一確定一個TCP連接。

序列號:32位比特,是指發送數據的位置,每發送一次數據,就累加一次該數據字節數的大小。序列號不會從0或者1開始,而是建立連接時計算機生成的隨機數作爲其初始值,通過SYN包傳給接收端主機。然後再將每轉發過去的字節數累加到初始值上表示數據位置。此外建立連接和斷開連接時發送的SYN包和FIN包雖然並不帶數據,但是也會作爲一個字節增加對應的序列號。

確認應答號:32位比特,是指下一次應該收到的數據的序列號。發送端收到這個確認應答以後可以認爲這個序列號以前的數據都已經被正常接收。

數據偏移:4位比特,也可稱爲首部長度,單位爲4字節。和IP首部一樣,都是因爲有可選字段的存在,所以首部長度存在是必須的,這樣才能正確知道數據字段該從包的哪一位開始計算。

控制位:8位比特,每一位標誌具體含義如下:
這裏寫圖片描述

  • CWR:該標誌與後面的ECE標誌都用於IP首部的ECN域(顯式擁塞通知)。CWR標誌爲1時,表示通知對方已將擁塞窗口縮小。
  • ECE:表示ECN-Echo,置爲1會通知對方,從對方到這邊的網絡擁塞。在收到數據包的IP首部中ECN域爲11時,將會把回覆的報文段TCP首部中的ECE設置爲1。
  • URG:設置該位時,表示包中有需要緊急處理的數據。對於需要緊急處理的數據,會在後面的緊急指針中再解釋。
  • ACK:確認應答的字段變爲有效。TCP規定除了最初建立連接時的SYN包之外該位必須設置爲1。
  • PSH:表示需要將收到的數據立刻傳給上層應用。沒有設置時,則不需要立即傳而是先進行緩存。
  • RST:表示TCP連接中出現異常必須強制斷開連接。
  • SYN:用於建立連接。
  • FIN:發送端完成發送任務,希望斷開連接。

窗口大小:16位比特,用於通知從相同TCP首部的確認應答號所指位置開始能夠接收的數據大小。TCP不允許發送超過此處所示大小的數據。不過窗口爲0,則表示可以發送1字節數據的窗口探測,瞭解最新的窗口大小。

校驗和:16位比特,跟UDP校驗和http://blog.csdn.net/l597692583/article/details/52912737相似,區別在於TCP的校驗和是必需的。

緊急指針:16位比特,只有在URG位設置時纔有效。緊急指針是一個正偏移量,和序列號相加表示緊急數據最後一個字節的序號。表示從數據部分的首位到緊急指針所指示的位置爲止爲緊急數據。

選項:該字段用於提高TCP的傳輸性能。最大長度爲40字節。具有代表性的選項如下表所示:
這裏寫圖片描述
從上表挑些重點的說說。

類型2的MSS選項:用於在建立連接時決定最大段長度的情況。

類型3的窗口擴大選項:是一個改善TCP吞吐量的選項,如果採用該選項,窗口的最大值可以擴展到1G。

類型8時間戳選項:用來計算往返時間RTT,發送方在發送報文段時把當前時鐘的時間值放入時間戳字段,接收方將該時間戳字段的值複製到確認報文中,當發送方收到確認報文,對比確認報文的時間戳(等於發送方發送報文段的時間戳)和現在的時鐘,即可算出RTT。時間戳選項還可用於防止迴繞序號。

類型4和5用於選擇確認應答。TCP通信時,如果發送序列中間某個數據包丟失,TCP會通過重傳最後確認的包開始的後續包,這樣原先已經正確傳輸的包也可能重複發送,急劇降低了TCP性能。爲改善這種情況,發展出選擇確認應答(SACK)技術,使TCP只重新發送丟失的包,不用發送後續所有的包,而且提供相應機制使接收方能告訴發送方哪些數據丟失,哪些數據重發了,哪些數據已經提前收到等。

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