TCP之連線管理(三次握手 四次揮手)

2021-09-12 23:46:57 字數 1828 閱讀 2825

tcp連線管理機制(三次握手、四次揮手)

1)三次握手可以形象的記為

客戶端說:我要和你建立連線

伺服器端說:可以,什麼時候建立連線

客戶端回答:就現在

2)為什麼要三次握手而不是一次或者兩次?一次或兩次握手會出現什麼情況?

tcp是乙個面向連線的協議,而面向連線是為了保證傳輸的可靠性

如果只是一次"握手",客戶端發出請求建立連線的報文之後,就認為建立連線了,於是就要發出資料。但是請求連線的報文若是在網路中丟失或者是到達伺服器端後,伺服器無法建立連線,這樣傳送的資料就不能保證可靠性。

若是兩次"握手",1)客戶端發出的請求連線的報文在網路中沒有丟失,伺服器端發出的同意建立連線的報文也正常傳送到客戶端,於是連線建立成功,皆大歡喜。

2)客戶端發出的請求連線的報文在網路中沒有丟失,伺服器端就不會發出同意建立連線的報文,於是連線沒有建立,這樣不影響雙方,最多只是重新進行連線

看了前兩種情況,是不是覺得兩次"握手"也是可以的,但是,還有一種情況是

3)客戶端發出的請求連線的報文在網路中沒有丟失,伺服器端發出的同意建立連線的報文卻在網路中丟失,這時,客戶端沒有收到收到伺服器端的確認報文,認為連線沒有建立成功,而伺服器端卻認為連線建立成功了,有乙個前提是維護連線是要花費成本的,而伺服器端花費了成本卻維護了乙個無效的連線,這就導致資源的浪費,而且伺服器端是一對多個客戶端,對資源的需求很大,維護這樣乙個連線是很奢侈的

若是三次握手的話,伺服器端發出的同意連線的報文丟失的話,客戶端沒有接收到報文,兩端就認為連線沒有建立成功,對兩端沒有影響。當客戶端接收到伺服器端的同意連線的報文時,向伺服器端發出對伺服器端同意連線的報文響應時,伺服器端接收到報文後,兩端連線建立成功。若該報文丟失的話,伺服器端沒有接收到時,伺服器端認為沒有建立成功,只是客戶端花費成本維護連線,而客戶端是一對一連線伺服器的,對資源的要求沒有伺服器端要求高,影響不是很大。造成這種情況的原因是網路中沒有絕對可靠的傳輸,因為最近接收到的訊息是沒法進行確認的。

四次揮手

客戶端的連線斷開:客戶端發起斷開連線的請求後,伺服器端進行傳送同意報文;

伺服器的連線斷開:然後伺服器端又傳送請求,客戶端傳送確認斷開連線的請求報文。

tcp協議規定,主動關閉連線的一方要處於time_ wait狀態,等待兩個msl(maximum segment lifetime)的時間後才能回到closed狀態.

為什麼要等待2msl時間,因為msl是tcp報文的最大生存時間,為了保證在兩個傳輸方向上的尚未被接受或遲到的報文段都已經消失(否則伺服器立刻重啟,可能會收到來自上乙個程序的遲到的資料,但是這種資料很可能是錯誤的),同時也在理論上保證最後乙個報文可靠到達(假設最後乙個ack丟失,那麼伺服器會再重發乙個fin. 這時雖然客戶端的程序不在了, 但是tcp連線還在, 仍然可以重發last_ack)

close_wait

當客戶端向伺服器傳送斷開連線的請求時,伺服器端向客戶端傳送確認報文進入close_wait。進入到close_wait後說明伺服器準備關閉連線,當伺服器真正呼叫close關閉連線時,會向客戶端傳送fin,此時,伺服器進入last_ack狀態,等待最後乙個ack到來(這個ack是客戶端確認接收到了fin)

close_wait是被動關閉連線是形成的。根據tcp狀態機,伺服器端收到客戶端傳送的fin,則按照tcp實現傳送ack,因此進入close_wait狀態。但如果伺服器端不執行close(),就不能由close_wait遷移到last_ack,則系統中會存在很多close_wait狀態的連線。

TCP三次握手和四次揮

一 tcp報文格式 在了解三次握手和四次揮手之前,首先要知道tcp報文內部包含了哪些東西。報文主要段的含義 序號 seq 用來標記資料段的順序,確保tcp傳輸有序。ack 確認 確認序號標誌,ack 1表示確認號字段有效,ack 0表示確認序號無效。syn 同步 連線請求序號標誌,用於建立連線。sy...

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

相比較於udp傳輸協議,tcp傳輸協議被認為是安全可靠的,這是由於tcp協議的三次握手和四次揮手保證了資料傳輸的安全性。tcp報文格式簡介 要了解tcp協議的三次握手和四次揮手,需要先了解在tcp協議中請求和響應的資料報報文格式。在報文中有幾個值得注意的字段 1 序號 seq序號,佔32位,用來標識...

結合socket詳解TCP三次握手四次揮手

tcp協議中的三次握手和四次揮手大家應該都至少聽說過了,本人一直覺得理論學習要結合 才能學習的更深刻,當知道東西是這樣,然後再知道為什麼是這樣的時候,領悟往往更加深刻,今天本人就結合socket程式設計中的api來解析一下tcp協議的三次握手和四次揮手過程。那麼tcp協議中的三次握手和四次揮手實際在...