最佳 UDP 数据报大小

问题描述 投票:0回答:1

我在这里阅读了很多相关问题,但它仍然很令人困惑:如何为 UDP 数据报选择合适的大小,如果目标是尽可能快地发送数据,允许的数据包丢失约为 5%?

我正在使用 Delphi 10.2 和 Indy 10。

首先,我尝试通过发送带有

PMTU
标志的数据报来检测
DF

UDPServer.Binding.SetSockOpt(IPPROTO_IP, IP_DONTFRAGMENT, 1)
SetLength(SData, N);
UDPServer.SendBuffer(ABinding.PeerIP, ABinding.PeerPort, SData);

在我的特定测试用例中,数据仍然到达时最大的 N 变成

1472
,据我所知,这意味着这种大小的数据报正在不分段地传输。

然后我尝试发送尽可能多的数据:

    TotalSent := 0;
    for L := 1 to 100 do begin
      for k := 1 to Count do begin
        SData[0] := k;
        UDPServer.SendBuffer(ABinding.PeerIP, ABinding.PeerPort, SData);
        TotalSent := TotalSent + N;
      end;
      If SLeepTm > 0 then sleep(SLeepTm);
    end;

测量客户端接收到的总数据量,我发现数据报大小为 1464 字节(与上面的

PMTU
确定为
1472
字节相反)可实现最佳速度。
1464
数据报的速度,或者更准确地说,数据丢失速度大约快 2 倍!

如何在没有这样的压力测试的情况下在实际应用程序中确定这个

1464
值,我的推理是否正确,即为了获得最佳效率,应该在应用程序中将数据分割成这种大小的数据报?

delphi udp indy mtu
1个回答
0
投票

有一个与您非常相似的老问题:最大吞吐量的 udp 数据包的最佳大小是什么,其答案完整且内容丰富。

请记住,本地网络和互联网之间可能存在重要差异。

© www.soinside.com 2019 - 2024. All rights reserved.