1. 程式人生 > >(TCP/IP的特性一)三次握手&四次揮手

(TCP/IP的特性一)三次握手&四次揮手

    TCP與UDP的對比: 

    TCP/IP中有兩個具有代表性的傳輸協議,他們分別是TCP和UDP。TCP提供可靠的通訊傳輸,而UDP則常被用於廣播和細節控制交給應用的通訊傳輸。那他們有何異同呢?

    1、TCP是面向連線的、可靠的流協議,為了提供可靠性傳輸,TCP實現了“三次握手,四次揮手”、“順序控制(序號標識)”、“重發控制”、“滑動視窗機制(流控制)”、“阻塞視窗(擁堵控制)”等特性,以提高網路傳輸穩定性、利用率

    2、UDP是不具有可靠性的資料報協議,細微的處理它會上交給上層的應用去完成。在UDP協議下,雖然可以確保傳送訊息的大小,但是卻不能保證訊息一定會到達接收端

    3、對於傳輸可靠性要求比較高的業務場景,應當使用TCP協議,對於高速傳輸和實時性有高要求的場景應使用UDP,例如網路電話

    4、UDP相對於TCP更加輕量級,佔用資源更少.


TCP的三次握手、四次揮手機制:

    TCP協議在建立連線時候,需要進行三次握手以確認客戶端、服務端雙方均已準備就緒,然後才開始傳輸資料,流程如下:


 而在關閉連線的時候需要進行四次握手:


    之所有要進行三次握手、四次握手,自然是為了保證TCP連線的可靠性,確保雙方的狀態都已準備好才開始或關閉連線。

    那麼,為什麼是三次握手,而不是兩次握手呢?主要是為了防止已過期的連線請求再次被傳到服務端。假設有種情況,客戶端A向服務端B傳送一個syn資訊請求建立連線,但是這個訊息由於網路原因很久都沒到達B,最後終於到達了B卻早已失效,此時B接收到連線請求並建立連線,向A傳送ack,但是A由於早已認為之前連線請求失效了,又沒有再向B發過連線請求,自然不予理會;但是此時B服務端還是建立著連線等待A傳送訊息的,此時便造成了服務端資源浪費,若是採用三次握手,AB雙方都互相確認狀態,則沒有這種情況。

    同理,為什麼斷開連線的時候是四次揮手呢?

    這是因為TCP 是一個全雙工的協議,即客戶端A可以給服務端B傳送資訊,B也可以給A傳送資訊,fin&ack表示的是我已傳送完畢,不會再傳送資訊了,請確認。既然AB都會互相傳送資訊,自然是雙方都需要fin&ack的,因此需要四次揮手

附一張TCP狀態轉移圖: