首頁>Club>
tcp程式設計時,在雙方正式通訊之前,首先需要經過三次握手。但是據我所知,三次握手中,第三次傳送ACK的時候,如果此時ACK丟失,那麼服務端在一段時間內沒收到ACK,服務端就會重新發送SYN+ACK,以確保正確建立連線。而客戶端在發出ACK的時候,狀態就由SYN_SEND轉換為了ESTABLISHED,如果在ACK丟失的情況下(此時並沒有真正建立連線,但客戶端以為已經建立連線了),客戶端開始send資料給服務端,將會觸發RST,關閉連線
4
回覆列表
  • 1 # 喲喲吼說科技

    如題,TCP連線中,connect連線成功的標準是什麼?

    喲喲認為在客戶端傳送完第三次ACK後即表明connect連線成功。

    上圖為TCP三次握手建立連線的過程:

    1、客戶端傳送SYN至伺服器端,客戶端狀態變為SYN-SENT;

    2、伺服器端在接收到資料請求後,伺服器狀態迴應資料包後,狀態變為SYN-RCVD;

    3、客戶端在接收到迴應的資料包後,迴應第三次ACK,客戶端狀態變為ESTAB-LISHED;

    4、伺服器端接收到資料包後,伺服器的狀態才能進入ESTAB-LISHED;這時才能完成連線,可以進行資料傳送;

    可以看出客戶端在傳送完第三次ACK後,狀態立刻變為ESTAB-LISHED,客戶端不會去在意自己傳送的ACK是否丟失,客戶端可以以ACK+DATA的格式來發送資料。當此資料包到達伺服器端時,雖然伺服器端的狀態為SYN-RVCD,但其依然可以將DATA快取下來,並且對ACK進行認證,即伺服器端進入ESTAB-LISHED狀態,最後將DATA提交給應用程式去處理。

    因此喲喲認為,在客戶端傳送完第三次ACK後,自身狀態變為ESTAB-LISHED,就表示connect成功返回,可以接收使用者的資料。

  • 2 # 貓的天空之城Ty

    標準是客戶端與伺服器之間可以通訊,並不是最後一次客戶端發給服務端的ACK包,三次握手並不能保證tcp的可靠性,這也不是tcp協議存在的問題,而是諸多協議想在不可靠通道上可靠傳輸的最低要求。

  • 中秋節和大豐收的關聯?
  • 怎樣才能成功轉型成為動漫遊戲的創業者?