TCP连接会丢失数据包吗?

3

假设服务器S和客户端C之间已建立TCP连接。

C一直向S发送长度为256字节的数据包。

是否有可能其中一个数据包只接收了部分内容,但连接没有中断(可以继续正确接收新的数据包)?

我认为TCP协议本身会保证在连接期间不会丢失任何字节。但似乎并非如此?

附注:我正在使用Python的socketserver库。


1
我最后一次听到有人抱怨TCP丢包时,结果发现他们没有检查send/recv或write/read或close的返回值。 - Zan Lynx
@ZanLynx 这也正是我遇到的问题 :P - mitnk
2个回答

5
TCP协议确保传输的可靠性。因此(假设您的代码和TCP堆栈中没有错误),您所描述的情况是不可能的。
请记住,TCP是面向流而不是面向数据包的。这意味着您可能需要多次调用recv()来读取整个256字节数据包。

我认为一个数据包可能会丢失,可以通过TCP头中的会话标志或类似方式进行检查,如果确实丢失了,它将在网络上重新传输。 - Cyclonecode
@KristerAndersson 当接收时,您将要么收到错误,要么收到下一个字节。您不会得到其他任何东西。具体而言,您不会收到序列外或有间隙的字节。 - user207421


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接