經(jīng)常使用無線路由器的同學(xué)會(huì)發(fā)現(xiàn)有時(shí)候家里的路由器長(zhǎng)時(shí)間運(yùn)行后上網(wǎng)速度會(huì)越來越慢,尤其是使用BT等軟件下載東東會(huì)發(fā)現(xiàn)路由器非常慢,有時(shí)候發(fā)現(xiàn)小米盒子上的無線信號(hào)滿格,但網(wǎng)絡(luò)卻不通?而上述問題出現(xiàn)后一般重啟路由器就可以解決?這到底是為啥原因呢?
張先生是TPLink無線路由器的前研發(fā)負(fù)責(zé)人,他下面的回答會(huì)讓大家清楚這些現(xiàn)象背后的原因。 我們具體的疑問如下:
Q1. 為啥長(zhǎng)時(shí)間使用低端路由后,路由器上網(wǎng)速度會(huì)變慢,為啥建議經(jīng)常重啟低端路由器?
Q2,為啥有的路由器無線上不轉(zhuǎn)發(fā)ip組播但有線會(huì)轉(zhuǎn)發(fā)
Q3,有的路由器完全不轉(zhuǎn)發(fā)ip組播包,導(dǎo)致基于IP組播的米聯(lián)有時(shí)候不能工作
Q4,多線程同時(shí)啟動(dòng)下載有時(shí)候會(huì)把無線路由器打死,必須重啟才能恢復(fù)
答:?jiǎn)栴}1與問題4原因相同。這個(gè)問題與路由器的演進(jìn)歷程有關(guān),當(dāng)前路由器的市場(chǎng),以TP為首挑國(guó)內(nèi)品牌挑了價(jià)格戰(zhàn),在幾年時(shí)間內(nèi),讓進(jìn)口路由器市場(chǎng)份額縮到30%以內(nèi),如D-LINK,Netgear,Linksys,甚至有些國(guó)外品牌已經(jīng)退出了中國(guó)市場(chǎng)。原因就是國(guó)人買東西只看價(jià)格不看品質(zhì)。而這些國(guó)內(nèi)品牌看中了國(guó)人的這種價(jià)值觀,于是對(duì)于路由器一再的降低成本,原則是先從無技術(shù)難度的降,比如一些替代料,用上后性能略有影響,但價(jià)格便宜很多;然后再?gòu)挠屑夹g(shù)難度上的降,比如DDR。你們現(xiàn)在看到的這個(gè)問題,就與DDR有關(guān),現(xiàn)在跑在路由器上的操作系統(tǒng)最多的是兩個(gè):vxWorks與Linux,Linux的體積比較大,很難裁剪,但有些廠商為了低成本,還是會(huì)去裁剪;vxWorks操作系統(tǒng)容易裁剪,就成為一些廠家的首選(如TP),所以,用了vxWorks的操作系統(tǒng)后,廠商對(duì)操作系統(tǒng)進(jìn)行了裁剪,DDR的大小可以用的很小,比如8MB(64Mbit),成本相對(duì)于16MB的可以省2-3元人民幣;而vxWorks的操作系統(tǒng)最大的特點(diǎn)是內(nèi)存地址空間不分內(nèi)核態(tài)和用戶態(tài),所有的代碼運(yùn)行在同一地址空間,當(dāng)進(jìn)行系統(tǒng)開發(fā)時(shí),如果編程人員的水平不足,很容易出現(xiàn)用戶態(tài)的程序直接訪問內(nèi)核態(tài)的數(shù)據(jù)(如網(wǎng)絡(luò)協(xié)議),這種情況下很容易出現(xiàn)沖突和異常,同時(shí),又因?yàn)榫W(wǎng)絡(luò)數(shù)據(jù)包在一個(gè)余量很?。ū热缡S?-2MB)的DDR中,長(zhǎng)時(shí)間跑大的網(wǎng)絡(luò)流量,很容易出現(xiàn)緩沖數(shù)據(jù)包,重傳數(shù)據(jù)包,PS數(shù)據(jù)包(Power Save)等等,以至于讓可本來就很小余量的DDR,變的更小,從而產(chǎn)生了分配時(shí)失敗,需要等待,再分配的惡性循環(huán),因此,系統(tǒng)會(huì)變慢;如果分配時(shí)失敗沒有做處理,那么會(huì)死機(jī)。這就是問題1與問題4的兩個(gè)不同結(jié)果;問題1是會(huì)變慢,問題4會(huì)死機(jī)。 對(duì)于采用Linux操作系統(tǒng)作為路由器OS的廠商,如果也去做Cost down,用小內(nèi)存跑系統(tǒng),更容易出現(xiàn)不穩(wěn)定的問題,因?yàn)関xWorks操作系統(tǒng)可以有內(nèi)存池的概念,可以預(yù)分配,OOM的概率降低很多;而linux操作系統(tǒng)在進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的處理時(shí),很難做內(nèi)存池,因?yàn)樗鼌^(qū)分用戶態(tài)與內(nèi)核態(tài),數(shù)據(jù)包收到時(shí)存在內(nèi)核態(tài),內(nèi)容到用戶態(tài)處理完才可以釋放,因此,數(shù)據(jù)包的傳遞有malloc與free的操作,并且是大量的。在這個(gè)過程中,很容易出現(xiàn)異步,即上層還未處理完數(shù)據(jù)包,下層又來大量的數(shù)據(jù),導(dǎo)致系統(tǒng)運(yùn)作失控,很容易變慢或者死機(jī)。之所以變慢是因?yàn)楫?dāng)free狀態(tài)的memory不足時(shí),操作系統(tǒng)會(huì)從cached中要回memory,如果這個(gè)操作還不能滿足需求,則會(huì)隨機(jī)的kill優(yōu)先級(jí)低的進(jìn)程,來保證系統(tǒng)不死機(jī),但,這個(gè)就是飲鴆止渴,最后,系統(tǒng)還是會(huì)死機(jī),因?yàn)檎l也不知道它會(huì)kill哪個(gè)進(jìn)程,我們看到過很多這種案例。最好的作法就是不讓它oom去觸發(fā)kill進(jìn)程的操作,即留足夠的內(nèi)存余量。
問題2與問題3原因相同,這個(gè)問題有兩種可能。你們的組播數(shù)據(jù)肯定是從Internet上的Server到路由器,然后路由器到小米盒子,這樣的通路。在這樣的鏈路建立的過程是小米盒子發(fā)起組播請(qǐng)求,給Internet上的server,在經(jīng)過路由器WAN口時(shí),由IGMP Proxy協(xié)議把局域網(wǎng)地址轉(zhuǎn)成Internet地址,server收到后把組播響應(yīng)發(fā)回路由器WAN口,由IGMP Proxy將組播響應(yīng)傳回內(nèi)網(wǎng),這樣,就實(shí)現(xiàn)了組播可以NAT的效果。接下來,已此原理看你們看到的問題:?jiǎn)栴}2,有的路由器無線不行有線行,說明這個(gè)路由器是支持IGMP Proxy的,只不過實(shí)現(xiàn)的時(shí)候無線沒有考慮,只實(shí)現(xiàn)了有線;問題3,有的路由器完全不行,原因是這個(gè)路由器不支持IGMP Proxy,所以,不能進(jìn)行組播NAT。你們可以做個(gè)實(shí)驗(yàn),對(duì)于那些不能轉(zhuǎn)發(fā)IP組播包的路由器,你們把server路由器接在同一個(gè)交換機(jī)下,看看路由器是否能夠轉(zhuǎn)發(fā)組播包就知道答案了。 對(duì)于問題2的還有一種可能是,它的無線也可以轉(zhuǎn)組播,只不過無線驅(qū)動(dòng)里面沒有去做組播轉(zhuǎn)單播的設(shè)計(jì),無線驅(qū)動(dòng)對(duì)于組播包的傳輸,是以1Mbps或者11Mbps的速率在發(fā)送,這個(gè)速率下很容易出現(xiàn)收不到的情況。一般的作法是當(dāng)組播包到無線驅(qū)動(dòng)后,會(huì)將他轉(zhuǎn)成單播包,以11N的速率發(fā)出來。所以,對(duì)于問題2,你們可以抓包,看看是否從路由器的無線中,有發(fā)出組播包,就知道是驅(qū)動(dòng)沒有做IGMP Proxy的處理還是沒有做組播轉(zhuǎn)單播的處理。
via 張先生,TPlink路由器 研發(fā)負(fù)責(zé)人。
|