TCP(傳輸控制協定,Transmission Control Protocol)
TCP 是一種面向連線的四層協定。
TCP將訊息分割成多個段(segments),在目的地重新組合,並重新傳送未接收到的封包。
使用TCP的協定包括:
- FTP(檔案傳輸協定,File Transfer Protocol)
- Telnet
- SMTP(簡單郵件傳輸協定,Simple Mail Transfer Protocol)
- HTTP(超文字傳輸協定,Hypertext Transfer Protocol)
這邊有幾點關於TCP的特點:
- TCP是一種面向連線的協定,負責配置網路連接,以便應用程式透過網際網路傳送資料。
- TCP確保接收端收到發送端的所有封包,若TCP發現接收端未接收到所有封包,它將要求發送端重新傳送。
- 兩個設備在接收端收到所有資料後,可以終止TCP連接。
- TCP不支援廣播訊息,僅允許設備之間進行點對點通信。
- TCP還負責將應用程式資料分割為封包,並管理網路中的資料流控制,保持資料傳輸的無誤性,並在資料遺失時重新傳輸。
例如,當Web伺服器使用HTTP協定向用戶端傳送HTML檔案時,是TCP協助HTTP建立連線並傳送檔案。
TCP將檔案或資料分割為封包並加上編號,然後傳送至IP層進行傳遞,封包經由多條路徑傳送,最終到達目標IP位址。
TCP在客戶端設備上根據封包編號檢查所有封包是否到達,若發現封包數量有差異,則會重新傳送封包。
TCP的功能
- TCP 作為應用層與網際網路協定(Internet Protocol, IP)之間的介面。
- TCP際網路模型中提供主機到主機的連接,屬於傳輸層。
- TCP 管理所有握手和傳輸的細節。
- TCP 識別由於網路擁塞、流量負載平衡和其他不規則活動導致的封包遺失和重複。
- TCP 對每個發送和接收的封包都使用確認(acknowledgement)。這種技術要求接收方對接收到的資料據進行回應。發送方會記錄其發送的封包,並設置計時器以管理封包的傳輸,計時器在封包丟失時發揮作用。確認技術實際上是確認每個資料封包按正確順序到達。
TCP的服務
TCP提供資料流控制和一致的資料傳輸服務。
這種一致的資料傳輸服務對於檔案傳輸、資料庫服務和其他服務至關重要,且TCP依賴IP來提供一致的封包傳輸。
應用層負責處理網路中兩個主機之間的TCP連線。
TCP 向應用層提供以下服務:
- 全雙工傳輸(Full-Duplex transmission):全雙工允許在同一信號載體上同時進行雙向資料傳輸。例如,電話屬於全雙工,因為它允許雙方在通話時同時講話。大多數資料機都提供讓用戶選擇全雙工或半雙工的選項,具體取決於用戶所運行的應用程式。
- 半雙工傳輸(Half-Duplex transmission):半雙工允許雙向資料傳輸,但一次只能在一個方向上進行。例如,對講機,只允許一位使用者在同一時間傳輸資料。
- 單工傳輸(Simplex transmission):只允許一位使用者一次傳輸資料,並且只能在一個方向上進行傳輸。例如,電視和收音機,訊號僅從發送端傳輸到多個接收端。
大多數TCP連線是雙工模式,允許資料雙向流動。單工模式、全雙工模式和半雙工模式是決定兩個通信設備之間信息流動方式的傳輸模式。
TCP的運作
TCP提供資料處理、流量控制和資料傳輸的可靠性等功能。
這些功能的實現取決於一個持續且穩定的連接。
識別兩個通信方的標準如下:
- 發送方的IP地址
- 發送方的協定埠號(Protocol Port Number)
- 接收方的IP地址
- 接收方的協定埠號
TCP的整體運作方式涉及如何管理兩個通信方之間的連接,包括:
滑動窗口(Sliding Window) :TCP段具有一個標記窗口大小(Window Size),該值表示它可以接收的資料量。窗口大小為零表示無法接受任何資料,而窗口大小為非零則表示可以接受資料。發送方需要維護窗口大小,該窗口大小代表未被確認的資料和發送給接收方的資料大小。
- 接收方的窗口大小為6,表示它可以接受6字節的資料。
- 發送方的窗口大小範圍為13到18字節,其中13到15字節尚未收到來自接收方的確認。
- 發送方可以發送16到18字節。
- 當接收到13到15字節的確認後,窗口的左端會關閉,隨著接收方發送確認,窗口會向右滑動。
序列號和確認號(Sequence and Acknowledgement Numbers):參與TCP會話的雙方需維護32位的序列號來標識已發送的資料量。發送方隨每個封包一起發送序列號,接收方通過發送確認號來確認接收到的資料。發送方可以選擇任意隨機數作為初始序列號(Initial Sequence Number, ISN),序列號範圍為0到4,294,967,295。
三次握手(Three-Way Handshake)
三次握手是TCP/IP網路中客戶端與伺服器之間的通信過程。
三次握手包括以下步驟:
- 客戶端向伺服器發送一個SYN標誌的請求以建立連接。
- 伺服器接受請求並向客戶端發送帶有SYN標誌的確認。
- 客戶端接收到伺服器的SYN+ACK標誌,並向伺服器發送ACK確認。
這些步驟建立了客戶端與伺服器之間的連接,使它們可以輕鬆地傳送資料,因為雙方都已確認彼此的序列號和確認號。
TCP 標頭格式(TCP Header Format)
TCP 將資料分割為封包,並在每個資料封包上添加一個標頭(header),這樣就形成了TCP段(TCP Segment)。TCP段會被封裝進入IP資料包(IP Datagram),TCP標頭由10個強制性欄位和一個選用擴展欄位組成。資料段(Data Section)緊隨其後,資料段包含應用程式的資料載荷(Data Payload),而TCP標頭不會指定資料段的長度,通過從IP資料包的總長度中減去TCP標頭和封裝標頭的長度來計算資料段的長度。
TCP標頭的欄位:
- 來源埠號(Source Port, 16位元):數字值,表示來源埠號。
- 目的地埠號(Destination Port, 16位元):數字值,表示目的地埠號。
- 序列號(Sequence Number, 32位元):它是段中的第一個資料字節。如果有SYN標誌,序列號成為初始序列號(ISN),第一個資料字節則為ISN+1。
- 確認號(Acknowledgment Number, 32位元):當ACK標誌設置後,該欄位包含發送方期望接收方發送的下一個序列號。
- 標頭長度(Header Length, 4位元):該欄位標示32位元字的數量,標頭長度也稱為資料偏移欄位(Data Offset Field)。
- 保留欄位(Reserved, 6位元):未來使用,初始應設為0。
- 控制位元(Control Bits, 6位元):這些控制位元管理連接的建立、資料傳輸和連接終止,TCP標頭中的控制位元包括:
- URG:表示緊急指標欄位有效(Urgent Pointer field significant)。
- ACK:表示確認欄位有效(Acknowledgment field significant)。
- PSH:推送功能(Push Function),當TCP接收到應用程式請求時,會立即發送累積的資料,而不進行干預。
- RST:重置連接(Reset the connection),重置請求會強制TCP立即終止連接,可能會導致資料丟失。
- SYN:同步序列號(Synchronize sequence numbers)。
- FIN:終止連接(Closing of connection),FIN標誌代表TCP連接的終止。
- 窗口大小(Window Size, 16位元):此欄位設置接收方願意接受的資料量(以字節為單位)。從確認欄位的資料包開始計算。
- 校驗和(Checksum, 16位元):包括標頭和資料的校驗。系統會在TCP段前附加一個偽標頭來計算校驗和。
- 緊急指標(Urgent Pointer, 16位元):該欄位指示需要立即傳輸的資料,並指出緊急資料的結束位置。
- 選項(Options):系統可以在標頭結尾處提供選項,但選項的實施必須完整且長度必須是8位元的倍數,主要選項包括:
- 選項列表結尾(End of Option List):標示選項列表的結尾,通常用於當選項列表的結尾不與TCP標頭的結尾一致時。
- 無操作(No Operation):此選項表示多個選項之間的邊界。例如,將選項對齊到字邊界。
- 最大段大小(Maximum Segment Size):TCP可以接收的最大段大小,該大小在連接建立過程中發送。
- 填充(Padding):指示TCP標頭結束並且資料從32位元邊界開始,由所有的0組成。
- 資料(Data):包含在段中的資料字節。