2014-05-24 111 views
0

說服務器S與客戶C.成功的TCP連接TCP連接會丟失數據包嗎?

C是保持發送256字節長的包S.

有沒有可能是包中的一個只接收它的一部分,但連接不中斷(可以繼續正確接收新數據包)?

我以爲TCP協議本身會保證連接時不會丟失任何字節。但似乎不是?

P.S.我正在使用Python的socketserver庫。

+0

上次我聽到有人抱怨TCP丟失數據包時,事實證明他們沒有檢查send/recv或寫/讀或關閉的返回值。 –

回答

1

TCP協議確保交付。因此(假設你的代碼和TCP堆棧中沒有錯誤),你描述的場景是不可能的。

請記住TCP是流而不是數據包導向的。這意味着您可能需要多次撥打recv()來讀取整個256字節的數據包。

+0

我認爲一個數據包可能會丟失,可以通過tcp頭中的會話標誌檢查或等同,當它是通過電線重新傳輸? – Cyclonecode

+0

@KristerAndersson您將在收到或發送下一個字節時收到錯誤。你不會得到任何其他東西。具體來說,你不會得到不按順序的字節,或者有空位。 – EJP