我如何伪造丢弃的数据包(或实际上使它们失败)?

背景

我们的一个客户在互联网上遇到了一个间歇性的问题,当用户下载一个大文件(他们的IT正在研究这个问题)时,它会丢包。

我有一个由运行Windows 2008 R2 IIS7.5的Web服务器和运行Windows 7的客户端组成的应用程序,Chrome使用长时间运行的XMlHttpRequest将“消息”从服务器传输到客户端。

问题。

我的应用程序应该对这些数据包丢失有相当的免疫力,但实际上并不是这样。

我想在各种不同的networking问题情况下testing应用程序,例如随机1%的数据包丢失和突发的数据包丢失 – 例如4000毫秒的数据包完全丢失,等等。

我正在寻找一个解决scheme,让我“重现”一个场景并testing我的应用程序。 我可以使用3G,或拔掉拔掉网线,但效果不是很好再现。

这个问题。

有一个应用程序/驱动程序,我可以安装在我的机器上模仿“狡猾的”互联网连接? 或者,也许我可以在networking中使用设备或代理服务器来模拟这些场景?

我猜在现代计算机上做这件事并不容易,因为我认为大部分的TCP协议栈都被卸载到了网卡上,但是我原以为这是一个相当受欢迎的事情,但是我没有谷歌有任何运气。 我对Windows更精通,但是使用Linux作为客户端或代理的解决scheme将会受到欢迎。

中间一个简单的linux路由器可以完美地为你做到这一点。 只要做一些关于netem阅读。 您可以复制所有内容,包括丢失数据包,重新sorting的数据包,损坏的数据包甚至延迟。 我自己用它来模拟基于卫星的链接。

我已经使用TMNetSim来执行此操作。 它代理你想要的任何端口,所以它可以用于大多数应用程序。

http://www.tmurgent.com/Tools.aspx

您可能希望在客户端和服务器端执行相关的数据包捕获,并确定客户端是否收到RST数据包。 如果是这样,它是来自你的服务器。 它是否发生在可预见的时间,例如五分钟不活动之后。