TCP協議間交換的資料單元稱為“TCP段”,包括兩部分:首部和資料。標準首部長20位元組,帶有選項的首部會更長。
1. 源埠和目的埠
各佔2位元組,埠號加上IP地址,共同構成socket。互相通訊的程式使用一對socket,包括協議、源IP、源埠、目的IP、目的埠,這五個元素唯一確定一個TCP連線。
2. 序號
佔4位元組,是TCP段所傳送的資料部分第一個位元組的序號。在TCP傳送的資料流中,每一個位元組都有一個序號。建立連線時,傳送方將初始序號(Initial Sequence Number, ISN)填寫到第一個傳送的TCP段序號中。
3. 確認號
佔4位元組,是期望收到對方下次傳送的資料的第一個位元組的序號,也就是期望收到的下一個TCP段的首部中的序號,等於已經成功收到的TCP段的最後一個位元組序號加1。確認號在ACK標誌為1時有意義,除了主動發起連線的第一個TCP段不設定ACK標誌外,其後傳送的TCP段都會設定ACK標誌。
4. 資料偏移
佔4位元,表示資料開始的地方離TCP段的起始處有多遠。實際上就是TCP段首部的長度。由於首部長度不固定,因此資料偏移欄位是必要的。資料偏移以32位為長度單位,因此TCP首部的最大長度是60(15*4)個位元組。
5. 控制位
一共6個,佔6位元,設定為1時有效。按順序依次為:URG、ACK、PSH、RST、SYN、FIN。
URG |
緊急位,為1時,首部中的緊急指標有效 |
ACK |
確認位,為1時,首部中的確認號有效 |
PSH |
推位,為1時,要求把資料儘快交給應用程式 |
RST |
復位標誌,為1時,復位連線,一般在出錯或關閉連線時使用 |
SYN |
同步位,在建立連線時使用,當SYN=1而ACK=0時,表明這是一個連線請求報文段。對方若同意建立連線,在發回的報文段中使SYN=1和ACK=1 |
FIN |
結束位,為1時,表示傳送方完成了資料傳送 |
6. 視窗
佔2位元組,表示報文段傳送方期望接收的位元組數,可接收的序號範圍是從接收方的確認號開始到確認號加上視窗大小之間的資料。
7. 校驗和
校驗和包含了偽首部、TCP首部和資料,校驗和是TCP強制要求的,由傳送方計算,接收方驗證。
8. 緊急指標
URG標誌為1時,緊急指標有效,表示資料需要優先處理。緊急指標指出在TCP段中的緊急資料的最後一個位元組的序號,使接收方可以知道緊急資料共有多長。
9. 選項
最常用的選項是最大段大小(Maximum Segment Size,MSS),向對方通知本機可以接收的最大TCP段長度。MSS選項只在建立連線的請求中傳送。