Chinaunix

标题: linux下使用TC流量控制总结 [打印本页]

作者: jiangdaoyou    时间: 2006-12-28 13:20
标题: linux下使用TC流量控制总结
看到很多人在问TC流量控制,而网上一些资料压根就是错误的。下面是我的一个实例


http://blog.chinaunix.net/u/9284/showart.php?id=220696

关于使用linux网关连接ADSL(动态IP)的Qos规则,可发邮件给我
作者: hongfengyue    时间: 2006-12-28 18:40
好,不错。
作者: platinum    时间: 2006-12-28 22:07
请编辑贴子,把文章发到这里,不要引用连接,那样不利于讨论问题
作者: bili    时间: 2006-12-31 14:53
俺来帖。HUOHUO
利用TC进行流量控制(Qos)
(2006-12-13)    姜道友

前言:

    我看到网络上关于linux系统中的流量控制文章很多不实用,即使参考也不能很快编写流量控制规则,且有很多错误。之前我也写过一篇文章,被很多网站引用,为感谢对我的支持,我把一个实例编写出来,供大家参考和学习(绝对实用!,绝对精华!大家可以把网上其它人的文章和我的文章比较一下就知道了!)



需求:

    目前公司专线带宽为4M,上下行对等,因近期内部人员使用P2P对网络造成较大影响,所以现在进行流量控制(大部人禁止使用P2P下载,但一些管理人员不能限制,无奈之下只有采取流量控制)。目的:即保证ERP系统的运行,又不影响其它用户的使用,换句话说,让他们没有感觉,同时达到了我们的目的。注:因为TC只能限制发送数据包,所以下载在内网卡上进行,而上传在外网卡上进行控制。

一、      下载设置
1、  规则 (eth0为内网卡,可以限制下载流量)



tc qdisc add dev eth0 root handle 2:0 htb default 30

         tc class add dev eth0 parent 2:0 classid 2:1 htb rate 4Mbit burst 15k

         tc class add dev eth0 parent 2:1 classid 2:10 htb rate 4Mbit burst 15k 最大流量4M

         tc class add dev eth0 parent 2:1 classid 2:20 htb rate 2000kbit ceil 2Mbit burst 15k 最大流量2M

         tc class add dev eth0 parent 2:1 classid 2:30 htb rate 1000kbit ceil 1000kbit burst 15k 最大流量1M



         tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10

         tc qdisc add dev eth0 parent 2:20 handle 20: sfq perturb 10

         tc qdisc add dev eth0 parent 2:30 handle 30: sfq perturb 10



         U32_1="tc filter add dev eth0 protocol ip parent 2:0 prio 1 u32"

         $U32_1 match ip src 192.168.9.0/24 flowid 2:10 (192.168.9.0/24总公司ERP服务器所在网络)

                       使访问ERP服务器可用最大带宽4M,优先级为1

         U32_2="tc filter add dev eth0 protocol ip parent 2:0 prio 2 u32"

         $U32_2 match ip dst 192.168.1.172/32 flowid 2:20

         $U32_2 match ip dst 192.168.1.82/32 flowid 2:20

         $U32_2 match ip dst 192.168.1.200/32 flowid 2:20

                            以上3个IP为总经办人员,限制他们下载流量为2M,优先级为2

         tc filter add dev eth0 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:30 (因为有默认,此行可以省略,为了规则更清晰,还是设置为好)

                            以上只是设置默认情况下下载带宽只有1000K,即将近1M. 优先级为3



2、  注意事项:

优先级不要相同

二、      上传设置
1、  规则 (eth1为连接专线的网卡,可限制上传带宽)



        iptables -F -t mangle

        iptables -X -t mangle

        iptables -Z -t mangle

        iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.200/32 -j MARK --set-mark 1

        iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.172/32 -j MARK --set-mark 1

        iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.82/32 -j MARK --set-mark 1



        #iptables -A PREROUTING -t mangle -i eth0 -s 192.168.1.0/24 -j MARK --set-mark 2 (可以不用此条)



         tc qdisc add dev eth1 root handle 1:0 htb default 30

         tc class add dev eth1 parent 1:0 classid 1:1 htb rate 4Mbit burst 15k

         tc class add dev eth1 parent 1:1 classid 1:10 htb rate 4Mbit burst 15k 最大上传流量为4M

         tc class add dev eth1 parent 1:1 classid 1:20 htb rate 1000kbit ceil 2Mbit burst 15k 最大流量为2M

         tc class add dev eth1 parent 1:1 classid 1:30 htb rate 400kbit ceil 400kbit burst 15k 最大流量为400K



         tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10

         tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10

         tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10



         U32="tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32"

         tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.9.0/24 flowid 1:10

                    以上规则使用达到ERP服务器的流量不受限制,也即最大可为4M

         tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 1 fw classid  1:20

                            以上规则使总经办3个IP地址的上传流量为2M

         #tc filter add dev eth1 parent 1:0 protocol ip prio 4 handle 2 fw classid  1:30 (因为默认下使用此规则,所以可以省略)

                            默认下不符合以上两规则的全部使用此规则,上传带宽最大为400K(不要说我苛刻哟)

2、  注意事项

1)        因为内部IP地址在经过外网卡时会进行NAT,所以不能用源地址进行U32匹配,只能是FW规则进行流量标识

2)        优先级一定不能相同,否则fw规则将失效

3)        以上规则可以放到一个文件内运行

作者: iamshiyu    时间: 2007-06-29 09:59
询问一下各位大大,比如
tc filter add dev eth0 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:30
这样的规则,其结果是1.0整个网段的流量最大值被限制还是说每个该网段内的ip流量被限制呢?
作者: yuio654    时间: 2007-06-29 13:34
原帖由 iamshiyu 于 2007-6-29 09:59 发表于 5楼  
询问一下各位大大,比如
tc filter add dev eth0 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:30
这样的规则,其结果是1.0整个网段的流量最大值被限制还是说每个该网段内的ip流 ...


基于目的ip地址限速,规则是:
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 400kbit ceil 400kbit burst 15k 最大流量为400K

[ 本帖最后由 yuio654 于 2007-6-29 13:36 编辑 ]
作者: iamshiyu    时间: 2007-06-29 18:24
那就是说,这是针对1.0整个网段的限速是吧?
作者: liuzhuan23    时间: 2007-06-29 22:52
如果你用htb,你的这些分类id会互相借用带宽

classid 2:10,classid 2:20,classid 2:30 这3者会互相借用
classid 1:10,classid 1:20,classid 1:30 这3者会互相借用

所以,你的rate可能不会达到你预期的效果
作者: platinum    时间: 2007-06-30 00:40
原帖由 liuzhuan23 于 2007-6-29 22:52 发表于 8楼  
如果你用htb,你的这些分类id会互相借用带宽

classid 2:10,classid 2:20,classid 2:30 这3者会互相借用
classid 1:10,classid 1:20,classid 1:30 这3者会互相借用

所以,你的rate可能不会达到你预期 ...

这个借用是什么时候都生效吗?还是只在特殊条件下才互相借用?
作者: zhou_rock    时间: 2007-06-30 01:26
在指定ceil下才可能生效
作者: platinum    时间: 2007-06-30 01:42
原帖由 zhou_rock 于 2007-6-30 01:26 发表于 10楼  
在指定ceil下才可能生效

怎讲?
作者: liuzhuan23    时间: 2007-06-30 11:09
原帖由 platinum 于 2007-6-30 00:40 发表于 9楼  

这个借用是什么时候都生效吗?还是只在特殊条件下才互相借用?


1. 类似于这样的设计都会产生带宽借用

             root:1
                ||
            classid 1:1
                         ||
                      //   \\
      classid 1:10    classid 1:255

接下来使用任意一个过滤器使 classid 1:10,classid 1:255 生效

2. 这样则不会产生带宽借用

                root:1
               //         \\
    classid 1:1            classid 1:2
            ||                           ||
      classid 1:10          classid 1:255

接下来使用任意一个过滤器使 classid 1:10,classid 1:255 生效

3. 还有,ceil如果不指定,会有默认数值的,这个默认数值就是你的rate,所以,ceil这个峰值令牌桶参数是必须的

4. 当然,这一切的前提是使用htb,其他的队我没有用过,发表不了意见,呵呵
作者: platinum    时间: 2007-06-30 11:20
liuzhuan 兄分析得很好,但是我发现借用的一个特点(包括 prio 也是)
只有在带宽不够用的情况下才能生效,也就是实际速率如果跑的话可以高于 ceil 值
否则借用不了,这是我做过实验以后的结论,不知大家有没有遇到过这个情况
作者: liuzhuan23    时间: 2007-06-30 11:32
原帖由 platinum 于 2007-6-30 11:20 发表于 13楼  
liuzhuan 兄分析得很好,但是我发现借用的一个特点(包括 prio 也是)
只有在带宽不够用的情况下才能生效,也就是实际速率如果跑的话可以高于 ceil 值
否则借用不了,这是我做过实验以后的结论,不知大家有没 ...


是,我做的时候也是这样
作者: platinum    时间: 2007-06-30 12:59
liuzhuan 兄做测试的时候还有没有注意到,能达到的最大带宽要远高于 ceil 值才有效
例如,一个 ISP 的带宽限制为 2Mbps,若设置的 ceil 值设置成 2Mbps,甚至 1.8Mbps 也未必奏效
因为数据传输是双向的,我们可以通过 tc 限制内网出去数据的速率,但无法避免由于内网发出的向外请求而招来外网数据的主动向内推送
在这个情况下,1.8Mbps 虽然小于 2Mbps 速率,虽然进来的数据高于 1.8Mbps,但也达不到借用效果,但降到 1.4Mbps 左右应该就没问题了
一般在限制某 IP 速率(允许借用),而其使用 P2P 软件时出现这种情况
作者: liuzhuan23    时间: 2007-07-01 04:18
to platinum兄:

1。我的前一个结论是错误的,子类之间是不会互相借用带宽的,呵呵,非常不好意思

2。借用主要还是父类给子类来分配带宽,ceil-rate=可借用带宽

3。举例如下:

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps ceil 70kbps prio 1

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 50kbps prio 2

classid 1:10 rate 50kbps ceil 70kbps,保证带宽50k,可借用带宽20k,在保证rate的情况下,classid 1:10可以向父类再借用20k

classid 1:255 rate 50kbps(ceil默认为50k),这种情况也是不允许向父类借用带宽的

2个子类同时有数据通过的话,并且classid 1:255到达峰值的话,借用带宽会失效,因为要保证每个子类rate速率。
在其他子类未达到峰值的情况下,借用始终有效

4。父类之间仍然不会借用带宽,这种设计没问题

5。我实验的时候,上下行均分开做,下行在imq0,上行在imq1,关于如何给kernel打imq补丁,在下面我有简单描述

我实验的kernel是2.4.31,iptables-1.3.4

需要文件:linux-2.4.28-imq2.diff,
          imq-nat.diff,
          iptables-1.3.0-imq1.diff,
          可以从这里下载http://www.linuximq.net

1)
cp linux-2.4.28-imq2.diff linux-2.4.31/
cd linux-2.4.31/
patch -p1 < linux-2.4.28-imq2.diff

2)   
cp imq-nat.diff linux-2.4.31/drivers/net/
cd linux-2.4.31/drivers/net/
patch < imq-nat.diff

3)
cp iptables-1.3.0-imq1.diff iptables-1.3.4/extensions
cd iptables-1.3.4/extensions
patch < iptables-1.3.0-imq1.diff

4)
编译内核与iptables吧
作者: 剑次狼    时间: 2007-07-01 16:04
原帖由 liuzhuan23 于 2007-7-1 04:18 发表于 16楼  
to platinum兄:

1。我的前一个结论是错误的,子类之间是不会互相借用带宽的,呵呵,非常不好意思

2。借用主要还是父类给子类来分配带宽,ceil-rate=可借用带宽

3。举例如下:

tc class add dev im ...


非常好,受教了,谢谢
作者: platinum    时间: 2007-07-01 23:09
原帖由 liuzhuan23 于 2007-7-1 04:18 发表于 16楼  
to platinum兄:

classid 1:10 rate 50kbps ceil 70kbps,保证带宽50k,可借用带宽20k,在保证rate的情况下,classid 1:10可以向父类再借用20k

真的可以保证吗?我测试怎么不行呢?
作者: liuzhuan23    时间: 2007-07-02 01:49
原帖由 platinum 于 2007-7-1 23:09 发表于 18楼  

真的可以保证吗?我测试怎么不行呢?


呵呵,的确可以保证,我实验过了,反反复复好几次,没有问题

我的实验过程如下:

tc qdisc add dev imq0 root handle 1: htb default 255

tc class add dev imq0 parent 1: classid 1:1 htb rate 100kbps

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps prio 1
tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 5

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 50kbps ceil 80kbps prio 2
tc qdisc add dev imq0 parent 1:255 handle 255: sfq perturb 5

tc filter add dev imq0 protocol ip parent 1:0 u32 match ip sport 80 0xffff flowid 1:10

classid 1:10用于http下载测试,classid 1:255这个默认队我暂时使用ftp下载测试

classid 1:255(有数据通过)而classid 1:10(无数据通过)的时候:ftp下载可以达到80k,也就是借用了30k

classid 1:10(有数据通过)而classid 1:255(无数据通过)的时候:http下载保持在41k-50k之间,无借用带宽

classid 1:10与classid 1:255均有数据通过的时候:http下载,ftp下载的峰值都没有超过50k,正常情况在38k-47k之间

补充一点:iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0(先送到imq0做排队,eth0是我的wan)

[ 本帖最后由 liuzhuan23 于 2007-7-2 01:53 编辑 ]
作者: platinum    时间: 2007-07-02 08:34
多谢 liuzhuan 兄指教
我想问一下你的测试环境是怎样的,链路带宽是多大?
另外想问一下如果把 http 换成多超多线程,可招来很多外来流量主动推送的迅雷(最好用迅雷下 BT)会怎样?
我的测试结果是,如果 ceil 离物理带宽很近,或者使用迅雷下 BT 就不行了?
另外还有一点不明,就是上面 http 使用了 prio 1,而 ftp 使用了 prio 2,这里为什么这么做,实际带来的效果又是怎样的呢?这里一直弄不明白……
作者: wysilly    时间: 2007-07-02 09:23
好文.
我想prio决定优先权,优先权高当然优选占用ceil带宽了,这样来保证http访问的质量.
作者: iamshiyu    时间: 2007-07-02 09:49
还有个不清楚的地方请教,如果是在nat的服务器上作流控——控制内网的上下行速率,内网网卡可以针对dst作下载的限速,外网网卡上能作针对src(内网地址)的上行限速吗?
另外如果是桥式的防火,能用TC做流控么?
作者: platinum    时间: 2007-07-02 10:52
原帖由 wysilly 于 2007-7-2 09:23 发表于 21楼  
好文.
我想prio决定优先权,优先权高当然优选占用ceil带宽了,这样来保证http访问的质量.

也就是说,prio 高的优先使用可借用的带宽,可以这样理解吗?
作者: wysilly    时间: 2007-07-02 10:59
对的.lartc文档上明确指出这一点.

[ 本帖最后由 wysilly 于 2007-7-2 11:00 编辑 ]
作者: platinum    时间: 2007-07-02 11:07
原帖由 wysilly 于 2007-7-2 10:59 发表于 24楼  
对的.lartc文档上明确指出这一点.

那么是不是说,如果能跑,所有可借用的带宽全部都会被高 prio 分类占用,而低 prio 分类则一点都借用不到,除非高 prio 不跑或不需要跑很多的时候?
作者: wysilly    时间: 2007-07-02 11:19
是的,是的.但是lartc的文档太老了,还有就是内核版本更新太快,如果没有重大的change,结论就是这样.
作者: platinum    时间: 2007-07-02 11:22
这是分类的 prio,过滤器也有一个 prio,这个 prio 又是什么意思呢?
作者: iamshiyu    时间: 2007-07-02 11:25
原帖由 platinum 于 2007-6-30 12:59 发表于 15楼  
liuzhuan 兄做测试的时候还有没有注意到,能达到的最大带宽要远高于 ceil 值才有效
例如,一个 ISP 的带宽限制为 2Mbps,若设置的 ceil 值设置成 2Mbps,甚至 1.8Mbps 也未必奏效
因为数据传输是双向的,我们 ...

请教各位,假设isp设置带宽为4M,我中间一个桥式防火,一个nat,若干服务器,想要给其中的两台服务设最小带宽为2M,nat最大带宽为2M,按照你的说法,即便在nat上设置了一次发出限制,一次下载限制,再到桥式防火上再次限制,也不能真正起到作用了?毕竟发出的请求还是会导致更多的应答报文推入进来啊。那还有别的什么办法么?

[ 本帖最后由 iamshiyu 于 2007-7-2 11:29 编辑 ]
作者: wysilly    时间: 2007-07-02 11:28
原帖由 platinum 于 2007-7-2 11:22 发表于 27楼  
这是分类的 prio,过滤器也有一个 prio,这个 prio 又是什么意思呢?

表示处理顺序.
作者: platinum    时间: 2007-07-02 11:47
原帖由 iamshiyu 于 2007-7-2 11:25 发表于 28楼  

请教各位,假设isp设置带宽为4M,我中间一个桥式防火,一个nat,若干服务器,想要给其中的两台服务设最小带宽为2M,nat最大带宽为2M,按照你的说法,即便在nat上设置了一次发出限制,一次下载限制,再到桥式防 ...

也许是我的测试方法有问题,但至少我遇到的情况是这样的,不知道别的朋友有没有遇到过
作者: wysilly    时间: 2007-07-02 11:52
测试环境和规则.

一起看看不就知道了.
作者: platinum    时间: 2007-07-02 12:07
原帖由 wysilly 于 2007-7-2 11:52 发表于 31楼  
测试环境和规则.

一起看看不就知道了.

测试环境和规则前面都说过了,看了半天也没弄明白要知道什么,没有你说的那么简单
假设一条 2Mbps 的线路,你保障某个应用 1.5Mbps 带宽,而外来主推流量多达 1Mbps(可视为无效流量)
试问:那个你要保障的应用最高能跑到多少?
作者: wysilly    时间: 2007-07-02 12:44
原帖由 platinum 于 2007-7-2 12:07 发表于 32楼  

测试环境和规则前面都说过了,看了半天也没弄明白要知道什么,没有你说的那么简单
假设一条 2Mbps 的线路,你保障某个应用 1.5Mbps 带宽,而外来主推流量多达 1Mbps(可视为无效流量)
试问:那个你要保障的 ...

呵呵,你想的太多了.
如果规则定义就是为了区分上行和下行两部分.那么到了最后最严格的方法就是对每ip定义规则了,否则没有两全的解决途径了.
作者: platinum    时间: 2007-07-02 13:08
原帖由 wysilly 于 2007-7-2 12:44 发表于 33楼  

呵呵,你想的太多了.
如果规则定义就是为了区分上行和下行两部分.那么到了最后最严格的方法就是对每ip定义规则了,否则没有两全的解决途径了.

不,你错了,我想的并不多,这是网络里一个很普遍的现象
当你使用 P2P 软件时,会招惹来外网流量的主动推送,从而堵塞你的 ISP 链路
作者: liuzhuan23    时间: 2007-07-02 14:40
1. 过滤器的优先级:“优先对谁分类”,就是一个顺序的问题,比如,你有IP匹配 prio 1,port匹配 prio 2,那一定是先匹配IP了

2. 分类的优先级:谁先入队,谁先出队的问题,比如,http prio 1,ftp prio 2,那http数据应该是先入队,先出队

3. 多线程下载以及P2P的问题:

我的下行链路最大3M,这边按bit计流量,所以我的实际下行链路最大为300多k

tc qdisc add dev imq0 root handle 1: htb default 255

tc class add dev imq0 parent 1: classid 1:1 htb rate 300kbps

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps ceil 80kbps prio 1
tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 5

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 20kbps ceil 30kbps prio 2
tc qdisc add dev imq0 parent 1:255 handle 255: sfq perturb 5

tc filter add dev imq0 protocol ip parent 1:0 u32 match ip sport 80 0xffff flowid 1:10

子类的ceil不要设置为接近物理带宽,本着 ceil-rate=借用带宽 的原则即可

classid 1:10使用http下载,6个连接数,保持在80k左右,平稳
classid 1:255使用ppstream(我这没有BT,不好意思),具体流量我没有估算出来,但20k-30k的流量应该是看不了ppstream的,结果也正是这样,不停的缓冲,如果去掉classid 1:255队列管制,ppstream很流畅
作者: platinum    时间: 2007-07-02 21:41
300KB = 300 * 8 = 2400Mbps(1 Byte = 8 bits)
你的带宽是 3Mbps,里外里损失了 600Kbps 哦
不过,这样的带宽压制,对于保障来说效果是非常好的,但是有一定的损失(600Kbps,约等于 75KB/s)
作者: liuzhuan23    时间: 2007-07-03 00:10
总体来讲,要对父类的rate设置一个合理值,大概接近物理带宽即可,父类就不要再去设置ceil了,父类是不可能借用带宽的

举例来讲,我有如下设计:

tc qdisc add dev imq0 root handle 1: htb default 255

tc class add dev imq0 parent 1: classid 1:1 htb rate 100kbps ceil 120kbps

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps ceil 80kbps prio 1
tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 5

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 20kbps ceil 30kbps prio 2
tc qdisc add dev imq0 parent 1:255 handle 255: sfq perturb 5

我希望 classid 1:10 借用30k,到达80k,classid 1:255 借用10k,到达30k

当 classid 1:10 单独跑的时候,平稳80k

当 classid 1:255 单独跑的时候,平稳19k-28k

当 classid 1:10 与 classid 1:255 同时跑的时候,80k+30k=110k,超出父类的rate值,但我希望可以从父类的ceil借到10k,以保持2者的速率,但结果并不是这样的;

classid 1:255 被保持在自身的rate值范围内,而 classid 1:10 的 prio 1 保证了 classid 1:10 先出队(也即 classid 1:10 可以优先占用,借用带宽),在这里,体现出父类的借用带宽是无效的;

可以这么讲:

1。(子类的rate之和 > 父类rate),或者 (子类的ceil之和 > 父类rate )这种设计是无效的

2。如果每个子类都到达了ceil的峰值,并且这个峰值之和超出了父类的rate,此时,低优先级子类的带宽被压榨,被保持在他们的rate值范围之内,高优先级子类则可以正常的向父类借用带宽,以保证 子类的ceil之和 <= 父类rate

所以,结果是:classid 1:10 80k左右,classid 1:255 11k-20k之间
作者: yuio654    时间: 2007-07-03 09:51
又学到了不少东西,呵呵
作者: ssmarine    时间: 2007-07-03 09:59
看前辈之间讨论就是爽,MARK一下。
作者: iamshiyu    时间: 2007-07-03 10:46
原帖由 platinum 于 2007-7-2 13:08 发表于 34楼  

不,你错了,我想的并不多,这是网络里一个很普遍的现象
当你使用 P2P 软件时,会招惹来外网流量的主动推送,从而堵塞你的 ISP 链路

按照lartc里的介绍:
然而,Internet主要依靠TCP/IP,它的一些特性很有用。因为TCP/IP没办法知道两个主机之间的网络容量,所以它会试图越来越快地发送数据(所谓的“慢起技术”) ,当因为网络容量不够而开始丢失数据时,再放慢速度。实际情况要比这种方法更聪明……
这个推送应该能够在一段时间后达到稳定值啊……即便它们到达了你的接受端interface,但由于发送端还是会drop掉,认证机制还是会认为这次传输失败了,然后慢慢减速回到稳定状态吧?
作者: platinum    时间: 2007-07-03 10:59
原帖由 iamshiyu 于 2007-7-3 10:46 发表于 40楼  

按照lartc里的介绍:
然而,Internet主要依靠TCP/IP,它的一些特性很有用。因为TCP/IP没办法知道两个主机之间的网络容量,所以它会试图越来越快地发送数据(所谓的“慢起技术”) ,当因为网络容量不够而开始丢 ...

tc 利用的是队列技术,队列满了以后会造成 TCP 丢包,根据 TCP 协议的机制,会自动重传,因为会导致大量无用废数据的产生
若最好的控制 TCP,应该控制滑动窗口,让发送端自动降低发送速度
作者: jd_chen    时间: 2007-07-06 02:34
留个印以后慢慢研究~~~~~~~~
作者: ououpp    时间: 2008-06-21 21:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: 7717060    时间: 2008-06-23 12:55

作者: david224    时间: 2008-07-03 12:31
谢谢前辈了`````
作者: shada    时间: 2012-12-27 14:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: cheveu    时间: 2013-05-26 10:15
platinum 发表于 2007-07-03 10:59
tc 利用的是队列技术,队列满了以后会造成 TCP 丢包,根据 TCP 协议的机制,会自动重传,因为会导致大量无用废数据的产生
若最好的控制 TCP,应该控制滑动窗口,让发送端自动降低发送速度

TCP滑动窗口在达到最大值后会一次性回到0,之后再次贪婪地抢占带宽。
这是个很野蛮的设计。
互联网协议的设计思想就是野蛮地抢占尽可能多的资源,
除非所有人都换用具有自我约束的tcp协议,否则你说的愿景很难实现。

p2p或者视频,经常导致很小的出门流量招惹来大量入门流量。
这是无解的,即便局域网里有应用识别设备,也很难选择哪些数据可以丢弃。
这不是技术问题,这是社会工程问题。

陈年旧帖,在今天仍有意义。
跨越6年的对话,讨论的问题依旧,
反衬出这些年互联网技术,特别是底层协议并无(也很难有)本质上的进步。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2