假设服务器S与客户端C有成功的TCP连接。
C继续向S发送256字节长的数据包。
其中一个数据包可能只接收其中的一部分,但连接没有中断(可以继续正确地接收新数据包)吗?
我认为TCP协议本身将保证连接时不会丢失任何字节。但似乎不是?
我正在使用Python的套接字服务器库。
发布于 2014-05-24 06:19:06
TCP协议确实保证了交付。因此(假设您的代码和TCP堆栈中没有bug),您所描述的场景是不可能的。
请记住,TCP是流的,而不是面向数据包的。这意味着您可能需要多次调用recv()来读取整个256个字节的数据包。
发布于 2019-03-15 09:03:29
正如@NPE所说,TCP是一种面向流的协议,这意味着不能保证每个TCP数据包中发送了多少数据字节,也不能保证接收套接字中有多少字节可用于读取。TCP确保接收套接字将以与发送数据字节相同的顺序提供数据字节。
考虑通过两个主机A和B之间的TCP连接套接字进行通信。
例如,当A中的应用程序请求发送256个字节时,A的TCP堆栈可以在一个或几个单独的数据包中发送它们,甚至在发送它们之前等待。因此,B可能接收一个或多个数据包,其中包含A要求发送的全部或部分字节,因此,当在B中的应用程序被告知接收到的字节的可用性时,无法确定它是否能够同时读取256个字节。
唯一可以保证的是,B读取的字节与A发送的字节顺序相同。
https://stackoverflow.com/questions/23841896
复制相似问题