tcp三次握手四次挥手(及原因)详解
TCP(Transmission Control Protocol,傳輸控制協議)是 面向連接的協議,也就是說在收發數據之前,必須先和對方建立連接,
一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常復雜,只簡單的 描述下這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步 (同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什么時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同 步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之后,主機A才向主機B正式發送數 據。
需要了解的信息:
ACK?: TCP協議規定,只有ACK=1時有效,也規定連接建立后所有發送的報文的ACK必須為1
SYN(SYNchronization) : 在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文。對方若同意建立連接,則應在響應報文中使SYN=1和ACK=1. 因此,? SYN置1就表示這是一個連接請求或連接接受報文。
三次握手的圖示:
首先由Client發出請求連接即 SYN=1 ACK=0? (請看頭字段的介紹), TCP規定SYN=1時不能攜帶數據,但要消耗一個序號,因此聲明自己的序號是 seq=x
然后 Server 進行回復確認,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再進行一次確認,但不用SYN 了,這時即為 ACK=1, seq=x+1, ack=y+1.
然后連接建立,為什么要進行三次握手呢(兩次確認)。
???? 建立三次握手主要是因為A發送了再一次的確認,那么A為什么會再確認一次呢,主要是為了防止已失效的連接請求報文段又突然傳送給B,從而產生了錯誤。?? 所謂“已失效的連接請求報文”是這樣產生的,正常情況下,A發出連接請求,但是因為連接報文請求丟失而未收到確認,于是A再重傳一次連接請求,后來收到了請求,并收到了確認,建立了連接,數據傳輸完畢后,就釋放鏈接,A共發送了兩次連接請求報文段,其中第一個丟失,第二個到達了B,沒有“已失效的連接請求報文段”,但是還有異常情況下,A發送的請求報文連接段并沒有丟失,而是在某個網絡節點滯留較長時間,以致延誤到請求釋放后的某個時間到達B,本來是一個早已失效的報文段,但是B收到了此失效連接請求報文段后,就誤以為A又重新發送的連接請求報文段,并發送確認報文段給A,同意建立連接,如果沒有三次握手,那么B發送確認后,連接就建立了,而此時A沒有發送建立連接的請求報文段,于是不理會B的確認,也不會給B發送數據,而B卻一直等待A發送數據,因此B的許多資源就浪費了,采用三次握手的方式就可以防止這種事情發生,例如剛剛,A不理會B,就不會給B發送確認,B收不到A的確認,就知道A不要求建立連接,就不會白白浪費資源,
四次揮手圖示:
當客戶A 沒有東西要發送時就要釋放 A 這邊的連接,A會發送一個報文(沒有數據),其中 FIN 設置為1,? 服務器B收到后會給應用程序一個信,這時A那邊的連接已經關閉,即A不再發送信息(但仍可接收信息)。? A收到B的確認后進入等待狀態,等待B請求釋放連接, B數據發送完成后就向A請求連接釋放,也是用FIN=1 表示, 并且用 ack = u+1(如圖), A收到后回復一個確認信息,并進入 TIME_WAIT 狀態, 等待 2MSL 時間。
為什么要等待呢?
為了這種情況: B向A發送 FIN = 1 的釋放連接請求,但這個報文丟失了, A沒有接到不會發送確認信息, B 超時會重傳,這時A在 WAIT_TIME 還能夠接收到這個請求,這時再回復一個確認就行了。(A收到 FIN = 1 的請求后 WAIT_TIME會重新記時)
另外服務器B存在一個保活狀態,即如果A突然故障死機了,那B那邊的連接資源什么時候能釋放呢?? 就是保活時間到了后,B會發送探測信息, 以決定是否釋放連接
為什么連接的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。
總結
以上是生活随笔為你收集整理的tcp三次握手四次挥手(及原因)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5_1 笔记
- 下一篇: 判断手机号码是否符合要求