TCP三次握手和四次揮手全過程及為什麼要三次握手解答
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
TCP三次握手和四次揮手的全過程
TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線:
位碼即tcp標誌位
SYN(synchronous建立連線)
ACK(acknowledgement 表示響應、確認)
PSH(push表示有DATA資料傳輸)
FIN(finish關閉連線)
RST(reset表示連線重置)
URG(urgent緊急指標欄位值有效)
三次握手:
第一次握手:客戶端傳送syn包(syn=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也傳送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN
握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。
確認號:其數值等於傳送方的傳送序號+1(即接收方期望接收的下一個序列號)。
四次揮手:
與建立連線的“三次握手”類似,斷開一個TCP連線則需要“四次揮手”。
第一次揮手:主動關閉方傳送一個FIN
第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
TCP的四次揮手過程(簡言之):主動關閉方向被動關閉方傳送不會再給你發資料了的資訊;被動關閉方對收到的主動關閉方的報文段進行確認;被動關閉方向主動關閉方傳送我也不會再給你發資料了的資訊;主動關閉方再次對被動關閉方的確認進行確認。
TCP三次握手和四次揮手的全過程如下圖:
TCP的三次握手過程?為什麼會採用三次握手,若採用二次握手可以嗎?
答:建立連線的過程是利用客戶伺服器模式,假設主機A為客戶端,主機B為伺服器端。
(1)TCP的三次握手過程:主機A向B傳送連線請求;主機B對收到的主機A的報文段進行確認;主機A再次對主機B的確認進行確認。
(2)採用三次握手是為了防止失效的連線請求報文段突然又傳送到主機B,因而產生錯誤。失效的連線請求報文段是指:主機A發出的連線請求沒有收到主機B的確認,於是經過一段時間後,主機A又重新向主機B傳送連線請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機A第一次傳送的連線請求並沒有丟失,而是因為網路節點導致延遲達到主機B,主機B以為是主機A又發起的新連線,於是主機B同意連線,並向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A傳送資料,導致主機B的資源浪費。
(3)採用兩次握手不行,原因就是上面說的失效的連線請求的特殊情況,因此採用三次握手剛剛好,兩次可能出現失效,四次甚至更多次則沒必要,反而複雜了。