首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP连接会丢失数据包吗?

TCP连接会丢失数据包吗?
EN

Stack Overflow用户
提问于 2014-05-24 06:16:56
回答 2查看 3.3K关注 0票数 3

假设服务器S与客户端C有成功的TCP连接。

C继续向S发送256字节长的数据包。

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

我认为TCP协议本身将保证连接时不会丢失任何字节。但似乎不是?

我正在使用Python的套接字服务器库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-24 06:19:06

TCP协议确实保证了交付。因此(假设您的代码和TCP堆栈中没有bug),您所描述的场景是不可能的。

请记住,TCP是流的,而不是面向数据包的。这意味着您可能需要多次调用recv()来读取整个256个字节的数据包。

票数 5
EN

Stack Overflow用户

发布于 2019-03-15 09:03:29

正如@NPE所说,TCP是一种面向流的协议,这意味着不能保证每个TCP数据包中发送了多少数据字节,也不能保证接收套接字中有多少字节可用于读取。TCP确保接收套接字将以与发送数据字节相同的顺序提供数据字节。

考虑通过两个主机AB之间的TCP连接套接字进行通信。

例如,当A中的应用程序请求发送256个字节时,A的TCP堆栈可以在一个或几个单独的数据包中发送它们,甚至在发送它们之前等待。因此,B可能接收一个或多个数据包,其中包含A要求发送的全部或部分字节,因此,当在B中的应用程序被告知接收到的字节的可用性时,无法确定它是否能够同时读取256个字节。

唯一可以保证的是,B读取的字节与A发送的字节顺序相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23841896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档