建立連接
TCP是通過三次握手建立連接的,其過程如下:
1. 客戶端向服務器發送一個SYN報文段,該報文段不包含數據,SYN標誌被置爲1,同時指定源端口、目的端口、以及初始序列號(Client_ISN)
2. 服務器收到客戶端的SYN報文段後,在服務端爲該連接分配TCP緩存及相關變量,然後服務器向客戶端回發一個SYN報文段(SYNACK),該報文段包含服務端指定的初始序列號(Server_ISN),同時該報文段的確認序列號(ACK)被置爲 Client_ISN+1
3. 客戶端收到服務端發送過來的SYNACK報文段之後,客戶端爲該連接分配緩存及相關變量,然後向服務器發送一個ACK報文段,該報文段的ACK爲Server_ISN+1,且SYN標誌被爲0(前兩個報文段的SYN標誌爲1)
終止連接
TCP是全雙工的協議,因此每個方向必須單獨關閉,終止一個連接一共需要4次握手。當一方完成它的數據發送便向對方發送一個FIN來終止該方向的連接,當另一方收到這個信號後,便通知應用層另一端已經終止該方向的數據傳送,同時自動回送一個ACK(ACK_Number = FIN_Number + 1);但此時反方向的數據傳送依然可以繼續進行,當需要終止反方向的數據發送時,也需要重複上述過程,其過程如下圖所示: