伺服器一定處於listen狀態,否則客戶端發過來的連線會被拒絕。注:伺服器和客戶端的角色是相對的。
由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
主動關閉的一方(可能是伺服器也可能是客戶端)的狀態遷移:fin-wait1->fin-wait2->time_wait-closed
被動關閉的一方的狀態遷移:close_wait->last_ack->closed
假設客戶端主動關閉連線,以下說明客戶端和伺服器如何遷移:
為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?答:
這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可能未必會馬上會關閉socket,即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的。
關於TCP三次握手四次揮手
三次握手 1 a的tcp客戶程序首先建立傳輸控制模組tcb,同步位syn 1 初始序列號seq x,進入syn sent 同步已傳送 階段 2 b收到請求報文,同意建立連線,向a傳送確認 syn ack都置1 確認號是ack x 1,初始序列號seq y 進入syn rcvd 同步已收到 狀態 3 ...
tcp 四次揮手 TCP的三次握手和四次揮手
三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...
TCP三次握手和四次揮手
一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...