1. 程式人生 > >TCP建立連接和釋放連接過程

TCP建立連接和釋放連接過程

排隊 sent 發送 col 結束 ket body 傳輸層 fin

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。TCP建立連接需要三次握手,釋放連接需要四次握手。

1.TCP整個過程流程圖

技術分享圖片

並且TCP整個過程可以看成是狀態機

技術分享圖片

2.TCP建立過程(三次握手)

技術分享圖片

TCP連接過程:

(1) 服務端通過socket,bind和listen準備好接受外來的連接,此時服務端狀態為Listen

(2)客戶端通過調用connect來發起主動連接,導致客戶端TCP發送一個SYN(同步)字節,告訴服務器客戶將在(待建立的)連接中發送的數據的初始序列號,客戶端狀態為SYN_SENT。

(3)服務器確認(ACK)客戶的SYN,並自己也發送一個SYN,它包含服務器將在同一連接中發送數據的初始序列號。

(4)客戶端確認服務的ACK和SYN,向服務器發送ACK,客戶端狀態ESTABLISHED

(5)服務器接收ACK,服務器狀態ESABLISHED。

3.TCP關閉過程(四次握手)

技術分享圖片

TCP連接中止過程:

(1)某端首先調用close,成為主動關閉端,向另一端發送FIN分節,表示數據發送完畢,此時主動關閉端狀態FIN_WAIT_1;

(2)接收到FIN的是被動關閉端,FIN由TCP確認,先向主動關閉端發送ACK,作為一個文件結束符傳遞給接收端應用進程(放在已排隊等候該應用進程接收到的任何其他數據之後),因為FIN的接收意味著接收端應用進程在相應連接無額外數據可接收,接收端狀態CLOSE_WAIT;主動關閉端接收到ACK狀態變為FIN_WAIT_2;

(3)一段時間後,接收端接收到這個文件結束符的應用進程調用close關閉套接字,向主動關閉端發送FIN,接收端狀態為LAST_ACK;

(4)主動關閉端確認FIN,狀態變為TIME_WAIT,並向接收端發送ACK,接收端接收到ACK關閉TCP,而主動關閉端一段時間後也關閉TCP;

TCP建立連接和釋放連接過程