1. 程式人生 > >TCP 三次握手和四次揮手,以及為什麼三次和四次

TCP 三次握手和四次揮手,以及為什麼三次和四次

**

TCP的三次握手過程?為什麼會採用三次握手,二次握手可以嗎?

**
TCP的三次握手過程:客戶端向伺服器傳送連線請求;伺服器對收到的客戶端的報文段進行確認;客戶端再次向伺服器端的確認進行確認。
這裡寫圖片描述

為什麼採用三次?

(1)TCP是全雙工的。客戶端和服務端都可以向對方傳送訊息。如果兩次,服務端無法確認客戶端是否可以能收到。
(2)防止失效的連線請求報文段傳送到服務端。當客服端傳送的連線請求因為網路導致延遲到達服務端,那麼服務端接收到以後以為又是一個新的連線,但是客戶端現在沒有建立連線,不會理會服務端的確認。這樣服務端就一直等待客戶端傳送,導致資源浪費。而如果是三次握手,服務端沒有收到客戶端的確認,就不會一直等了。

TCP的四次揮手過程,為什麼要四次

(1)第一次揮手:主動關閉方傳送一個FIN,(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料)但是,此時主動關閉方還可以接受資料。
(2)第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1。
(3)第三次揮手:被動關閉方傳送一個FIN,(與SYN相同,一個FIN佔用一個序號)。
(4)第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。

為什麼需要四次揮手?

因為TCP有個半關閉狀態,假設A.B要釋放連線,那麼A傳送一個釋放連線報文給B,B收到後傳送確認,這個時候A不發資料,但是B如果發資料A還是要接收,這叫半關閉。然後B還要發給A連線釋放報文,然後A發確認,所以是4次。

在tcp連線握手時為何ACK是和SYN一起傳送?這裡ACK卻沒有和FIN一起傳送呢?

是因為tcp是全雙工模式,接收到FIN時意味將沒有資料再發來,但是還是可以繼續傳送資料。

由於是以前的筆記,參考的部落格和資料就沒有闡明瞭。如侵犯到版權,馬上刪除