25 tcp協議 連線復位 RST

2021-08-19 17:30:03 字數 2086 閱讀 5049

前面我們介紹了tcp連線建立和連線釋放過程中的一些細節,那麼大家有沒有想過一些異常的情況:有時候也會出現無法建立tcp連線或tcp連線異常終止的情況。一般來說,導致這種情況的原因一般有很多種,比如:

1.拒絕連線請求,比如:a想和b建立tcp連線,但是a的連線請求中使用了乙個不存在的埠(比如:這個埠超出65535的範圍),那麼b就可以傳送rst報文段拒絕這個請求。

2.異常終止連線,如:a和b的tcp連線出現了異常,然後b希望終止這條異常的連線,於是就可以傳送乙個rst報文段終止這個連線。

3.終止空閒的連線,如a和b之間的tcp連線已經很久沒有傳輸資料了,空閒太長時間,可以傳送rst報文段來終止這個連線。

這裡我們只針對拒絕連線請求和異常終止連線做詳細介紹。

拒絕連線一般是由伺服器主動發起的,因為客戶端發起請求連線攜帶的目的埠,可能伺服器並沒有開啟listen狀態。因此伺服器在收到這樣的報文段後會傳送乙個rst報文段,在這個報文裡把rst和ack都置為1,它確認了syn報文段並同時重置了該tcp連線,然後伺服器等待另乙個連線。客戶端在收到rst+ack報文段後就會進入closed狀態。

這裡以通過20000不存在的埠遠端登入為例:

tcpdump抓取到的資料報如下:

13:35:08.609549 ip 192.168.98.137.49057 > 192.168.0.102.dnp: flags [s], seq 2919679902, win 14600, options [mss 1460,sackok,ts val 39134059 ecr 0,nop,wscale 6], length 0

13:35:09.610018 ip 192.168.98.137.49057 > 192.168.0.102.dnp: flags [s], seq 2919679902, win 14600, options [mss 1460,sackok,ts val 39135059 ecr 0,nop,wscale 6], length 0

13:35:09.610115 ip 192.168.0.102.dnp > 192.168.98.137.49057: flags [r.], seq 1766537774, ack 2919679903, win 64240, length 0

13:35:10.610188 ip 192.168.0.102.dnp > 192.168.98.137.49057: flags [r.], seq 3482791532, ack 1, win 64240, length 0

通過tcpdump工具抓取的資料報發現,rst報文段不攜帶資料。

出現異常終止連線的原因有很多種,可能是程序出現bug了或者由於資料出現了不一致(不想傳送資料了),對於這種情況,tcp有可能終止一條連線。也就是說,在這些情況下,就可以傳送rst報文段異常終止連線。

客戶端由於佇列中的資料出現了不一致,傳送了rst+ack報文段異常終止連線,注意:在傳送rst+ack報文段的時候會丟棄掉佇列中的所有資料,伺服器也會把佇列中的所有資料都丟棄掉,並通過乙個icmp差錯報告報文通知伺服器,然後雙方都進入closed狀態。

在一些情況下,我們可能想讓服務端把資料傳送完,然後再關閉tcp連線,而不是馬上傳送rst報文終止這條連線,那麼可以在套接字程式設計中使用so_linger選項。so_linger選項是用來設定延遲關閉的時間,等待套接字傳送緩衝區中的資料傳送完成,但是並不保證資料一定會被對方接收,只是等待一段時間後,再正常關閉tcp連線。如果so_linger設定為0,則會清除佇列中的所有資料,直接傳送rst報文關閉連線(關於這個實驗可參考:10-在accept之前中止連線(連線異常))。

需要注意的是:對於rst報文段,另一端不需要傳送任何響應,因為傳送完rst報文後,這條tcp連線就關閉了,也就沒有必要確認了,收到rst的一方將終止該連線,並通知應用層復位連線。

從TCP協議的原理來談談rst復位攻擊

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

從TCP協議的原理來談談rst復位攻擊

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

從TCP協議的原理來談談rst復位攻擊

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