TCP報文頭詳解

TCP報文是TCP層傳輸的數據單元,也叫報文段
在這裏插入圖片描述

1、端口號
用來標識同一臺計算機的不同的應用進程。

16位源端口(Source Port):16位的源端口字段包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。

16位目的端口(Destination Port):16位的目的端口字段定義傳輸的目的地。這個端口指明接收方計算機上的應用程序接口。

TCP報頭中的源端口號和目的端口號同IP數據報中的源IP與目的IP唯一確定一條TCP連接。

2、序列號和確認號
這兩個字段是TCP可靠傳輸服務的關鍵部分,序列號是該報文段首字節的字節流編號(TCP把數據看成是有序的字節流,TCP隱式地對數據流的每個字節進行編號)。這樣理解可能更直觀,當報文被分解成多個報文段時,序列號就是報文段首字節在整個報文的偏移量。確定號指定下一個期待的字節。

32位序列號(Sequence Number):一次TCP通信(從TCP連接建立到斷開)過程中某一個傳輸方向上的字節流的每個字節的編號。每發送一次數據,就累加一次該數據字節的大小。序列號不會從零開始,而是在建立連接時通過計算機隨機生成一個數,由SYN包傳給接收端主機。
假設主機A和主機B進行TCP通信,A發送給B的第一個TCP報文段中,序號值被系統初始化爲某個隨機值ISN(Initial Sequence Number,初始序號值)。那麼在該傳輸方向上(從A到B),後續的TCP報文段中序號值將被系統設置成ISN加上該報文段所攜帶數據的第一個字節在整個字節流中的偏移。例如,某個TCP報文段傳送的數據是字節流中的第1025~2048字節,那麼該報文段的序號值就是ISN+1025.另外一個傳輸方向(從B到A)的TCP報文段的序號值也具有相同的含義。

32位確認應答號(Acknowledge Number):標識期望收到的下一個段的第一個字節,並聲明此前的所有數據已經正確無誤地收到,因此,確認號應該是上次已成功收到的數據字節序列號加1。收到確認號的源計算機會知道特定的段已經被收到。確認號只有當ACK標誌爲1時纔有效。比如建立連接時,SYN報文的ACK標誌位爲0。

3、數據偏移/首部長度

4位頭部長度(header length):由於首部可能含有可選項內容,因此TCP報頭的長度是不確定的,報頭不包含任何任選字段則長度爲20字節,4位首部長度字段所能表示的最大值爲1111,轉化爲10進製爲15,15*4 = 60,故報頭最大長度爲60字節。首部長度也叫數據偏移,是因爲首部長度實際上指示了數據區在報文段中的起始偏移值。

4、保留

保留(6位):爲將來定義新的用途保留,現在一般置0。

5、控制位:URG、 ACK、PSH 、 RST 、 SYN、 FIN

1)URG:緊急指針標誌,爲1時表示緊急指針有效,該報文應該優先傳送,爲0則忽略緊急指針。

2)ACK:確認序號標誌,爲1時表示確認號有效,爲0表示報文中不含確認信息,忽略確認號字段。我們稱攜帶ACK標識的TCP報文段爲確認報文段。

3)PSH:push標誌,爲1表示是帶有push標誌的數據,指示接收方在接收到該報文段以後,應優先將這個報文段交給應用程序,而不是在緩衝區排隊。

4)RST:重置連接標誌,用於重置由於主機崩潰或其他原因而出現錯誤的連接。或者用於拒絕非法的報文段和拒絕連接請求。我們稱攜帶RST標誌的TCP報文段爲復位報文段。

5)SYN:表示請求建立一個連接。在連接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而連接應答捎帶一個確認,即SYN=1和ACK=1。我們稱攜帶SYN標誌的TCP報文段爲同步報文段。

6)FIN:finish標誌,用於釋放連接,爲1時表示發送方已經沒有數據發送了,即關閉本方數據流。我們稱攜帶FIN標誌的TCP報文段爲結束報文段。

6、窗口

16位窗口大小(window size):是TCP流量控制的一個手段。這裏說的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告訴對方本端的TCP接收緩衝區還能容納多少字節的數據,這樣對方就可以控制發送數據的速度,從而達到流量控制。窗口大小爲一個16bit字段,因而窗口大小最大爲65535。

7、校驗和

16位校驗和(TCP check sum):由發送端填充,接收端對TCP報文段執行CRC算法以檢驗TCP報文段在傳輸過程中是否損壞。注意,這個校驗不僅包括TCP頭部,也包括數據部分。這也是TCP可靠傳輸的一個重要保障。

8、緊急指針

16位緊急指針(urgent pointer):只有當 URG 標誌置 1 時緊急指針纔有效。緊急指針是一個正的偏移量,和順序號字段中的值相加表示緊急數據最後一個字節的序號。 TCP 的緊急方式是發送端向另一端發送緊急數據的一種方式。

9、選項和填充

TCP頭部選項:TCP頭部的最後一個選項字段(options)是可變長的可選信息。這部分最多包含40字節,因爲TCP頭部最長是60字節(其中還包含前面討論的20字節的固定部分)。
最常見的可選字段是最長報文大小,又稱爲MSS(Maximum Segment Size),每個連接方通常都在通信的第一個報文段(爲建立連接而設置SYN標誌爲1的那個段)中指明這個選項,它表示本端所能接受的最大報文段的長度。
選項長度不一定是32位的整數倍,所以要加填充位,即在這個字段中加入額外的零,以保證TCP頭是32的整數倍。

10、數據部分

TCP 報文段中的數據部分是可選的。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。

參考:https://blog.csdn.net/Sharp_UP/article/details/72783243
https://blog.csdn.net/baidu_17611285/article/details/80171239
https://blog.csdn.net/paincupid/article/details/79726795

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