【问题标题】:network simulator网络模拟器
【发布时间】:2011-01-20 16:56:49
【问题描述】:

我需要构建一个可以通过真实 IP 地址进行通信的设备模拟器

我需要为设备创建尽可能多的实例。每个模拟器实例都有一个 IP 和 MAC 地址

谁能指导我如何做到这一点?

【问题讨论】:

  • 什么语言?什么平台?
  • 你问的是虚拟网络接口吗?
  • 是的,什么平台?我正在为 Java 中的 NS-3 开发一个接口。
  • 很多工具都可以做到这一点。谷歌“网络捕获回放”。你为什么要这样做,在什么协议级别?
  • 我需要为多个从 dhcp 获取 ipaddress 的虚拟设备创建一个测试环境

标签: java windows emulation simulator


【解决方案1】:

五六年前,我一直在为 PS2 游戏编​​写网络仿真层。有人告诉我,必须显示互联网连接的所有经典行为;现实的丢包特征、包重新排序、延迟、高峰引起的丢包。基本上,我被告知要在几周内实现互联网。

我建议只是将我们所有的游戏流量从远程回显服务器中退回。当我被告知绝对禁止通过公共线路发送开发流量时,我只是创建了一个服务器,每个人都将他们的 PS2 开发套件指向该服务器,该服务器将存储它收到的每个数据包并发送一个分身(充满原始数据包的 id加上一堆随机垃圾以使其大小相同)到我运行的回显服务器。收到分身后,我会将原始数据包传递到其原始目的地。

轰隆隆。不到 8 小时,所有荆棘的互联网模拟。

更新:

鉴于这里的回答成功,我不久前重新实现了游戏回显服务。似乎 github 可能是一个更好的存放它的地方,所以here it is:如果它适合你,那就太好了!如果没有,请告诉我。我预计它目前的状态充其量是不稳定的。

【讨论】:

  • 先生,这是一个史诗般的解决方案。
  • 这是一个很好的解决问题的方法!我很难说服那些开发流量实际上没有逃逸的权力。
  • 我想唯一的缺点是使测试条件在未来可重复。
  • 如果您想节省大量工作并防止开发流量泄漏,您可以简单地接受入站连接,将其全部加密,将其发送到远程回显服务器,然后将其全部解密当收到回声时。 MBA 倾向于认为他们理解“加密”意味着“解决问题”。不必在本地存储所有数据比加密要困难得多。
【解决方案2】:

Cisco pakcet tracer 允许您使用 gui 模拟网络流量。我对没有人提到这一点感到惊讶(它仅限于 cisco 设备,但不同设备的标准是相同的,因此它会为您的特定设备学习命令)。

尝试进行谷歌搜索,因为在正常情况下它仅适用于 ccna 学生,但我保留了一份副本,因为我的老师让我。

或者你可能会发现有人在互联网上某个地方发布了他们班级的副本。

【讨论】:

    【解决方案3】:

    您可以尝试使用环回适配器。使用它,您可以设置任何 IP 或 MAC 地址。非常适合模拟各种网络连接。

    【讨论】:

      【解决方案4】:

      一个简单的想法是使用User-Mode Linux (UML),这是Linux内核在用户空间的一个端口。它允许多个虚拟 Linux 系统(称为来宾)在普通 Linux 系统(称为主机)中作为应用程序运行。

      它非常轻,在 CPU 和内存中。例如,我在“不太新”的 PC 上同时使用 10 多个 UML,使用基于 UML 的网络模拟器 Netkit。 UML 很轻,因为它是一个原生应用程序,而不是重度虚拟化(vmware、virtualbox、qemu)和半虚拟化(xen)。

      由于网络接口被实现为能够连接到其他 UML 机器(使用 uml_switch),因此您可以拥有任何您想要的 MAC 地址。如果您需要将这些 UML 机器连接到您的系统或外部主机,您可以使用 TUN/TAP 创建虚拟设备。

      PS:如果你是Windows,可以试试CoLinix,Linux Kernel for M$ OS的端口,不知道是不是和UML一样的特性。

      【讨论】:

        【解决方案5】:

        Add a Range of Virtual IPs in Windows

        请参阅 gil.elessar 于 2006 年 2 月 21 日下午 1:18 发表的回复

        .

        供您参考:

        Netsh commands for Interface IP

        Netsh commands

        您可以在 Netsh 接口 IP 上下文中使用命令来配置 TCP/IP 协议(​​包括地址、默认网关、DNS 服务器和 WINS 服务器)并显示配置和统计信息。

        【讨论】:

        • 好的,这可能是一个解决方案,但是 mac 地址呢?有什么我可以为每个 ipaddresses 设置不同的 mac-address 的吗?
        • mac-addresses(也称为物理地址)是网络数据包发送到的设备地址。上述解决方案是为同一设备创建虚拟 IP。
        【解决方案6】:

        我建议你最好不要开始重新发明轮子。对于这个特定问题,有硬件和软件解决方案。它们也非常适合网络负载(和吞吐量)测试。

        缺点是这样的设计相当昂贵。

        【讨论】:

        【解决方案7】:

        【讨论】:

        • 为 1000 台设备设置虚拟机成本太高。大多数设备也不运行 Linux 或 Windows
        • 您可以将虚拟以太网适配器添加到此虚拟机。
        【解决方案8】:

        根据您需要的设备类型,您可能会对许多虚拟 PC 引擎感到满意,但开销很高(模拟整个 PC 而不仅仅是一个网络接口),因此您最终不会拥有 1000 台机器,但这是一个“开箱即用”的解决方案 - 每台虚拟 PC 都可以有多个虚拟网卡。

        【讨论】:

        • 嗯,设备的仿真根本不是问题,我面临的实际挑战是我将如何获取或设置仿真器的 IP 地址,以便像真正的 NIC 一样通过 LAN 进行通信或不支持 ip 的设备。
        • 主机(虚拟机在其上工作)将其标准网卡设置为透明地转发来自虚拟机的连接。当你在虚拟机上设置操作系统时,你就像通常在那个操作系统中一样设置它(甚至可以通过 DHCP)——它可以是 Linux、Windows 等等。然后具有多个虚拟网卡(每个都有自己的IP和MAC)的多个虚拟机通过物理网卡进行通信。因此,您最终会得到一台运行 10 个 Linux 的 Windows PC,每个具有 8 个网卡,一个物理网卡上有 80 个虚拟网卡。
        • 为 1000 台设备设置虚拟机成本太高。大多数设备也不运行 Linux 或 Windows。
        【解决方案9】:

        你需要在编码部分深入研究数据链路层——然后你才能理解它是如何获取mac地址以及b/w mac和ip的通信

        【讨论】:

        • 这种技术甚至可以在假 ip 和 macaddresses 上使用吗?(假的意思是没有物理网卡存在。)
        猜你喜欢
        • 2010-09-20
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多