假设服务器S和客户端C之间已建立TCP连接。
C一直向S发送长度为256字节的数据包。
是否有可能其中一个数据包只接收了部分内容,但连接没有中断(可以继续正确接收新的数据包)?
我认为TCP协议本身会保证在连接期间不会丢失任何字节。但似乎并非如此?
附注:我正在使用Python的socketserver库。
假设服务器S和客户端C之间已建立TCP连接。
C一直向S发送长度为256字节的数据包。
是否有可能其中一个数据包只接收了部分内容,但连接没有中断(可以继续正确接收新的数据包)?
我认为TCP协议本身会保证在连接期间不会丢失任何字节。但似乎并非如此?
附注:我正在使用Python的socketserver库。
正如@NPE所说,TCP是一种面向流的协议,这意味着每个TCP数据包中发送多少数据字节以及接收套接字中有多少可读字节没有保证。 TCP确保的是接收套接字将按照它们发送的顺序提供数据字节。
考虑两个主机和之间通过TCP连接套接字进行通信。
例如,当A
中的应用程序请求发送256字节时,A
的TCP堆栈可以将它们发送到一个或多个单独的数据包中,甚至在发送它们之前等待。因此,B
可能会收到一个或多个数据包,其中包含由A
请求发送的所有或部分字节,因此,当B
中的应用程序被通知已接收到字节时,它不能确定是否可以立即读取256字节。
唯一保证的是B读取的字节与A发送的字节顺序相同。