Java 我选择UDP作为我的对等2对等服务,我如何证明它在我的情况下是可靠的

Java 我选择UDP作为我的对等2对等服务,我如何证明它在我的情况下是可靠的,java,linux,udp,debian,Java,Linux,Udp,Debian,我有两个debian服务器位于同一子网上。它们由开关连接。我知道UDP是不可靠的 问题1:我假设链路层是以太网。和标准的MTU 以太网是1500字节。然而,当我从一台服务器ping到另一台服务器时 另外,我发现可以发送的最大数据包大小是 65507它不应该是1500字节吗?我可以说,因为这两台服务器之间没有路由器,所以IP数据报将 不要支离破碎 问题2:因为两台服务器直接通过交换机连接,我可以吗 假设所有数据报都按顺序到达并且路径上没有丢失 问题3:如何确定数据报丢失的可能性 由于缓冲区溢出,在

我有两个debian服务器位于同一子网上。它们由开关连接。我知道UDP是不可靠的

问题1:我假设链路层是以太网。和标准的MTU 以太网是1500字节。然而,当我从一台服务器ping到另一台服务器时 另外,我发现可以发送的最大数据包大小是 65507它不应该是1500字节吗?我可以说,因为这两台服务器之间没有路由器,所以IP数据报将 不要支离破碎

问题2:因为两台服务器直接通过交换机连接,我可以吗 假设所有数据报都按顺序到达并且路径上没有丢失

问题3:如何确定数据报丢失的可能性 由于缓冲区溢出,在服务器上。设置接收缓冲区的大小,以便数据报不会溢出接收缓冲区


不。UDP在同一台计算机上的进程之间甚至不可靠。如果数据包被发送到套接字而没有给接收方进程读取它们的时间,则缓冲区将溢出,数据包将丢失

您在启用碎片的情况下进行了ping测试。除此之外,ping不使用UDP,而是使用ICMP,因此结果毫无意义。小于MTU的UDP数据包不会被分段,但MTU取决于更多因素,如IP选项和VLAN头,因此它可能不会大于1500

否。开关执行缓冲,内部缓冲区可能溢出。考虑一个24端口交换机,其中23个节点都尽可能快地传输到最后一个节点。显然,到最后一个节点的连接无法处理其他23个链路的聚合流量,交换机将尝试缓冲数据包,但最终会丢弃它们

除此之外,电子噪声还会破坏传输中的数据包,导致校验和失败时丢弃数据包

为了分析缓冲区溢出的可能性,您可以使用排队论来确定缓冲区已满时数据包到达的概率。您需要一些关于数据包传输速率和处理时间的概率分布的假设。然后,缓冲区中的数据包数量形成一个有限链,最好是马尔可夫链,您可以求解链中每个状态的稳态概率。好的搜索关键词,找出更多的将是排队论,马尔可夫链,呼叫容量,电路容量,负载系数


编辑:您更改了问题的标题。你的新问题的答案是:你不能证明一些不真实的东西。如果要使用UDP创建可靠的应用程序,则应添加自己的确认和丢失处理逻辑。

否。UDP在同一台计算机上的进程之间甚至不可靠。如果数据包被发送到套接字而没有给接收方进程读取它们的时间,则缓冲区将溢出,数据包将丢失

您在启用碎片的情况下进行了ping测试。除此之外,ping不使用UDP,而是使用ICMP,因此结果毫无意义。小于MTU的UDP数据包不会被分段,但MTU取决于更多因素,如IP选项和VLAN头,因此它可能不会大于1500

否。开关执行缓冲,内部缓冲区可能溢出。考虑一个24端口交换机,其中23个节点都尽可能快地传输到最后一个节点。显然,到最后一个节点的连接无法处理其他23个链路的聚合流量,交换机将尝试缓冲数据包,但最终会丢弃它们

除此之外,电子噪声还会破坏传输中的数据包,导致校验和失败时丢弃数据包

为了分析缓冲区溢出的可能性,您可以使用排队论来确定缓冲区已满时数据包到达的概率。您需要一些关于数据包传输速率和处理时间的概率分布的假设。然后,缓冲区中的数据包数量形成一个有限链,最好是马尔可夫链,您可以求解链中每个状态的稳态概率。好的搜索关键词,找出更多的将是排队论,马尔可夫链,呼叫容量,电路容量,负载系数


编辑:您更改了问题的标题。你的新问题的答案是:你不能证明一些不真实的东西。如果要使用UDP创建可靠的应用程序,应添加自己的确认和丢失处理逻辑。

最大64 KB的数据包大小是协议的绝对限制,与您可能配置的1500字节MTU不同,MTU可以轻松更改,但64 KB的限制无法更改

实际上,您可能永远不会在场景中看到重新排序的数据报。只有当接收端处理它们的速度不够快或关闭时,您才可能丢失它们 完全消失了


数据报被接收者丢弃的可能性不是我们能够真正量化的,因为我们不知道更多关于你的情况。如果接收方处理数据报的速度比发送方发送数据报的速度快,那么您就没事了,否则您可能会丢失一些关于数据报数量和确切时间的信息。64 KB的最大数据包大小是协议的绝对限制,而不是您配置的1500字节MTU。MTU可以轻松更改,无法设置64 KB的限制

实际上,您可能永远不会在场景中看到重新排序的数据报。只有当接收端处理它们的速度不够快或完全关闭时,您才可能丢失它们

数据报被接收者丢弃的可能性不是我们能够真正量化的,因为我们不知道更多关于你的情况。如果接收者处理数据报的速度比发送者发送数据报的速度快,那么您就没事了,否则您可能会失去一些关于数据报数量和确切时间的信息,这是一个相当精细的点

IP堆栈将为您对数据包进行分段和碎片整理。您可以通过设置no fragment标志来测试这一点。数据包将被丢弃

不。它们很可能会按顺序出现,并且可能不会丢弃,但是如果数据包到达时无法处理,则发送方、路由器和接收方中的网络堆栈可以随意丢弃数据包。还要记住,当一个大数据包被分割时,一个丢失的片段意味着整个数据包将被堆栈丢弃

我想你可以通过发送1000个数据包来探测并测量损失,但历史值不能预测未来

IP堆栈将为您对数据包进行分段和碎片整理。您可以通过设置no fragment标志来测试这一点。数据包将被丢弃

不。它们很可能会按顺序出现,并且可能不会丢弃,但是如果数据包到达时无法处理,则发送方、路由器和接收方中的网络堆栈可以随意丢弃数据包。还要记住,当一个大数据包被分割时,一个丢失的片段意味着整个数据包将被堆栈丢弃

我想你可以通过发送1000个数据包来探测并测量损失,但历史值不能预测未来


问题1:您将MTU与tcp最大数据包大小混淆,请参阅

问题2:通过交换机连接的两台服务器不能保证数据报按顺序到达。将发生其他网络传输,这些传输将干扰udp流,从而可能导致帧顺序错误


问题3:以上由Ben Voigt回答。

问题1:您将MTU与tcp最大数据包大小混淆,请参阅

问题2:通过交换机连接的两台服务器不能保证数据报按顺序到达。将发生其他网络传输,这些传输将干扰udp流,从而可能导致帧顺序错误



问题3:以上由Ben Voigt回答。

64KB是64KB>1500字节。您从哪里获得64 KB的数据?@Kevin:from IPv4,它有一个最大为64k的片段偏移量字段。@BenVoigt IPv4数据报的最大大小是65535-28=65507字节。@EJP:您确定吗?最后一个片段应该可以一直到64k,理论上它甚至可以超过64k,但我相信规范禁止这样做。@BenVoigt您忘记了IP头20字节和UDP头8字节。64 KB是64 KB>1500字节。您从哪里获得64 KB的数据?@Kevin:from IPv4,它有一个最大为64k的片段偏移量字段。@BenVoigt IPv4数据报的最大大小是65535-28=65507字节。@EJP:您确定吗?最后一个片段应该可以一直到64k,理论上它甚至可以超过64k,但我相信规范禁止这样做。@BenVoigt您忘记了IP头20字节和UDP头8字节。这不是编程问题。也许你应该检查一下,你不能“证明它在[你的]情况下是可靠的”,因为它不是。这不是一个编程问题。也许你应该检查一下,你不能“证明它在[你的]情况下是可靠的”,因为它不是。你能给我一些参考,说UDP在同一台机器上的进程之间甚至不可靠吗。如果我给接收者设置发送者缓冲区的乘数,我能说端部缓冲区溢出的可能性最小吗?@KevinQ a UDP是不可靠的。你不需要一个推荐人说它在特定的研究中是不可靠的。b不。你能不能给我一些参考,说UDP在同一台机器上的进程之间甚至不可靠。如果我给接收者设置发送者缓冲区的乘数,我能说端部缓冲区溢出的可能性最小吗?@KevinQ a UDP是不可靠的。你不需要一个推荐人说它在特定的研究中是不可靠的。b不,TCP与此无关。TCP与此无关。