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