3分鐘搞懂TCP通信過程!

一、需求?

網絡的高速發展迫切需要解決兩臺計算機之間互相通信的問題。

二、面臨的問題?

  1. 發送方如何確認接收方準備好接收信息了:解決方式是三次握手
  2. 信息量過大:解決方式是分段傳輸
  3. 信 息 丟 失 : 解決方式是失敗重傳

三、兩臺計算機通過TCP進行通信的過程?

  1. 建立連接:客戶端和服務器需要通過三次握手建立連接
    tcp3ack
    第一次客戶端發送syn問服務器:你能收到我消息不?
    第二次服務器發送消息問客戶端:ack(我能收到消息)+syn(你能收到我消息不)?
    第三次客戶端發送消息回答服務器:ack (能收到消息)
    進入estalished(連接已建立)狀態
    2、發送消息:客戶端會將一份數據分成多份來發送,最多發送三份數據,過段時間收到幾份服務器的簽收信息就再發送幾份,保證不超過三份正在發送的數據,如果超時仍然收不到某些數據的簽收信息就重新發送對應的數據信息。
    3、斷開連接:通過四次揮手斷開連接
    tcp4fin

第一次揮手:客戶端發送一個FIN=M,用來關閉客戶端到服務器端的數據傳送,客戶端進入FIN_WAIT_1狀態。意思是說"我客戶端沒有數據要發給你了",但是如果你服務器端還有數據沒有發送完成,則不必急着關閉連接,可以繼續發送數據。

第二次揮手:服務器端收到FIN後,先發送ack=M+1,告訴客戶端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息。這個時候客戶端就進入FIN_WAIT_2 狀態,繼續等待服務器端的FIN報文。

第三次揮手:當服務器端確定數據已發送完成,則向客戶端發送FIN=N報文,告訴客戶端,好了,我這邊數據發完了,準備好關閉連接了。服務器端進入LAST_ACK狀態。

第四次揮手:客戶端收到FIN=N報文後,就知道可以關閉連接了,但是他還是不相信網絡,怕服務器端不知道要關閉,所以發送ack=N+1後進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳。服務器端收到ACK後,就知道可以斷開連接了。

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