好的,现在我们已经启动并运行了,并且我们希望以九级速度运行。速度再快也不为过,对吧?
关于您可能合理期望的最大同步速率的非常粗略的指南,基于与 DSLAM/CO 的距离
0-12 千英尺 (0-3.6 公里)��� | ������2000 Kbps 或更高 (ADSL 最大 8100) |
12-16 千英尺 (3.6-4.6 公里)��� | ������1500 Kbps 到 1000 Kbps |
16-18 千英尺 (4.6-5.4 公里)��� | ������1200 Kbps 到 512 Kbps |
18-?? 千英尺 (5.4-?? 公里)��� | ������512 Kbps 到 �128 Kbps 或更低 :( |
可能有许多可以单方面影响这种情况的因素。更新一代的 DSL 肯定会改善这种情况,相关的技术如中继器也会如此。
这里的一个例外是,如果您必须经常处理高延迟连接。例如,如果您的提供商有一个卫星上行链路,该上行链路始终如一地增加异常延迟(250 毫秒或更长时间?)。那么,更大的 TCP 窗口可能会有所帮助。有关 TCP 接收窗口和相关问题的更多信息,请查看http://www.psc.edu/networking/perf_tune.html。
接收窗口是一个有助于控制数据流的缓冲区。如果设置得太低,它可能会成为瓶颈并限制吞吐量。此最佳值完全取决于您的带宽和延迟。延迟是您根据您的典型目的地和条件找到的平均往返时间 (RTT)。这可以通过 ping 来确定。例如,Linux 默认值 32KB 在高达 2 Mbps 的速度和约 125 毫秒的典型延迟,或 1.0 Mbps 和 250 毫秒的延迟下是可以接受的。将此值设置得太高也可能对吞吐量产生不利影响,因此不要过度。
新西兰 Juha Saarinen 提供的一个例子
常用的计算 tcp 缓冲区大小的公式是“带宽延迟乘积”公式
������缓冲区大小 = 带宽 (bits/s) * RTT (秒)
就我而言,我大约有 8Mbps 的下游带宽,但 ATM 网络只能支持约 3.5Mbps 的持续带宽。我离世界其他地方很远,所以为了挤入足够数量的 1,500 字节数据包,平均 RTT 为 250 毫秒,我可能应该有一个 (3,500,000/8)*.25 = 106KB 的缓冲区。(我现在有 128KB,效果很好。)
接收窗口可以在 /proc 文件系统中动态设置。这需要输入一个值为所需缓冲区大小两倍的值
#echo 262144 > /proc/sys/net/core/rmem_default #echo 262144 > /proc/sys/net/core/rmem_max |
上面的例子实际上将值设置为 128K。发送窗口也可以设置,但在 DSL 连接上,它不太可能成为像接收窗口那样的限制因素
#echo 262144 > /proc/sys/net/core/wmem_default #echo 262144 > /proc/sys/net/core/wmem_max |
这些值也可以使用 sysctl 命令设置。请参阅手册页。
对于那些想要从铜线中挤出最后一点性能的用户,还有其他建议的内核选项(仅选择条目)
# sysctl -a net.ipv4.tcp_rfc1337 = 1 net.ipv4.ip_no_pmtu_disc = 0 net.ipv4.tcp_sack = 1 net.ipv4.tcp_fack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_ecn = 0 |
这些选项和其他选项的简要说明可以在以下位置找到/usr/src/linux/Documentation/networking/ip-sysctl.txt,在内核源代码目录中。
交织是一个可调整的参数,可以由电信公司打开或关闭。许多电信公司似乎喜欢默认情况下开启此功能,因为它可能会减少在确实有助于稳定线路的情况下技术支持的电话。但其他所有人都为此付出了代价。
DSL 连接在某些情况下可能会出现性能下降。值得庆幸的是,Linux 拥有非常强大和灵活的网络工具来帮助我们应对这些问题。
这种影响可以在很大程度上通过 Linux 内置的流量整形能力来缓解。用于操作内核高级流量路由功能的用户空间工具是 iproute,有时打包为 iproute2。这包括各种工具,可以相当灵活地对流量进行分类和优先级排序。它还需要打开各种内核配置选项。并且也相当接近黑魔法 ;-) 关于此的权威文档是高级路由和流量控制 HOWTO (https://tldp.cn/HOWTO/Adv-Routing-HOWTO.html)。特别注意 “食谱” 第 15 节,特别是第 15.8 节,“终极流量调节器:低延迟、快速上传和下载”。非常值得一读!
如果您根本没有同步或完全无法连接,请阅读本节。有关解释调制解调器 LED 指示灯的信息,请参阅调制解调器的用户手册。(如果未同步,许多调制解调器会显示稳定的红色(或橙色)指示灯。)
这里的症状是:NIC 未被识别、模块无法加载,或者 ifconfig 显示接口未启动,或者正在生成大量错误等。
在 BIOS 中关闭即插即用。这可能被标记为“非 Microsoft 操作系统”或类似名称。这里有时出现的症状是 NIC 被分配了 IRQ 0。或者可能出现类似于“资源暂时不可用”的错误消息。
查看制造商的网站以获取 Linux 文档。或者查看 Donald Becker 的信息丰富的网站,网址为http://www.scyld.com/network/。
据报告,某些 Linux NIC 驱动程序作为非模块化驱动程序效果更好。换句话说,将它们编译到内核中,而不是作为模块。
卡也可能是坏的,或者驱动程序只是不合格。尝试另一张卡。并且您也不一定需要昂贵的高质量卡。
确保您知道您的 ISP 正在使用的协议。他们是否正在使用 DHCP?PPPoX?您必须弄清楚这一点至关重要。您可能必须咨询技术支持。
查看/var/log/messages看看那里是否有任何有用的线索。此外,在尝试启动连接时运行 tcpdump。tcpdump 输出相当隐晦,但您应该能够确定是否完全没有响应。
Roaring Penguin 具有非常好的调试输出,其中包含各种系统信息,甚至还有纠正问题的技巧。请参阅文档以了解如何开启此出色的功能。
如果调制解调器是从 ISP 以外的来源购买的,则可能是错误的调制解调器类型。例如,SDSL 需要 SDSL 调制解调器。此外,对于 ADSL,有 CAP 和 DMT 编码,它们彼此不兼容。
降低的同步速率和 DSL 信号中断可能会导致各种问题。显然,在这些条件下,您永远无法获得最大吞吐量。但是,症状并不总是明显地表明问题是在您这边还是在提供商那边。
例如,不良的室内线路连接可能会导致丢包的数据包重传。这确实会降低吞吐量并减慢连接速度。很容易将丢包视为传统的网络问题,但对于 DSL 而言,它可能是线路不良、信号受损甚至调制解调器本身造成的。
请参阅上面关于将调制解调器原封不动地移动到 NID,从而绕过所有室内布线的章节。如果在那里情况有所改善,那么问题出在内部的某个地方。如果不是,则是电信公司的问题。
RFI 猎熊:DSL 信号很脆弱。有很多因素会降低信号质量。来自家庭/办公室内部和周围来源的 RFI 或射频干扰是导致信号强度降低、间歇性同步丢失、低同步速率和高线路错误率的常见原因之一,这些错误率会导致重传并减慢速度。DSL 频率恰好位于易受许多潜在 RFI 源影响的范围内。我们这里的测试工具只是一台便携式 AM 收音机。将其调到您可以清晰接收的任何频道 - 在哪里都无关紧要。AM 收音机将接收与 DSL 信号频率范围相同的 RFI。听起来像是“煎培根”类型的静电。将其放在计算机的电源上。您应该听到一些静电。将其移开,静电应很快消失。这将使您了解 RFI 的声音。一个质量不错的电源应该只会产生微弱的 RFI - 可能不足以引起问题。像盖革计数器一样使用收音机,并在调制解调器和 DSL 线路周围移动它。如果您听到静电,请沿着它找到源头。需要怀疑的事物:电源、变压器、镇流器、电动机、调光开关、高强度照明。移动调制解调器或重新布线有时就足够了。尽可能缩短调制解调器和墙壁插孔之间的线路也是一个好主意。
长期同步问题通常是由于某处的线路问题造成的。有时它就像一个坏的拼接或腐蚀的插孔一样简单,如果可以找到,很容易补救。大多数此类情况都可以由优秀的电信技术人员隔离。请咨询您的提供商,如果需要,请礼貌地骚扰他们。如果您被敷衍了事,请要求越过他们的头顶。
如果您接近 DSL 的距离限制,并且遇到断断续续的同步问题,请尝试“Homerun”安装。请参阅上面。这可以有效地改善边缘信号/同步条件。
如果使用浪涌保护器,请尝试在不使用浪涌保护器的情况下使用。有些可能会干扰 DSL 信号。
另一种可能性是附近的 AM 广播电台或非法业余无线电操作员正在干扰 DSL 信号,因为它们在相似的频率范围内运行。这些可能只在一天中的某些时间引起问题,例如当电台在晚上增强其信号时。优秀的电信 DSL 技术人员可能能够帮助最大限度地减少这种情况的影响。YMMV(您的里程可能会因情况而异)。
如果您的连接已建立,但遇到吞吐量问题,请阅读本节。换句话说,您的速度与您的比特率计划以及您与 CO 的距离不符。“网络”此处指的是 WAN - ISP 的网关和本地子网/骨干网等。请记住,边缘线路可能会导致同步速率降低,这将影响吞吐量。请参阅上面。
我们将要寻找的两个因素是“延迟”和“丢包”。两者都非常容易使用标准网络工具 ping 和 traceroute 跟踪。如果我们的路径中发生任何一种情况,它们都会影响性能。延迟意味着“响应速度”或“滞后时间”。实际上,我们感兴趣的是异常高的延迟,因为总是存在一些延迟。丢包是指数据包在途中某处被丢弃。TCP/IP 将知道它已“丢失”,并且将重传丢失的数据。这种情况发生得太多真的会减慢速度。理想情况下,丢包率应为 0%。
我们真正需要关注的是我们经常遍历的 WAN 路由部分。如果您对几个不同的站点执行 traceroute,您可能会看到前几个“跳”往往是相同的。这些是您的 ISP 的本地骨干网和您的 ISP 的上游提供商的网关。其中任何一个出现问题,都会影响您去的任何地方和您做的任何事情。
我们可以通过 ping 两到三个不同的站点来开始查找丢包和延迟,希望至少在几个不同的方向上。我们将寻找丢包和/或异常高的延迟。
$ ping -c 12 -n www.tldp.org PING www.tldp.org (152.19.254.81) : 56(84) bytes of data. 64 bytes from 152.19.254.81: icmp_seq=0 ttl=242 time=62.1 ms 64 bytes from 152.19.254.81: icmp_seq=1 ttl=242 time=60.8 ms 64 bytes from 152.19.254.81: icmp_seq=2 ttl=242 time=59.9 ms 64 bytes from 152.19.254.81: icmp_seq=3 ttl=242 time=61.8 ms 64 bytes from 152.19.254.81: icmp_seq=4 ttl=242 time=64.1 ms 64 bytes from 152.19.254.81: icmp_seq=5 ttl=242 time=62.8 ms 64 bytes from 152.19.254.81: icmp_seq=6 ttl=242 time=62.6 ms 64 bytes from 152.19.254.81: icmp_seq=7 ttl=242 time=60.3 ms 64 bytes from 152.19.254.81: icmp_seq=8 ttl=242 time=61.1 ms 64 bytes from 152.19.254.81: icmp_seq=9 ttl=242 time=60.9 ms 64 bytes from 152.19.254.81: icmp_seq=10 ttl=242 time=62.4 ms 64 bytes from 152.19.254.81: icmp_seq=11 ttl=242 time=63.0 ms --- www.tldp.org ping statistics --- 12 packets transmitted, 12 packets received, 0% packet loss round-trip min/avg/max = 59.9/61.8/64.1 ms |
上面的例子从这里来看非常正常。(您可能到此站点的路由非常不同,因此您的结果可能会大相径庭。)显然没有会减慢我速度的严重潜在问题。下面的例子揭示了一个问题
$ ping -c 20 -n www.debian.org PING www.debian.org (198.186.203.20) : 56(84) bytes of data. 64 bytes from 198.186.203.20: icmp_seq=0 ttl=241 time=404.9 ms 64 bytes from 198.186.203.20: icmp_seq=1 ttl=241 time=394.9 ms 64 bytes from 198.186.203.20: icmp_seq=2 ttl=241 time=402.1 ms 64 bytes from 198.186.203.20: icmp_seq=4 ttl=241 time=2870.3 ms 64 bytes from 198.186.203.20: icmp_seq=7 ttl=241 time=126.9 ms 64 bytes from 198.186.203.20: icmp_seq=12 ttl=241 time=88.3 ms 64 bytes from 198.186.203.20: icmp_seq=13 ttl=241 time=87.9 ms 64 bytes from 198.186.203.20: icmp_seq=14 ttl=241 time=87.7 ms 64 bytes from 198.186.203.20: icmp_seq=15 ttl=241 time=85.0 ms 64 bytes from 198.186.203.20: icmp_seq=16 ttl=241 time=84.5 ms 64 bytes from 198.186.203.20: icmp_seq=17 ttl=241 time=90.7 ms 64 bytes from 198.186.203.20: icmp_seq=18 ttl=241 time=87.3 ms 64 bytes from 198.186.203.20: icmp_seq=19 ttl=241 time=87.6 ms --- www.debian.org ping statistics --- 20 packets transmitted, 13 packets received, 35% packet loss round-trip min/avg/max = 84.5/376.7/2870.3 ms |
高丢包率,达到 35%,并且其中一些往返时间非常慢。对此进行一些挖掘表明,问题在于 traceroute 中 13 跳的骨干路由器。虽然这使得从这里访问此站点非常慢,但它只会影响那些恰好命中同一路由器的路由。现在真正会伤害我们的是,如果类似的事情发生在我们倾向于始终通过的路由器上。例如我们的网关,或者也可能是第二跳路由器。使用 traceroute 找到这些,只需选择一个随机站点
$ traceroute www.bellsouth.net traceroute to bellsouth.net (192.223.22.134), 30 hops max, 38 byte packets 1 adsl-78-196-1.sdf.bellsouth.net (216.78.196.1) 14.86ms 7.96ms 12.59ms 2 205.152.133.65 (205.152.133.65) 7.90ms 8.12ms 7.73ms 3 205.152.133.248 (205.152.133.248) 8.99ms 8.52ms 8.17ms 4 Hssi4-1-0.GW1.IND1.ALTER.NET (157.130.100.153) 11.36ms 11.48ms 11.72ms 5 125.ATM3-0.XR2.CHI4.ALTER.NET (146.188.208.106) 14.46ms 14.23ms 14.40ms 6 194.at-1-0-0.TR2.CHI2.ALTER.NET (152.63.65.66) 16.48ms 15.69ms 16.37ms 7 126.at-5-1-0.TR2.ATL5.ALTER.NET (152.63.0.213) 65.66ms 66.18ms 66.39ms 8 296.ATM6-0.XR2.ATL1.ALTER.NET (152.63.81.37) 66.86ms 66.42ms 66.40ms 9 194.ATM8-0.GW1.ATL3.ALTER.NET (146.188.233.53) 67.87ms 68.69ms 69.63ms 10 IMVI-gw.customer.ALTER.NET (157.130.69.202) 69.88ms 69.25ms 69.35ms 11 www.bellsouth.net (192.223.22.134) 68.74ms 69.06ms 68.05ms |
第一跳是网关。事实上,对我来说,前两跳总是相同的,并且前三或四跳通常是相同的。因此,这些中的任何一个出现问题都可能导致我去任何地方都出现问题。(您自己情况的具体情况可能与此示例略有不同。)一个“正常”网关 ping(对我来说正常!)
$ ping -c 12 -n 216.78.196.1 PING 216.78.196.1 (216.78.196.1) : 56(84) bytes of data. 64 bytes from 216.78.196.1: icmp_seq=0 ttl=64 time=14.6 ms 64 bytes from 216.78.196.1: icmp_seq=1 ttl=64 time=15.4 ms 64 bytes from 216.78.196.1: icmp_seq=2 ttl=64 time=15.0 ms 64 bytes from 216.78.196.1: icmp_seq=3 ttl=64 time=15.2 ms 64 bytes from 216.78.196.1: icmp_seq=4 ttl=64 time=14.9 ms 64 bytes from 216.78.196.1: icmp_seq=5 ttl=64 time=15.3 ms 64 bytes from 216.78.196.1: icmp_seq=6 ttl=64 time=15.4 ms 64 bytes from 216.78.196.1: icmp_seq=7 ttl=64 time=15.0 ms 64 bytes from 216.78.196.1: icmp_seq=8 ttl=64 time=14.7 ms 64 bytes from 216.78.196.1: icmp_seq=9 ttl=64 time=14.9 ms 64 bytes from 216.78.196.1: icmp_seq=10 ttl=64 time=16.2 ms 64 bytes from 216.78.196.1: icmp_seq=11 ttl=64 time=14.8 ms --- 216.78.196.1 ping statistics --- 12 packets transmitted, 12 packets received, 0% packet loss round-trip min/avg/max = 14.6/15.1/16.2 ms |
以及在不同的一天同一网关出现问题
$ ping -c 12 -n 216.78.196.1 PING 216.78.196.1 (216.78.196.1) : 56(84) bytes of data. 64 bytes from 216.78.196.1: icmp_seq=0 ttl=64 time=20.5 ms 64 bytes from 216.78.196.1: icmp_seq=3 ttl=64 time=22.0 ms 64 bytes from 216.78.196.1: icmp_seq=4 ttl=64 time=21.8 ms 64 bytes from 216.78.196.1: icmp_seq=6 ttl=64 time=32.0 ms 64 bytes from 216.78.196.1: icmp_seq=8 ttl=64 time=21.7 ms 64 bytes from 216.78.196.1: icmp_seq=9 ttl=64 time=42.0 ms 64 bytes from 216.78.196.1: icmp_seq=10 ttl=64 time=26.8 ms --- adsl-78-196-1.sdf.bellsouth.net ping statistics --- 12 packets transmitted, 7 packets received, 41% packet loss round-trip min/avg/max = 20.5/25.6/42.0 ms |
41% 的丢包率非常高,以至于许多服务(如 HTTP)都戛然而止。那些正在工作的服务,工作速度非常非常慢。
在这个最后的真实示例中,很容易让人认为这个网关路由器出现故障。但是,事实证明,这是电信网络 DSLAM/ATM 段中出现问题的结果。因此,任何第一跳出现丢包或高延迟的问题,实际上都可能是第一跳之前发生的事情的结果。我们只是没有足够的工具来充分隔离它的起始位置。丢包可能是电信公司的问题,就像 ISP/NSP 问题一样。或者可能甚至是调制解调器问题。在这种情况下,请尝试通过断电和拔下/重新插入 DSL 电缆(从墙壁插孔)来重置调制解调器。
调制解调器本身也很可能导致丢包。这里的解决方法是重启调制解调器,并通过拔下 DSL 连接 30 秒左右来重新同步。事实上,连接的任何部分都可能是丢包的来源——调制解调器、DSLAM、ATM 网络等。
如果您确实在 ISP 的网络中发现了问题,那么是时候向技术支持报告问题了。
网络上散布着许多测试站点。 有些比其他的更好,但对这些测试要持保留态度。 这些测试存在太多变量,无法可靠地为您提供连接和吞吐量的准确快照。 它们可能会给您一个大致的了解,即您是否处于您认为应该达到的范围附近。 一个不错的速度测试是http://www.dslreports.com/stest/0。 另一个测试是 http://speedtest.mybc.com/ (两者都是 Java)。 我发现这些比其他一些要好。
现在请记住,我们受到大约 10-20% 网络开销规则的限制,这里有一个例子。 我的速度上限为 1472 Kbps 同步速率。 减去约 15% 就是 1275 Kbps。 我的同步速率已知良好,并且我到 CO(中心局)的距离约为 11,000 英尺,这足够近,我应该能够达到 1275 Kbps 或大约 1.2-1.3 Mbps 的实际最大吞吐量 —— 在所有其他条件相同的情况下。 来自 dslreports.com 速度测试
Test running..Downloaded 60900bytes in 5918ms Downloaded 696000bytes in 4914ms First guess is 1133kbps fairly fast line - now test 2mb Downloaded 1679100bytes in 11090ms Upload got ok 1 bytes uploaded Uploaded 1bytes in 211ms Upload got ok 1 bytes uploaded Uploaded 1bytes in 205ms Upload got ok 1 bytes uploaded Uploaded 1bytes in 207ms Upload got ok 50000 bytes uploaded Uploaded 50000bytes in 2065ms Upload got ok 100000 bytes uploaded Uploaded 100000bytes in 3911ms ** Speed 1211(down)/215(up) kbps ** (At least 24 times faster than a 56k modem) Finish. |
1.211 Mbps 可能是我根据我的服务可以合理期望的最佳效果。 我没有理由去进行故障排除或寻找调整。
重要提示:我的 ISP 使用缓存代理服务器来缓存网页。 这对于这些基于网络的测试来说是一个很大的均衡器。 如果没有它,我在这个测试中肯定会慢得多。 代理的效果是您实际上是在测试来自代理的吞吐量 —— 而不是测试站点。 仅供参考。 另一个注意事项:同时我尝试了另一个测试站点,并且始终如一地获得 600-700 Kbps。 因此,YMMV(您的里程可能会因人而异) 与这些测试。 (通常我在每个测试中得到的结果大致相同。) 计时从两个不同站点下载大型 ftp 文件,我计算出大约 1.25 Mbps。