為了通過ip資料報實現可靠性傳輸,需要考慮很多事情,如資料的破壞、丟包、重複以及分片順序混亂等。tcp通過檢驗和、序列號、確認應答、重發控制、連線管理及視窗控制等實現了面向連線的、可靠的位元組流傳輸服務。有了這麼多的措施,所以tcp是乙個很複雜的協議。理解它這些特點需要理解包括但不限於以下主題:
1) tcp的連線管理。通過三次握手建立連線,四次揮手斷開連線。
2) tcp的流量控制。通過滑動視窗協議進行流量控制。
3) tcp的超時重傳。通過超時定時器和重傳策略保證可靠性。
4) tcp的擁塞控制。通過慢啟動演算法和擁塞避免演算法進行擁塞控制。
後文將針對這些主題細節進一步描述。
tcp段被封裝在ip資料報中,如下圖:
tcp首部格式如下圖:
各字段的含義簡要敘述如下,後文將會詳細描述。
源目埠號:16位位元,用於表示傳送端和接收端的應用程序。這兩個值加上ip首部中的源目ip唯一確定乙個tcp連線。
序列號:32位位元,是指傳送資料的位置,每傳送一次資料,就累加一次該資料位元組數的大小。序列號不會從0或者1開始,而是建立連線時計算機生成的隨機數作為其初始值,通過syn包傳給接收端主機。然後再將每**過去的位元組數累加到初始值上表示資料位置。此外建立連線和斷開連線時傳送的syn包和fin包雖然並不帶資料,但是也會作為乙個位元組增加對應的序列號。
資料偏移:4位位元,也可稱為首部長度,單位為4位元組。和ip首部一樣,都是因為有可選字段的存在,所以首部長度存在是必須的,這樣才能正確知道資料字段該從包的哪一位開始計算。
控制位:8位位元,每一位標誌具體含義如下:
視窗大小:16位位元,用於通知從相同tcp首部的確認應答號所指位置開始能夠接收的資料大小。tcp不允許傳送超過此處所示大小的資料。不過視窗為0,則表示可以傳送1位元組資料的視窗探測,了解最新的視窗大小。
校驗和:16位位元,跟udp校驗和相似,區別在於tcp的校驗和是必需的。
緊急指標:16位位元,只有在urg位設定時才有效。緊急指標是乙個正偏移量,和序列號相加表示緊急資料最後乙個位元組的序號。表示從資料部分的首位到緊急指標所指示的位置為止為緊急資料。
選項:該欄位用於提高tcp的傳輸效能。最大長度為40位元組。具有代表性的選項如下表所示:
從上表挑些重點的說說。
型別2的mss選項:用於在建立連線時決定最大段長度的情況。
型別3的視窗擴**項:是乙個改善tcp吞吐量的選項,如果採用該選項,視窗的最大值可以擴充套件到1g。
型別8時間戳選項:用來計算往返時間rtt,傳送方在傳送報文段時把當前時鐘的時間值放入時間戳字段,接收方將該時間戳字段的值複製到確認報文中,當傳送方收到確認報文,對比確認報文的時間戳(等於傳送方傳送報文段的時間戳)和現在的時鐘,即可算出rtt。時間戳選項還可用於防止迴繞序號。
型別4和5用於選擇確認應答。tcp通訊時,如果傳送序列中間某個資料報丟失,tcp會通過重傳最後確認的包開始的後續包,這樣原先已經正確傳輸的包也可能重**送,急劇降低了tcp效能。為改善這種情況,發展出選擇確認應答(sack)技術,使tcp只重新傳送丟失的包,不用傳送後續所有的包,而且提供相應機制使接收方能告訴傳送方哪些資料丟失,哪些資料重發了,哪些資料已經提前收到等。
網路程式設計(TCP協議)
tcp協議,傳輸控制協議 英語 transmission control protocol,縮寫為 tcp 是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議,由ietf的rfc 793定義。tcp通訊需要經過建立連線 資料傳送 終止連線三個步驟。tcp通訊模型中,在通訊開始之前,一定要先建立相...
網路基礎 TCP協議
1 什麼是tcp協議 tcp是傳輸層最重要和最常用的協議 它提供一種面向連線的 可靠的 位元組流資料傳輸服務。2 tcp協議的特性 3 tcp協議的功能 1 tcp建立連線 由客戶端主動發起連線 三次握手建立連線 半開連線 一般將伺服器收到syn而未收到客戶端的ack時的連線狀態稱為半開連線。為什麼...
Socket程式設計基礎 基於TCP協議的網路程式設計
在學習tcp協議之前,需要了解網路程式設計中的幾個基本概念。public static void main string args throws exceptionpublic static void main string args throws exception計算機能夠接受通訊實體請求的類是...