TCP首部詳解

wKioL1VKpSnQ2xHHAALRWqMy830620.jpg

源端口(Source Port),目標端口(Destination Port) 各2字節

    源端口號,標識主機上發起傳送的應用程序;目的端口標識主機上傳送要到達的應用程序。源端和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上I P首部中的源端I P地址和目的端IP地址唯一確定一個TCP連接。一個I P地址和一個端口號有時也稱爲一個一對套接字(socket),套接字對(socket pair)(包含客戶I P地址、客戶端口號、服務器I P地址和服務器端口號的四元組 )可唯一確定互聯網絡中每個TCP連接的雙方。IP+TCP端口唯一確定一個TCP連接。

  TCP協議通過使用"端口"來標識源端和目標端的應用進程。 端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在"衆所周知的端 口"(Well-Know Port)爲用戶提供服務。0-1023

 

序號(Sequence Number) 4字節

    由於 TCP 封包必須要帶入 IP 數據包當中,所以如果 TCP 數據太大時(大於 IP 數據包的容許程度), 就得要進行分段。這個 Sequence Number 就是記錄每個封包的序號,可以讓收受端重新將 TCP 的數據組合起來。

序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。

 

確認號(Acknowledge Number) 4字節

    爲了確認客戶端確實有收到我們服務器 端所送出的封包數據,我們 服務器 端當然希望能夠收到客戶端方面的響應,那就是這個 AcknowledgeNumber 的用途了。 當客戶端 端收到這個確認碼時,就能夠確定之前傳遞的封包已經被正確的收下了。這個號是期望收到對方的下一個報文段的數據的第一個字節的序號。

 

數據偏移(Data Offset)4比特

    和IP數據包頭部一樣,也有個Options字段,長度是不固定的,而爲了要確認整個TCP封包大小,就需要這個標誌來說明整個封包區段的起始位置。

    這個字段指出TCP報文段的數據起始處距離 TCP報文段的起始處有多遠。“數據偏移”的單位不是字節而是32bit字(4字節爲計算單位)。

    ###沒有任何選項字段的TCP頭部長度爲20字節;最多可以有60字節的TCP頭部。###

 

保留字段(Reserved) 佔6比特

保留爲今後使用,但目前應置爲0。

 

狀態控制碼(Code,Control Flag)

標誌位字段(U、A、P、R、S、F):佔6比特。各 比特的含義如下:

URG緊急指針(urgent),當URG=1時,表明緊急指針字段有效,代表該封包爲緊急封包。它告訴系統此報文段中有緊急數據,應儘快傳送(相當於高優先級的數據), 且上圖中的 Urgent Pointer 字段也會被啓用。

ACK確認序號有效(Acknowledge)。只有當ACK=1時確認號字段纔有效,代表這個封包爲確認封包。當ACK=0時,確認號無效。

PSH接收方應該儘快將這個報文段交給應用層;(Push function)若爲1時,代表要求對方立即傳送緩衝區內的其他對應封包,而無需等緩衝滿了才送。

RST:重置連接。(Reset),當RST=1時,表明TCP連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接。

SYN發起一個連接(Synchronous),SYN置爲1,就表示這是一個連接請求或連接接受報文,通常帶有 SYN 標誌的封包表示『主動』要連接到對方的意思。。

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

 

滑動窗口(Window) 佔2字節

    窗口字段用來控制對方發送的數據量,可以告知對方目前本身有的緩衝器容量(Receive Buffer) 還可以接收封包。當 Window=0 時,代表緩衝器已經額滿,所以應該要暫停傳輸數據。單位爲字節。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然後通知對方以確定對方的發送窗口的上限,這個值是本機期望一次接收的字節數。

 

TCP校驗和(Checksum)  佔2字節

    當數據要由發送端送出前,會進行一個檢驗的動作,並將該動作的檢驗值標註在這個字段上;而接收者收到這個封包之後,會再次的對封包進行驗證,並且比對原發送的 Checksum 值是否相符,如果相符就接受,若不符就會假設該封包已經損毀,進而要求對方重新發送此封包!在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。(對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。)

 

緊急指針(Urgent Pointer)  佔2字節

    這個字段是在 Code 字段內的 URG = 1 時纔會產生作用。可以告知緊急數據所在的位置(緊急指針指出在本報文段中的緊急數據的最後一個字節的序號)。

 

選項(Options) 長度可變。

    TCP首部可以有多達40字節的可選信息,用於把附加信息傳遞給終點,或用來對齊其它選項。

    目前此字段僅應用於表示接收端可以接收的最大數據區段容量,若此字段不使用,表示可以使用任意數據區段的大小。 這個字段較少使用。

TCP首部的主要選項:

    最大報文段長度MSS(Maximum Segment Size)是TCP報文段中的數據字段的最大長度。MSS告訴對方TCP:“我的緩存所能接收的報文段的數據字段的最大長度是MSS個字節。”

 

填充字段(Padding)

    如同 IP 封包需要有固定的 32bits 表頭一樣, Options 由於字段爲非固定, 所以也需要 Padding 字段來加以補齊才行。同樣也是 32 bits 的整數。

    這是爲了使整個首部長度是4字節的整數倍。


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