treo
2014-08-15 17:47:03 +08:00
换个RAM大于32MB的路由吧,最好能刷openwrt。也就50~100块。
以下为引用:
张先生是TPLink无线路由器的前研发负责人,他下面的回答会让大家清楚这些现象背后的原因。 我们具体的疑问如下:
Q1. 为啥长时间使用低端路由后,路由器上网速度会变慢,为啥建议经常重启低端路由器?
Q2,为啥有的路由器无线上不转发ip组播但有线会转发
Q3,有的路由器完全不转发ip组播包,导致基于IP组播的米联有时候不能工作
Q4,多线程同时启动下载有时候会把无线路由器打死,必须重启才能恢复
答:问题1与问题4原因相同。这个问题与路由器的演进历程有关,当前路由器的市场,以TP为首挑国内品牌挑了价格战,在几年时间内,让进口路由器市场份额缩到30%以内,如D-LINK,Netgear,Linksys,甚至有些国外品牌已经退出了中国市场。原因就是国人买东西只看价格不看品质。而这些国内品牌看中了国人的这种价值观,于是对于路由器一再的降低成本,原则是先从无技术难度的降,比如一些替代料,用上后性能略有影响,但价格便宜很多;然后再从有技术难度上的降,比如DDR。你们现在看到的这个问题,就与DDR有关,现在跑在路由器上的操作系统最多的是两个:vxWorks与Linux,Linux的体积比较大,很难裁剪,但有些厂商为了低成本,还是会去裁剪;vxWorks操作系统容易裁剪,就成为一些厂家的首选(如TP),所以,用了vxWorks的操作系统后,厂商对操作系统进行了裁剪,DDR的大小可以用的很小,比如8MB(64Mbit),成本相对于16MB的可以省2-3元人民币;而vxWorks的操作系统最大的特点是内存地址空间不分内核态和用户态,所有的代码运行在同一地址空间,当进行系统开发时,如果编程人员的水平不足,很容易出现用户态的程序直接访问内核态的数据(如网络协议),这种情况下很容易出现冲突和异常,同时,又因为网络数据包在一个余量很小(比如剩余1-2MB)的DDR中,长时间跑大的网络流量,很容易出现缓冲数据包,重传数据包,PS数据包(Power Save)等等,以至于让可本来就很小余量的DDR,变的更小,从而产生了分配时失败,需要等待,再分配的恶性循环,因此,系统会变慢;如果分配时失败没有做处理,那么会死机。这就是问题1与问题4的两个不同结果;问题1是会变慢,问题4会死机。
对于采用Linux操作系统作为路由器OS的厂商,如果也去做Cost down,用小内存跑系统,更容易出现不稳定的问题,因为vxWorks操作系统可以有内存池的概念,可以预分配,OOM的概率降低很多;而linux操作系统在进行网络数据包的处理时,很难做内存池,因为它区分用户态与内核态,数据包收到时存在内核态,内容到用户态处理完才可以释放,因此,数据包的传递有malloc与free的操作,并且是大量的。在这个过程中,很容易出现异步,即上层还未处理完数据包,下层又来大量的数据,导致系统运作失控,很容易变慢或者死机。之所以变慢是因为当free状态的memory不足时,操作系统会从cached中要回memory,如果这个操作还不能满足需求,则会随机的kill优先级低的进程,来保证系统不死机,但,这个就是饮鸩止渴,最后,系统还是会死机,因为谁也不知道它会kill哪个进程,我们看到过很多这种案例。最好的作法就是不让它oom去触发kill进程的操作,即留足够的内存余量。
问题2与问题3原因相同,这个问题有两种可能。你们的组播数据肯定是从Internet上的Server到路由器,然后路由器到小米盒子,这样的通路。在这样的链路建立的过程是小米盒子发起组播请求,给Internet上的server,在经过路由器WAN口时,由IGMP Proxy协议把局域网地址转成Internet地址,server收到后把组播响应发回路由器WAN口,由IGMP Proxy将组播响应传回内网,这样,就实现了组播可以NAT的效果。接下来,已此原理看你们看到的问题:问题2,有的路由器无线不行有线行,说明这个路由器是支持IGMP Proxy的,只不过实现的时候无线没有考虑,只实现了有线;问题3,有的路由器完全不行,原因是这个路由器不支持IGMP Proxy,所以,不能进行组播NAT。你们可以做个实验,对于那些不能转发IP组播包的路由器,你们把server路由器接在同一个交换机下,看看路由器是否能够转发组播包就知道答案了。
对于问题2的还有一种可能是,它的无线也可以转组播,只不过无线驱动里面没有去做组播转单播的设计,无线驱动对于组播包的传输,是以1Mbps或者11Mbps的速率在发送,这个速率下很容易出现收不到的情况。一般的作法是当组播包到无线驱动后,会将他转成单播包,以11N的速率发出来。所以,对于问题2,你们可以抓包,看看是否从路由器的无线中,有发出组播包,就知道是驱动没有做IGMP Proxy的处理还是没有做组播转单播的处理。
via 张先生,TPlink路由器 研发负责人。