Sockets UDP是否允许重新打包?
我知道,对于TCP,您可以启用例如。但是,您可以为UDP提供类似的功能吗 实际问题(假设UDP套接字): 如果我在短时间内调用Sockets UDP是否允许重新打包?,sockets,network-programming,udp,Sockets,Network Programming,Udp,我知道,对于TCP,您可以启用例如。但是,您可以为UDP提供类似的功能吗 实际问题(假设UDP套接字): 如果我在短时间内调用send()两次,每次send()调用中都有1字节的数据。传输层是否可能决定只发送1个UPD数据包,其中包含1字节+1字节=2字节的数据 提前谢谢 不符合RFC()。除了IP设施本身之外,UDP实际上只提供基于端口的路由和少量额外的损坏或错误路由检测 这意味着没有设备来组合数据报。事实上,因为它是面向事务的,所以我认为将两个事务合并为一个可能是一个不好的主意,因为这会使这
send()
两次,每次send()
调用中都有1字节的数据。传输层是否可能决定只发送1个UPD数据包,其中包含1字节+1字节=2字节的数据
提前谢谢 不符合RFC()。除了IP设施本身之外,UDP实际上只提供基于端口的路由和少量额外的损坏或错误路由检测
这意味着没有设备来组合数据报。事实上,因为它是面向事务的,所以我认为将两个事务合并为一个可能是一个不好的主意,因为这会使这些事务保持不同
否则,您将需要UDP之上的一个层,它可以找出如何从数据报中提取这些事务。目前,这是不必要的,因为数据报就是事务
作为对此争论的补充支持(当然不是决定性的),请参阅:
数据报–数据包单独发送,只有在到达时才检查完整性数据包具有明确的边界,在接收时将遵守这些边界,这意味着在接收器套接字上的读取操作将产生原始发送的完整消息
然而,最好的支持来自它的一个客户。UDP是专门为TFTP设计的(除其他外),如果无法区分事务,该协议将崩溃
具体而言,TFTP事务类型之一是数据
事务,它由操作码、块号和最多512字节的数据组成。如果在开始处没有长度指示或在结束处没有sentinel值,则无法确定下一个事务将从何处开始,除非事务和数据报之间存在一对一的映射
另一方面,其他四种TFTP事务类型具有固定长度或字符串结束前哨值,但这里的决策者是数据事务。否。UDP数据报完全按照发送的方式发送,或者根本不发送。调用UDP“面向事务”有点牵强。但UDP层绝对不允许拆分或组合UDP数据报。这并不能阻止IP层这样做,但是UDP层应该在将拆分的数据报呈现给应用层之前重新组合这些数据报。@Ross,我不是这么说的,这是RFC。我们习惯的事务定义可能不同,给定的数据报要么被传递,要么不被传递。