Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets UDP是否允许重新打包?_Sockets_Network Programming_Udp - Fatal编程技术网

Sockets 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实际上只提供基于端口的路由和少量额外的损坏或错误路由检测 这意味着没有设备来组合数据报。事实上,因为它是面向事务的,所以我认为将两个事务合并为一个可能是一个不好的主意,因为这会使这

我知道,对于TCP,您可以启用例如。但是,您可以为UDP提供类似的功能吗

实际问题(假设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。我们习惯的事务定义可能不同,给定的数据报要么被传递,要么不被传递。