圖解TCP的三次握手和四次揮手

dudulala發表於2019-05-12
建立TCP連線需要三次握手,斷開TCP連線需要四次揮手。過程如下圖:

圖解TCP的三次握手和四次揮手

三次握手

第一次握手:客戶端傳送SYN包(syn=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;(報文段中不包含應用層資料)

第二次握手:伺服器收到SYN包,必須確認客戶的SYN(ack=x+1),同時自己也傳送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;(報文段中不包含應用層資料)

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=y+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。(可以在報文段負載中攜帶客戶到伺服器的資料)

理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。

四次揮手

第一次揮手:主動關閉方傳送一個FIN,並進入FIN_WAIT_1狀態。此階段關閉主動方到被動關閉方的資料傳送,表明自己不再向被動方傳送資料(當然,在FIN包之前傳送出去的資料,如果沒有收到對應的ACK確認報文,主動關閉方依然會重發這些資料),但是,此時主動關閉方還可以接受資料。

第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),被動關閉方進入CLOSN_WAIT狀態,接收到ACK的主動關閉方進入FIN_WAIT_2狀態。

第三次揮手:被動關閉方傳送一個FIN,並進入LAST_ACK狀態。用來關閉被動關閉方到主動關閉方的資料傳送,表明不再傳送資料。

第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,並進入TIME_WAIT狀態(等待的時間與具體實現有關),經過等待,連線正式關閉,至此,完成四次揮手。


相關文章