是否有可能导致仿真networking丢包或延迟?

我试图重现MSSQL服务器和客户端在两个单独的计算机上运行的部署应用程序的一些问题。 我认为这两台机器之间可能存在networking问题,所以我想尝试在两台Hyper-V虚拟机上(在同一台虚拟服务器上)重现这些情况。 当然,这些虚拟机的networking是“本地的”,所以它实际上远离现场环境的条件。

有一个程序,我可以运行在任何虚拟机,这会降低networking性能? 或者也许还有其他的解决方法? 例如,重现条件的一种方法可能是在分散在不同地点的单独的Hyper-V服务器上运行虚拟机(所以SQLstream量通过VPN或其他方式) – 但是我觉得这有点长。 必须有一个更简单的方法。

在Linux上你可以使用netem,在FreeBSD上你可以使用dummynet。

这两种解决scheme都不能在使用Hyper-V的单台Windows机器上运行。 我search了,我无法find任何Windows Hyper-V兼容networking模拟器。

你可以把两台虚拟机放在两台不同的物理机器上,在它们之间有一个Linux或者FreeBSD的机器。 但是看起来好像没有任何解决scheme可以在单个VM主机上完全实现您想要的function。

我的朋友在ESX中使用了dummynet和FreeBSD。 我知道这不是Hyper-V,但是你也许可以修改它来为你工作。 http://apocryph.org/2009/05/15/simulating-slow-wan-links-with-dummynet-and-vmware-esx/

Dummynet应该为你工作: http ://info.iet.unipi.it/~luigi/dummynet/

它在NIC上安装服务,然后通过命令行设置参数。

我用它来testingWindows XP上的高延迟或低带宽链接的网站访问,它工作得很好。

听起来像你需要netem

您可以插入丢包,延迟,抖动等

如果只是为了延迟数据包,在Linux上,您可以简单地使用tc和菊花链排队规则(如HTB ):

另一个HTB的HTB与另一个HTB中的另一个类下的类不同。 这是因为当HTB中的类可以发送时,只要硬件设备可以发送就可以发送。 所以限制阶级的延迟只能由装备而不是由祖先来限制。 在HTB下的HTB情况下,外部HTB模拟新的硬件设备,所有后果(较大的延迟)

iptables和random模块也可以引入损失:

 # for randomly dropping 10% of incoming packets: iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP # and for dropping 10% of outgoing packets: iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP 

另一种方法是独立的networking模拟器工具包(NEWT),尽pipe它的年龄相当大,并且适用于x86和x64 Windows操作系统。

https://blog.mrpol.nl/2010/01/14/network-emulator-toolkit/

使用包含的XML模板和安装程序,您可以快速启动并运行模拟延迟,带宽,抖动和其他networkingvariables。

我已经在XP – > Windows 10的所有版本的Windows上testing和使用这个应用程序。

在这里输入图像描述