我在下载种子时遇到了一个非常奇怪的网络连接问题。在您得出结论说我应该“减少半开和用户连接的数量”之前,请允许我说我已经这样做了。(10 个半开连接,20 个用户,它仍然不起作用,我再也无法下载任何内容)。
我还应该说 QoS 不是必需的。通常根据我下载种子文件的经验(在 Linux/Windows 和 Mac 中),互联网连接由所有进程共享。在这里,种子文件似乎占用了所有可用带宽。(内核不应该在请求发送/接收包的进程之间分配时间吗?)
最后,我应该说,这个问题是在我更新到 slack 64bit v14(从 v13.37)后开始出现的。
因此,实际问题似乎与我开始使用 ktorrent 或 rtorrent 下载时 DNS 服务器没有响应有关。并且不再加载任何网页。torrent 将以合理的速度下载,但不会加载任何网站。因此“nslookup”和“dig”会告诉我未找到 DNS 服务器(顺便说一下,它位于同一台 PC 上):
nslookup facebook.com
;; connection timed out; no servers could be reached
和
nass@stargaze:~$ dig !$
dig facebook.com
; <<>> DiG 9.9.1-P3 <<>> facebook.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 26154
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;facebook.com. IN A
;; Query time: 1125 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Aug 2 01:14:46 2013
;; MSG SIZE rcvd: 41
在 torrent 运行时重新启动 dns 服务器 (bind) 通常不会解决问题,尽管有时我见过这种情况发生。停止 dns、删除生成的任何 *.jnl 文件并重新启动似乎有效,但同样,它可能并非总是有效。(对于这种情况,我没有重复的模式)。我不能说我找到了恢复互联网的“方法”。
- 通常关闭 ktorrent 并等待几秒钟就可以自行修复互联网问题。
- 其他时候,关闭 ktorrent 客户端并重新启动 dns 服务器会比以前的情况更快。
- 有时重复重启并不能使 DNS 恢复工作(但等待几分钟就可以解决这个问题)
- 最近我开始停止命名,删除 *.jnl 文件并重新启动它。这在我的(仅 2 次)试验中取得了 100% 的成功。
防火墙日志、/var/log/messages/ 和 named 的日志没有记录任何奇怪的内容。
我没有使用过 tcpdump、wireshark、netstat,所以我不知道是否可以使用这些工具来识别...某些东西!有人能帮忙吗?
由于此问题似乎主要与 DNS 服务器有关,因此我附加了我的 DNS 文件并稍微解释一下我的电脑的配置:
因此 ADSL 互联网接入调制解调器(由 ISP 提供,始终开启,即使我没有互联网时也是如此)。调制解调器通过 eth1 连接到这台电脑,我在那里下载种子。这台电脑是我的家庭网络和文件服务器(当我不在家时,它也是我的桌面 - 我使用 nx 连接)。它正在运行 iptables、dns 和 squid 服务器(以及其他服务器)。然后从这台电脑的 eth0 为 wifi 和内联网交换机供电。squid 在透明配置上运行,但它不应该干扰 torrent 流量,因为这是在不同的端口(而不是端口 80)上完成的。
因此,最初,我附加了我的 named.conf,以尝试获取有关它的反馈(也许是一些逻辑上错误的配置,未被 webmin 命名配置文件检查器捕获 - 我已多次验证 named.conf 文件在语法上是否正确)
named.conf 是这里
如果这样没问题的话,我是否可以在您的指导下开始使用 tcpdump(和任何其他工具)来收集可能导致这种情况的信息?
非常感谢您的帮助:)
编辑:我的 /etc/resolv.conf 看起来像:
domain skails.home
nameserver 127.0.0.1
答案1
(内核不应该在请求发送/接收包的进程之间分配时间吗?)
典型的情况是,当网络速度很慢或没有网络时,Bittorrent 之类的程序会占用你的网络空间传入您的上游流量(在大多数住宅连接中,通常低于下游流量)被挤占。因此传入的 TCP ACK 无法及时收到,并且他们的一端连接超时,最终您的一端也超时。
我从研究 QoS 中学到的一件事是,传入流量没有 QoS 这样的东西,因为您无法控制发送给您的内容。您实际上只能 QoS/划分/共享传出流量。您可以查看当前的 Linux QoS 配置tc
- 但请注意,tc
它非常复杂。
单个连接可能会耗尽您的传入带宽并挤占传入的 TCP ACK,从而导致速度变慢、丢失等。并发连接的数量实际上并不重要。
您可能需要将 Bittorrent 程序上传的总带宽设置为略低于最大上行带宽,例如低于您知道的上行速度 8Kbit/秒。您可能还需要查看奇迹塑造者如果您想深入了解 Linux 上的 QoS。
答案2
你的线索是这一行:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 26154
假设resolv.conf
仅包含127.0.0.1
,这告诉您缓存服务器已确定无法访问上游名称服务器或配置错误。此时,服务器将放弃与该域名通信时。这意味着该服务器被添加到了不合格域名服务器列表中。这与负面缓存,仅适用于NXDOMAIN
回应。
理所当然的是,一旦facebook.com
确定域名已失效,缓存域名服务器将不会再尝试解析它。现在您必须弄清楚为什么会发生这种情况。
假设您遇到了网络拥塞,并且facebook.com
不在缓存中。
named
将尝试循环遍历转发器列表,直到找到一个名称服务器,该名称服务器将响应除REFUSED
该记录之外的任何内容。NXDOMAIN
以及SERVFAIL
它将接受的响应。即使其他服务器会以不同的方式回答,您的服务器所关心的只是记录是否在缓存中,第一个有效的得到的响应。- 一旦找到答案,就会被缓存。无论好坏。
- 如果未能从任何一个人那里得到答复,
SERVFAIL
也将被视为失败。
对于您的特定测试,查询和响应会很小。UDP 没有与 TCP 相关的会话开销。要获得响应SERVFAIL
...
- 您收到的第一个有效回复是
SERVFAIL
针对该域名的。 - 所有转发器均无法联系。您无法从所有转发器获得响应。
唯一能确定发生了什么的方法是开始数据包捕获,然后重启名称服务器并分析数据包。您的某个转发器可能出现故障并SERVFAIL
频繁返回,或者您的拥塞非常严重,以至于针对整个转发器列表的八个小型 DNS 查找都失败了。