【问题标题】:netem packet loss in TCP/IP protocolTCP/IP 协议中的 netem 数据包丢失
【发布时间】:2021-09-11 02:34:09
【问题描述】:

我正在尝试为我的项目模拟丢包。我正在使用 TCP/IP 协议。 netem 工具提供了这样的功能。延迟在环回 IP 中起作用,但我无法使数据包丢失起作用。根据netem的网址,丢包激活如下:

tc qdisc change dev lo root netem loss 5%

在c编程中使用TCP/IP套接字的客户端/服务器应用程序中,客户端发送此消息“Echo this!”,客户端收到的来自服务器的回显消息是完整的。据我所知,TCP/IP 保证了数据包的传递。用 TCP/IP 协议模拟丢包是不可能的吗?

【问题讨论】:

  • TCP 应用程序永远不会看到丢包,TCP 协议透明地执行自动重传。如果你想检测丢包,你应该使用 UDP。
  • @Barmar 这就是我的想法。非常感谢!
  • 你仍然可以模拟丢包,你会在netstat的重传统计中看到结果。

标签: linux sockets networking


【解决方案1】:

如果数据包丢失,TCP 会在延迟一段时间后再次发送。如果它再次丢失,它将再次发送。以此类推,最多 10 分钟左右,之后它就放弃了。

5% 的丢包率并不是很糟糕,您的消息可能会在一两次重新发送后通过 - 或者为零。另请注意,您的整个消息都适合一个数据包,因此您的程序总共只发送几个数据包(您的消息加上额外的连接和断开连接的数据包)并且很可能没有一个会丢失。

您可以尝试发送更长的消息(例如 1 兆字节),也可以尝试将丢包率提高到 25% 或 50%(甚至更高!)。发送消息需要更长的时间,即使网络没有任何延迟,但您的消息应该最终通过,除非 TCP 决定放弃并断开您的连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2018-06-25
    相关资源
    最近更新 更多