TCP連線的狀態與關閉方式

2021-09-02 03:32:29 字數 1479 閱讀 4752

tcp連線的狀態與關閉方式,及其對server與client的影響

1、tcp連線的狀態 首先介紹一下tcp連線建立與關閉過程中的狀態。tcp連線過程是狀態的轉換,促使狀態發生轉換的因素包括使用者呼叫、特定資料報以及超時等,具體狀態如下所示: 1) closed:初始狀態,表示沒有任何連線。

2) listen:server端的某個socket正在監聽來自遠方的tcp埠的連線請求。

3) syn_sent:傳送連線請求後等待確認資訊。當客戶端socket進行connect連線時,會首先傳送 syn包,隨即進入syn_sent狀態,然後等待server端傳送三次握手中的第2個包。

4) syn_received:收到乙個連線請求後回送確認資訊和對等的連線請求,然後等待確認資訊。 通常是建立tcp連線的三次握手過程中的乙個中間狀態,表示server端的socket接收到來自client的syn包,並作出回應。

5) established:表示連線已經建立,可以進行資料傳輸。

6) fin_wait_1:主動關閉連線的一方等待對方返回ack包。若socket在established狀態下 主動關閉連線並向對方傳送fin包(表示己方不再有資料需要傳送),則進入fin_wait_1狀態,等待對方返回ack包,此後還能讀取資料,但不能傳送資料。在正常情況下,無論對方處於何種狀態,都應該馬上返回ack包,所以fin_wait_1狀態一般很難見到。

7) fin_wait_2:主動關閉連線的一方收到對方返回的ack包後,等待對方傳送fin包。處於 fin_wait_1狀態下的socket收到了對方返回的ack包後,便進入fin_wait_2狀態。由於fin_wait_2狀態下的socket需要等待對方傳送的fin包,所有常常可以看到。若在fin_wait_1狀態下收到對方傳送的同時帶有fin和ack的包時,則直接進入time_wait狀態,無須經過fin_wait_2狀態。

8) time_wait:主動關閉連線的一方收到對方傳送的fin包後返回ack包(表示對方也不再有數 據需要傳送,此後不能再讀取或傳送資料),然後等待足夠長的時間(2msl)以確保對方接收到ack包(考慮到丟失ack包的可能和迷路重複資料報的影響),最後回到closed狀態,釋放網路資源。

9) close_wait:表示被動關閉連線的一方在等待關閉連線。當收到對方傳送的fin包後(表示對 方不再有資料需要傳送),相應的返回ack包,然後進入close_wait狀態。在該狀態下,若己方還有資料未傳送,則可以繼續向對方進行傳送,但不能再讀取資料,直到資料傳送完畢。

10) last_ack:被動關閉連線的一方在close_wait狀態下完成資料的傳送後便可向對方傳送fin 包(表示己方不再有資料需要傳送),然後等待對方返回ack包。收到ack包後便回到closed狀態,釋放網路資源。

11) closing:比較罕見的例外狀態。正常情況下,傳送fin包後應該先收到(或同時收到)對方的 ack包,再收到對方的fin包,而closing狀態表示傳送fin包後並沒有收到對方的ack包,卻已收到了對方的fin包。有兩種情況可能導致這種狀態:其一,如果雙方幾乎在同時關閉連線,

TCP連線的建立與關閉的狀態變化

1 伺服器 伺服器的連線狀態變化 listen 狀態 伺服器呼叫系統呼叫listen函式,處於監聽狀態 syn rcvd狀態 收到客戶端傳送的syn報文之後,傳送syn報文段的ack響應,進入syn rcvd狀態 established狀態 收到客戶端的連線建立ack響應報文段,進入establis...

TCP 連線與關閉

一.tcp 協議 傳輸控制協議 transmission control protocol,tcp 是種面向連線 確保資料在端到端間可靠傳輸的協議。面向連線是插在傳送資料前,需要先建立一條虛擬的鏈路,然後讓資料在這條鏈路上 流動 完成傳輸。1 tcp 協議的報文頭 2 協議六個狀態位 連線協議相關的...

TCP連線建立與關閉

tcp transmission control protocol 傳輸控制協議 是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議.tcp是傳輸層協議,使用三次握手建立連線,當主動方發出 syn 連線請求時,接收方接受請求後,發出 syn ack 作為響應,接收到響應後,對響應的 syn 執行...