2016-01-09 35 views
0

本地主機上的TCP套接口是否可以接收來自先前連接的數據包?如果是這樣,那麼任何假定這種情況不會發生的程序都會被破壞。特別是,任何假定localhost上的套接字永遠不會從它應該連接的對等體之外的任何其他數據接收任何數據的程序都會中斷。本地主機上的套接字是否可以接收來自先前連接的數據包?

編輯:我知道這不是假設發生。但是,我認爲如果以前的套接字不在TIME_WAIT中足夠長時間,它會發生可能的。我正在處理的應用程序要求此絕不會發生在本地主機上 —否則,它受制於任意代碼執行漏洞。

回答

-1

不,TCP套接字是基於連接的。

一旦連接,TCP套接字只能從 遠程機器發送和接收到/。這意味着您的應用程序中每個 客戶端都需要一個TCP套接字。

Source

+0

無關和非規範性的參考。 「TCP套接字是基於連接的」這一事實並沒有真正回答這個問題,即關於連接的問題。 – EJP

+0

報價答案。一旦連接,它們只能發送/接收來自特定的遠程機器。我不明白這怎麼回答不了這個問題。 – GAntoine

+1

您似乎並不瞭解TIME_WAIT的目的,以及爲什麼這是必要的,這裏不是向您解釋它的地方。只要說它是*必須提供*關於connecton完整性的保證,你只是斷言是這種情況。這就是OP在他的問題中提到的原因。如果TIME_WAIT期間太短,則無法提供擔保,您的回答和引用將是錯誤的。事實上,他們只是揮手致意。 – EJP

2

如果您還沒有與TIME_WAIT設置好惹的,並把它忘在它的默認值,它是兩次最大段生存時間(MSL),並且因此不可能從段先前的連接要在網絡中持續足夠長的時間才能通過同一端口上的新套接字接收。

TCP將初始序列號隨機化的事實是另一個防禦。陳舊分段的序號很可能不適合當前的接收窗口。

+0

最大段壽命是任意的。我如何知道內核將在本地主機上處理當時的所有流量? – Demi

+0

@Demetri MSL不是任意的。它在[RFC 793](https://tools.ietf.org/html/rfc793)中規定爲2分鐘。 – EJP

+0

我知道它是這樣指定的。我不知道內核的TCP堆棧保證在這段時間內完成所有的數據包處理 - 我需要在這裏保證。 – Demi

相關問題