發(fā)現(xiàn)很多情況下,MSN傳輸文件比QQ要慢,倒不是說msn沒有快的時候,但是大部分的時候是真的比QQ慢,連我這種神經(jīng)比較大條的人都注意到了,google了一下,早就有人做了解答,基本上就是說msn傳輸文件是使用TCP,而QQ使用UDP,剩下的事情就是論證TCP傳輸文件沒有UDP快。大概的就是下面的幾個觀點:
1. TCP是可靠的,需要驗證數(shù)據(jù)是否到達和是否正確,而UDP是不可靠的,少做了很多事情,所以MSN的文件傳輸比QQ慢。
我看了當時就想笑,UDP傳輸不可靠,但是應(yīng)用層肯定會寫代碼作些和TCP的可靠傳輸差不多的事情。也用了QQ不少時日了,從來也沒有發(fā)現(xiàn)傳輸文件有問題的,用UDP作協(xié)議也很久了,不做應(yīng)用層驗證重傳的代碼,我還真不敢寫。這個理由,失敗。
2. TCP建立連接需要3次握手,而UDP不需要,所以TCP慢。
3次握手這個事實倒是千真萬確,還好我沒有那么容易被忽悠,兩個人談話之前要握握手的確要稍微費上幾秒鐘,但是這個關(guān)談話的語速啥事情?假如網(wǎng)絡(luò)的ping值達到300ms,各位看官喜歡網(wǎng)絡(luò)游戲的,估計都不會玩了,否則垂死的boss會高興的發(fā)現(xiàn)你忽然變成了木偶可以隨便毆打不還手,最后你只能罵罵電信網(wǎng)通然后復(fù)活幾分鐘后又是一條好漢。但是對于TCP,這樣的ping值,3次握手一般都不需要1秒鐘,把這個定為文件慢慢傳的罪魁禍首,似乎太不靠譜了,這個理由還是失敗。
3. TCP一旦建立鏈接,路由就確定了,而UDP是不確定的路由方式,誰速度快走誰的線路。
這樣說就說明沒有作者好好理解TCP/IP協(xié)議了,TCP的鏈路只是一個邏輯的,又沒有建立物理鏈路,下面跑的還是IP包,這個包走這條路,那個包完全可能走另外的路,這點TCP和UDP沒有兩樣。理由繼續(xù)失敗。
4. msn服務(wù)器在國外?
有些道理,但是我聽一個美國的朋友說他也喜歡用QQ傳文件的。
那到底是怎么回事呢?是因為微軟沒有做好?(題外話,個人的確覺得MSN相比QQ的飛速進步而顯得動作遲緩)QQ的Fans開始摩拳擦掌,一些不那么喜歡M
1. 兩個傳文件客戶端都在NAT后面的時候 (你不知道NAT啥意思?比如多個人通過路由器共享一個貓上網(wǎng),那么你們一般就是在NAT后面了),從技術(shù)實現(xiàn)上講,TCP在這種情況下穿越NAT比UDP麻煩得多。UDP只要開始幾個穿越NAT的協(xié)商包需要服務(wù)器轉(zhuǎn)一下,后面的文件數(shù)據(jù)可以兩個客戶端之間直接傳輸搞定,但是一般TCP就只能全程由服務(wù)器中轉(zhuǎn)了,你說哪一個會比較快? 為什么TCP需要服務(wù)器中轉(zhuǎn)?先看看NAT吧,聽說有高人可以用raw sock搞定,反正我沒有中間服務(wù)器搞不定。
2. 但是即使上面的條件不成立,msn還是一般比QQ慢的。問題還是在出在前面提到的驗證數(shù)據(jù)可靠性上面,TCP是可靠的,UDP是不可靠的,但是用UDP做傳輸文件這檔子事情,肯定要在應(yīng)用層寫一個驗證的協(xié)議,否則傳過來的文件缺胳膊少腿,會被用戶罵死的。說是協(xié)議,其實也不難,打個比方吧:
long long ago,賈寶玉在北京,林黛玉在長沙,怎么互訴衷腸呢,派家丁送信!路途遙遠,怎么知道信收到?jīng)]有?打電話問?那時候發(fā)明了這個就不用送信了,只能看家丁是否帶了回信來了。假如發(fā)現(xiàn)一個家丁一個月還沒有回,那就多半迷路堵車遭遇山賊或者開小差到揚州花差快活去了,再派一個人送吧! TCP就是這么做的,UDP在應(yīng)用層協(xié)議一般也需要這么做,但是實現(xiàn)上有時候往往有區(qū)別。
北京到長沙之間的路,并不是只有一個人跑的,常常會發(fā)生擁堵,假如發(fā)現(xiàn)家丁好久沒有回了,TCP版的賈寶玉再派人送信是要的,但是他會比較識大體,他會少寫信,降低發(fā)送速度,原來一天一封,現(xiàn)在可能一周一封了。他想,大家假如都這樣,路就不會那么擁擠了。這做法很有道理,假如塞車了大家都想見縫插針,只能越來越塞,最后大家都動不了,還不如彼此容讓慢慢排隊。而UDP版本的賈寶玉假如也這么集體主義,那么他就叫做TCP友好流,就假如它只管自己拼命擠,就是非TCP友好的。
所有的TCP協(xié)議實現(xiàn)假如發(fā)現(xiàn)擁塞,都會馬上降低自己的發(fā)送速度。假如基于UDP的協(xié)議不這么做的話,原來擁塞的IP包加上重發(fā)的包,網(wǎng)路只會越來越擁塞,最后所有的堅持集體主義的TCP流都會做出犧牲,把帶寬讓給一些非TCP友好的UDP流。所以除非網(wǎng)絡(luò)狀況非常好,否則TCP是拼不過非TCP友好的協(xié)議的。
我懷疑(僅僅是懷疑而已,我也沒有條件和時間驗證),QQ的文件傳輸機制是不那么TCP友好的,它搶帶寬更加"我能",這樣雖然對于整個網(wǎng)絡(luò)負荷不是什么好事,但是對于單個用戶,就見仁見智了,就好像大家看待多線程下載或者p2p一樣。
http://blog.joycode.com/peon/archive/2007/07/21/106355.aspx
關(guān)于騰牛 | 聯(lián)系方式 | 發(fā)展歷程 | 版權(quán)聲明 | 下載幫助(?) | 廣告聯(lián)系 | 網(wǎng)站地圖 | 友情鏈接
Copyright 2005-2018 QQTN.com 【騰牛網(wǎng)】 版權(quán)所有 鄂ICP備17010784號-1 | 鄂公網(wǎng)安備 42011102000245號
聲明: 本站非騰訊QQ官方網(wǎng)站 所有軟件和文章來自互聯(lián)網(wǎng) 如有異議 請與本站聯(lián)系 本站為非贏利性網(wǎng)站 不接受任何贊助和廣告