10.3.5 tcp
連線的狀態轉移
從表10-6
中可以看出,
tcp socket
服務原語只有
8個,比
osi/rm
中定義的傳輸層服務原語還要少,但是在這8種
tcp socket
服務原語中,有的原語又可以有不同的狀態,如表
10-8
所示。我們把在
tcp傳輸連線的建立和釋放中的通訊雙方主機的這些狀態稱之為「有限狀態機」(
finite state machine
,fsm
)。下面我們來具體闡述一下在
tcp傳輸連線建立、釋放過程中這些原語狀態的變化。 表
10-8 tcp
連線狀態 狀
態描述closed
呈阻塞、關閉狀態,表示主機當前沒有活動的傳輸連線或正在進行傳輸連線
listen
呈監聽狀態,表示伺服器正在等待新的傳輸連線進入
syn rcvd
表示主機已收到乙個傳輸連線請求,但尚未確認
syn sent
表示主機已經發出乙個傳輸連線請求,等待對方確認
established
傳輸連線建立,通訊雙方進入正常資料傳輸狀態
fin wait 1
(主動關閉)主機已經傳送關閉連線請求,等待對方確認
fin wait 2
(主動關閉)主機已收到對方關閉傳輸連線確認,等待對方傳送關閉傳輸連線請求
timed wait
完成雙向傳輸連線關閉,等待所有分組消失
closing
雙方同時嘗試關閉傳輸連線,等待對方確認
close wait
(被動關閉)收到對方發來的關閉傳輸連線請求,並已確認
last ack
(被動關閉)等待最後乙個關閉傳輸連線確認,並等待所有分組消失
圖10-37
描述了tcp
通訊主機在傳輸連線建立和釋放過程中的各種有限狀態機,圖中的方框中表示的是通訊主機在不同時期的狀態,箭頭表示狀態之間的轉換,旁邊的注釋表示狀態轉換過程中所需進行動作(包括呼叫
socket
服務原語和
tcp資料段的傳送和接收等)。圖中用粗線表示客戶端主動和被動的伺服器端連線建立的正常過程,其中客戶端的狀態轉移用帶箭頭的粗實線表示,伺服器端的狀態轉換用帶箭頭的粗虛線表示。帶箭頭的細線表示一些不常見的事件,如復位、同時開啟、同時關閉等。
10-37 tcp
傳輸連線有限狀態機轉換流程
每個連線均開始於
closed
狀態。當一方執行了被動的連線原語(
listen
)或主動的連線原語(
connect
)時,它便會離開
closed
狀態。如果此時另一方執行了相對應的連線原語,連線便建立了,並且狀態變為
established
。任何一方均可以首先請求釋放連線,當連線被釋放後,狀態又回到了
closed 。
為了看清楚客戶端和伺服器各自的狀態轉移流程,我們先沿著帶箭頭的粗實線路徑來看客戶端的狀態轉移過程,然後再沿著帶箭頭的虛實線路徑來看伺服器的狀態轉移過程。 (
1)一開始,伺服器應用層首先呼叫
listen
原語從closed
狀態進入被動開啟狀態(
listen
),等待客戶端的連線; (
2)當客戶端的乙個應用程式呼叫
connect
原語後,本地的
tcp實體為其建立乙個連線記錄並標記為
syn sent
狀態,然後給伺服器傳送乙個
syn資料段(
syn欄位置
1)。這是
tcp傳輸連線建立的第一次握手。 (
3)伺服器在收到乙個客戶端的
syn資料段後,其
tcp實體給客戶端傳送確認
ack資料段(
ack欄位置
1),同時傳送乙個
syn資料段(
syn欄位置
1,表示接受同步請求),進入
syn rcvd
狀態。這是
tcp傳輸連線的第
2次握手。
【說明】這裡可能有乙個非正常事件發生,那就是如果此時伺服器不想建立傳輸連線,由其應用層呼叫
close
原語,向客戶端傳送乙個
fin資料段(
fin欄位置
1),然後進入到
fin wait 1
狀態,等待客戶端確認。當客戶端收到伺服器發來的
fin資料段後,向伺服器傳送乙個
ack確認資料段後進入到
closing
狀態,表示雙方同時嘗試關閉傳輸連線,等待對方確認。在伺服器收到客戶端發來的
ack資料段後即進入到
timed wait
狀態,在超時後雙方即關閉連線。這是一種突發、非正常的連線關閉事件。 (
4)客戶端在收到伺服器發來的
syn和
ack資料段後,其
tcp實體給伺服器端傳送乙個
ack資料段,並進入
established
狀態。這是
tcp連線的第
3次握手。 (
5)伺服器在收到來自客戶端的
ack確認資料段後,完成整個
tcp傳輸連線的全部三次握手過程,也進入
established
狀態。
此時,雙方可以自由進行資料傳輸了。當乙個應用程式完成資料傳輸任務後,它需要關閉
tcp連線。假設仍由客戶端發起主動關閉連線。 (
6)客戶端應用層呼叫
close
原語,本地的
tcp實體傳送乙個
fin資料段(
fin欄位置
1),並等待伺服器的確認響應,進入到
fin wait 1
狀態。
【說明】這裡又可能有乙個非正常的事件發生,那就是客戶端在
fin wait 1
狀態收到伺服器的
fin和
ack資料段後(而不是像從
fin wait 2
狀態進入那樣只收到伺服器的
ack確認資料段)
,向伺服器傳送乙個
ack資料段,直接就進入了
timed wait
狀態。在超時後雙方即關閉連線。 (
7)伺服器在收到來自客戶端的
fin資料段後,它給客戶端發回乙個
ack資料段(
ack欄位置
1)進入
close wait
狀態。 (8
)客戶端在收到來自伺服器的
ack確認資料段後就進入到了
fin wait 2
狀態,此時連線在乙個方向上就斷開了,但仍可以接收伺服器端發來的資料段。 (
9)當伺服器收到客戶端發來的
fin資料段時就知道客戶端已有資料傳送了,在本端已接收完全部的資料後,也由應用層呼叫
close
原語,請求關閉另乙個方向的連線,其本地
tcp實體向客戶端傳送乙個
fin資料段,並進入
last ack
狀態,等待最後乙個
ack確認資料段。 (
10)在客戶端收到來自伺服器的
fin資料段後,向伺服器傳送最後乙個
ack確認資料段,進入
timed wait
狀態。此時雙方連線均已經斷開,但
tcp實體仍要等待乙個
2倍資料段
msl(
maximum segment lifetime
,最大資料段生存時間),以確保該連線的所有分組全部消失,防止出現確認丟失的情況。當定時器超時後,
tcp刪除該連線記錄,返回到初始狀態(
closed )。
(11)伺服器收到客戶端最後乙個
ack確認資料段後,其
tcp實體便釋放該連線,並刪除連線記錄,也返回到初始狀態(
closed )。
注:以上內容摘自新書《深入理解計算機網路》
中,目前該書已可以京東網、卓越網、當當網上全面預訂,並全部附有完整的目錄資訊(京東網上將於本月25號首先到貨)。
京東網上的鏈結:
卓越網上的鏈結:
當當網上的鏈結:
TCP有限狀態機
狀 態 描 述 closed 關閉狀態,沒有連線活動或正在進行 listen 監聽狀態,伺服器正在等待連線進入 syn rcvd 收到乙個連線請求,尚未確認 syn sent 已經發出連線請求,等待確認 established 連線建立,正常資料傳輸狀態 fin wait 1 主動關閉 已經傳送關閉...
TCP有限狀態機
4 有限狀態機 上圖是 tcp 的狀態機,看了很久,感覺還是理解得不深。先在這裡打個點。1 closed 狀態時初始狀態。2 listen 被動開啟,伺服器端的 狀態變為listen 監聽 被動開啟的概念 連線的一端的應用程式通知作業系統,希望建立乙個傳入的連線。這時候作業系統為連線的這一端建立乙個...
有限狀態機
有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...