TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP工作在網(wǎng)絡(luò)OSI七層模型中的第四層-傳輸層,下面一張圖展示OSI七層模型及每一層的作用和對應(yīng)的協(xié)議。更多精彩內(nèi)容請關(guān)注我的微信公眾號:JavaQ。

TCP是傳輸層協(xié)議,在進行數(shù)據(jù)傳輸之前使用三次握手協(xié)議建立連接,大體的過程是客戶端發(fā)出SYN連接請求后,服務(wù)端接收請求后應(yīng)答SYN+ACK,客戶端收到服務(wù)端應(yīng)答后應(yīng)答ACK,這種建立連接的方法可以防止產(chǎn)生錯誤的連接,防止已失效的連接請求報文段突然又傳送到了服務(wù)端。TCP三次握手過程圖示如下:

TCP三次握手過程描述如下:
1.客戶端發(fā)送SYN標志位為1,Sequence Number為x的連接請求報文段,然后客戶端進入SYN_SEND狀態(tài),等待服務(wù)器的確認響應(yīng);
2.服務(wù)器收到客戶端的連接請求,對這個SYN報文段進行確認,然后發(fā)送Acknowledgment Number為x+1(Sequence Number+1),SYN標志位和ACK標志位均為1,Sequence Number為y的報文段(即SYN+ACK報文段)給客戶端,此時服務(wù)器進入SYN_RECV狀態(tài);
3.客戶端收到服務(wù)器的SYN+ACK報文段,確認ACK后,發(fā)送Acknowledgment Number為y+1,SYN標志位為0,ACK標志位為1的報文段,發(fā)送完成后,客戶端和服務(wù)器端都進入ESTABLISHED狀態(tài),完成TCP三次握手,客戶端和服務(wù)器端成功地建立連接,可以開始傳輸數(shù)據(jù)了。
當(dāng)數(shù)據(jù)傳送完成后,為了正確完整的完成數(shù)據(jù)傳輸,需要經(jīng)過四次揮手斷開連接。TCP四次揮過程圖示如下:

TCP四次揮手過程描述如下:
1.客戶端發(fā)送Sequence Number為x+2,Acknowledgment Number為y+1的FIN報文段,客戶端進入FIN_WAIT_1狀態(tài),即告訴服務(wù)端沒有數(shù)據(jù)需要傳輸了,請求關(guān)閉連接;
2.服務(wù)端收到客戶端的FIN報文段后,向客戶端應(yīng)答一個Acknowledgment Number為Sequence Number+1的ACK報文段,即應(yīng)答客戶端你的請求我收到了,但是我還沒準備好,請等待我的關(guān)閉請求。客戶端收到后進入FIN_WAIT_2狀態(tài);
3.服務(wù)端完成數(shù)據(jù)傳輸后向客戶端發(fā)送Sequence Number為y+1的FIN報文段,請求關(guān)閉連接,服務(wù)器進入LAST_ACK狀態(tài);
4.客戶端收到服務(wù)端的FIN報文段后,向服務(wù)端應(yīng)答一個Acknowledgment Number為Sequence Number+1的ACK報文段,然后客戶端進入TIME_WAIT狀態(tài);服務(wù)端收到客戶端的ACK報文段后關(guān)閉連接進入CLOSED狀態(tài),客戶端等待2MSL后依然沒有收到回復(fù),則證明服務(wù)端已正常關(guān)閉,客戶端此時關(guān)閉連接進入CLOSED狀態(tài)。