gpt4 book ai didi

c++ - 如果消息被 TCP 分段,接收方会做什么

转载 作者:行者123 更新时间:2023-11-28 01:17:09 27 4
gpt4 key购买 nike

在阅读muduo(C++网络库)的源码时提出了这个问题。

如果客户端发送一个大消息,它将被 TCP 分段,服务器端会发生什么? (服务器是否知道这条消息已经被分段了?)

网络库是否需要等待整个消息并且不打断上层?

最佳答案

在处理像 TCP 这样的流协议(protocol)时,您已经必须将接收到的数据重新组合成您自己选择的 block 。这要么是每个 block 的固定字节数,要么是根据您的应用程序协议(protocol)(例如 HTTP)解析数据动态决定的。

当您从网络层接收到数据包时,您并不知道它已被分段:您只知道您收到了一些数据。您可能知道(因为您了解自己的协议(protocol))您期待更多数据来完成 block ,但您不知道是否有更多数据,直到你收到它。如果您确实收到了。

相反,单个 TCP 数据包可能包含 更多 的应用层数据!同样,您需要注意这两件事之间没有直接关系。

但是,您可以依赖于以与发送它们相同的顺序传送的 TCP 数据包,这很好。

简单的比喻:一艘载有 cargo 的大船。它可能运载 40 辆汽车,也可能只运载制造一架飞机所需零件数量的一半。或者它可能同时携带!除非您阅读运输 list 并查阅您自己的交货记录,否则您不会知道。然后,您有责任打开您收到的元素的包装并使用它做您需要做的事情。

And is it necessary for network library to wait for the whole message and do not interrupt the upper layer?

如果库想向上层传递一个完整的“消息”,那么通常是的。有些方法只会阻止等待完整的消息,但现在并不常见。异步 I/O 是您的 friend 。

(这是一个笼统的答案,在不知道 muduo 具体做什么的情况下写的。)

关于c++ - 如果消息被 TCP 分段,接收方会做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58321007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com