找回密码
 注册

QQ登录

只需一步,快速开始

查看: 233384|回复: 251

[教程] H618C 刷 OpenWrt 并支持 IPTV VLAN 硬件处理的方法

    [复制链接]
发表于 2011-4-8 22:31:35 | 显示全部楼层 |阅读模式
这个帖子的内容会很多,写下来仅给和我一样追求完美的朋友参考。如果有人要说,我就用电信送的网关来看IPTV, 再用一个自己的无线路由器,两个一起用交换机连 ONU 就行了,为毛要折腾 VLAN ? 那我请你要么耐着性子看下去,我会解释为什么这个方法不好;要么就不要往下看了,也不要回帖了,节省大家的时间。
" Y' J. }8 c3 C
经过好几个晚上的折腾,终于让家里的网络架构完美了。现在我的 H618C 上面跑着 OpenWrt, 接两路 IPTV, 再当路由器,跑 BT 下载能稳定在 2.0MB/s, 同时两路 IPTV 也完全不卡,H618C 的 CPU 还空闲 40%.

7 l1 v5 |) N! V1 K5 @
先介绍一点背景知识:
+ E, F) m7 G( F  k
电信现在的 FTTH 能同时提供 PPPoE 上网,IPTV 和 VoIP 业务。这是靠 VLAN 来实现的。ONU, 或者俗称的 光猫 上的以太口,是一个 VLAN TRUNK 的端口,也就是说上面同时跑了多路 VLAN 数据。那么理想情况下,如果用分离的设备要怎么来用这些业务呢?
5 N  A1 q8 `% [9 K) h7 _5 U  J2 }1 @
有人说,直接把普通的无线路由器接到 ONU 上面,就可以 PPPoE 拨号了。这没错。但是如果直接把 IPTV 机顶盒接到 ONU 上,能工作吗?不能。这是为什么呢?
$ Z8 f) d" H: V! Q1 q7 E
因为 FTTH 过来的 PPPoE 数据走的是所谓的 native VLAN, 意思就是,这个 VLAN 上的以太帧,是没有 VLAN 标签的,事实上也就是普通的以太帧。一般来说,用户的终端网络设备只能处理这种以太帧。而 IPTV 的数据就不一样了,上面的以太帧是打上了 VLAN 标签的,这样一来,IPTV 机顶盒就没法直接用了,必须有设备把这些 VLAN 标签去掉再转发给 IPTV 机顶盒,然后才能用。这是下行方向的,上行方向是倒过来的,必须要有设备把 IPTV 发出来的普通数据包打上 VLAN 标签再传到 ONU 上,这样才能,顺利地把 IPTV 机顶盒的请求数据发到局端正确的 VLAN 上去。
, Z% {$ V7 `, g, g2 V
所以这里需要的是一个支持 VLAN 功能的交换机。需要配置三个端口:一个是 VLAN TRUNK, 直接和 ONU 上的端口相连;另两个分别是连 PPPoE 设备和 IPTV 机顶盒的端口,它们都需要配置成 untag 模式,也就是说,从它们出去的端口必须要不带 VLAN 标签。

& J. n$ m2 ^7 ]" X
这里说的能处理 VLAN 标签的交换机不是那种几十块钱就能买到的傻瓜交换机,而是一般用在企业里的支持网管功能的那种。当然了,这样的东西大多数人家里是不会有的,电信也不会免费送给你。那么这个处理 VLAN 标签的功能就必须在电信送给你的网关里来实现。他们是怎么样来实现的呢?答案是:靠 CPU 和软件来实现的。具体到 H618C 上,就是依赖于 Linux 内核里的 802.1q 功能来实现的。CPU 会检查 WAN 上收到的所有数据包,并根据 VLAN 标签再把这些数据包转发到不同的端口上。这时候,交换机的功能实际上也被 CPU 接管了,H618C 后面四个 LAN 口不再是一个交换机里的了,而是变成了四个独立的网络设备,它们之间的数据转发依赖的是 Linux 内核里的 bridge 功能。
* \2 L/ U  {/ s1 S, U1 J) d
说得再明白一点,这个方法等效于一台装了五张网卡的 Linux 机器(无线网卡没算进去),然后依赖 Linux 内核实现 VLAN 标签和交换机的功能。这种实现方法和用硬件 VLAN 交换机的方法差别太大了,前者效率非常低下,基本上是让 CPU 去干它最不擅长的活。这就有点类似于 H264 视频的软解和硬解的区别。

9 h. k5 [8 h" F7 C: }, p' a" K
看到这里如果你还没晕的话请继续看下去哈~~

0 j* f8 E' w# J6 }
我们现在来回答一开始的问题:为什么直接用傻瓜交换机把电信网关和自己的无线路由器与 ONU 一起接起来不好?首先这个方法在处理 IPTV VLAN 标签上一点改进也没有,靠的就是 CPU 和软件来处理。其次,用这个方法的时候,你在看 IPTV 直播的时候,你所有的 IPTV 数据包都会被一并广播到你自己的 PPPoE 无线路由器上,凭空增加它的负担。虽然理论上讲,IPTV 直播依赖的是 IPv4 组播技术,在合适的设备上,只有 IPTV 机顶盒才会收到直播数据包。但不幸的是,这里 ONU 后面接的是一个不支持 IGMP snooping 的傻瓜交换机,它会把组播数据当成广播数据来处理,于是你的 PPPoE 设备也就会不停地收到视频包,网卡不停地通知 CPU 有数据来了,CPU 忙着让网卡丢弃不属于它的数据。
/ U& y9 Z3 ]+ k6 F: c2 ]& n
接下来是本文的重点了:H618C 和广大其它型号的电信赠送的网关一样,采用的是标准的 BCM6359(8) + BCM5325E 的方案,这里 BCM5325E 是一个交换机芯片。如果你查一下它的功能简介,就会发现它是支持 802.1Q VLAN 的。这是什么意思呢?意思就是,理论上讲,它也能实现前面提到的企业级网管交换机才有的硬件处理 VLAN 标签的功能。也就是说我们有希望可以摆脱 CPU + 软件 这种低效的方式。

! O/ u3 s9 Z2 H" p  z0 N8 B1 Z/ e
第一部分先写到这里吧,让我休息一下再继续。。
3 Q2 B; z8 Y6 n  s- F! r
* E9 d( N, z$ L; l6 U/ G
补充内容 (2011-7-5 14:31):$ N6 k2 }3 g. ~4 C
应网友要求,补充一下具体的接法。在13页 #123 那里有张图还有一些解释。: e0 _, X# m; p" q& j* {! k& B# l
( V3 {4 A' ?% q, r3 h! O
补充内容 (2011-8-31 11:59):
4 K3 p. O4 V2 H5 C$ ?1 S! }# w最后买了一个 RT-N16, 里面用的是 BCM53115, 一个机器可以搞定全部的事情。下面这个链接的27楼有方法:0 o- y/ h$ Z( j0 J
https://www.chinadsl.net/forum.php?mo ... &fromuid=266817
% L2 g3 S! i' x  G) A0 u
# F$ [* k: Y! G+ }& d1 F0 l补充内容 (2011-10-8 19:13):+ t6 ?, T7 {, |1 I" {" O) X
Atheros 系的 Buffalo WZR HP G300NH 也可以用交换机硬件直接处理 VLAN, 请看5 o  a: u0 V* Q* R
https://www.chinadsl.net/forum.php?mo ... &fromuid=2668173 N2 V' d; s/ t0 r7 F) m1 O# {2 k
7 F2 u( j) h( L% M( T
补充内容 (2011-11-26 08:36):
; ]: t5 O& P/ J1 \( d( K0 K5 h, b: @. [/ B还有一个用软件处理VLAN看IPTV的帖子:https://www.chinadsl.net/forum.ph ... &fromuid=266817
. A/ n( b9 R9 G

评分

参与人数 2威望 +6 收起 理由
hotqj + 3 支持纯技术帖子。
MINE + 3 关于VLAN的解释,可以深入浅出些。

查看全部评分

发表于 2011-4-10 18:06:38 | 显示全部楼层
回复 spicahan 的帖子' i& q7 z2 r* Y

* u, m' o, c2 M; i; [/ I牛贴一定要顶起来,要是有改版和编译好固件发布我等菜鸟,楼主功德无量啊,哈哈
发表于 2011-4-8 22:54:31 | 显示全部楼层
技术篇,学习了,支持!(hua:
 楼主| 发表于 2011-4-8 23:06:07 | 显示全部楼层
回复 spicahan 的帖子
2 I. `; M+ p5 I- M/ u2 V( o
% C% ~$ A! y5 v6 C第二部分- T9 v! [* \& F0 v! R) Z! e
3 @' o3 G/ t0 [( O$ E- ~) J
前面说了,电信送的网关里用的 BCM5325E 有可能可以取代企业级网管交换机来处理 IPTV VLAN 标记。那到底是可能还是不可能呢?答案是,视情况而定。经过我的的反复尝试,还修改了 OpenWrt 里 BCM5325 对应的内核驱动代码,得出的结论是:" [6 S! Y: V$ K4 `+ |" G
4 a0 {2 p2 |% A6 @' R. G/ o; x
5325E 只能划分 16 组 VLAN, 但 VLAN ID 可以设 0 到4094 任意数字。同时,只有当 VLAN ID 被 16 除的商是一样的 VLAN 组才能同时工作。这句话很绕。我们举几个具体的例子:假设我们在 5325E 上划分了 4 个 vlan, 对应的 vid 是 0, 1, 3, 5, 这没问题,可以工作,因为 vid 除以 16 都等于 0;假设 4 个 vid 是 80, 81, 83, 85, 也没问题,因为它们除以16的商都是5; 但如果 4 个 vid 分别是 51, 80, 81, 85 会怎么样呢?那会是:要么只有 vlan 51 能工作;那么只有 vlan 80, 81, 85 能工作。写到这里我要告诉你最大的不幸了:IPTV 对应两个 VLAN ID: 51用来传直播的视频数据;85用来传请求和点播的数据。也就是说,在 5325E 上,你是做不到让一个端口上既有 VLAN 51 又有 VLAN 85 的数据的,其中 VLAN 85 是必须有的,没有 VLAN 51 的后果是看不了直播,但不影响点播、回看之类的功能。0 Y1 q# f/ F3 [6 n+ x
8 I3 C& d4 T! {' T
第一个结论来了:只用基于 BCM5325E 的网关,靠硬件处理 VLAN, 直播功能是不可能实现的。但点播的支持会完美。如果你的 IPTV 只是用来回看、点播的话,这也是可以接受的了。2 G7 i/ j, J/ c/ }
8 }/ \: K3 W7 ?5 W! v
下面说说怎么配置。首先你需要把它刷成 OpenWrt. 然后你需要修改 switch-robo.c 这个源文件,把里面的 .vlans = 16 修改成 .vlans = 96, 重新编译出一个 switch-robo.ko.
' t) g: M8 F# q8 C- ?/ j1 [6 p# `
  X' m* S1 b: d0 h4 b9 [接下来要配三个 VLAN:
% k# N* f% D* \3 LVLAN 80: 对应需要上网的LAN口,也就是背面的 1, 3 两个端口:
* F' E8 B6 J+ g! w9 Q0 ^echo '0u 2u 5t' > /proc/switch/eth1/vlan/80/ports
/ A/ [! K! B8 R+ @5 A. b" n9 z& C- m
VLAN 81: 对应 PPPoE, 注意,这里 WAN 用到的是背面的 4 号口,不能用标着 WAN 的那个端口。
6 k5 o: f% q# w/ I* Z7 C& a7 U! L* uecho '3u* 5t' > /proc/switch/eth1/vlan/81/ports
7 z% ^; Z0 j4 R
8 x3 f* K+ ~* V* t& R# AVLAN 85: 对应 IPTV, 用到背面标着 iTV 的 2 号口
4 T) f4 b& W+ f" ^" p7 R) vecho '1u* 3t' > /proc/switch/eth1/vlan/85/ports$ R- h' h7 J  O6 a4 z8 ~

3 U/ o: j2 g( }6 P. x1 y/ k! r7 D这时候,需要把 OpenWrt 里的 LAN 设成 eth1.80, WAN 设成 eth1.81, 然后就可以了。ONU 和 H618C 背面的 4 号口相连就行了。
1 j) T5 S  p  u* N# Q1 V+ k
2 f) E+ q4 m8 R2 i第二部分就写到这里。接下来我会写怎么样用最小的成本,让直播也能正常工作。
 楼主| 发表于 2011-4-8 23:29:01 | 显示全部楼层
回复 spicahan 的帖子
2 |! @# i. `0 l5 o  f" r* O0 s  s5 k5 \, a3 a' z* D4 P! d
第三部分+ U% B! d& ^" `9 R  k4 K
6 |9 P7 P1 i6 `7 J' _; {
前面提到了 BCM5325E 这个被广泛应用于百兆家庭路由器里的芯片,在 802.1Q 的支持上是有致命缺陷的,当然这也只是我自己试验下来的结果。如果能找到它的 data sheet, 还有可能能解决,但我是不抱希望了。国外的 FTTH 用户已经开始用支持 802.11n 和千兆端口的无线路由器了,比如现在的当红产品 Linksys E3000. 千兆产品用的交换机芯片当然不再是 5325E 了,而是 BCM53115, 它支持完整的 802.11Q, IPTV 的 VLAN 51 和 VLAN 85 可以同时出现在一个端口上,于是直播就解决了。如果你想升级到高端的 2.4G/5G 双频无线路由器的话,可以直接上 Linksys E3000.( p- m; z. R7 X! `
0 M6 P& I! l4 s" a3 W6 u0 M
不过我已经有一个 Apple Extreme Base Station 了,这个方案对我来说就不现实了。我的做法是,买了一个市面上最便宜的支持 802.1Q 功能的交换机。我找到的是 TP-Link 的 TL-SF1008L,这是一个8口 的 交换机,200多元,相比于二手的 CISCO 2940还是便宜不少的。我家需要插网线上网的设备比较多,再买一个交换机也不算很过分,所以我就上了。不过确实便宜没好货,这个交换机在 VLAN TAG 的处理上也有致命缺陷,参见我之前发的问 PPPoE VLAN ID 的帖子。这里不详细讲了。最后的结论就是,SF1008L 和 5325E 两者的 VLAN 功能结合起来用,刚好可以满足所有的需求。细节不想写了,不是很难,就是需要一点点想像力。。而且我不信真的会有人和我干一样的事情。。。
* K1 H* M5 H7 @% x! t. s, ]2 _: `: b9 t$ |5 U3 b) u
补充内容 (2011-7-5 13:44):2 @2 h7 t+ D& K
看来已经有人和我干一样的事情了。。那我补充一下吧,首先,光猫要重启一下,不然会看不了直播的。/ w! Y/ @7 h. o& o3 l

: `( D: w( g/ N9 T: b补充内容 (2011-7-5 13:46):9 t4 y) ]/ D% z! Y# z. E; v2 Y
H618C和1008L这样互补:1008L上IPTV那个端口转发的时候去掉VLAN TAG, 这样IPTV的两个VLAN就变成一个了,H618C就能处理了。然后反方向的设置,H618C往1008L转发IPTV的时候,端口上加上85这VLAN TAG就行了。
发表于 2011-4-9 08:35:21 | 显示全部楼层
回复 spicahan 的帖子! {; i3 \4 X9 ?$ |6 H' h

; U  T9 M3 Y  ]7 T" g闲得蛋疼的大牛人(fu:
: d! q+ R5 O7 I3 b6 w( E3 X9 Y# zPFPF& {# w! y7 o% V6 w: h
不过这个方案和618C改桥接自己路由的方案相比,有啥优缺点呢?求科普
发表于 2011-4-9 15:57:07 | 显示全部楼层
学了不少知识。
发表于 2011-4-9 16:11:52 | 显示全部楼层
继续啊。好文啊。学习啦
 楼主| 发表于 2011-4-10 10:31:12 | 显示全部楼层
回复 chmjiong 的帖子
, \7 Y2 J  e& L( l, z; |8 K. R! h% u/ P1 i, o

* I# z5 ^3 B- ]请看附件里的图。
, F8 k. H6 h: i# p- T7 M" D
: n# g5 ]# P  a  }右边六个端口就是 5325E 提供的,其中 Port 5 在 H618C 里没用到,而最右边那个端口是固定接 CPU 的。
, m* O% W7 X, k: y/ I假设你是在端口1上桥接自己的路由器的,那么如果用电信自己的 firmware 的时候,下行的数据的流向是这样的:# @& ~. a: z: m+ r) b, F# K
WAN -> CPU, 这一步靠 CPU 来分析 VLAN 标签
* y9 t& L  W- R6 Q& u$ o, w然后 CPU -> CPU Port, CPU 加上自己的内部 VLAN 标签, s& k7 T- r! k( M& }
然后 CPU Port -> Port 1, 5325E 去掉内部的 VLAN 标签
. D5 @6 |+ p8 l8 h  ^4 A. y
* j5 E" i( c, f3 |这个过程中,数据的接收,处理、发送都有 CPU 的参与。电信的 firmware 如果不稳定,那这个桥接就是不稳定的,哪怕你自己后面接的路由器是骨干网上用的,照样会断线。
4 ]' [! E3 D* a+ `  J) ]0 w
& @0 z  @. b' C: |4 e, ?如果按我的方法,图里的 WAN 口是不需要用到的,ONU 过来是接 Port 4 的,这时候是一个真正的二层链路的桥接,2 Z* s" T1 y& A& _% a* w
数据的流向就是直接的+ V- O  y, l. a) p% z' g1 m* n

  N1 I& D4 y: {1 x  ]: uPort 4 -> Port 1
; j4 Q' d/ f; E4 _0 w3 ?4 |2 q1 ~# J7 T. L" C
这个过程完全没有 CPU 的参与,纯粹是硬件完成的,你把 CPU 拆掉,一样能工作。
/ P) {& }( j6 j) C+ X9 E' h7 x  V* F- A* x1 L
同理,如果是 IPTV 的话,其实也是桥接,这应该是一个二层链路的桥接,但如果用电信自己的 firmware, 下行的数据流向是这样的:
0 C  n7 D3 U0 @& t- AWAN -> CPU, 去掉 VLAN 的标签,9 m! t& {9 u$ q" X6 m2 K! d; l
CPU -> CPU Port, 加上内部 VLAN 标签
) {  y% ~# Z$ s$ V. a5 c. r  yCPU Port -> Port 2, 5325E 去掉 VLAN 标签* y9 a, ^" h5 `* n0 [; w  L- a
而如果按我的方法来,这个过程就是
) X  B% Y& w: {5 E# [$ j  X# v) \Port 4 -> Port 2, 5325E 去掉 IPTV VLAN 标签,同样,纯粹是硬件完成的,把 CPU 拆掉照样工作。/ a* U/ Y1 U' j; S2 s2 d, S

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-4-10 16:40:14 | 显示全部楼层
回复 spicahan 的帖子
0 s0 _; s% t: k$ t7 ?
8 G$ m0 ~, j1 e$ T9 j# a; A受教了,多谢
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-1 22:58 , Processed in 0.029717 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表