V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nifury
V2EX  ›  宽带症候群

下载是如何吃掉带宽的?

  •  
  •   nifury · 2016-08-17 08:39:38 +08:00 · 6772 次点击
    这是一个创建于 3022 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有这么几个问题:
    1 、比如开迅雷下载满速的时候,网页打开会变得特别慢,这是为什么呢?
    (1) 网页新开链接,由于 TCP 慢启动,而迅雷链接的窗口已经扩大?
    (2) ADSL 下载会限制上行导致 ACK 发送缓慢?(我现在用光纤很少达到满速,不知道会不会影响网页打开速度)

    2 、之前用过 cfosspeed ,打开网页的速度就正常了,为什么呢?(大概是驱动 qos 什么的?不懂,无所谓啦)

    3 、对客户端来说,带宽是如何分配的呢?假如入口带宽足够的情况下
    比如看网页视频只有一个链接在接收数据,而迅雷开了 4 个链接在下载,于是 100M 带宽被均分成 20M ?但是为何通常迅雷能达到满速呢?

    4 、突然想到的,迅雷不是自带网速保护功能保证上网速度么?在没有加载驱动的情况下(迅雷貌似没有加驱吧)迅雷如何得知浏览器是否需要网速?( hook send, recv?)
    35 条回复    2016-08-31 00:35:20 +08:00
    tcp
        1
    tcp  
       2016-08-17 08:40:57 +08:00 via iPhone
    水管就那么大…
    Laynooor
        2
    Laynooor  
       2016-08-17 09:12:11 +08:00 via Android
    自从上行带宽大了后,迅雷满速下东西的同时也可以愉快地开网页打游戏了,延迟也很稳定不波动
    nifury
        3
    nifury  
    OP
       2016-08-17 09:18:53 +08:00
    @tcp 嗯我知道呀~我是说水流如何分配的呢?
    suduo1987
        4
    suduo1987  
       2016-08-17 09:54:15 +08:00
    @nifury 关键是迅雷不仅下,它还上.而我国宽带资源上下一般是非对等的.
    Baymaxbowen
        5
    Baymaxbowen  
       2016-08-17 09:56:52 +08:00 via Android
    开迅雷下东西,家里电视都得转菊花
    mhqschen
        6
    mhqschen  
       2016-08-17 10:08:48 +08:00   ❤️ 2
    LZ 想要专业点的回答,可惜楼上净在撤别的。。
    liuxu
        7
    liuxu  
       2016-08-17 10:17:15 +08:00
    楼主是想问,同样是连接,凭什么迅雷就能抢 http 的网速。
    txydhr
        8
    txydhr  
       2016-08-17 10:24:20 +08:00 via iPad
    因为迅雷建立的连接数不止 4 个,热门点的往往上百,远远大于浏览器。
    imn1
        9
    imn1  
       2016-08-17 10:31:20 +08:00
    我的 dd-wrt 上的脚本
    echo "16384" > /sys/module/nf_conntrack/parameters/hashsize

    prefix=/proc/sys/net/ipv4/netfilter/ip_conntrack

    echo 300 > $prefix_generic_timeout
    echo 60 > $prefix_udp_timeout
    echo 30 > $prefix_udp_timeout_stream

    echo 1800 > $prefix_tcp_timeout_established
    echo 120 > $prefix_tcp_timeout_syn_sent
    echo 60 > $prefix_tcp_timeout_syn_recv
    echo 30 > $prefix_tcp_timeout_fin_wait
    echo 30 > $prefix_tcp_timeout_time_wait
    echo 30 > $prefix_tcp_timeout_close
    echo 30 > $prefix_tcp_timeout_close_wait
    echo 15 > $prefix_tcp_timeout_last_ack

    其中几个 wait 值根据自己需要调优,玩 P2P 都是必须的,不然机器就会大量阻塞
    自己调优吧,也不是个个路由器都适合用这个

    如果你的网卡和路由器都是壕级,可以忽略跳过
    zhujinliang
        10
    zhujinliang  
       2016-08-17 10:40:09 +08:00 via iPhone
    就好比卖票就一个窗口(网卡缓冲区),大家排队买票,你自己一个人去排队,敌方派 100 人去排队。。。
    hellov22ex
        11
    hellov22ex  
       2016-08-17 11:14:26 +08:00
    用好点的 QOS ,现在满速下载延时最多从 8 变成 12.
    jasontse
        12
    jasontse  
       2016-08-17 11:26:37 +08:00 via iPad
    @imn1
    现在的路由器内存很大普遍 64M 往上改这个没大用。

    迅雷可能是通过计算带宽最大值然后收敛一点
    bazingaterry
        13
    bazingaterry  
       2016-08-17 11:43:44 +08:00
    估计是连接数的问题,调小之后就感觉就算跑满了还是能上网的。不过还是等待老司机解答一下。
    KevinChan
        14
    KevinChan  
       2016-08-17 11:47:57 +08:00 via iPhone
    上行占用太大了
    imn1
        15
    imn1  
       2016-08-17 11:52:06 +08:00
    @jasontse
    是的,我的路由器是世纪初产品了,连 ipv6 都没有
    不过 timeout 等等还是有需要的,连接数太多(阻塞),还是吃 CPU 的,还有洪水问题
    这个脚本是 dd-wrt 官方提供的脚本,然后我自己修改适合自己使用的,不玩 p2p 也没必要用
    goodryb
        16
    goodryb  
       2016-08-17 13:28:47 +08:00
    我觉得楼主 搜索一下 迅雷+LSP ,四个问题都解决了
    hyq
        17
    hyq  
       2016-08-17 14:00:22 +08:00
    我觉得是路由器处理不过来,我现在开着迅雷,玩游戏都不卡。
    以下是我的不靠谱猜测
    普通 http 不到 10 个链接,迅雷开了 1000 个链接,路由器如果平均分配 cpu 时间, http 只能抢到 1%的资源。
    kumiko
        18
    kumiko  
       2016-08-17 14:09:02 +08:00
    比如我打守望先锋,平时延迟只有 7ms
    开了 utorrent 下载后,下载速度 10MBps (宽带是 200mb,所以下载速度没有满)
    但游戏的延迟已经变成 300 多了
    fcicq
        19
    fcicq  
       2016-08-17 14:09:29 +08:00   ❤️ 1
    只回答 1.
    正常的 TCP 流量控制算法都是链接均分也就是公平的(只能从别处另行限制), 从多连接下载等效于丢包时缩减窗口量变为 1/N, 如果是多主机多链接的话好处更多.
    ACK 的话 RFC4341 说每组包应当返回 1-2 个 ACK. 间接可以算出最低上传带宽来. 一般的 QoS 都是 ACK 优先, 发完 ACK 还剩下多少可想而知...
    nifury
        20
    nifury  
    OP
       2016-08-17 16:00:16 +08:00
    @fcicq @hyq 谢谢~~

    @goodryb 迅雷没有动 LSP (至少我用的版本如此), cfosspeed 是加驱的,这个我能确定
    popok
        21
    popok  
       2016-08-17 16:49:18 +08:00 via iPhone
    @sakuyamaij 你的网络肯定适配到百兆模式了,不然你 200 兆的带宽,为何只能跑 10M 每秒?
    Halry
        22
    Halry  
       2016-08-17 16:52:22 +08:00
    软路由没压力
    txydhr
        23
    txydhr  
       2016-08-17 17:02:07 +08:00 via iPhone
    @imn1 换路由器吧,就是路由器的锅,现在的宽带维持一个迅雷,一个游戏不卡,带宽绝对是够的。
    kumiko
        24
    kumiko  
       2016-08-17 17:13:56 +08:00
    @popok 233做种的不给力我也没有办法啊
    imn1
        25
    imn1  
       2016-08-17 17:40:41 +08:00
    @txydhr
    又不是我有问题,我换什么?我今天还下了 70+G
    txydhr
        26
    txydhr  
       2016-08-17 18:37:19 +08:00 via iPhone
    @imn1 点错了至于么?
    ragnaroks
        27
    ragnaroks  
       2016-08-17 18:47:39 +08:00
    我用的是极路由刷的梅林,里面有个小包优先,开启之前一下载游戏(csgo)基本处于卡死状态,开启后顶多上升 5ms(15ms->20ms)
    ragnaroks
        28
    ragnaroks  
       2016-08-17 18:48:02 +08:00
    对了,这个好像对浏览网页之类的无效,网页还是卡
    datocp
        29
    datocp  
       2016-08-17 20:22:13 +08:00   ❤️ 2
    1,首先家用网络跟企业带宽的最大一个区别就是并发数有限制。像家里用的电信 8M 光纤大概在 1500 个左右的并发数。
    2,控制流量有直接对流量进行控制,看不见的使用并发限制对流量进行控制,所以一旦超过 1500 个左右的并发,那么电信局端开始丢包,那么 tcp 的 3 次握手过程就无法建立,那么流量自然会被抑制。
    3,其它的可能设备本身的固件优化就限制了并发的连接,甚至电信有意无意的提供有问题的固件。曾经就在 ADSL 时代使用过电信送的 ADSL modem 上海贝尔吧,这 modem 的特点就是一旦使用 p2p 程序流量就开始自动波动。。。后来刷 tplink 的固件解决。

    4,迅雷跟 QQ 旋风有很大差别,迅雷随便就是 1200+并发数,而 QQ 旋风才只有 400+左右。从平时观察的经验来看,显然迅雷发起了很多无意义的并发数。甚至一个设计不合理的 QOS 规则会导致连路由管理界面都无法打开。。。

    5,9 楼提供的针对 tcp udp 的连接消亡控制是有意义的,它能有效的让一些不必要的连接快速消亡,但是显然不主动控制,这些默认的消亡时间还是不够快。

    5,所以问题就在如何控制并发数量在 1500 以下。
    ddwrt 提供了一种非常有效的针对特定 ip 抑制并发的方法
    https://www.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks
    最终的例子就变成
    a.使用 limit 对源 ip 192.168.1.2 发往外界的并发数进行匹配发送,抑制了发送的包,自然根据 tcp 的握手过程抑制了接收的包。 limit 非常平滑不像 connlimit 一样会直接造成网络断开,更丰富的控制选项可能就是 hashlimit 了
    b.规则 1 规则 2 对网页浏览端口和其它端口进行自上而下的区分,似乎简单的 iptables 规则的上下排序就能解决迅雷问题。总共有 100 包,每秒相应可以产生 60 包,这个 limit 的解释还是比较晕,自己 google 吧
    c.规则 3 抑制 icmp 包的生成,似乎在一些 p2p 环境确认有用。
    d.规则 4 规则 5 对剩余的过量的包用 REJECT 进行快速丢弃, 9 楼的 timeout 消亡设置就有快速的回应效果了
    e.规则 6 剩余的其它包只能丢弃处理了。
    a="`iptables -vnL FORWARD --line-numbers | grep "PMTU" | cut -c1-5` - 1";a=`expr $a`
    规则 6 iptables -I FORWARD $a -s 192.168.1.2 -j DROP
    规则 5 iptables -I FORWARD $a -s 192.168.1.2 -p udp -j REJECT --reject-with icmp-proto-unreachable
    规则 4 iptables -I FORWARD $a -s 192.168.1.2 -p tcp -j REJECT --reject-with icmp-proto-unreachable
    规则 3 iptables -I FORWARD $a -s 192.168.1.2 -p ICMP --icmp-type echo-request -m limit --limit 4/sec -j ACCEPT
    规则 2 iptables -I FORWARD $a -s 192.168.1.2 -m limit --limit 60/s --limit-burst 100 -j ACCEPT
    规则 1 iptables -I FORWARD $a -s 192.168.1.2 -p tcp -m multiport --dport 80,443 -m limit --limit 60/s --limit-burst 100 -j ACCEPT;

    上面的方法针对特定 ip 对付迅雷时打开网页是有效果的。只是如果处理不好--limit --limit-burst 对其它正常应用是有一定的抑制作用的

    6,openwrt 采用的是对 INPUT 方向的 syn_flood 进行抑制,那么回应的包自然也相应抑制。昨天刚迅雷过虽然网速才 300-800kb/s 之间波动,但是至少网页打开流畅。显然 openwrt 的防火墙规则还是有很大的区别于 ddwrt tomato 的性能上的优化。

    -A INPUT -i pppoe-wan -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
    -N syn_flood
    -A syn_flood -m limit --limit 3/sec --limit-burst 25 -j RETURN
    -A syn_flood -j DROP

    7,一个设计良好的 qos 规则也是有一定的抑制效果的。可以参考
    我的 tomato 原版 QOS 设定
    http://www.right.com.cn/forum/thread-102891-1-1.html
    (出处: 恩山无线论坛)
    swsh007
        30
    swsh007  
       2016-08-17 20:44:13 +08:00 via Android
    迅雷从开始就是流氓, p2p 就是被玩坏的,变成各种肉鸡。曾经测过迅雷开启连接数马上过千, bt 电驴官方客户端没这么黑。
    nifury
        31
    nifury  
    OP
       2016-08-17 21:07:02 +08:00
    @datocp 谢谢谢谢~
    本来只是思考如何设计一个高速低延迟的代理协议结果炸出一个大神~
    txydhr
        32
    txydhr  
       2016-08-17 22:40:57 +08:00 via iPhone
    @datocp 是的 迅雷动不动就上千 吃掉太多路由器资源 尤其是老旧的路由器。。
    我直接用 BT 同时下 3 部电影才 400 多连接数, 50M 对等,我一个人几乎跑满下行带宽。。 2 室友玩 dota2 完全不卡,不像国内开个迅雷, PPTV 之类,其他人别想正常上网。。。
    下载了 2 年,话说我已经被 ISP 请去喝了两次茶了,连下载的文件名都标出来了,说再侵犯版权就降到拨号速度。。再也不敢下了。
    hahahasnoopy
        33
    hahahasnoopy  
       2016-08-18 13:03:57 +08:00 via Android
    @txydhr 国内 isp 还管盗版?
    HankAviator
        34
    HankAviator  
       2016-08-22 19:18:48 +08:00
    @hahahasnoopy 不像 [国内] 开个迅雷……
    hahahasnoopy
        35
    hahahasnoopy  
       2016-08-31 00:35:20 +08:00
    @HankAviator 你可以通过百度云或者迅雷之类的离线下载方式,然后从他们的服务器上下载到本地应该就没有这方面的问题了,直接 bt 下载可能会被钓鱼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:25 · PVG 19:25 · LAX 03:25 · JFK 06:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.