視屏面試傳輸協議到底是TCP還是UDP

2021-01-20 51CTO

本文轉載自微信公眾號「咖啡拿鐵 」,作者咖啡拿鐵。轉載本文請聯繫咖啡拿鐵公眾號。

背景

又是一年一度的秋季校招開始了,以往的校招各個公司都會在公司現場或者學校現場安排學生進行現場面試?但是今年由於疫情的原因,不允許讓同學在現場進行一個面試,所以今年的面試形式就從線下轉到了線上,面試形式的轉變,但是我們考核學生的方式依舊沒有轉變。

校招的同學和社招的同學有很大的不同,他們沒有豐富的工作經驗,沒有太多的項目經歷,那麼我們如何去衡量一個校招的同學呢?那就是基礎和潛力,怎麼去理解基礎呢?俗話說不積跬步,無以至千裡,不積小流,無以成江海,如果沒有一個好的基礎那麼怎麼才能成為一個優秀的工程師呢。如何去考察一個學生基礎的好壞呢?我覺得有三個方面比較重要,計算機網絡,作業系統以及算法和數據結構,通常來說計網考察得特別多,常見的一些問題:

網絡模型分層 TCP和UDP的區別 TCP三次握手和四次揮手 HTTP各版本的區別

上面列舉的問題只是其中一部分,這些問題基本在上課的書本中找到答案,如果你這些都不會那麼只能說基礎算是比較差了。由於這次是視頻面試,我通常會問你覺得牛客網的視頻面試是用的TCP還是UDP呢?在我揭曉答案之前大家也可以想想使用的是哪個網絡協議,在面試的過程中所有的同學都回答了應該是使用的是UDP。我問為什麼使用UDP?基本都會回答道UDP是一個無連接的協議,不用保證可靠性,傳輸速度快。我又問道如果UDP不保證可靠性,咱們在視頻面試的時候我問你問題,如果你回答問題的視頻流丟包了,那麼你的答案我就聽不見了,那視頻面試的體驗將會非常低。不少同學在這個時候就會改答案說那應該使用的是TCP吧,我這是又會問道TCP由於需要保證可靠性,但是在公網的複雜環境下,想必應該經常會出現緩衝或者卡頓的現象吧,很多同學這個時候就會啞口無言了。

其實這個問題的答案不難想出,我們可以將TCP和UDP的特性互相結合起來,讓這個協議既可以保證可靠性,又可以保證實時性,這也就是我們所說的RUDP((Reliable UDP),常見的RUDP協議有QUIC,WebRTC,Aeron等等,我這裡主要介紹谷歌提出的QUIC,帶大家領略一下RUDP的精彩,看看他們是如何既能做到可靠又能保證效率。

QUIC

QUIC(Quick UDP Internet Connection)是Google公司提出的基於UDP的高效可靠協議,他和HTTP一樣同樣是應用層協議。

為什麼高效呢?是因為其基於無連接的UDP而不是基於TCP去實現的。

為什麼可靠呢?因為其模仿TCP協議的可靠性,在應用層上做了可靠性的保證。

為什麼需要QUIC?

網際網路已經發展了幾十年了,但是一提到網絡協議,傳輸層使用得最多的還是TCP協議,應用層使用得最多的是HTTP協議,當然HTTP底層也是使用得TCP協議。雖然網際網路已經發展這麼久了但是對於TCP來說發展依舊緩慢,要說最大的改進應該是Google 在 ACM CoNEXT 會議上發表的用於改善 Web 應用響應延時TCP Fast Open,通過修改 TCP 協議利用三次握手時進行數據交換,這個在Linux內核 3.7.1 以及更高版本可以支持。由於修改TCP協議必然會修改內核從而導致系統升級,這個推動的難度非常之大。

既然我們修改內核不行,那麼Google就提出了在應用層協議上修改的辦法,也就有了QUIC。

誰在使用它?

首先使用它的人肯定是谷歌,據說谷歌有50%的請求都是QUIC協議,微博也在全面使用QUIC協議,同時還有一些視頻雲服務比如七牛也在使用,在騰訊內部也有很多部門在大量使用QUIC,所以不需要擔心這個協議使用的問題。

QUIC為什麼這麼牛?

0RTT 建立連結

RTT((Round-Trip Time)顧名思義就是往返時延的意思,0RTT的話意思就是QUIC可以在第一次發送的時候就帶上數據,熟悉我們TCP的同學應該知道,TCP會有一個三次握手那麼實際上也就是會有1次RTT:

如果是HTTPS的話還會使用SSL/TLS的額外握手,就會有3次RTT:

那麼0RTT的建立連結QUIC是怎麼做到的呢?這裡得先說一下QUIC的0RTT並不是完全的0RTT,他同樣需要1RTT去做一次秘鑰協商,在QUIC中使用的是Diffie-Hellman密鑰交換,該算法是一種建立密鑰的方法,並非加密方法,但其產生的密鑰可用於加密、密鑰管理或任何其它的加密方式,這種密鑰交換技術的目的在於使兩個用戶間能安全地交換密鑰(KEY)以便用於今後的報文加密。DH算法用了離散對數的相關知識,這裡就不擴展講解,有興趣的可以下來搜索這種算法。QUIC通過DH算法創建一個安全的連接後,客戶端會緩存起來原始的連接信息等。在後續的過程中只要和同一個伺服器建立連結都是直接發送數據,不需要再次協商秘鑰,從而實現了後續的0RTT。

更為出色擁塞控制

TCP的擁塞控制的算法特別多,比如基於丟包反饋的(Tahoe、Reno、New Reno、SACK), 基於延時反饋的(Vegas、Westwood),其中的Reno也就是我們最為熟悉的,它分為四個階段:慢啟動,擁塞避免,快速重傳,快速恢復。

而在QUIC中使用了更為優秀的機制來控制擁塞控制,它可以針對不同業務,不同網絡制式,甚至不同的RTT,使用不同的擁塞控制算法。同時也會採用了packet pacing來探測網絡帶寬,來提升網絡使用率。

更好的重傳機制

在重傳的機制中有一個比較重要的名詞,那就是RTO(Retransmission Timeout) 重傳超時時間,一般這個數據會根據RTT去進行計算,那麼我們有一個更精確的RTT肯定就可以有一個更好的RTO。

在TCP中重傳的時候序列號不變,會導致我們的RTT算得不準確,比如重傳的時候你不知道你這次請求到底是和原始請求匹配還是和重試請求匹配,就會導致我們的採樣RTT不準確。

在QUIC中序列號都是遞增的,並且通過offset來確定在包中的真實位置,這樣就可以得到更為準確的RTT。

在TCP中計算RTT的方法就是發出的時間和響應回來的時間相減,但是這樣算出的時間不準確,在QUIC中會減去服務端Ack Delay的時間,這樣的話就更為精準。

同樣的在TCP中有個SACK選項,該選項打開時用於記錄傳輸過程中一些沒有被確認的數據的範圍,便於後續定向重傳多組丟失數據,而不是全部重傳,所以更多的範圍便於更多的選擇重傳,也意味著更少的重傳包頻率。但TCP最多支持3個SACK範圍,而QUIC能支持255個。

沒有隊頭阻塞的多路復用

熟悉HTTP2.0的同學應該知道在2.0中如果訪問同一個伺服器只會有一個TCP連接,所有的請求都會走這條連接:

而每個請求在Connection中叫做Stream,一個Connection中可以有多個Stream,這裡有個問題是在TCP中的包是保證時序的,如果某個Stream丟了一個包,他同時也會影響其他的Stream,在更為嚴重的時候反而多路復用還不如HTTP1.1的多個連結。

而在QUIC中,因為底層是基於UDP,UDP不需要保證包的時序,只會在接收包的時候對包進行重組,所以不會存在這個問題。這也就是為什麼Google提議在HTTP3中使用QUIC的原因。

更優秀的流量控制

上面說了QUIC是多路復用的,在QUIC中可以針對Stream和Connection都進行流量控制。

QUIC 的流量控制和 TCP 有點區別,TCP 為了保證可靠性,窗口左邊沿向右滑動時的長度取決於已經確認的字節數。如果中間出現丟包,就算接收到了更大序號的 Segment,窗口也無法超過這個序列號。

但 QUIC 不同,就算此前有些 packet 沒有接收到,它的滑動只取決於接收到的最大偏移字節數。

最重要的是我們可以進行動態配置,可以在內存不足或者上遊處理性能出現問題時,通過流量控制來限制傳輸速率,保障服務可用性。

連接遷移

現在在手機上移動流量和wifi的切換是一個比較常見的事,每次切換ip地址都會發生變化,如果是TCP的話連接就會中斷從而進行重新建立連結。

在QUIC不再以 IP 及埠四元組標識,而是以一個 64 位的隨機數作為 ID 來標識,通過這樣的方式可以進行連接重複利用,不會重新建立新的連接。

其他

在QUIC中還有更多的其他的特性,比如:

通過header stream保證流順序 底層保證連接持久 源地址令牌防止地址欺騙 握手時壓縮證書避免放大攻擊這裡就不一一介紹了

這裡就不詳解介紹了,大家可以自行查閱資料搜索。

總結

其實這篇帖子也算是一個掃盲貼,相信有很多朋友沒有聽說過RUDP相關的一些東西,或者說聽說過但是一直以為他是一個很複雜,很難理解的東西,其實在這裡攤開來講RUDP就是一個UDP+應用層可靠協議組成的,希望大家看完這篇文章後,能有所收穫。

參考文章:QUIC協議是如何做到0RTT加密傳輸的: https://blog.csdn.net/dog250/article/details/80935534

技術掃盲-新一代基於UDP的低延時網絡傳輸層協議——QUIC詳解 :http://www.52im.net/thread-1309-1-1.html

QUIC協議的分析,性能測試以及在QQ會員實踐:https://www.cnblogs.com/wetest/p/9022214.html

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • 軟體測試之TCP、HTTP協議必知必會,面試必備!
    >3.6 HTTP協議與HTTPS協議對比四、常見面試題一、網絡模型及傳輸1.1 OSI七層網絡模型OSI七層模型:是ISO組織研究的一種網絡互連模型二、TCP、UPD協議詳解在網絡層的中,使用ARP、IP、路由協議,實現了數據的轉發,從而實現兩個機器之間數據包的傳輸。但是當數據包特別大的時候,通過網絡層的協議,沒有辦法保證數據的完整性。此時,就需要傳輸層的協議實現數據包的完整傳輸。
  • 打通網絡協議的任督二脈系列——前奏篇
    一、課程背景1、網絡協議難度較深、內容枯燥、短時間內無法熟練掌握2、研發工程師沒有一定的網絡協議基礎,在遇到多端交互的網絡問題時無法快速準確定位,找不到問題的根源3、網絡協議的應用場景廣泛,在很多行業視為必備的技能(eg:音視頻流媒體行業)二、課程目的1、熟悉、精通常見的網絡協議2、提升分析和解決網絡問題的能力3、掌握網絡協議學習方法、快速熟練掌握其他網絡協議
  • TCP/IP協議與UDP協議怎麼選?
    ,這是網際網路最基本的協議也是國際網際網路的基礎,此協議由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP 主要使電子設備連入網際網路,以及對數據相互產生傳輸的起著規範作用。這些協議主要分為4層的層級結構,分別為:鏈路層、網絡層、傳輸層和應用層。
  • Android程式設計師必知必會的網絡通信傳輸層協議——UDP和TCP
    《腦殘式網絡編程入門(三):HTTP協議必知必會的一些知識》《腦殘式網絡編程入門(四):快速理解HTTP/2的伺服器推送(Server Push)》《腦殘式網絡編程入門(五):每天都在用的Ping命令,它到底是什麼?》《腦殘式網絡編程入門(六):什麼是公網IP和內網IP?NAT轉換又是什麼鬼?》
  • 總結的23 個 TCP高頻面試問題
    TCP 即 Transmission Control Protocol,可以看到是一個傳輸控制協議,重點就在這個控制。 控制什麼? 控制可靠、按序地傳輸以及端與端之間的流量控制。夠了麼?還不夠,它需要更加智能,因此還需要加個擁塞控制,需要為整體網絡的情況考慮。
  • 面試官不講武德,對Java初級程序猿死命摩擦Http協議
    會發生什麼,當然是展示出網頁啊,大腦飛速旋轉,脖子快斷的時候,終於想到面試官可能想要問什麼了)我:英俊瀟灑的面試官,你好!首先瀏覽器會去訪問DNS伺服器,查詢到域名對應的ip地址是多少,然後瀏覽器再去訪問這個ip地址;如果還要往底層在說的話,就會涉及到tcp/ip的分層,我還是來畫張圖吧。
  • 計算機網絡-七層協議-一段話總結-(獻給年後跳槽的朋友)
    物理層主要定義了物理設備的標準,如:網線的類型,光纖的接口類型,各種傳輸介質的傳輸速率,主要作用是傳輸bit流(即我們說的010101001二進位數據)。將它們轉換成電流強弱,來進行傳輸,到達目的後在轉化為01001001的機器碼,也就是我們常說的數模轉換與模數轉換。這一層的數據叫做big,網卡就是工作在這一層的。
  • 打通網絡協議的任督二脈系列——工具篇之NetStat
    Netstat 查看目前tcp連接狀態,結合tcp的三次握手和四次揮手解決分析相關問題(伺服器性能問題)二、命令解析1、常見參數>-a (all)顯示所有選項,默認不顯示LISTEN相關-t (tcp)僅顯示tcp相關選項-u (udp)僅顯示udp相關選項-n 拒絕顯示別名,能顯示數字的全部轉化成數字-l 僅列出有在 Listen (監聽) 的服務狀態
  • 從一個HTTP請求來讀懂HTTP、TCP協議
    所以出現了網絡層,主要目的是將網絡地址翻譯成對應的物理地址,分組傳輸、路由選擇,本層的傳輸單位是數據報(分組),本層需要注意的TCP/IP協議中的TCP協議。超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,網際網路上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。設計HTTP的初衷是為了提供一種發布和接收HTML頁面的方法。
  • TCP協議面試靈魂10問,建議收藏
    TCP 作為傳輸層的協議,是一個軟體工程師素養的體現,也是面試中經常被問到的知識點。在此,我將 TCP 核心的一些問題梳理了一下,希望能幫到各位。001.首先概括一下基本的區別:TCP是一個面向連接的、可靠的、基於字節流的傳輸層協議。而UDP是一個面向無連接的傳輸層協議。(就這麼簡單,其它TCP的特性也就沒有了)。具體來分析,和 UDP 相比,TCP 有三大核心特性:面向連接。
  • 近兩萬字 TCP 硬核知識,教你吊打面試官!
    將以三個角度來闡述提升 TCP 的策略,分別是:TCP 三次握手的性能提升;TCP 四次揮手的性能提升;TCP 數據傳輸的性能提升;TCP 三次握手的性能提升TCP 是面向連接的、可靠的、雙向傳輸的傳輸層通信協議
  • 35 張圖解被問千百遍的 TCP 三次握手和四次揮手面試題
    遙想小林當年校招時常因 TCP面試題被刷,真是又愛又狠….過去不會沒關係,今天就讓我們來消除這份恐懼,微笑著勇敢的面對它吧!所以小林整理了關於 TCP 三次握手和四次揮手的面試題型,跟大家一起探討探討。
  • 網絡篇:朋友面試之TCP/IP,回去等通知吧
    ,朋友不失禮貌地笑著回了句「行」面試官:看你簡歷說精通TCP和IP,那我們來討論下網絡模型和TCP、IP協議,講下你的理解先 朋友(怎麼一上來就問TCP,不按套路出牌啊,不該問問java基礎嗎?不過常規題,我還行) 朋友:網絡模型一般分七層:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。
  • 面試官不講武德,上來就問我Chrome底層原理和HTTP協議
    ,可靠的,基於字節流的傳輸層通信協議,在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。TCP傳輸控制協議是TCP/IP,傳輸控制協議Internet協議中的主要協議之一,TCP/IP是一套通信協議,用於連接Internet以及大多數其他計算機網絡上的主機。協議是一種共同商定的用於執行某件事的格式。對於計算機,最常用於指一組規則,使計算機能夠相互連接並傳輸數據,稱為通信協議。
  • 懶人入門網絡編程(三):老生常談TCP和UDP
    UDP我們都知道 TCP 是面向連接的、可靠的、有序的傳輸層協議,而 UDP 是面向數據報的、不可靠的、無序的傳輸協議,所以 UDP 壓根不會建立什麼連接。就好比發簡訊一樣,UDP 只需要知道對方的 ip 地址,將數據報一份一份的發送過去就可以了,其他的作為發送方,都不需要關心。
  • 計算機網路-七層協議-個人理解-(獻給年後跳槽的朋友)
    將數據解析成bit流,在網絡中傳輸。兩種協議對比兩種協議的對比從字面上講,可能會認為tcp/ip是指tcp和ip這兩種協議,實際生活當中,有時也確實指這兩種協議,然而在很多情況下具體來說,ip或者icmp等,都是數據tcp/ip協議,它們和tcp和ip的關係緊密,是網際網路必不可少的組成部分,tcp/ip泛指這些協議,因此有時也稱tcp/ip為網際協議群,從圖中我們得知,tcp/ip協議與osi在分層模塊上,少於區別,tcp/ip的應用層可以理解為,約等於osi中的應用層,表示層,會話層這三層的組合。
  • TCP/IP應用層、傳輸層
    例如,應用協議HTTP定義了web瀏覽器如何從web伺服器獲取web頁面的內容。當今最流行的TCP/IP應用程式是web瀏覽器,許多流行應用軟體正在採用雲化的服務模式並支持從web瀏覽器訪問。甚至一些APP看似有自己的快捷圖標和自定義界面,但其核心還是一個定製瀏覽器,應用的開發和網頁開發相近或可以一處開發多場景使用。在電腦上打開一個網絡瀏覽器,通過輸入網站名稱,然後網頁(應用界面)隨即出現。
  • 通俗易懂用戶數據報協議(UDP)
    UDP是工作在IP層之上的傳輸層協議,UDP對IP主要有兩個擴展:擴展出埠號使得IP數據報可以多路分發到用戶進程。擴展出校驗和提供網絡傳輸過程中數據差錯的檢驗。UDP是一種保留消息邊界的傳輸層協議。UDP是保留消息邊界的傳輸層協議,利用UDP通信的應用程式每次發送操作會產生一個IP數據報(不考慮分片),這就約束每次發送的數據量不能大於MTU(最大傳輸單元),接收端每次接收都會返回一個個UDP數據報的完整負載,不會出現返回半個數據報負載的情況。