關於TCP和UDP的通俗理解


TCP和UDP是網絡基礎,很多公司面試也都會問到,今天我在這里,根據大神們的講解,自己總結借鑒一下。

首先,先提一個問題:英雄聯盟是TCP還是UDP?

這個問題對於游戲玩家,可能大多數人都沒有想過。一般游戲中TCP和UDP會同時用的,如果對於數據傳輸速度要求非常高的場景,比如FPS,MOBA等游戲過程中,用戶對戰時候的數據肯定是要用UDP來傳輸的,並且在程序層面保證傳輸的可靠性,包括自己做校驗等;但其它模塊,比如大廳里啊,買東西啊,創建房間啊等等,都是可以TCP實現的。魔獸世界用TCP是因為他對數據的即時要求並沒有那么高,而且有很多的校驗啊,技能讀條等等,在副本中晚跑個一秒或者放技能多讀一秒,影響並沒有那么大,但如果是LOL,那可能團戰都要輸了。

總結來說就是,大型游戲一般都是TCP和UDP都會用,比如在LOL中的團戰中,每個人的操作、技能釋放、走位都有很強的實時性,這個時候如果用TCP,發生丟包之后,會重傳,堵塞數據傳輸,這樣就會,你卡了一下,等你緩過來,游戲沒准已經結束了。但是在商店買裝備,排位等待,邀請隊友這種對實時性要求不高,幾秒的延遲並不會影響太多的時候,可以用TCP實現。

(1)TCP和UDP的區別是什么?

詳細的原理我這里就不講了,我這里簡單的總結描述一下。首先,TCP是面向連接,可靠性好,基於字節流。UDP不面向連接,不可靠,基於數據報。

  這里的連接不是真實存在的,TCP的面向連接只不過三次握手在客戶端和服務端之間初始化好了序列號。只要滿足TCP的四元組+序列號,那客戶端和服務端之間發送的消息就有效,可以正常接收。雖然說TCP可靠,但是可靠的背后卻是無盡的復雜和痛苦,滑動窗口,擁塞避免,四個超時定時器,還有什么慢啟動啊,快恢復,快重傳啊,所以可靠性的實現也讓TCP變的復雜,在網絡的狀況很差的時候,TCP的優勢會變成劣勢。

  對於可靠不可靠而言,沒有絕對的說法,TCP可靠僅僅是在傳輸層實現了可靠,我也可以讓UDP可靠啊,那么就要向上封裝,在應用層實現可靠性。因此很多公司都不是直接用TCP和UDP,都是經過封裝,滿足業務的需要而已。

(2)那什么時候用TCP,什么時候用UDP

  不管用TCP和UDP,應用只要看需求,對於TCP更加注重的是可靠性,而不是實時性,如果我發送的數據很重要一點也不能出錯,有延遲無所謂的話,那就TCP啊。UDP更加注重是速度快,也就是實時性,對於可靠性要求不那么高,所以像斗魚,熊貓這些在線直播網站應該在UDP基礎是封裝了其他協議,比如視頻實時傳輸協議。而且UDP的支持多播,那就很符合這些直播網站了,有時候看直播視頻卡頓,人飄了那可能就是丟包了,但是你也只能往下看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM