1. 程式人生 > >TCP三次握手和四次揮手全過程及為什麼要三次握手解答

TCP三次握手和四次揮手全過程及為什麼要三次握手解答

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

TCP三次握手和四次揮手的全過程


     TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線:


位碼即tcp標誌位

,6種表示:

SYN(synchronous建立連線)

ACK(acknowledgement 表示響應、確認)

PSH(push表示有DATA資料傳輸)

FIN(finish關閉連線)

RST(reset表示連線重置)

URG(urgent緊急指標欄位值有效)


三次握手:


第一次握手:客戶端傳送syn(syn=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYNack=x+1),同時自己也傳送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN

ACK包,向伺服器傳送確認包ACK(ack=y+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

      握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。

      確認號:其數值等於傳送方的傳送序號+1(即接收方期望接收的下一個序列號)

四次揮手:

與建立連線的三次握手類似,斷開一個TCP連線則需要四次揮手

第一次揮手:主動關閉方傳送一個FIN

,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發資料了(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料),但是,此時主動關閉方還可以接受資料。

第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。


TCP揮手過程簡言之主動關閉方被動關閉方傳送不會再給你發資料了的資訊被動關閉方對收到的主動關閉方的報文段進行確認;被動關閉方向主動關閉方傳送我也不會再給你發資料了的資訊;主動關閉方再次對被動關閉方的確認進行確認。

 TCP三次握手和四次揮手的全過程如下圖:


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

答:建立連線的過程是利用客戶伺服器模式,假設主機A為客戶端,主機B為伺服器端。

1TCP的三次握手過程:主機AB傳送連線請求;主機B對收到的主機A的報文段進行確認;主機A再次對主機B的確認進行確認。

2)採用三次握手是為了防止失效的連線請求報文段突然又傳送到主機B,因而產生錯誤。失效的連線請求報文段是指:主機A發出的連線請求沒有收到主機B的確認,於是經過一段時間後,主機A又重新向主機B傳送連線請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機A第一次傳送的連線請求並沒有丟失,而是因為網路節點導致延遲達到主機B,主機B以為是主機A又發起的新連線,於是主機B同意連線,並向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A傳送資料,導致主機B的資源浪費。

3)採用兩次握手不行,原因就是上面說的效的連線請求的特殊情況,因此採用三次握手剛剛好,兩次可能出現失效,四次甚至更多次則沒必要,反而複雜了。


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述