最簡單的tcp狀態機演變,當然是大學時期,幾乎人人都知道的tcp三次握手:
很複雜的狀態轉換,是吧?三次握手,呵呵,理解的過於膚淺了,握手確實只有三步,但是握手之後了,如何說話?通訊結束時,如何分手?這都是需要了解的。
在了解如上的過程前,我們需要理解上圖出現的各個狀態的意義。
標誌位urg:頭部中的緊急指標部分應該被檢查
此標誌表示tcp包的緊急指標域(後面馬上就要說到)有效,用來保證tcp連線不被中斷,並且督促中間層裝置要盡快處理這些資料。
ack:確認號應該被檢查
此標誌表示應答域有效,就是說前面所說的tcp應答號將會包含在tcp資料報中;有兩個取值:0和1,為1的時候表示應答域有效,反之為0。
這個標誌位表示push操作。所謂push操作就是指在資料報到達接收端以後,立即傳送給應用程式,而不是在緩衝區中排隊。
rst:連線應該被重置
這個標誌表示連線復位請求。用來復位那些產生錯誤的連線,也被用來拒絕錯誤和非法的資料報。
syn:初始化乙個連線
表示同步序號,用來建立連線。syn標誌位和ack標誌位搭配使用,當連線請求的時候,syn=1,ack =0;連線被相應的時候,syn=1,ack=1;這個標誌的資料報經常被用來進行埠掃瞄。掃瞄者傳送乙個只有syn的資料報,如果對方主機響應了乙個資料報回來,就表明這台主機存在這個埠;但是由於這種掃瞄方式只是進行tcp三次握手的第一次握手,因此這種掃瞄的成功將導致被掃瞄的機器消耗資源,因此一台安全的主機將會強制要求乙個連線嚴格的進行tcp的三次握手。
fin:傳送方(應該是連線雙方)完成資料傳送
表示傳送端已經達到資料末尾,也就是說雙方的資料傳送完成,沒有資料可以傳送了,傳送fin標誌位的tcp 資料報後,連線將被斷開。這個標誌的資料報也經常被用於進行埠掃瞄。當乙個fin標誌的tcp資料報傳送到一台計算機的特定埠,如果這台計算機響應了這個資料,並且反饋回來乙個rst標誌的tcp包,就表明這台計算機上沒有開啟這個埠,但是這台計算機是存在的;如果這台計算機沒有反饋回來任何資料報,這就表明,這台被掃瞄的計算機存在這個埠。
ps:還有一種資料報,不包含任何標誌位,可以稱為null資料報,計算機收到null的資料報(未試驗),將回應乙個fin標誌的tcp資料報。
狀態機
listen:偵聽來自遠方的tcp埠的連線請求
syn-sent:在傳送連線請求後等待匹配的連線請求
syn-received:在收到和傳送乙個連線請求後等待對連線請求的確認
established:代表乙個開啟的連線,資料可以傳送給使用者
fin-wait-1:等待遠端tcp的連線中斷請求,或先前的連線中斷請求的確認
fin-wait-2:從遠端tcp等待連線中斷請求
close-wait:等待從本地使用者發來的連線中斷請求
closing:等待遠端tcp對連線中斷的確認
last-ack:等待原來的發向遠端tcp的連線中斷請求的確認
time-wait:等待足夠的時間以確保遠端tcp接收到連線中斷請求的確認
closed:沒有任何連線狀態
好,現在我們可以對照上圖來解釋下tcp的狀態演變過程了,分為三個階段:
階段一:建立tcp連線
tcp建立連線,也就是我們常說的三次握手,它需要三步完成。在 tcp 的三次握手中,傳送第乙個 syn 的一端執行的是主動開啟。而接收這個 syn 並發回下乙個 syn 的另一端執行的是被動開啟。
結合最上面的tcp狀態圖,我們提取建立tcp連線的部分出來詳細說明:
第 1步:客戶端向伺服器傳送乙個同步資料報請求建立連線,該資料報中,初始序列號是客戶端隨機產生的乙個值(假設為j),確認號是0;參考報文:
第 2步:伺服器收到這個同步請求資料報後,會對客戶端進行乙個同步確認。這個資料報中,序列號是伺服器隨機產生的乙個值(假設為k),確認號是客戶端的初始序列號j+1;參考報文:
第 3步:客戶端收到這個同步確認資料報後,再對伺服器進行乙個確認。該資料報中,序列號是上乙個同步請求資料報中的確認號值j+1,確認號是伺服器的初始序列號k+1。參考報文:
階段二:傳輸tcp資料
階段三:關閉tcp連線……
TCP狀態機 標誌位 序列號學習
很複雜的狀態轉換,是吧?三次握手,呵呵,理解的過於膚淺了,握手確實只有三步,但是握手之後了,如何說話?通訊結束時,如何分手?這都是需要了解的。在了解如上的過程前,我們需要理解上圖出現的各個狀態的意義。標誌位 urg 頭部中的緊急指標部分應該被檢查 此標誌表示tcp包的緊急指標域 後面馬上就要說到 有...
關於TCP的狀態機
另外 客戶端與伺服器端建立tcp ip連線後關閉socket後,伺服器端連線的埠 狀態為time wait 是不是所有執行主動關閉的socket都會進入time wait狀態呢?有沒有什麼情況使主動關閉的socket直接進入closed狀態呢?主動關閉的一方在傳送最後乙個 ack 後 就會進入 ti...
ip conntrack的TCP狀態機
深入理解ip conntrack的都知道,ip conntrack本身對於tcp維護了乙個狀態機,值得注意的是,該狀態機和tcp協議本身的狀態機相似但不相同。其區別如下 tcp狀態機 為tcp的兩端分別維護乙個狀態機,tcp連線的主動發起 被動發起和主動關閉 被動關閉的狀態機轉換是不同的。ip co...