使用 uTorrent 时,DNS 会定期停止响应。
该问题似乎与带宽使用过多无关(从路由器到计算机都如此),但可能与路由器提供的某种形式的防洪保护有关(路由器的传入连接数超过 Windows 所能接受的数量)。
我如何使网络正常工作(当然,同时仍然能够使用 uTorrent)?
答案1
bittorent 客户端积极与同伴建立联系... 一些路由器将其解释为 syn-flood。
打开连接
当 uTorrent 加载且上传/下载暂停(而非停止)时,它会与您的同伴保持开放连接。与此同时,互联网上的大量同伴仍会尝试连接到您,以查明您是否拥有他们想要的数据。
最终,您将达到操作系统规定的开放连接限制(在 Windows 7 中为 10 个连接),并且来自新客户端的连接将开始在您的路由器上排队。
排队的客户端会积极检查是否有空闲连接。这种积极轮询可能会被路由器解读为 syn-flood 攻击。
解决方案
- 将 bittorent 软件中的半开连接限制降低到操作系统规定的连接限制以下
- 在路由器/调制解调器上禁用 IP 洪水保护。
带宽饱和
此外,由于 uTorrent(或任何批量流量)连接不受限制地运行,上传(可能还有下载)管道将达到满负荷状态,从而迫使一些“维护”流量退居次要地位,最终降低网络实用性。
以下是一个例子:
- 高速下载(torrent或其他)使下游链路饱和。
- 用户尝试浏览最近未访问过的站点。计算机生成所需站点的 DNS 信息请求。请求“上传”到 DNS 服务器成功(上游管道访问不受质询)。
- DNS 服务器做出响应(或尝试做出响应),但由于下载管道已充满下载内容,因此响应在尝试到达用户的机器时被挂起,并且必须丢弃某些内容,而下载对于保持速度非常积极,因此 DNS 响应会被丢弃(在到达本地路由器之前的某个时间点)。
如果上传不受限制,也会发生同样的事情。上传饱和后,称为 TCP-ACK 的数据包(发送为“嘿,我成功获取了数据包 xyz”类型的响应)会挂起,导致下载陷入停顿,从而导致网页浏览变得非常不连贯。
解决方案
- 确定您的连接的最大容量(分别表示上传和下载),并将批量传输客户端的最大速度设置为不超过该速度的 80%。这将为 DNS 和 TCP-ACK 数据包等留下“余地”,以绕过批量流量并快速处理。
- 使用可以处理流量整形的路由器,这样某些流量(DNS、IMCP Ping、TCP-ACK)可以优先于其他形式的流量,而某些形式的流量(特别是 torrent)可以降低优先级。这是我首选的方法。这可以带来额外的好处,即当高优先级流量不挑战 torrent 流量时,整个上行和下行管道可用于 torrent 流量。
- 使用 1 和 2 的某种组合来抑制“行为不端”的流量。
答案2
当我有这样的事情时,Wireshark是我最好的朋友。
但首先我们最好认识到以下三件事:
ping 工作并不意味着 DNS(或任何其他服务)工作,反之亦然。
这是因为 ping 使用完全不同的协议(ICMP,而 DNS 使用 IP 以及 UDP 和 TCP 的组合),在完全不同的网络模型级别上。从您的个人防火墙到路由器数量,再到运行服务的实际主机,途中的任何事物都可能配置为丢弃其中一个,而不会丢弃另一个(无论是管理员的偏执还是某些故障情况),尽管这种情况通常发生在 ICMP 而不是其他方面
一般来说,最好弄清楚是您的(DNS)请求还是回复丢失了。
好吧,您使用的特定程序应该可以让您清楚地了解这一点,但一般来说,在 Wireshark GUI 中自己查看会更容易:)
正如我所提到的,DNS 通常使用 UDP 来传递请求和响应的内容。
与其兄弟 TCP 相比,UDP 的定义方式如下:没有保证 数据包将被传送,路由器无需(也不能)通知您有关失败的信息。(这是对 UDP 的另一个功能的牺牲:它非常快。路由器不必保留有关发送方或数据包顺序的任何信息,它们只是快速传递它并忘记。它们甚至可以非常安全地赋予它们比 TCP 更高的优先级。)
通常我做的第一件事是:
- 启动 Wireshark
- 单击捕获选项
- 对于捕获过滤器,请设置
host 1.2.3.4
以确保您仅捕获您与 1.2.3.4 之间的流量 - 开始捕获
- 一旦你以这种方式启动,尝试你的命令
但是,根据您上次的更新:我不了解这款软件,但我肯定会怀疑 uTorrent 客户端。应用程序可能会发送过多的 UDP,例如,您的家用路由器达到某个限制,然后它开始丢弃 UDP 数据包。
答案3
我会尝试GRC 的 DNS 基准测试工具。它会测试您配置使用的 DNS 服务器以及许多其他 DNS 服务器。它不仅测试它们的速度,还测试它们的可靠性。它是免费的,不需要安装(但它仅适用于 Windows)。这些页面上也有很多关于 DNS 的有用信息。