说服务器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或写/读或关闭的返回值。 –