当前位置: 首页 > 知识库问答 >
问题:

UDP数据包可以像TCP数据包一样部分发送吗?

酆出野
2023-03-14

我创建了某种类型的客户机/服务器应用程序,它有自己的数据ACK系统。由于某些限制,它最初是用TCP编写的,但它的基础是考虑到UDP编写的。

我发送到服务器的数据包有自己的封装(数据包id和数据包大小报头。我知道UDP还有一个校验和,所以我没有为此添加报头),但是TCP是如何工作的,我知道服务器可能接收不到整个数据包,所以我收集并缓冲了接收到的数据,直到收到一个完整的有效数据包。

我想知道的是:如果我发送多个数据包,它们是否会在没有保证顺序但有保证封装的情况下被接收?我的意思是,如果我发送了一个1000字节大小的数据包和另一个400字节大小的数据包,服务器会收到两个数据包吗,一个是1000字节,另一个是400字节,或者有机会收到1000字节中的200个,然后是1000字节中的400字节,然后是TCP所做的其他字节?

共有1个答案

国仰岳
2023-03-14

UDP是一种数据报服务。数据报可能会被拆分用于传输,但在传递到应用层之前,它们会被重新组装。

 类似资料:
  • 问题内容: 即使已经存在一个类似的主题,我也注意到它可以追溯到两年前,因此我认为打开一个新主题更为合适。 我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以便监视随机数生成器(/drivers/char/random.c)的行为。到目前为止,由于sock_create和sock_sendmsg函数,我已经设法监视了一些事情。您可以在此消息的末尾找到我使用的典型代码。(您可能还希望在

  • 根据Stevens(图示为TCP/IP),traceroute程序用增量TTL(1、2、3等)向目的主机发送UDP数据包,以从ICMP TTL过期消息中获取中间跳信息。 “到达目的地”条件是ICMP端口无法到达的消息,因为traceroute寻址的随机端口数量很高(也就是说,不太可能有人在那里监听) 所以我的问题是:是否有技术原因(缺点、RFCs等)使用UDP数据包而不使用例如ICMP回送请求消息

  • 问题内容: 我正在尝试通过recvfrom接收数据包的一部分。它实际上是这样的: 数据是这样发送的: 因此,想法是先读取一些元数据,然后再决定是否接收其他内容。问题是如果第二个缓冲区(serialised_buf)开头,我会收到4个’/ 0’字节。这似乎不是序列化的问题,我以前使用过序列化,并且在我一次接收到整个数据包(元和数据)的同时,一切都很酷。关于如何解决的任何想法? PS。我知道我可以跳过

  • 我需要在javascript客户机和Web API控制器操作之间建立一个长时间运行(比如10分钟)的连接。Web应用程序的Azure负载均衡器的默认超时时间为4分钟,目前还无法配置。

  • 如果UDP数据包超过MTU,它能被分割成几个更小的数据包吗?看起来MTU碎片是关于IP层的,所以我认为它可以。 如果是,为避免碎片,建议通过UDP发送的最大数据包大小是多少?为什么?