tcp頭的結構?
以下是TCP頭部結構:
16位端口號:告知主機該報文段是來自哪里(源端口Source Port)以及傳給哪個上層協議或應用程序(目的端口Destination Port)的。進行TCP通信時,客戶端通常使用系統自動選擇的臨時端口號,而服務器則使用知名服務端口號(比如DNS協議對應端口53,HTTP協議對應80,這些端口號可在/etc/services文件中找到)。
32位序號:一次TCP通信(從TCP連接建立到斷開)過程中某一個傳輸方向上的字節流的每個字節的編號。假設主機A和主機B進行TCP通信,A發送給B的第一個TCP報文段中,序號值被系統初始化為某個隨機值ISN(Initial Sequence Number,初始序號值)。那么在該傳輸方向上(從A到B),后續的TCP報文段中序號值將被系統設置成ISN加上該報文段所攜帶數據的第一個字節在整個字節流中的偏移。例如,某個TCP報文段傳送的數據是字節流中的第1025~2048字節,那么該報文段的序號值就是ISN+1025.另外一個傳輸方向(從B到A)的TCP報文段的序號值也具有相同的含義。
32位確認號(ACKnowledgement number):用作對另一方發送來的TCP報文段的響應。其值是收到的TCP報文段的序號值加1。假設主機A和主機B進行TCP通信,那么A發送出的TCP報文段不僅攜帶自己的序號,而且包含對B發送來的TCP報文段的確認號。反之,B發送出的TCP報文段也同時攜帶自己的序號和對A發送來的報文段的確認號。
4位頭部長度(header length):標識該TCP頭部有多少個32bit字(4字節)。因為4位最大能標識15,所以TCP頭部最長是60字節。
6位標志位包含如下幾項:
URG標志,表示緊急指針(urgent pointer)是否有效。
ACK標志,表示確認號是否有效。我們稱攜帶ACK標識的TCP報文段為確認報文段。
PSH標志,提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間(如果應用程序不將接收
到的數據讀走,它們就會一直停留在TCP接收緩沖區中)。
RST標志,表示要求對方重新建立連接。我們稱攜帶RST標志的TCP報文段為復位報文段。
SYN標志,表示請求建立一個連接。我們稱攜帶SYN標志的TCP報文段為同步報文段。
FIN標志,表示通知對方本端要關閉連接了。我們稱攜帶FIN標志的TCP報文段為結束報文段。
16位窗口大?。╳indow size):是TCP流量控制的一個手段。這里說的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告訴對方本端的TCP接收緩沖區還能容納多少字節的數據,這樣對方就可以控制發送數據的速度。
16位校驗和(TCP check sum):由發送端填充,接收端對TCP報文段執行CRC算法以檢驗TCP報文段在傳輸過程中是否損壞。注意,這個校驗不僅包括TCP頭部,也包括數據部分。這也是TCP可靠傳輸的一個重要保障。
16位緊急指針(urgent pointer):是一個正的偏移量。它和序號字段的值相加表示最后一個緊急數據的下一字節的序號。因此,確切地說,這個字段是緊急指針相對當前序號的偏移,不妨稱之為緊急偏移。TCP的緊急指針是發送端向接收端發送緊急數據的方法。
TCP頭部選項:TCP頭部的最后一個選項字段(options)是可變長的可選信息。這部分最多包含40字節,因為TCP頭部最長是60字節