1 .伺服器
伺服器的連線狀態變化:
listen 狀態: 伺服器呼叫系統呼叫listen函式,處於監聽狀態
syn_rcvd狀態 : 收到客戶端傳送的syn報文之後,傳送syn報文段的ack響應,進入syn_rcvd狀態
established狀態: 收到客戶端的連線建立ack響應報文段,進入established狀態 :三次握手成功,故該狀態是雙方能夠進行雙向資料傳輸的狀態
伺服器的關閉狀態變化:
close_wait:客戶端主動關閉連線,傳送fin報文段,伺服器傳送ack響應後進入close_wait狀態 :當客戶端收到響應後,連線進入半關閉狀態,即客->服 連線斷開,而服->客 連線仍然存在,客戶端仍然能收到伺服器的資料
last_ack : 伺服器傳送給客戶端fin報文段,進入該狀態:
closed: 正式結束雙方的連線
2. 客戶端:
客戶端的連線狀態變化:
syn_sent : 在客戶端給伺服器傳送乙個syn同步報文段的同時進入該狀態
established : 收到來自伺服器的syn ack報文段,進入已確認的連線狀態
客戶端的關閉狀態變化:
fin_wait_1 ; 客戶端主動關閉連線,傳送fin報文段給伺服器,同時進入該狀態
fin_wait_2 ; 客戶端收到伺服器的fin ack響應報文段,進入fin_wait_2狀態: 此時代表的是雙方處於半關閉狀態
time_wait : 處於fin_wait_2狀態後,當伺服器傳送fin結束報文段,伺服器進入last_ack狀態,在客戶端給予確認後,進入time_wait狀態
主動關閉的一方進入time_wait狀態:而不是說只有客戶端才能進入time_wait狀態
3. time_wait:
客戶端連線在收到伺服器的結束報文段之後,並沒有直接進入closed狀態,而是轉移到time_wait狀態,這個狀態下,客戶端連線要等待一段長尾2msl的時間,才能完全關閉
time_wait 存在原因:
1. 可靠的終止tcp連線。 : 若上圖中報文段7在網路傳輸過程中丟失,那麼伺服器就會重新傳送結束報文段,因此客戶端需要停留在某個狀態以處理重複收到的結束報文段
2. 保證讓遲來的tcp報文段有足夠的時間被識別並丟棄 :若不存在time_wait 狀態時,則應用程式就能夠立即建立乙個相似的新的連線(相同ip和port),新的鏈結可能收到來自屬於原來的連線的tcp報文段, 這種情況有可能發生,但不應該發生。 因為tcp報文段的最大生存時間是msl,所以堅持2msl時間的time_wait狀態能夠保證網路上兩個傳輸方向上尚未被接收到的,遲到的tcp報文段都已經消失,因此乙個新的連線可以在2msl時間之後安全的建立,而不會接收到曾經連線的資料,time_wait就是來處理這種情況的。
注意:
乙個tcp埠不能被同時開啟兩次或以上,當乙個tcp連線處於time_wait 狀態時,我們就無法立即使用該鏈結占用著的埠來建立新的連線
4. 針對處於time_wait下的立即重啟客戶端或伺服器問題:
客戶端一般都是由系統自動分配的臨時埠號來建立連線,具有隨機性,所以儘管處於time_wait狀態下,仍然可以立即重新啟動客戶端,因為與上次所使用的埠號不同
伺服器的埠號都是繫結的,不具有隨機性,所以若伺服器主動斷開後其處於time_wait下,就不能夠馬上重啟,解決這個方法可以通過socket選項so_reuseaddr來強制程序立即使用處於time_wait狀態的連線占用的埠。
**一般是在建立套接字之後加一句:
int opt = 1;
int stat = setsockopt(sock,sol_socket,so_reuseaddr,&opt,sizeof(opt));
TCP連線的建立與關閉
五層網路模型分為 物理層 資料鏈路層 網路層 傳輸層 應用層。其中,傳輸層有兩種主要協議 面向連線的tcp transmission control protocol 傳輸控制協議 無連線的udp user datagram protocol 使用者資料報協議 tcp是面向連線的傳輸層協議,提供點對...
TCP連線的狀態與關閉方式
tcp連線的狀態與關閉方式,及其對server與client的影響 1 tcp連線的狀態 首先介紹一下tcp連線建立與關閉過程中的狀態。tcp連線過程是狀態的轉換,促使狀態發生轉換的因素包括使用者呼叫 特定資料報以及超時等,具體狀態如下所示 1 closed 初始狀態,表示沒有任何連線。2 list...
TCP連線建立與關閉
tcp transmission control protocol 傳輸控制協議 是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議.tcp是傳輸層協議,使用三次握手建立連線,當主動方發出 syn 連線請求時,接收方接受請求後,發出 syn ack 作為響應,接收到響應後,對響應的 syn 執行...