关于单臂路由的讨论

@physixfan 能否把 一般公寓楼的弱电箱都是咋给走线的?
18, 21-27,30,32-37楼关于单臂路由的讨论移过来?

1赞

单臂路由缺点很多,高处理器负载,低带宽使用率,应急一下还可以,绝对不建议长期使用

问题是:

你是不是忘了路由器的输入?

?????
cite please
vlan 是由硬件处理的啊。line speed毫无压力。

openwrt router —switch — tagged traffic — switch— other lan
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |------ modem

大部分家用路由器内部实际上就是单臂路由,因为SoC(CPU)只有一个网口,可以节约成本。wan lan实际上是由一个内置的vlan switch扩展出来的。比如:


缺点是大部分路由器原厂固件不支持自定义vlan需要刷openwrt。如果是broadcom系的soc很可能没驱动不支持硬件加速。但是dd-wrt之类的非GPL固件就没问题。

如果用两个vlan switch的话则是完全透明的。优点是可以用原版固件。

router lan—switch — tagged traffic — switch— other lan
router wan—|. . . . . . . . . . . . . . . . . . . . . . .|------ modem

:thinking:大佬你是不是对单臂路由有什么误解?

我就是搞网络的你来讲讲单臂路由?

In computing, a router on a stick, also known as a one-armed router,[1][2] is a router that has a single physical or logical connection to a network. It is a method of inter-VLAN (virtual local area networks) routing where one router is connected to a switch via a single cable. The router has physical connections to the broadcast domains where one or more VLANs require the need for routing between them.

借维基一张图:

我上面标注的tagged traffic别名就是trunk线。

这是某家用路由器的内部拓扑:


5就是 vlan tagged traffic
CPU实际上只有 eth0 一个网口。 eth1是纯wifi。
有线lan和wan都是走eth0
所以如果把0-4其中一个口标成tagged,做单臂路由使用,对于CPU来说也完全没有区别。让switch把tag直通过去就好。CPU反正都是一样在处理tagged traffic。

2赞

好吧,拥有CCIE认证的我选择保持沉默…

总之我不知道你张口就是vlan开销大的说法哪来的。没事瞎拆vlan当然会增加CPU转发流量。但是上述场景wan lan本来就在不同的子网,本来就需要cpu转发不可避免。lan流量并没有拆vlan,还是直接由硬件switch处理。

我说大部分家用路由实际上就是单臂路由,原因上述。从port 5到eth0这段不就是单臂by definition?

前述的openwrt配置图也是


只有cpu是tagged,lan wan分别在两个vlan,这是不是很明显?(mmm不过这人配错了。wan lan全在一个vlan上。wan应该放到vlan2去的)

你如果知道反例不妨举出来看看。目前我还没用过哪个够高级的无线路由器会给lan wan分别的eth。这里是一个例子:


cpu是真的有eth1和eth0两个interface。然后wan和lan确实是走不同的eth进的CPU。

有线路由器我不清楚,但是除非只有一进一出两个口的,否则我相信大概率还是5口vlan switch而不是5个eth interface。

众所周知,家用路由器实际上并不只是路由器。而是一个router+switch。因为5个直通CPU真网口的router芯片太贵谁也不会买。反正家用你就那点流量,砍掉一半做半双工也没多少人能用的出来。测速都是分开测,测不出半双工。何况大部分家用路由器的CPU根本做不到线速转发。给你两个eth也是白给。

我觉得唯一有冲突的场景是路由器直连的lan设备和另一头switch上的lan设备有大量带宽的情况下,会抢wan的带宽。但是这是共享网线的必然结果。不想要这个结果的话可以上2.5Gbps的switch和路由器。那么就可足够处理全双工的1Gbps流量。

一定要抬杠的话,你那个叫三层交换,不叫单臂路由。

物理端口Port 0-4做Port 5的事才能称为单臂路由。

说的很清楚了:

我没懂你的意思。port 1打tag 0进cpu,route+nat之后出来带tag1。switch把tag去掉给port 0。这是不是单臂路由?

port 1-4是lan的广播域。port 0是wan的广播域。
在CPU port 0和1之间转发这不就是routing。

The router has physical connections to the broadcast domains where one or more VLANs require the need for routing between them.


那上图怎么说?

port5到eth0之间确实是物理连接。难道看得见的网线才叫physical connection, pcb上的走线就不叫网线了?
前述的WRT54G用的是bcm5352,这个芯片集成了routing和switch在同一个封装里。

而我用过的另一款HG556


soc是BCM6358,不带switch。switch由BCM5325处理。

one or more vlan
上图wan和lan就在两个vlan下。你把switch芯片当成独立的vlan switch。把SoC当成一个单口的router。只不过他们共享了供电和外壳,不代表他们在网络上提供的功能有任何区别。

还有,回到之前的问题,如果你家路由器就是这个内部拓扑。那么你在弱电箱里加一个managed switch做单臂,到底增加了多少开销?是不是就“高处理器负载,低带宽使用率,应急一下还可以,绝对不建议长期使用”
家用路由器就这狗样。你有钱你上企业级的去。

问题是你没光纤到房间里。每个房间只有一条网线。如果路由器放弱电箱里当然最好。但是这就没法无线了。无线要另外搞个AP。

如果用无线路由器要放房间里。同时其他两个房间也要有lan。那么单臂路由就是唯一的选择。
或者就邪教,一条网线打两个头。拆成两条4线用。缺点是每条只能跑100M。想跑1G的话还是得单臂路由。


这个没有任何问题,是标准的单臂路由,完全符合描述

路由器的一个物理端口通过Trunk连接交换机,而在这个广播域里存在两个VLAN(VLAN1和VLAN2),他们的路由通过路由器的那一个端口进行,Trunk承载了来回的流量(这也是我之前提到的单臂路由效率低下的原因)。port5到广播域并不是physical connection,因为Port5不是物理端口。


还是上图
CPU对应router
trunk对应eth0-port5
vlan1 对应port1
vlan2 对应port0

你不能因为eth0-port5这条线没拖在外面就说这不算trunk线吧。这条PCB走线提供的是不是trunk线的功能?它是不是承载了port0到port1的流量,来回各一次。如果不走这条线,只靠下面的switch芯片,能不能直接转发port0到port1?
不能

而且我还可以告诉你,至少对于我用过的HG556和其他多款家用路由器来说,eth0
就是和LAN一样只有1Gbps。协商的带宽和外置的网线是一样的。因为这个弱鸡soc就是只有1G的网口。唯一优势大概是屏蔽可以做好点,干扰少点。

你要是想在port0和port1之间通讯,你也得走CPU。internal connection是封装上的internal。难道两片芯片粘一起就变一片了?在网络拓扑上来说这两个芯片是独立的。你说的单臂路由的问题,它们也有,一个不少。internal connection也不是带宽无限,走的也是ethernet协议。你说port0和port1之间要不要cpu?能不能全双工?
port5不是一个逻辑的端口,而是物理端口。你把pcb上这条线切了那它也得完蛋。封装在一起的情况,你把封装融掉,把里面对应的线路折了,那它也得完蛋。

路由器的操作系统只能间接控制switch的mapping,而不参与到switch的实际工作中。switch有自己的buffer和mac表。

但是你说的问题对于家用路由器来说不是额外的问题。因为你lan和wan本来就不在一个广播域。
lan和wan通讯就是必须CPU转发。否则nat怎么做?
我说在弱电箱里放vlan switch,那也还是用这两个vlan。又没有拆出第三个vlan。所以你说的问题确实存在,但是家用路由器本来就存在这个问题,不是额外的问题,不是我加个vlan switch加出来的问题。

麻烦你举出具体的反例来。到底什么情况下,插port0和1的两个device直接没问题,但是加个vlan switch,用trunk线拉到弱电箱里,然后两个device接在vlan switch的口上,那就有问题了?

1赞

不是就是不是,你自己提供的定义已解释的很清楚了,我不想再杠下去了。

我也表达的很清楚了只有Prot0-4任何单独一个物理接口连接到广播域承载trunk为其中的各个VLAN进行路由才叫做单臂路由。

晚安,我得睡了,实在太晚了,两个半小时后还得起来工作:roll_eyes:

router = cpu
eth0 = 物理接口
eth0 - port5 这条pcb走线就是trunk

我们夸张一点,假设我技术高超。把eth0 - port5 这条pcb走线剪了焊上网线。这是不是trunk线?

wan和lan分别在vlan0和vlan1上。wan和lan之间怎么就不是inter-vlan traffic了?

楼主可以这样配置:
CPU
wan = eth0.0
lan = eth0.1

内置的vlan switch:
vlan 0:0t 5t
vlan 1:0t 1 2 3 4 5t

外置的vlan switch,假设是5口 managed。
vlan 0: 0 5t
vlan 1: 1 2 3 4 5t

走线:
路由器的port 0 (标wan的口)连到外置switch的port 5
modem连到外置switch的port 0
其他设备连到外置switch的port 1-4或者内助switch的1-4

请问这里不符合上述哪一条?
inter vlan:wan和lan不在一个vlan
routing:wan和lan之间需要routing
single cable:port 5-port 5
broadcast domains:wan和lan不是一个广播域
one or more VLANs:2个vlan

好,那么我们如果路由器直接放弱点箱里,不考虑无线路由
CPU
wan = eth0.0
lan = eth0.1

内置的vlan switch:
vlan 0:0 5t
vlan 1:1 2 3 4 5t

modem接port0
lan设备接port1
inter vlan:port0和port1不在一个vlan
routing:wan和lan之间需要routing
single cable:eth0-port 5
broadcast domains:port0和port1不是一个广播域
one or more VLANs:2个vlan

我就不懂了。你是非得看到一条蓝色的长条装物体两端打着水晶头写着cat5e。才叫physical connection是吧?
SoC芯片和switch芯片之间8条pcb走线还多层PCB做了耦合的这就不叫physical connection是吧?
是不是非得有个黑色盒子写着router才叫router。soc提供routing服务就不叫router是吧?

router提供的是routing服务,是3层的设备有没有问题?
swich提供switching服务,是2层的设备不看3层header有没有问题?
那port1和2之间通讯需不需要3层header?
我就问你家用路由器这是OSI模型里的router还是switch?默认配置下的port 1和2之间是不是同一个广播域,如果不在同一个广播域那这个路由器有没有在它们两个之间routing的能力?
家用路由器就不符合OSI里的的标准的switch和router的定义。
反而是SoC,是不是提供了routing的服务?
switch芯片,是不是提供了switching的服务?
这两者是符合OSI里狭义的switch和router的定义的。

OSI模型上、网络协议上的拓扑 和 物理上的拓扑不一定一致,这个道理就这么复杂?

夸张一点,我把把eth0 - port5 这条pcb走线剪了,分别焊上网线,出去绕个十米。那这个路由器就是可以拆成一个严格意义上的router和一个严格意义上switch来使用的。因为eth0有PHY,完全可以独立工作。
你可以查查BCM6358和BCM5325的针脚定义。

router = soc芯片
switch = switch芯片
trunk cable = soc和switch之间的pcb
这怎么就不physical了?焊死在一起就不physical了?铺在pcb上就不physical了?

你觉得这叫L3 switch,那么SoC还给nat了,这怎么算?SoC上还可以配置路由表,让eth1(WLAN)和eth0.1之间在不同的网段还可以通讯,这怎么算?
你见过哪家的L3 switch还能给你nat的?而且还不需要监听routing info?
SoC里配置路由表,要不我给你配一个?
你觉得这叫L3 switching,那谁在干routing的活?

port 5是物理存在不是virtual,OK?
port 5是物理存在不是virtual,OK?
port 5是物理存在不是virtual,OK?

我可以给你指出来port 5在PCB的哪一段,只要技术够好,可以真的焊条网线上去,OK?

那我把图中的switch和router装在一个盒子里,卖给小白,说这是5口router。行不行?外面卖的家用router就是这么个玩意。

如果你说这是L3 switch,那你说说L3 switch和router的区别,以及以上的模型家用路由器符合其中哪几条?不符合其中哪几条?你这说法就像3bit mlc一样搞笑。

从OSI模型上来说,L3 switch就是OSI模型中的router。实际上我们把硬件routing,提供简单功能但低成本高性能的叫L3 swich。把软件routing,可以维护大量路由表,可以提供复杂功能的叫router。为什么上图中的不叫L3 switch:
SoC的RAM里可以维护大量路由表
SoC跑的是软件,openwrt基于linux,原厂固件大多基于BSD。
图中的架构中,lan和wan之间可以有防火墙,可以有nat。
要是你直连wan和lan跑不满带宽,那你用我上述的单臂路由配置也是一样跑不满。

这是BCM5325的datasheet:


可以看到它确实就是5个PHY。后来两个芯片集成在一起以后,trunk的带宽增加,但是从网络拓扑的角度来说模型还是不变。

然后你说的trunk容量问题,我上面也已经说过了。要想全双工跑满千兆,你trunk线得2G以上。大部分家用路由器的SoC性能,如果不靠NAT加速,还真跑不满线速。你可以把你家路由的硬件加速功能关了试试。然后nat硬件加速,这倒是和L3 switch的作用比较接近了。SoC/router/软件负责复杂的功能。然后把处理规则下放L3 switch,让L3 switch处理大流量。

The difference between a layer-3 switch and a router is the way the device is making the routing decision. Traditionally, routers use microprocessors to make forwarding decisions in software, while the switch performs only hardware-based packet switching (by specialized ASIC with the help of content-addressable memory)

再问一次,上图是router还是L3 switch?

2赞

。。。你真有耐心,跟不懂的人说半天

2赞

真的是一言难尽啊…

就比如Catalyst 6500系列的三层交换机,就是支持的呀

有点看懂王twitter的既视感 :smiley_cat:

我已经看不懂在说什么了……

不过我觉得家用路由只要双向流量加起来不过1G并且不使用奇怪的CPU操作那么就没什么太多影响的。cable的网络本身上传太小所以没有问题,光纤只要不同时上传和下载就没什么问题。