TCP標誌位之RST

2021-07-05 03:42:44 字數 2222 閱讀 2988

tcp首部有6個標誌位元,也叫標誌位,分別如下:

urg緊急指標(urgentpointer)有效

ack確認序號有效。

psh接收方應該盡快將這個報文段交給應用層。

rst重置連線、復位連線。

syn同步序號用來發起乙個連線。這個標誌和下乙個標誌將在第18章介紹。

fin發端完成傳送任務。

一般說來,無論何時乙個報文段發往基準的連線(referenced connection)出現錯誤,tcp都會發出乙個復位報文段(這裡提到的「基準的連線」是指由目的ip位址和目的埠號以及源ip位址和源埠號指明的連線。)

出現rst的幾種場景:

訪問不存在的埠的連線請求

產生復位的一種常見情況是當連線請求到達時,目的埠沒有程序正在監聽。對於udp,當乙個資料報到達目的埠時,該埠沒在使用,它將產生乙個icmp埠不可達的資訊。而tcp則使用復位/重置連線。

異常終止乙個連線

終止乙個連線的正常方式是一方傳送fin。有時這也稱為有序釋放(orderly release),因為在所有排隊資料都已傳送之後才傳送fin,正常情況下沒有任何資料丟失。但也有可能傳送乙個復位報文段而不是fin來中途釋放乙個連線。有時稱這為異常釋放(abortive release)。

異常終止乙個連線對應用程式來說有兩個優點:

(1)丟棄任何待發資料並立即傳送復位報文段;

(2)rst的接收方會區分另一端執行的是異常關閉還是正常關閉。應用程式使用的api必須提供產生異常關閉而不是正常關閉的手段。

需要注意的是rst報文段不會導致另一端產生任何響應,另一端根本不進行確認。收到rst的一方將終止該連線,並通知應用層連線復位。

檢測半開啟連線

如果一方已經關閉或異常終止連線而另一方卻還不知道,我們將這樣的tcp連線稱為半開啟(half-open)的。任何一端的主機異常都可能導致發生這種情況。只要不打算在半開啟連線上傳輸資料,仍處於連線狀態的一方就不會檢測另一方已經出現異常。

半開啟連線的另乙個常見原因是當伺服器主機突然掉電而不是正常的結束服務應用程式後再關機,伺服器主機重啟後,從客戶向伺服器傳送另一行字元。由於伺服器的tcp已經重新啟動,它將丟失復位前連線的所有資訊,因此它不知道資料報文段中提到的連線。tcp的處理原則是接收方以復位作為應答。

1. gfw 

2. 對方埠未開啟,發生在連線建立

如果對方sync_backlog滿了的話,sync簡單被丟棄,表現為超時,而不會rst

3. close socket 時recv buffer 不為空

例如,客戶端發了兩個請求,伺服器只從buffer 讀取第乙個請求處理完就關閉連線,tcp層認為資料沒有正確提交到應用,使用rst關閉連線。

3. 移動鏈路

流動網路下,國內是有5分鐘後就**信令,也就是im產品,如果心跳》5分鐘後伺服器再給客戶端發訊息,就會收到rst。也要查流動網路下im 保持<5min 心跳。

4. 負載等裝置

負載裝置需要維護連線**策略,長時間無流量,連線也會被清除,而且很多都不告訴兩層機器,新的包過來時才通告rst。

曾經被它折騰沒轍,因此開啟每2秒一次tcp keepalive,固定5分鐘tcp連線**,而且發現連線出錯時,重發之前10s內訊息。

5. so_linger 應用強制使用rst 關閉

該選項會直接丟棄未傳送完畢的send buffer,可能造成業務錯誤,慎用;當然內網服務間http client 在收到應該時主動關閉,使用改選項,會節省資源。

好像曾經測試過haproxy 某種配置下,會使用rst關閉連線,少了網路互動而且沒有time_wait 問題

6. 超過超時重傳次數、網路暫時不可達

7. time_wait 狀態

tw_recycle = 1 時,sync timestamps 比上次小時,會被rst

7. 設定 connect_timeout

應用設定了連線超時,sync 未完成時超時了,會傳送rst終止連線。

8. 非正常包

連線已經關閉,seq 不正確等

9. keepalive 超時

公網服務tcp keepalive 最好別開啟;流動網路下會增加網路負擔,切容易掉線;非流動網路核心isp裝置也不一定都支援keepalive,曾經也發現過廣州那邊有個核心節點就不支援。

10. 待整理

參考:setsockopt :so_linger 選項設定***

原 幾種tcp連線中出現rst的情況

TCP中的RST標誌 Reset 詳解

在談rst攻擊前,必須先了解tcp 如何通過三次握手建立tcp連線 四次握手怎樣把全雙工的連線關閉掉 滑動視窗是怎麼傳輸資料的 tcp的flag標誌位里rst在哪些情況下出現。下面我會畫一些盡量簡化的圖來表達清楚上述幾點,之後再了解下rst攻擊是怎麼回事。1 tcp是什麼?tcp是在ip網路層之上的...

TCP中的RST標誌 Reset 詳解

在談rst攻擊前,必須先了解tcp 如何通過三次握手建立tcp連線 四次握手怎樣把全雙工的連線關閉掉 滑動視窗是怎麼傳輸資料的 tcp的flag標誌位里rst在哪些情況下出現。下面我會畫一些盡量簡化的圖來表達清楚上述幾點,之後再了解下rst攻擊是怎麼回事。1 tcp是什麼?tcp是在ip網路層之上的...

TCP報文標誌位

1.緊急標識urgent 當urg 1時,表明此報文應盡快傳送,而不要按本來的佇列次序來傳送 送報文 2.急迫標識psh 當psh 1時,表明請求遠地tcp將本報文段立即傳送給其應用層,而不要等到全部快取都填滿了之後再向上交付 接報文 3.確認標識ack 只有當ack 1時,確認序號欄位才有意義 4...