TCP3次握手,四次揮手

TCP協議

TCP是一種面向連接的單播協議,在發送數據前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實是客戶端和服務器的內存裏保存的一份關於對方的信息,如ip地址、端口號等。

TCP可以看成是一種字節流,它會處理IP層或以下的層的丟包、重複以及錯誤問題。在連接的建立過程中,雙方需要交換一些連接的參數。這些參數可以放在TCP頭部。

TCP提供了一種可靠、面向連接、字節流、傳輸層的服務,採用三次握手建立一個連接。採用4次揮手來關閉一個連接。

三次握手

爲什麼要進行三次握手?

客戶端和服務端通信前要進行連接,“三次握手”的作用就是雙方都能明確自己和對方的收、發能力是正常的

第一次握手:客戶端發送SYN包給服務器,並進入SYN_SEN狀態,等待服務器確定。(服務端就能得出結論:客戶端的發送能力、服務端的接收能力是正常的。)

第二次握手:服務器收到客戶端的SYN包,發送一個ACK,同時發送自己的SYN,此時服務器進入SYN_RECV狀態。(客戶端就能得出結論:服務端的接收、發送能力,客戶端的接收、發送能力是正常的。)

第三次握手:客戶端收到服務器發送的SYN+ACK後,進入ESTABULSHED狀態,併發送服務器SYN包確定ACK,服務器收到ACK後,進入ESTABLISHED狀態(服務端就能得出結論:客戶端的接收、發送能力,服務端的發送、接收能力是正常的。)

四次揮手

TCP連接是雙向傳輸的模式,當有一方要關閉連接時,會發送指令告知對方,我要關閉連接了。

關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方是否現在關閉發送數據通道,需要上層應用來決定,因此,己方ACK和FIN一般都會分開發送。

第一次揮手:主動關閉方發送一個FIN並進入FIN_WAIT1狀態

第二次揮手:被動關閉方接收到關閉方發送的FIN併發送ACK,此時被動關閉方進入CLOSE_WAIT狀態,主動關閉方收到被動關閉方的ACK後,進入FIN_WAIT2狀態

第三次揮手:被動關閉方發送一個FIN並進入LAST_ACK狀態

第四次揮手:主動關閉方收到被動關閉方發送的FIN併發送ACK,此時主動關閉方進入TIME_WAIT狀態,經過2MSL時間後關閉連接,被動關閉方收到主動關閉方的ACK後,關閉連接

注:MSL(Maximum Segment Lifetime)最大報文生存時間,防止被動關閉方沒有收到最後一個ACK

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章