說服務器S與客戶C.成功的TCP連接TCP連接會丟失數據包嗎?
C是保持發送256字節長的包S.
有沒有可能是包中的一個只接收它的一部分,但連接不中斷(可以繼續正確接收新數據包)?
我以爲TCP協議本身會保證連接時不會丟失任何字節。但似乎不是?
P.S.我正在使用Python的socketserver庫。
說服務器S與客戶C.成功的TCP連接TCP連接會丟失數據包嗎?
C是保持發送256字節長的包S.
有沒有可能是包中的一個只接收它的一部分,但連接不中斷(可以繼續正確接收新數據包)?
我以爲TCP協議本身會保證連接時不會丟失任何字節。但似乎不是?
P.S.我正在使用Python的socketserver庫。
TCP協議確保交付。因此(假設你的代碼和TCP堆棧中沒有錯誤),你描述的場景是不可能的。
請記住TCP是流而不是數據包導向的。這意味着您可能需要多次撥打recv()
來讀取整個256字節的數據包。
我認爲一個數據包可能會丟失,可以通過tcp頭中的會話標誌檢查或等同,當它是通過電線重新傳輸? – Cyclonecode
@KristerAndersson您將在收到或發送下一個字節時收到錯誤。你不會得到任何其他東西。具體來說,你不會得到不按順序的字節,或者有空位。 – EJP
上次我聽到有人抱怨TCP丟失數據包時,事實證明他們沒有檢查send/recv或寫/讀或關閉的返回值。 –