RST報文產生的情況


轉自:https://blog.csdn.net/ixidof/article/details/8049667

1.RST報文

TCP的異常終止是相對於正常釋放TCP連接的過程而言的,正常情況下是通過四次揮手來關閉TCP連接的,但是有些情況下,TCP在交互的過程中會出現一些意想不到的情況,導致TCP無法按照正常的四次揮手來釋放連接,如果此時不通過其他的方式來釋放TCP連接的話,這個TCP連接將會一直存在,占用系統的部分資源。

RST表示復位,用來異常的關閉連接,發送RST包關閉連接時,不必等緩沖區的包都發出去(不像上面的FIN包),直接就丟棄緩存區的包發送RST包。而接收端收到RST包后,也不必發送ACK包來確認。

在這種情況下,我們就需要有一種能夠釋放TCP連接的機制,這種機制就是TCP的reset報文。reset報文是指TCP報頭的標志字段中的reset位置一的報文,如下圖所示:

2.異常終止常見情況 

2.1 未對外提供服務的端口

客戶端嘗試與服務器未對外提供服務的端口建立TCP連接,服務器將會直接向客戶端發送reset報文。 

 

 

 2.2 程序崩潰

 客戶端和服務器的某一方在交互的過程中發生異常(如程序崩潰等),該方系統將向對端發送TCP reset報文,告之對方釋放相關的TCP連接。

 

//那么此時如果對方發送端還向此連接write數據,就會有SIGPIPE信號來終止發送端的應用程序。

2.3 不在其已建立的TCP連接列表

接收端收到TCP報文,但是發現該TCP的報文,並不在其已建立的TCP連接列表內,則其直接向對端發送reset報文,

 

2.4 長期未收到來自對方的確認報文

在交互的雙方中的某一方長期未收到來自對方的確認報文,則其在超出一定的重傳次數或時間后,會主動向對端發送reset報文釋放該TCP連接.

 

 2.5 利用reset報文快速釋放

有些應用開發者在設計應用系統時,會利用reset報文快速釋放已經完成數據交互的TCP連接,以提高業務交互的效率,

 

 3.RST報文利用

1 安全設備利用reset報文阻斷異常連接

安全設備(如防火牆、入侵檢測系統等)在發現某些可疑的TCP連接時,會構造交互雙方的reset報文發給對端,讓對端釋放該TCP連接。比如入侵檢測檢測到黑客攻擊的TCP連接,其構造成被攻擊端給黑客主機發送reset報文,讓黑客主機釋放攻擊連接。

2 利用reset報文實施攻擊

安全設備可以利用reset報文達到安全防護的效果,黑客和攻擊者也可以利用reset報文實現對某些主機的入侵和攻擊,最常見的就是TCP會話劫持攻擊。關於TCP會話劫持的相關知識請參考第三章《TCP會話劫持》一文。

 

https://www.pianshen.com/article/8750375150/,這里提到有情況是在一個已經關閉的socket上收到數據會產生RST,客戶端在服務端已經關閉掉socket之后,仍然在發送數據。這時服務端會產生RST。

但是不是說它是全雙工的,一方關閉了,只代表它不需要寫數據了,仍然可以接受數據,那么另一方發送不應該是正常地返回ACK嗎?為什么會返回RST呢?

答:是在異常情況下,socket並不是通過close自己關閉的,而是發生了異常直接關閉,此時就不能優雅地從對端接收數據了,因為進程已經結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM