1. 程式人生 > >【三次握手四次斷開】TCP三次握手過程和四次斷開

【三次握手四次斷開】TCP三次握手過程和四次斷開

TCP的三次握手和四次斷開

 

TCP三次握手過程


1 主機A通過向主機B 傳送一個含有同步序列號的標誌位的資料段給主機B ,向主機B 請求建立連線,通過這個資料段,
主機A告訴主機B 兩件事:我想要和你通訊;你可以用哪個序列號作為起始資料段來回應我.
2 主機B 收到主機A的請求後,用一個帶有確認應答(ACK)和同步序列號(SYN)標誌位的資料段響應主機A,也告訴主機A兩件事:
我已經收到你的請求了,你可以傳輸資料了;你要用哪個序列號作為起始資料段來回應我
3 主機A收到這個資料段後,再發送一個確認應答,確認已收到主機B 的資料段:"我已收到回覆,我現在要開始傳輸實際資料了


這樣3次握手就完成了,主機A和主機B 就可以傳輸資料了.
3次握手的特點
沒有應用層的資料
SYN這個標誌位只有在TCP建產連線時才會被置1
握手完成後SYN標誌位被置0


4次斷開


1 當主機A完成資料傳輸後,將控制位FIN置1,提出停止TCP連線的請求
2 主機B收到FIN後對其作出響應,確認這一方向上的TCP連線將關閉,將ACK置1
3 由B 端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.
由TCP的三次握手和四次斷開可以看出,TCP使用面向連線的通訊方式,大大提高了資料通訊的可靠性,使傳送資料端
和接收端在資料正式傳輸前就有了互動,為資料正式傳輸打下了可靠的基礎


名詞解釋
ACK TCP報頭的控制位之一,對資料進行確認.確認由目的端發出,用它來告訴傳送端這個序列號之前的資料段
都收到了.比如,確認號為X,則表示前X-1個數據段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳資料,保證資料的完整性.
SYN 同步序列號,TCP建立連線時將這個位置1
FIN 傳送端完成傳送任務位,當TCP完成資料傳輸需要斷開時,提出斷開連線的一方將這位置1

解釋原因:

TCP建立連線要進行3次握手,而斷開連線要進行4次,這是由於TCP的半關閉造成的,因為TCP連線是全雙工的(
即資料可在兩個方向上同時傳遞)所以進行關閉時每個方向上都要單獨進行關閉,這個單方向的關閉就叫半關閉.
關閉的方法是一方完成它的資料傳輸後,就傳送一個FIN來向另一方通告將要終止這個方向的連線.當一端收到一個FIN,它必須
通知應用層TCP連線已終止了這個方向的資料傳送,傳送FIN通常是應用層進行關閉的結果.

 

為什麼不能兩次握手能進行連線?

我們知道,3次握手完成兩個重要的功能,既要雙方做好傳送資料的準備工作(雙方都知道彼此已準備好),也要允許雙方就初始序列號進行協商,這個序列號在握手過程中被髮送和確認。

 

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 的資源浪費

 

 

TCP的狀態變遷圖:

https://blog.csdn.net/Lincoln_cz/article/details/81587098