返回列表 回復 發帖

簡述MSN與QQ檔案傳輸速度

簡述MSN與QQ檔案傳輸速度
   
發現很多情況下,msn傳輸檔比qq要慢,倒不是說msn沒有快的時候,但是大部分的時候是真的比QQ慢,連我這種神經比較大條的人都注意到了,google了一下,早就有人做了解答,基本上就是說msn傳輸檔是使用TCP,而QQ使用UDP,剩下的事情就是論證TCP傳輸檔沒有UDP快。

    下麵簡述MSN與QQ檔案傳輸速度:

    1. TCP是可靠的,需要驗證資料是否到達和是否正確,而UDP是不可靠的,少做了很多事情,所以MSN的檔案傳輸比QQ慢。
我看了當時就想笑,也用了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伺服器在國外?
那到底是怎麼回事呢?是因為微軟沒有做好?(題外話,個人的確覺得MSN相比QQ的飛速進步而顯得動作遲緩)QQ的Fans開始摩拳擦掌,一些不那麼喜歡MSN的估計就要開始丟板磚了。不管立場如何,事實還是要探尋一下,本著不求甚解,薄積薄發,淺入淺出的精神,我認為有幾個可能原因:
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一樣。
簡述MSN與QQ檔案傳輸速度
返回列表