文章目錄
- TCP協議是什么?
- TCP協議的主要特點
- 1. 面向連接
- 2. 可靠傳輸
- 3. 流量控制
- 4. 擁塞控制
- TCP首部格式
- 源端口和目標端口(各16位)
- 序列號(32位)
- 確認號(32位)
- 數據偏移(4位)
- 保留字段(6位)
- 控制位(6位)
- 窗口大小(16位)
- 校驗和(16位)
- 緊急指針(16位)
- 選項字段(可變長度)
- 總結
TCP協議是什么?
TCP(傳輸控制協議)是Internet協議族中的核心協議之一,工作在傳輸層。它為應用層提供面向連接的、可靠的字節流服務。
TCP協議的主要特點
1. 面向連接
TCP在傳輸數據之前,必須先建立連接。
2. 可靠傳輸
TCP通過多種機制保證數據傳輸的可靠性:
確認應答機制
每發送一段數據,接收方都要回復一個ACK確認。
超時重傳
如果發送方在規定時間內沒收到ACK,就重新發送數據。
序列號機制
每個字節都有一個序列號,確保數據按正確順序組裝。
校驗和
檢測數據在傳輸過程中是否出錯。
3. 流量控制
TCP會根據接收方的處理能力來調整發送速度,避免接收方被"撐爆"。
4. 擁塞控制
當網絡擁堵時,TCP會主動降低發送速度,避免讓網絡更加擁堵。
TCP首部格式
源端口和目標端口(各16位)
這兩個字段標識了通信的兩端。端口號的范圍是0-65535,其中:
- 0-1023:知名端口(如HTTP的80,HTTPS的443)
- 1024-49151:注冊端口
- 49152-65535:動態/私有端口
序列號(32位)
序列號用來標識每個字節的位置。TCP把數據流看作一個巨大的字節數組,每個字節都有一個序列號。
確認號(32位)
確認號表示期望收到的下一個字節的序列號。比如我收到了序列號1000-1499的數據,那么我會發送ACK=1500,表示"1500之前的數據我都收到了,請發送1500開始的數據"。
數據偏移(4位)
也叫首部長度,表示TCP首部有多少個32位字(4字節)。由于這個字段只有4位,所以TCP首部最長是15×4=60字節。
保留字段(6位)
目前全部設為0,為將來擴展使用。
控制位(6位)
這6個標志位控制TCP的行為:
URG(緊急):標識緊急數據
ACK(確認):標識確認號字段有效
PSH(推送):要求立即推送數據給應用程序
RST(復位):重置連接
SYN(同步):用于建立連接
FIN(結束):用于關閉連接
窗口大小(16位)
表示接收方還能接收多少字節的數據,用于流量控制。
校驗和(16位)
用于檢測TCP首部和數據在傳輸過程中是否出錯。計算校驗和時,不僅包括TCP首部和數據,還包括IP首部中的源IP地址、目標IP地址等信息。
緊急指針(16位)
當URG標志位設置時,這個字段指向緊急數據的結束位置。
選項字段(可變長度)
最常見的選項包括:
- 最大段大小(MSS):TCP能接收的最大數據段長度
- 窗口擴大:擴大窗口大小的表示范圍
- 時間戳:用于計算往返時間
總結
TCP協議的核心思想就是"可靠"二字,通過序列號、確認應答、超時重傳等機制,確保數據能夠準確、完整、有序地到達目的地。