【问题标题】:udp packet lossudp丢包
【发布时间】:2011-11-23 10:47:02
【问题描述】:

我有一个程序,它使用 UDP 将数据从一台电脑发送到另一台电脑(数据大小为 150 字节)。那 程序是用 delphi 7 编写的(TldUDPClient 和 TldUDPServer 组件使用 发送和接收数据)。我需要测试这个程序的 30% 丢包率。

我在 windows 上使用ipfw(从 sourceforge 下载):

ipfw -f flush
ipfw add pipe 1 ip from any to any out
ipfw pipe 1 config plr 0.3

当我使用 ping 时,我看到 30% 的数据丢失。

当我启动我的 delphi 程序时,经过一段时间的工作它返回一个 错误:socket error 10004。错误的描述是:函数调用中断。 调用WSACancelBlockingCall 中断了阻塞操作。

是我的网络组件和丢包仿真之间的能力问题吗?或者我会在真实情况下看到丢包的情况吗?我可以使用哪些其他防火墙或其他软件来模拟丢包?

【问题讨论】:

  • 您在一个 UDP 数据包中使用 UDP 发送多少数据?如果它大于底层网络的数据包大小(保证UDP数据包完全到达或根本不到达,但底层可能有多个网络数据包(不知道官方名称))我可以假设这可能发生在现实生活也是。

标签: windows delphi delphi-7 winsock ipfw


【解决方案1】:

听起来更像是丢包仿真问题。 ipfw 工具似乎中断了连接——来自this site——是你的版本吗? - 源代码没有实现这个选项 - 但它已经 4 岁了。使用 ping 命令,您只知道在预期时间内没有收到任何答复 - ARP 协议 AFAIR 中没有“连接”。

根据 UDP 标准,丢包是无痛的:没有确认或错误消息检索到套接字层。

在真实的网络连接中,UDP 数据包会静默丢失。

还有painfully... perhaps ;)

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 2013-11-21
    • 2018-03-18
    • 2013-11-14
    • 2011-08-08
    • 1970-01-01
    • 2017-06-13
    • 2011-08-20
    相关资源
    最近更新 更多