當前位置:陽光暱稱網 >

計算機網絡 >軟件技術 >

從MSN和QQ文件傳輸速度說開去

從MSN和QQ文件傳輸速度說開去

發現很多情況下,MSN傳輸文件比QQ要慢,倒不是說msn沒有快的時候,但是大部分的時候是真的比QQ慢,連我這種神經比較大條的人都注意到了,google了一下,早就有人做了解答,基本上就是說msn傳輸文件是使用TCP,而QQ使用UDP,剩下的事情就是論證TCP傳輸文件沒有UDP快。大概的就是下面的幾個觀點:

從MSN和QQ文件傳輸速度說開去

1. TCP是可靠的,需要驗證數據是否到達和是否正確,而UDP是不可靠的,少做了很多事情,所以MSN的文件傳輸比QQ慢。

我看了當時就想笑,UDP傳輸不可靠,但是應用層肯定會寫代碼作些和TCP的可靠傳輸差不多的事情。也用了QQ不少時日了,從來也沒有發現傳輸文件有問題的,用UDP作協議也很久了,不做應用層驗證重傳的代碼,我還真不敢寫。這個理由,失敗。

2. TCP建立連接需要3次握手,而UDP不需要,所以TCP慢。

3次握手這個事實倒是千真萬確,還好我沒有那麼容易被忽悠,兩個人談話之前要握握手的確要稍微費上幾秒鐘,但是這個關談話的語速啥事情?假如網絡的ping值達到300ms,各位看官喜歡網絡遊戲的,估計都不會玩了,否則垂死的boss會高興的發現你忽然變成了木偶可以隨便毆打不還手,最後你只能罵罵電信網通然後復活幾分鐘後又是一條好漢。但是對於TCP,這樣的ping值,3次握手一般都不需要1秒鐘,把這個定爲文件慢慢傳的罪魁禍首,似乎太不靠譜了,這個理由還是失敗。

3. TCP一旦建立鏈接,路由就確定了,而UDP是不確定的路由方式,誰速度快走誰的線路。

這樣說就說明沒有作者好好理解TCP/IP協議了,TCP的鏈路只是一個邏輯的,又沒有建立物理鏈路,下面跑的還是IP包,這個包走這條路,那個包完全可能走另外的路,這點TCP和UDP沒有兩樣。理由繼續失敗。

4. msn服務器在國外?

有些道理,但是我聽一個美國的朋友說他也喜歡用QQ傳文件的。

那到底是怎麼回事呢?是因爲微軟沒有做好?(題外話,個人的確覺得MSN相比QQ的飛速進步而顯得動作遲緩)QQ的Fans開始摩拳擦掌,一些不那麼喜歡M

1. 兩個傳文件客戶端都在NAT後面的時候 (你不知道NAT啥意思?比如多個人通過路由器共享一個貓上網,那麼你們一般就是在NAT後面了),從技術實現上講,TCP在這種情況下穿越NAT比UDP麻煩得多。UDP只要開始幾個穿越NAT的協商包需要服務器轉一下,後面的文件數據可以兩個客戶端之間直接傳輸搞定,但是一般TCP就只能全程由服務器中轉了,你說哪一個會比較快? 爲什麼TCP需要服務器中轉?先看看NAT吧,聽說有高人可以用raw sock搞定,反正我沒有中間服務器搞不定。

2. 但是即使上面的條件不成立,msn還是一般比QQ慢的。問題還是在出在前面提到的驗證數據可靠性上面,TCP是可靠的,UDP是不可靠的,但是用UDP做傳輸文件這檔子事情,肯定要在應用層寫一個驗證的協議,否則傳過來的文件缺胳膊少腿,會被用戶罵死的。說是協議,其實也不難,打個比方吧:

long long ago,賈寶玉在北京,林黛玉在長沙,怎麼互訴衷腸呢,派家丁送信!路途遙遠,怎麼知道信收到沒有?打電話問?那時候發明了這個就不用送信了,只能看家丁是否帶了回信來了。假如發現一個家丁一個月還沒有回,那就多半迷路堵車遭遇山賊或者開小差到揚州花差快活去了,再派一個人送吧! TCP就是這麼做的,UDP在應用層協議一般也需要這麼做,但是實現上有時候往往有區別。

北京到長沙之間的路,並不是只有一個人跑的,常常會發生擁堵,假如發現家丁好久沒有回了,TCP版的賈寶玉再派人送信是要的,但是他會比較識大體,他會少寫信,降低發送速度,原來一天一封,現在可能一週一封了。他想,大家假如都這樣,路就不會那麼擁擠了。這做法很有道理,假如塞車了大家都想見縫插針,只能越來越塞,最後大家都動不了,還不如彼此容讓慢慢排隊。而UDP版本的賈寶玉假如也這麼集體主義,那麼他就叫做TCP友好流,就假如它只管自己拼命擠,就是非TCP友好的。

所有的TCP協議實現假如發現擁塞,都會馬上降低自己的發送速度。假如基於UDP的協議不這麼做的話,原來擁塞的IP包加上重發的包,網路只會越來越擁塞,最後所有的堅持集體主義的TCP流都會做出犧牲,把帶寬讓給一些非TCP友好的UDP流。所以除非網絡狀況非常好,否則TCP是拼不過非TCP友好的協議的。

我懷疑(僅僅是懷疑而已,我也沒有條件和時間驗證),QQ的文件傳輸機制是不那麼TCP友好的,它搶帶寬更加"我能",這樣雖然對於整個網絡負荷不是什麼好事,但是對於單個用戶,就見仁見智了,就好像大家看待多線程下載或者p2p一樣。

  • 文章版權屬於文章作者所有,轉載請註明 https://ygncw.com/jisuanji/ruanjian/ndnl8w.html