2014-05-24 114 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