使用TC的Linuxstream量整形

我的互联网连接是这样的:

Internet <-128kbps链路 – > Cisco路由器(公共IP)<-LAN-> Linux路由器/服务器(公共IP)<-LAN->普通PC(公共IP)

Cisco路由器:

  • 分配给我的机构的第一个公共知识产权(/ 29)
  • 被编程为通过Linux路由器发送所有数据包

Linux路由器

  • 第二个公共知识产权分配给我的机构
  • 被编程为在常规PC和Cisco路由器之间转发数据包
  • 充当服务器(邮件,networking等)

普通PC(其中4个):

  • 其余的公共IP
  • 使用Linux路由器作为网关

我在Linux路由器上启用了iptables数据包日志logging,有时我发现:

  • 有些数据包很大,大于20KB。 这是正常的吗? (是的,这是正常的,这些不是数据包,正如Some Guy所解释的,这些数据包是IP数据报)
  • 传输的数据(上网)数量大于16KB。 例如,在特定的第二个10572字节进入(没问题),63521字节出去(到Ci​​sco路由器)。 至less需要4秒才能通过128kbps链路发送64KB。 同时,Linux路由器正在向思科路由器发送更多数据,堵塞其缓冲区。 不好。

现在,我怎样才能configurationLinux路由器来塑造stream量的方式:

  1. 当这些普通电脑和Linux服务器之间的stream量保持最大传输速度。
  2. 通过使用全部(或几乎所有)可用带宽(128 kbps),减慢对外部世界的stream量,避免堵塞“out”线路。 跟踪上没有更多的“> 16KB out seconds”。
  3. 保证24kbps的每台普通电脑,24kbps的Linux服务器在任何时间。 (如果需要,还有8bkps的开销)。 IOW,5(伪)“带”,每个24kbps。
  4. 如果有任何一台个人电脑没有使用其全频段,那么在其余的发送电脑之间就可以共享空闲的带宽
  5. 优先考虑某些数据包(DNS查找,控制数据包),优先考虑其他(torrent !!!),INSIDE每个频段,而不影响其他频段。

我已经为每个PC标记(使用IP表–set-xmark选项)每个传出数据包:

  1. Linux路由器向外界高端市场
  2. Linux路由器到外面的世界,正常的prio
  3. Linux路由器到外面的世界,低价格
  4. 第一台普通电脑向外界高端市场

… 等等。

每个传入的数据包也使用从16开始的这种scheme进行标记。

对于这个长期的问题,我很抱歉,但是我已经放弃使用tc命令来设置它,关于stream量整形的文档太less,我不知道下一步该怎么去。

假设eth0是一个到思科路由器的100mbit以太网连接,它应该是这样的(不是吗?):

tc qdisc add dev eth0 root handle 1: htb default 2 # 100 mbps tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit # To LAN traffic tc class add dev eth0 parent 1:1 classid 1:2 htb rate 99000kbit ceil 100mbit # IN traffic tc class add dev eth0 parent 1:1 classid 1:3 htb rate 120kbit # OUT traffic tc class add dev eth0 parent 1:1 classid 1:4 htb rate 120kbit # IN “bands” (one for each PC) tc class add dev eth0 parent 1:3 classid 1:10 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:3 classid 1:11 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:3 classid 1:12 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:3 classid 1:13 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:3 classid 1:14 htb rate 24kbit ceil 120kbit # OUT “bands” (one for each PC) tc class add dev eth0 parent 1:4 classid 1:15 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:4 classid 1:16 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:4 classid 1:17 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:4 classid 1:18 htb rate 24kbit ceil 120kbit tc class add dev eth0 parent 1:4 classid 1:19 htb rate 24kbit ceil 120kbit 

会给我这样的东西:

 +-----------------------------------------------------------+ | 100 mbits (1:1) | +---------+------------------------+------------------------+ | 99mbits | 120 kbits In (1:3) | 120 kbits Out(1:4) | + (1:2) +----+----+----+----+----+----+----+----+----+----+ +---------+ PC1| PC2| PC3| PC4| PC5| PC1| PC2| PC3| PC4| PC5| |1:10|1:11|1:12|1:13|1:14|1:15|1:16|1:17|1:18|1:19| +----+----+----+----+----+----+----+----+----+----+ 

并为每个乐队:

 # PC1, IN tc qdisc add dev eth0 parent 1:10 handle 20: prio tc qdisc add dev eth0 parent 20:1 handle 22: sfq perturb 10 tc qdisc add dev eth0 parent 20:2 handle 23: sfq perturb 10 tc qdisc add dev eth0 parent 20:3 handle 24: sfq perturb 10 # PC1, OUT tc qdisc add dev eth0 parent 1:15 handle 21: prio tc qdisc add dev eth0 parent 21:1 handle 25: sfq perturb 10 tc qdisc add dev eth0 parent 21:2 handle 26: sfq perturb 10 tc qdisc add dev eth0 parent 21:3 handle 27: sfq perturb 10 +--------------------++--------------------+ | PC1 IN || PC1 OUT | +--------------------++--------------------+ | PRIO (20:0) || PRIO (21:0) | | | | || | | | | Prio | Prio | Prio || Prio | Prio | Prio | | 1 | 2 | 3 || 1 | 2 | 3 | |(20:1)|(20:2)|(20:3)||(21:1)|(21:2)|(21:3)| +------+------+------++------+------+------+ | SFQ | SFQ | SFQ || SFQ | SFQ | SFQ | |(22:0)|(23:0)|(24:0)||(25:0)|(26:0)|(27:0)| +------+------+------++------+------+------+ 

等等。

规则应该是这样的

 # PC1, OUT tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 21:1 tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 21:2 tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 21:3 # PC1, IN tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 16 fw flowid 20:1 tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 17 fw flowid 20:2 tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 18 fw flowid 20:3 

等等。

任何build议,意见等? (我没有这方面的经验)

看看这里 – 这是相当简单的教程如何使用htb qos机制。 本质上,你在iptables上标记数据包,然后根据标记分配不同的问题。

或者你可以看看hfsc ,但是实际上这样的networking连接速度可能会更好,尽pipe我从来没有用过它。

关于数据包大小 – 我无法想象20kB的大数据包。 即使以太网中的巨型帧也较短[9kB]。

编辑:正如一些家伙解释说 – LEN是经过碎片整理的IP数据包的长度,而不是电线上的帧的大小。

它是什么样的思科? 你通常也可以在IOS上进行整形,比Linux tcconfiguration要容易一些。

我正在做一个类似的设置,但我的包没有通过正确的类….

我做一些像

 PRIO_WEB=1 MARK_WEB=10 tc filter add dev eth0 protocol ip parent 1:0 prio $PRIO_WEB handle $MARK_WEB fw flowid 1:10 iptables -t mangle -A PREROUTING -p tcp --dport 3128 -m tos --tos Maximize-Throughput -j MARK --set-mark $MARK_WEB 

数据包不要去那里由于某种原因….