![流量控制软件会导致 tcp 数据包被丢弃吗](https://linux22.com/image/612139/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E8%BD%AF%E4%BB%B6%E4%BC%9A%E5%AF%BC%E8%87%B4%20tcp%20%E6%95%B0%E6%8D%AE%E5%8C%85%E8%A2%AB%E4%B8%A2%E5%BC%83%E5%90%97.png)
我正在使用流量控制软件 NetLimiter 测试我们的客户端-服务器应用程序。我发现,当客户端从服务器接收文件时,我使用 NetLimiter 通过连续单击按钮将下载速率设置为某个值(例如 50K/S)(要将速率从 0K/s 提高到 50K/s,每单击一次速率增加 1),然后传输将停止并且永远不会恢复,似乎服务器的一些控制数据包丢失了。
流量控制软件是否会拦截数据包并保留它们而不发送给我们的客户端,原因未知?流量控制软件是否会丢弃应该发送给我们客户端的 tcp 数据包?
[更多] 流量控制软件确实会中断传输,因为我们的服务器会向客户端发送一些控制数据包来控制传输,例如停止传输或启动传输。在测试过程中,我们发现“启动传输”控制数据包已到达网络接口卡,但我们的客户端没有收到该数据包(有一个 TCP 套接字)。
谢谢
答案1
简而言之,流量控制软件确实可以在调整流量时丢弃数据包。这对于 TCP 协议来说是可以的,因为 TCP 会负责确保丢失的数据包得到重新发送。
这流量整形 Wiki描述了一些用于调整流量的方法。有许多可用的算法,例如红色的,尾部丢弃和别的。
流量控制软件是否会因为未知原因拦截数据包并保留它们而不发送给我们的客户端?
它会在发送之前保留(排队)它们一段时间,以确保满足特定配置的速率。
流量控制软件会丢弃应该发送给我们客户端的 TCP 数据包吗?
是的,例如,您可能在两个网络之间路由,其中一个网络的速率为 50KB/s,而另一个网络的速率为 100KB/s。如果以 100KB/s 的速度连续发送到 50KB/s 网络上的主机,则数据包需要保留在路由器中以满足 50KB/s 的速率。由于内存有限且队列大小通常固定,因此您可能不得不开始丢弃数据包。丢弃数据包并不是一件坏事。TCP 旨在恢复。如果您将所有东西都排队,这可能是一件坏事,因为它会增加显著的延迟。因此丢弃数据包是明智的。
[更多] 流量控制软件确实会中断传输,因为我们的服务器会向客户端发送一些控制数据包来控制传输,例如停止传输或启动传输。在测试过程中,我们发现“启动传输”控制数据包已到达网络接口卡,但我们的客户端没有收到该数据包(有一个 TCP 套接字)。
我不想这么说,但听起来你的客户端服务器应用程序有问题。互联网上丢包是正常的预期行为。
丢失的是您的控制命令。听起来好像是软件错误吞噬了它们!