路由器小包转发能力探讨

2022-05-21 09:54:01 +08:00
 huangya

路由器评测中经常提到小包转发能力,我知道这是一个衡量标准。但在真实世界中这个有多重要呢?特别上对大多数的家庭用户。不知道有人是否做过比较严谨的测试,或者有些相关经历。好像对游戏比较重要,那只有 2-3 个人玩游戏呢?真实带宽大概需要多少呢?另外还有时延影响怎么样。发帖的目的是希望能按需选择一些路由器

20101 次点击
所在节点    宽带症候群
85 条回复
leloext
2022-05-21 12:31:59 +08:00
@jiangyang123 实测 3150 和 3160(两部机器都做过软路由)在满载的时候是 7-8W ,用电流表和电压表测出来的。挂载了一个 2.5 机械硬盘和 msataSSD
li02
2022-05-21 13:59:50 +08:00
软路由 nas 98%的人用不上
剩下的大多当爱好玩,不记成本收益,开心就好
comwrg
2022-05-21 14:01:11 +08:00
可以看洋葱哥的测试视频,<amp-youtube data-videoid="7hADYEJ0FBY" layout="responsive" width="480" height="270"></amp-youtube> ,用数据说话。
Buges
2022-05-21 14:04:41 +08:00
@geekvcn 软桥接可以做透明防火墙,BROUTE 了解一下。用一台单独的设备当网桥,接入之后自动 intercept 所有流量,移除自动恢复。不需要修改任何网络拓扑和客户端配置,不进行额外 nat ,完全兼容双栈。
当然这个设备用 arm 也很好,但如果只有一台设备要开虚拟机的话,还是得 x86 。
Eytoyes
2022-05-21 14:21:29 +08:00
家用不需要在意小包转发是否能达到满速

关注小包转发更像是买新电脑必须要跑个分似的,可以直观的显示出设备处理性能

100 万分的电脑和 70 万分的电脑,玩扫雷都是 1 帧
datocp
2022-05-21 14:54:44 +08:00
这个小包不适合我来讨论。我也不知道小包是啥玩意。。。说说我认识中的小包

对于 tomato 的 QOS 就是这样的,不是 routeros 里的 iptables length 匹配。说到包转发的硬件能力,曾经接触过 iptables 每包匹配(非 CONNMARK 这种包到连接的转换过程)。在一些低端设备,像 mtk7620 跑 openwrt 的 SQM ( 2016 年版本)每包匹配非常耗 CPU 资源,包括更早的 ddwrt imq 那是直接导致路由死机。。。
从 QOS 的优先级来说显然已经对 tcp 的这些握手的真正小包实现了高优先级出列。
#$TC filter add dev $UDEV parent 1:0 prio 12 protocol arp handle 1 fw classid 1:20 # Arp traffic
$TC filter add dev $UDEV parent 1: prio 13 protocol ip u32 match ip protocol 1 0xff flowid 1:20 #ICMP
#$TC filter add dev $UDEV parent 1: prio 14 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:20 #ACK
$TC filter add dev $UDEV parent 1: prio 15 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x02 0x02 at 33 flowid 1:20 #SYN
$TC filter add dev $UDEV parent 1: prio 17 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x01 0x01 at 33 flowid 1:20 #FIN
$TC filter add dev $UDEV parent 1: prio 19 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x04 0x04 at 33 flowid 1:20 #RST

以上就涉及到小包转换像 iptables 这种需要靠 cpu 运算的,以及其它的所谓的硬件转发。但硬件转发往往又没有 iptables 那么好玩。像 mtk7620 使用 openwrt 固件,没有 mtk 官方的驱动,在使用 pppoe 拔号时大概 88mbps,但在专线模式 eth0 接口下它也能在 QOS 状态跑接近 600mbps 的能力。

至于游戏和延迟,应该有公式计算的。最早接触的是,这些公式似乎和 SQM 作者经常提到的公式不一样。。。
http://linux-ip.net/articles/hfsc.en/

Assume that all packets to be sent conform to a fixed size of 1500 bytes and all classes are sending at maximum rate. Based on the 1000 kbit link capacity, it takes 12ms (8*1500 byte / 1000000 bit/s = 12ms) to send a packet. The Voice over IP application sends at 100kbit which corresponds to 8 packets per second. In order to meet the guaranteed 100kbit rate for this class, the qdisc must send a packet from this class every 120ms, which would mean a maximum [queuing] delay of 132ms per packet. This example illustrates the relationship between bandwidth and delay.

实际上在 adsl(电话线线路)的测试结果,上行表现为使用当前带宽 60%时拥有极低的延迟,在当前带宽 80%时下行速度还不错延迟也不是很高。超过 80%时就出现下行还不如 80%时,下行流量更差延迟更高。
有了这样的经验认知就可以用 tc class 概念对 1 根带宽切成针对游戏的小水管+针对 P2P 的大水管。只要记得 CS 游戏交互基本不超过 5KB ,那只要给这根小水管 5/0.6=8.33KB 就足以保证游戏延迟。。。
对我来说我只要记得延迟和带宽的关系就可以了,根本不通过公式去计算。当然这种针对有线线路的延迟,似乎到了无线又成了另外一回事。在无线更多的是因为弱信号导致的 AP 呑吐性能的变化,所以对玩游戏的朋友有条件就自己独占一个 AP ,也用不着被人忽攸买什么几千块的游戏路由。。。
通过一个 1:2 分组限制了 P2P 最多只能使用 90%带宽,又能极大的保障高优先级分组游戏的延迟。根据早些年在 135KB 的光纤线路的测试结果。游戏小于 19ms,而其它 P2P 流量接近 600ms 。

##$TC class add dev $UDEV parent 1:1 classid 1:100 htb quantum 1514 rate $((UPLINK*10/100))kbps ceil 1Gbit prio 5
#$TC class add dev $UDEV parent 1:1 classid 1:2 htb rate $((UPLINK*8/10))kbps ceil $((UPLINK*9/10))kbps

#$TC class add dev $UDEV parent 1:1 classid 1:10 htb quantum 1514 rate $((UPLINK*1/10))kbps ceil $((UPLINK))kbps prio 0
#$TC class add dev $UDEV parent 1:1 classid 1:20 htb quantum 1514 rate $((UPLINK*1/10))kbps ceil $((UPLINK))kbps prio 2
#$TC class add dev $UDEV parent 1:2 classid 1:30 htb quantum 1514 rate $((UPLINK*3/100))kbps ceil $((UPLINK*90/100))kbps prio 3
#$TC class add dev $UDEV parent 1:2 classid 1:40 htb quantum 1514 rate $((UPLINK*5/100))kbps ceil $((UPLINK*85/100))kbps prio 4

最后用 QOS 的概念回答了延迟问题,而不是小包。
qakito
2022-05-21 15:28:53 +08:00
小包转发性能是网络设备的基础指标,包括 pps/时延 /乱序等等
实际使用中,随着各种功能的叠加(比如 NAT/QoS 等等),转发表的大小( 100 条路由 vs10w 条路由),实际的转发性能还会有一定下降
接入路由器不需要这么高转发,但是汇聚路由器 /核心路由器是必要参考值
tutugreen
2022-05-21 15:50:29 +08:00
DPDK @ TNSR
x86 还有挖掘空间?
JoeoooLAI
2022-05-21 15:56:56 +08:00
来学习学习。。。
个人感觉家用上,小包的量一般不会太高。毕竟家用设备数量算是智能家居那种最多也就内网有 50 多个 IP 已经算是很硬核玩家了。上网所产生的小数据包在家用应该不会太多,除非是企业几百上千设备。基本同意楼上所说的,这个指标在汇聚和核心处才更有价值。 看了下 ROS 可能是玩家玩得最多的 RB750gr3 64byte 小包 fast path 情况下速度都能跑到 500 多 mbps ,家用实际上这种量应该是足够了
dndx
2022-05-21 16:20:07 +08:00
对于普通用户来说,包转发率的确不是这么重要,基本上不是太垃圾的路由器都有硬件转发,性能是足够用的。一般像上网 BT 这种应用也是以大包为主。

小包线速对于 IDC 机房或者运营商可能意义会更大,因为 DDoS 攻击流量什么的可能会有很多小包,用最低的带宽给路由设备制造最大的负载。

AMS-IX 有个包大小的统计,应该对互联网上的数据大小分布具有一定的代表性: https://stats.ams-ix.net/sflow/index.html

绝大多数的数据包都是在 64-127 字节和 > 1024 字节这个区间。
xPKK1qofAr6RR09O
2022-05-21 16:37:04 +08:00
小包应用场景: 端口扫描
NXzCH8fP20468ML5
2022-05-21 19:36:45 +08:00
小包是非常常见的且重要的,数量上能达到 50%+,例如 DNS ,DHCP ,TCP 的握手和挥手,TLS 的握手,游戏包等都是小包。
如果你只是像要一个稳定的环境而非折腾,建议还是硬路由好,AIO 这种随便一个故障把家里搞断网被骂又不是没有。
morgan1freeman
2022-05-21 19:55:51 +08:00
@li02 #22 主要是要一个透明代理 跑一下 v2ray 跟 iptables 要是硬件路由支持这个就好了
morgan1freeman
2022-05-21 19:58:44 +08:00
@geekvcn #4 老哥 你推荐的一个硬件路由呗,我只要求跑一下 iptables 的 ipset 以及 v2ray 的透明代理,因为我现在的软路由,安装了一个 chnRoute 的功能,国内外自动分流,如果有合适的硬件路由 能跑得足够快,可以推荐一下
morgan1freeman
2022-05-21 20:00:55 +08:00
@geekvcn #4 主要我是 iptables 的重度用户,我有好几个上游网络需要 iptables 做 路由规则的定义
veSir
2022-05-21 20:03:09 +08:00
用交换机能避免小包问题吗?
465456
2022-05-21 20:13:58 +08:00
@veSir 不能
bosonx
2022-05-21 20:24:02 +08:00
@465456 虚拟机 WAN LAN 口都直通网口 数据都用交换机交换都避免不了?
465456
2022-05-21 20:29:19 +08:00
@bosonx 小包的转发能力是指路由器拨号后的 nat 转发
465456
2022-05-21 20:30:20 +08:00
https://www.acwifi.net/13527.html 选对好的 CPU 和网卡,小包的转发能力都可以接近硬路由

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/854303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX