什么是tcp協議?TCP是一個超級麻煩的協議,而它又是互聯網的基礎,也是每個程序員必備的基本功。
傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC 793定義。
TCP旨在適應支持多網絡應用的分層協議層次結構。 連接到不同但互連的計算機通信網絡的主計算機中的成對進程之間依靠TCP提供可靠的通信服務。TCP假設它可以從較低級別的協議獲得簡單的,可能不可靠的數據報服務。 原則上,TCP應該能夠在從硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。
TCP/IP自下到上劃分為鏈路層、網絡層、傳輸層、應用層。下層向上層提供能力,上層利用下層的能力提供更高的抽象。
鏈路層,也稱網絡接口層,包括操作系統的設備驅動程序和網卡,它們一起處理與傳輸媒介(光纖等)的物理接口細節。
網絡層,也就是IP層,負責處理IP datagram在網絡中的傳輸,IP層傳輸的是IP datagram,借助路由表,把IP datagram從網絡的一端傳輸到另一端,簡而言之:IP實現包的路由傳輸,IP協議和路由器工作在網絡層。
傳輸層,提供端到端之間的通信,包括提供面向連接和高可靠性的TCP,以及無連接不可靠的UDP。貌似TCP更好,但實際不是這樣,UDP因為不需要建連開銷,所以更快,應用得也很廣,比如新一代互聯網協議HTTP3就從TCP轉向UDP,應根據適應場景選擇傳輸層協議。
應用層,跟應用相關,不同應用解決不同問題,需要不同的應用層協議。
TCP工作方式
TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答SYN+ACK,并最終對對方的SYN執行ACK確認。
TCP三次握手的過程如下:
(1)客戶端發送SYN(SEQ=x)報文給服務端,進入SYN_SEND狀態。
(2)服務端接收SYN報文,回應一個SYN(SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
(3)客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP客戶端和服務器端成功的建立連接,可以開始傳輸數據了。
當客戶端和服務端通過三次握手建立了 TCP 連接以后,當數據傳送完畢,斷開連接就需要進行TCP的四次揮手。其四次揮手如下所示:
第一次揮手,客戶端設置seq和 ACK ,向服務器發送一個 FIN(終結)報文段。此時,客戶端進入 FIN_WAIT_1 狀態,表示客戶端沒有數據要發送給服務端了。
第二次揮手,服務端收到了客戶端發送的 FIN 報文段,向客戶端回了一個 ACK 報文段。
第三次揮手,服務端向客戶端發送FIN 報文段,請求關閉連接,同時服務端進入 LAST_ACK 狀態。
第四次揮手,客戶端收到服務端發送的 FIN 報文段后,向服務端發送 ACK 報文段,然后客戶端進入 TIME_WAIT 狀態。服務端收到客戶端的 ACK 報文段以后,就關閉連接。此時,客戶端等待 2MSL(指一個片段在網絡中較大的存活時間)后依然沒有收到回復,則說明服務端已經正常關閉,這樣客戶端就可以關閉連接了。