唯快不破 TIME WAIT重用與RFC1337

2021-08-10 22:00:40 字數 1448 閱讀 6785

《tcp的time_wait快速**與重用》中提到了「從外部乾掉time_wait」。其實方法就是用reset來終止乙個tw狀態的連線。之所以要終止掉這個tw連線是因為某種程度上我們對無聊等待乙個行將就木的套接字的憤慨,另一方面也說明了要麼我們沒有關於old duplicate資料的概念,要麼根本就不在乎它帶來的損失,比如我們使用了ssl協議對連線進行了保護。

然而,不考慮這些額外的防護,也可以原諒我們知識的淺薄!僅僅針對tcp規範,rfc1337給出了幾個駭人聽聞的old duplicate帶來的噩夢例項值得一讀。鑑於從不深拷貝整篇rfc文件的原則,這裡就不再貼出來了,直接閱讀更好,那幾個例子也十分簡單易懂。之所以會出這種事,是因為time_wait狀態的提前終止。提前終止的原因就是傳送了乙個ack到已經不存在的連線上,進而對方反發了reset,至於說為何會傳送乙個ack,很多情況,比如收到了乙個old duplicate資料,比如收到了fin,比如收到了乙個特意構造的符合該tw套接字的資料,不一而足。

rfc1337說了這麼多令人髮指的old duplicate帶來的危害,無非就是為了找乙個為time_wait存在意義的正當辯護理由。不管怎樣,time_wait雖然很煩人,但是確實是有存在必要的。在linux上,rfc1337也就乙個配置,其實現很簡單,那就是即時收到了乙個reset也要保證time_wait狀態到底,而不是直接釋放time_wait連線。

值得注意的是,很多人都會把time_wait的目的理解為「為了阻止使用相同的ip,埠連線相同的服務」,理解為「不允許使用相同的ip,埠連線相同的服務」,這真是一派胡言!真是本末倒置!可是是聽別人說的,也可能是看書看多了!實際上time_wait的目的只有乙個,這也是協議設計者的初衷,那就是「確認老的連線所有的資料報要麼到達,要麼消失」,而這個目標在連線的established狀態是可以通過ack以及視窗機制保證的,到了最後的收尾階段,不得不使用外部物理條件,即等待msl來保證,所謂的阻止新連線並不是目的,而只是乙個結果。理解這一點非常必要,你會走出乙個誤區,即不再認為time_wait是為了阻止新連線!

既然time_wait不是為了阻止新連線,那麼只要能證明自己確實屬於新連線而不是老連線的殘留資料,那麼該連線即使匹配到了time_wait的四元組也是可以接受的,即可以重用time_wait的連線。如何來保證呢?很簡單,只需要把老的資料丟在視窗外即可。為此,只要新連線的初始序列號比老連線的fin包末尾序列號大,那麼老連線的所有資料即使遲到也會落在視窗之外,從而不會破壞新建連線!

即使不使用序列號,還是可以使用時間戳,因為tcp/ip規範規定ip位址要是唯一的,根據這個唯一性,欲重用time_wait連線的新連線的必然發自同一臺機器,而機器時間是單調遞增不能倒流的,因此只要新連線帶有時間戳且其值比老連線fin時的時間戳大,就認為該新連線是可以接受的,時間戳重用tw連線的機制的前提是ip位址唯一性匯出的發起自同一臺機器,那麼不滿足該前提的則不能基於此來重用time_wait連線,因此nat環境不能這麼做遍成了自然而然的結論。

機場安檢的目的並不是為了阻礙你登機,恰恰相反,它是為了你的安全! 

天下武功,唯快不破

昨天v哥的一朋友租了幢樓準備搞小資情調的咖啡旅館,聽到這個訊息v哥著實吃了一驚 這不是上週一才冒出來的想法,怎麼這週三就搞定了,太tm快了。所以我也就想起來星爺 功夫 中的這句話 天下武功,無堅不破,唯快不破。太tm經典了。事情是這樣的,我這朋友 性別女 周一去西湖景區自駕遊逛了一圈,長日浸淫在城市...

天下武功無堅不破,唯快不破 yaf

天下武功無堅不破,唯快不破 yaf 最近對於yaf框架有些興趣,從最初按照鳥哥惠新宸的寫的關於yaf手冊,到自己寫乙個hello world 程式,對於我這個新手來說還 是蠻曲折的,大家都知道yaf框架是用c寫的,所以自身的效率和效能,還是很不錯的,但是缺點的就是關於yaf的文件太少,這讓不少初學者...

天下武功唯快不破 實驗吧

點開看見 然後題目暗示看看響應頭,結果看到flag 感覺就是base64加密,然後解密,這個時候看下頁面 還有這句 所以題目就是想要我們去拿到header的flag,base64解密,然後再在url傳key 同時還發現,傳過來的flag是個隨機值.手動解密是不夠時間的了,只能借助指令碼的力量了 co...