我知道对于TCP,您可以启用Nagle's Algorithm。但是,你能为UDP做类似的事吗?
实际问题(假设UDP套接字):
如果我在短时间内拨打send()
两次,每次send()
次呼叫都会有1个字节的数据。传输层是否可能决定仅使用1 byte + 1 byte = 2 bytes
数据发送1个UPD数据包?
提前致谢!
答案 0 :(得分:2)
没有。 UDP数据报的完整输送完全与发送完全无关。
答案 1 :(得分:1)
不符合RFC(RFC 768)。在IP设施本身之上,UDP实际上仅提供基于端口的路由,以及针对损坏或错误路由的一些额外检测。
这意味着无法组合数据报。事实上,由于它意味着面向交易,我会说将两个交易合并为一个很可能是一个坏的想法,以保持这些交易不同。
否则,您需要一个UDP以上的层,它可以弄清楚如何从数据报中提取这些事务。目前,由于数据报 交易,因此没有必要。
作为此争用的补充支持(当然不是确定的),请参阅UDP wikipedia page:
数据报 - 数据包是单独发送的,只有在到达时才会检查其完整性。 数据包具有明确的边界,这些边界在接收时受到尊重,意味着接收器套接字上的读取操作将产生最初发送的整个消息。
然而,对它的最佳支持来自其中一个客户。 UDP是专门为TFTP设计的(除其他外),如果你无法区分交易,那么协议就会崩溃。
具体来说,TFTP事务类型之一是data
事务,它由操作码,块号和最多512字节的数据组成。如果没有开头的长度指示或末尾的sentinel值,除非事务和数据报之间存在一对一的映射,否则 no 方式可以计算出下一个事务的起始位置。
另外,其他四种TFTP事务类型具有固定长度或字符串结束的标记值,但data
事务是此处的决策。