UDP允许重新包装吗?

时间:2013-04-11 02:39:40

标签: sockets network-programming udp

我知道对于TCP,您可以启用Nagle's Algorithm。但是,你能为UDP做类似的事吗?

实际问题(假设UDP套接字):

如果我在短时间内拨打send()两次,每次send()次呼叫都会有1个字节的数据。传输层是否可能决定仅使用1 byte + 1 byte = 2 bytes数据发送1个UPD数据包?

提前致谢!

2 个答案:

答案 0 :(得分:2)

没有。 UDP数据报的完整输送完全与发送完全无关。

答案 1 :(得分:1)

不符合RFC(RFC 768)。在IP设施本身之上,UDP实际上仅提供基于端口的路由,以及针对损坏或错误路由的一些额外检测。

这意味着无法组合数据报。事实上,由于它意味着面向交易,我会说将两个交易合并为一个很可能是一个的想法,以保持这些交易不同。

否则,您需要一个UDP以上的层,它可以弄清楚如何从数据报中提取这些事务。目前,由于数据报 交易,因此没有必要。

作为此争用的补充支持(当然不是确定的),请参阅UDP wikipedia page

  

数据报 - 数据包是单独发送的,只有在到达时才会检查其完整性。 数据包具有明确的边界,这些边界在接收时受到尊重,意味着接收器套接字上的读取操作将产生最初发送的整个消息。

然而,对它的最佳支持来自其中一个客户。 UDP是专门为TFTP设计的(除其他外),如果你无法区分交易,那么协议就会崩溃。

具体来说,TFTP事务类型之一是data事务,它由操作码,块号和最多512字节的数据组成。如果没有开头的长度指示或末尾的sentinel值,除非事务和数据报之间存在一对一的映射,否则 no 方式可以计算出下一个事务的起始位置。

另外,其他四种TFTP事务类型具有固定长度或字符串结束的标记值,但data事务是此处的决策。