我只是想知道如果交换机丢失太多数据包会发生什么。我之所以问这个问题,是因为我的交换机经常超载。这是由于个人在网络上下载大文件造成的。我有一个备用交换机,以防这个交换机发生故障。
答案1
简短的回答是“不多”。就交换机上实际发生的情况而言,数据包丢失了 - 仅此而已。交换机除了记录数据包丢失的事实外,并不关心其他事情。
您将在下一节中准确了解导致数据包丢失的原因以及整个网络如何设计来处理这一问题。
再次强调,简而言之,对数据包丢失的响应是由客户端而不是交换机完成的。这是他们的责任,交换机对此的唯一控制是通过其队列配置和 QoS 等功能(它们只是优先处理流量,而不会阻止数据包丢失)。
交换机上发生了什么事?
交换机使用队列在进出它们的数据包之间留出少量缓冲。它们有点像缓存,具有许多类似的功能。通常,您希望数据包进入交换机并直接出站。这是最快的方式,但这并不总是可行的。
如果您有多个客户端聚集在缺少带宽的连接上,或者您通过较窄的带宽连接到目的地,则数据包的发送速度就无法像进入设备那样快。
额外的数据包将会堆积在交换机使用的队列中,希望这是一个数据包突发,并且在缓存完全填满之前数据包会更少,然后它就可以“赶上”自身。
如果缓存已满,则意味着任何其他进入的数据包都没有地方存储,这就是数据包被丢弃的地方 - 它们被简单地丢弃,直到队列中有足够的空间。
例子
一个真实的例子是办公室里的文件服务器。假设您有 48 个 100Mbps 连接和 2 个 1Gbps 连接(其中 48 个用于客户端,2 个千兆位绑定到服务器)。如果没有其他人尝试与服务器通信,那么客户端可以愉快地利用他们的完整 100mbps 连接(当然有开销)。但是,只要超过 20 个人想要访问已经是 2gbit 的文件服务器,第 21 个人就无法访问。
数据包将按照先到先得的原则添加到队列中,并使用交换机上配置的优先级设置进行释放 - 通常,当没有设置 QoS 等配置时,采用先进先出 (FIFO) 的方式。当此缓冲区变满(数据包太多)时,数据包将被完全丢弃,客户端必须意识到这一点并采取措施。
典型结果将导致available_bandwidth / (number_of_clients * bandwidth_of_clients)
平均吞吐量。其中每个客户端获得的速率与其与交换机的连接速度成正比。这与其说是一个确定性的设计决策,不如说是只要队列上有可用空间,数据包就会从任何一个端口发出的概率的结果。
网络流量会发生什么情况?
软件/硬件通信应识别数据包被丢弃的情况,并实施速率限制以减少尝试发送的数据量。当然,如果数据是 UDP(通常在实时应用程序中),则没有任何 ACK 消息,因此它不知道要进行任何速率限制。
速率限制通常是所有流量确定其可以发送的最快速度的方式。例如,在一个简单的网络中,您可能与路由器建立 1Gbit 连接,但上传速度只有 20Mbit,当您尝试发送超过该速度的数据包时,您的数据包将被丢弃,PC 将不会收到 ACK,并且会施加速率限制,使其与整个网络(包括互联网)到达目的地时可以达到的最大速度相匹配。
在 TCP 中Nagle 算法用于实施此速率限制,但在 UDP 连接中,结果可能是降低质量(例如视频流)或只是失败,但未能收到足够的数据必须明确来自目的地,而不是缺乏确认。