TCP/IP 协议中的 netem 丢包
netem packet loss in TCP/IP protocol
我正在尝试为我的项目模拟数据包丢失。我正在使用 TCP/IP 协议。 netem
工具提供了这样的功能。延迟在环回 IP 中起作用,但我无法使丢包起作用。根据netem
的网站,丢包激活如下:
tc qdisc change dev lo root netem loss 5%
在client/server应用程序中使用TCP/IP套接字在c编程中,客户端发送这个消息“Echo this !”,客户端收到的来自服务器的回显消息是完整的。据我所知,TCP/IP 保证数据包的传递。使用 TCP/IP 协议不可能模拟数据包丢失吗?
如果数据包丢失,TCP 会在一段时间后重新发送。如果它再次丢失,它将再次发送。以此类推,最多10分钟左右,然后就放弃了。
5% 的数据包丢失 并不完全可怕 并且您的消息很可能在重新发送一两次后通过 - 或者零。还要注意你的整个消息都放在一个数据包中,所以你的程序总共只发送几个数据包(你的消息加上额外的连接和断开连接)并且很可能 none 将丢失。
您可以尝试发送更长的消息(例如 1 兆字节),并且可以尝试将丢包率提高到 25% 或 50%(甚至更高!)。发送消息应该花费更长的时间,即使网络没有任何延迟,但你的消息应该最终通过,除非 TCP 决定放弃并断开你的连接。
我正在尝试为我的项目模拟数据包丢失。我正在使用 TCP/IP 协议。 netem
工具提供了这样的功能。延迟在环回 IP 中起作用,但我无法使丢包起作用。根据netem
的网站,丢包激活如下:
tc qdisc change dev lo root netem loss 5%
在client/server应用程序中使用TCP/IP套接字在c编程中,客户端发送这个消息“Echo this !”,客户端收到的来自服务器的回显消息是完整的。据我所知,TCP/IP 保证数据包的传递。使用 TCP/IP 协议不可能模拟数据包丢失吗?
如果数据包丢失,TCP 会在一段时间后重新发送。如果它再次丢失,它将再次发送。以此类推,最多10分钟左右,然后就放弃了。
5% 的数据包丢失 并不完全可怕 并且您的消息很可能在重新发送一两次后通过 - 或者零。还要注意你的整个消息都放在一个数据包中,所以你的程序总共只发送几个数据包(你的消息加上额外的连接和断开连接)并且很可能 none 将丢失。
您可以尝试发送更长的消息(例如 1 兆字节),并且可以尝试将丢包率提高到 25% 或 50%(甚至更高!)。发送消息应该花费更长的时间,即使网络没有任何延迟,但你的消息应该最终通过,除非 TCP 决定放弃并断开你的连接。