我正在尝试开发一款需要实时联网的桌面应用程序。现在,当许多应用程序共享一个 NIC 并超出操作系统中 NIC 的整个 LAN 容量时,我遇到了一些问题。
1) 当流量超出 NIC 容量限制时会发生什么?在 Windows 中,每个应用程序的速度都会同样降低吗?还是先启动的应用程序具有更高的优先级?在 Mac 或 Linux 中呢?
2)我认为浏览器从互联网下载数据时会尽可能快地下载。这种做法对实时应用程序的网络影响有多大?
3) 在 Windows 中可以配置进程的优先级。难道不能以类似的方式设置网络优先级吗?那么 Mac 或 Linux 呢?(我知道一个第三方应用程序可以在 Windows 中设置网络优先级,但操作系统不支持?)
4) 每个 IP 标头都有 TOS 字段,其中包括优先级设置。我听说大多数操作系统和路由器都忽略此字段。是真的吗?
先感谢您。
(由于超出范围,该帖子已从 Stack Overflow 移出)
答案1
首先,real time
网络根本不存在,因为在任何网络情况下,你都无法保证信息能够“及时”地传递;实时计算常常与high performance computing
其次,不能“超出 NIC 容量”,因为 NIC 不像水管,如果往里面塞入太多位,水管可能会爆裂;NIC 的“容量”(或带宽)是身体的限制一个连接接口物理上“传输”比特(上/下)的速度,以兆比特每秒(而不是兆字节,因为这是一个常见的误称,只是为了清楚起见)为单位。
1) 当流量超出 NIC 容量限制时会发生什么?在 Windows 中,每个应用程序的速度都会同样降低吗?还是先启动的应用程序具有更高的优先级?在 Mac 或 Linux 中呢?
您运行的每个请求“网络资源”(或软件工程师所称的“套接字”)的应用程序都能够以应用程序“绑定”(监听)接口的最大速度下载/上传,请注意,这种“功能”或多或少与操作系统无关(即 Windows 中的套接字具有与 Linux/Mac 中相同的基本限制/概念)。因此,如果某个应用程序(例如 Web 服务器)正在运行,它理论上可以以其监听接口的最大速度“提供”网页(例如“nic 1”以 1Gb/s 的速度),这意味着(理论上)它可以在 1 秒内接收 125MB 文件/请求,并同时发送 125MB 文件/响应(如果是全双工)。但实际上由于许多原因,速度要低得多……
鉴于此,假设我们的“完美” Web 服务器现在也需要处理 FTP 请求,因此我们在同一台机器上加载一个 FTP 服务器,该服务器将监听同一个 NIC(在我们的示例中为“nic 1”)。当 FTP 服务器应用程序启动时,它也将能够接收和发送取决于NIC 的理论最大值(在我们的示例中为 125MB/s)。这适用于您运行的任何应用程序(Web 浏览器、视频游戏、Netflix/Hulu 等)。关键在于现在我有 2 个或更多应用程序(在我们的示例中为 Web 和 ftp)能够使用 NIC 的最大带宽,那么每个应用程序会发生什么,谁得到什么?这就是通用网络和操作系统实现的用武之地。
在我们的示例中,假设有 80 人以 10Mb/s 的速度从我们的 Web 服务器下载(总共 800Mb/s),然后又有 30 人加入并以每人 10MB/s 的速度开始从 FTP 服务器下载,总共 1100Mb/s;理论上应该发生的是,每个应用程序将获得 NIC 物理上可以处理的 1000Mb 带宽的平等份额(类似于操作系统如何在运行的应用程序之间“共享”CPU,最高可达 100% 的 CPU 负载)。实际上,存在很多决定哪种应用用途在给定时刻的带宽量是多少。这些因素可能包括请求资源的用户数量,也可能是 3 个网络跳数下游的简单硬件问题,而这些问题类型超出了您的控制范围,也超出了您的 NIC 所能执行的操作,还请注意,哪个应用程序先启动或谁先连接对带宽分配没有影响。在这种 1100Mb/s 的情况下,很可能 Web 服务器的有效带宽速率为 60%,而 FTP 的带宽速率为 40%,这时用户可能会掉线或出现其他网络问题,Web 服务器的带宽可能会变为仅使用 20%,而 FTP 可以继续以 40% 的速率运行,从而限制了 Web 服务器接收端的用户。
请记住,这些都是通用场景,以便更好地理解,而“现实世界”的情况完全不同,需要大量的规划和设计工作,以确保您能够满足用户群的带宽需求(至少尝试满足)。
2)当从互联网下载数据时,我认为浏览器会尽可能快地下载。这种行为对实时应用程序的网络影响有多大?
浏览器的下载速度并不像“它们”本身那么快,而是与任何其他应用程序一样快,并且它们会像任何其他应用程序一样影响系统的总带宽(参见问题 1 的答案)。
3) 在 Windows 中可以配置进程的优先级。难道不能以类似的方式设置网络优先级吗?那么 Mac 或 Linux 呢?(我知道一个第三方应用程序可以在 Windows 中设置网络优先级,但操作系统不支持?)
可以设置“网络”的“优先级”,但与设置进程优先级不同。设置“网络优先级”可能意味着几件事,例如设置一个 NIC 的优先级高于另一个 NIC(可以在 Win/Mac/Linux 中完成,也称为设置“网络接口指标”)。但是,如果您的目的是设置特定进程或“网络流量类型”的网络优先级,这称为“服务质量 (QoS)”并且也可以应用于 Win/Mac/Linux(尽管您的平台上 QoS 的设置和配置超出了这个问题/答案的范围)。QoS 允许您限制/评估分配给特定事物的带宽;例如,您可以设置 QoS 以允许在没有其他下载时为 torrent 下载提供最大带宽,然后当其他网络活动开始时自动将其限制为仅 5% 的总带宽分配,以确保您的 torrent 下载不会在您尝试查看电子邮件或观看 YouTube 时占用所有带宽(仅作为示例)。
4) 每个 IP 标头都有 TOS 字段,其中包括优先级设置。我听说大多数操作系统和路由器都忽略此字段。是真的吗?
这“服务类型”字段定义通过这些 2 个 RFC现在已经演变成所谓的“差异化服务代码点”。不是忽略,就像“未使用”一样。换句话说,仅仅因为数据包设置了字段并不意味着您(作为网络设备的实施者)必须真正“对它做任何事情”,ToS 是 QoS 的一部分,因此您的特定操作系统/设备必须支持 ToS/DS 字段。话虽如此,大多数操作系统/网络设备都具有一些功能,允许您通过某些 QoS 策略使用这些字段(至少我不知道有任何现代实例不有某种 QoS 实现)。
重申一下,没有“实时网络”这样的概念,相反,你会说“低延迟”(甚至“接近实时”),因为“实时”意味着保证按时交付所请求/实施的操作。你不能保证在网络上执行的任何操作都会有特定的 X 时间交付,相反,你可以说网络操作可以保证在给定节点上的延迟不会高于/低于 X。
我还建议阅读有关 QoS 的资料,因为根据您问题的背景,这似乎可能是您所追求的,而且 QoS 可能会根据您的需要变得复杂。
我希望这能有所帮助。