(二十二)運輸層--TCP首部格式

TCP首部格式

TCP雖然是面向字節流的,但TCP傳送的數據單元卻是報文段。一個TCP報文段分爲首部和數據兩部分。TCP報文段首部的前20個字節是固定的,後面有4n字節是根據需要而增加的選項,因而TCP首部的最小長度是20字節。

首部固定部分各字段的意義如下:
(1)源端口和目的端口
各佔2個字節,分別寫入源端口號和目的端口號。TCP的分用功能也是通過端口實現的。

(2)序號
佔4字節。序號範圍是 [0, 2^32 - 1],共232個序號。序號增加到232 - 1後,下一個序號又回到0。TCP是面向字節流的。在一個TCP連接中傳送的字節流中的每一個字節都按順序編號。整個要傳送的字節流的起始序號必須在連接建立時設置。首部中的序號字段值則指的是本報文段所發送的數據的第一個字節的序號。例如,一報文段的序號字段值是301,而攜帶的數據共有100字節。這就表明:本報文段的數據的第一個字節的序號是301,最後一個字節的序號是400。如果有下一個報文段的話,序號字段應從401開始。

(3)確認號
佔4字節,是期望收到對方下一個報文段的第一個數據字節的序號。例如,B正確收到了A發送過來的一個報文段,其序號字段值是501,而數據長度是200字節,這表明B正確收到了A發送的到序號700爲止的數據。因此,B期望收到A的下一個數據序號是701,於是B在發送給A的確認報文段中把確認號置爲701。總之,若確認號爲N,則表明:到序號N - 1爲止的所有數據都已正確收到。

(4)數據偏移
佔4位,它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠。這個字段實際上是指出TCP報文段的首部長度。由於首部中還有長度不確定的選項字段,因此數據偏移字段是必要的。數據偏移的單位是32位(4字節),由於4位二進制數能夠表示的最大十進制數字是15,因此數據偏移的最大值是60字節,這也是TCP首部的最大長度(選項字段長度不能超過40字節)。

(5)保留
佔6位,保留爲今後使用,但目前應置爲0。

(6)緊急URG
當URG = 1 時,表明緊急指針字段有效。它告訴系統此報文段中有緊急數據,應儘快傳送,而不要按原來的排隊順序來傳送。當URG置1時,發送應用進程就告訴發送方的TCP有緊急數據要傳送。於是發送方TCP就把緊急數據插入到本報文段數據的最前面,而在緊急數據後面的數據仍是普通數據,這時要與首部中緊急指針字段配合使用。

(7)確認ACK
僅當ACK = 1 時確認號字段有效。TCP規定,在連接建立後所有傳送的報文段都必須把ACK置1。

(8)推送PSH
當兩個應用進程進行交互式的通信時,有時在一端的應用進程希望在鍵入一個命令後立即就能夠收到對方的響應。在這種情況下,TCP就可以使用推送操作,發送方TCP把PSH置1,並立即創建一個報文段發送出去。接收方TCP收到PSH = 1 的報文段,就儘快的交付接收應用進程,而不再等到整個緩存都填滿了後再向上交付。

(9)復位RST
當RST = 1 時,表明TCP連接中出現嚴重錯誤(主機崩潰或其它原因),必須釋放連接,然後再重新建立運輸連接。RST置1還用來拒絕一個非法的報文段或拒絕打開一個連接。RST也可稱爲重建位或重置位。

(10)同步SYN
在連接建立是用來同步序號。當SYN = 1 而ACK = 0 時,表明這是一個連接請求報文段。對方若同意建立連接,則在響應的報文段中使SYN = 1 和 ACK = 1 。因此,SYN置1就表示這是一個連接請求或連接接受報文。

(11)終止FIN
用來釋放一個連接。當FIN = 1 時,表明此報文段的發送方的數據已發送完畢,並要求釋放運輸連接。

(12)窗口
佔2字節。窗口值是 [0, 2^16 - 1]之間的整數。窗口指的是發送本報文段的一方的接收窗口。窗口值告訴對方:從本報文段首部中的確認號算起,接收方目前允許對方發送的數據量。之所以要有這個限制,是因爲接收方的數據緩存空間是有限的。總之,窗口值作爲接收方讓發送方設置其發送窗口的依據。例如,發送了一個報文段,其確認號是701,窗口字段是1000,這就是告訴對方:從701號算起,我的接收緩存空間還可接收1000個字節數據(字節序號是從701~1700),你在給我發送數據時,必須考慮到這一點。

窗口字段明確指出了現在允許對方發送的數據量。窗口值經常在變化。

(13)檢驗和
佔2字節。檢驗和字段檢驗的範圍包括首部和數據這兩部分。和UDP用戶數據報一樣,在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。

(14)緊急指針
佔2字節。緊急指針僅在URG = 1 時有效。它指出本報文段中的緊急數據的字節數(緊急數據結束後就是普通數據)。因此,緊急指針指出了緊急數據的末尾在報文段中的位置。當所有緊急數據都處理完時,TCP就告訴應用程序恢復到正常操作。即使窗口值爲0也可以發送緊急數據。

(15)選項
長度可變,最長可達40字節。TCP最初只規定了一種選項,即最大報文段長度MSS,MSS是每一個TCP報文段中的數據字段的最大長度。隨着互聯網的發展,又陸續增加了幾個選項,如窗口擴大選項、時間戳選項等。

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