網路延遲是怎樣產生的?
網路延遲,是指一個IP包從源主機進程發出開始計時,到達目的地主機進程為止,所經歷的時間,以毫秒為單位。
IP包從源主機一路經過多個中繼設備,如交換機、路由器,最終到達終點,網路延遲由以下三者組成:
網路延遲 = 傳輸延遲 + 處理延遲 + 緩衝隊列延遲
1)傳輸延遲
這個延遲很好理解,指光、電信號在有線介質上的延遲,或無線電信號在空氣介質中的延遲,這種傳輸延遲只和光速有關、或電信號的傳輸速度有關,用戶無法改變該延遲。對於一條選定的端對端路徑,此值是恆定的。
2)處理延遲
接收IP包,查詢轉發表,硬體、或軟體轉發,包括封裝、解封裝、編碼、解碼時間,經過設備越多,設備吞吐能力越弱(一秒可以轉發多少Gb的數據),延遲越大。但對於一條選定的端對端路徑,此值也是恆定的。3)緩衝隊列延遲
當端到端的路徑上,沒有任何網路擁塞,緩衝隊列的延遲幾戶為0,網路轉發性能達到線速度,好像兩端用一根線直連。但是網路擁堵經常發生,因為主機對帶寬的需求無止境,所以擁堵是常態。當網路擁堵時,路由器將無法及時轉發的流量緩衝在出口隊列,可能採用加權公平隊列WFQ(Weighted Fair Queue)、或低延遲隊列LLQ (Low Latency Queue),或默認的先進先出隊列FIFO(First In First Out),這個隊列可能會造成幾百毫秒或更多的延遲,此值是可變的,可以接近0或幾秒不等,依賴網路的擁堵程度。
什麼是加權公平隊列WFQ?
將不同的種類流量放入不同的隊列,預先給不同的隊列分配一個權值、或百分比,採用公平輪轉的方式來依次發送每個隊列的緩衝數據。什麼是低延遲隊列LLQ?
依據IP優先順序,高優先順序的語音流量(Precedence = 5),最先發送,可以插隊,VIP客戶。什麼是先進先出隊列FIFO?
先到的先發,後到的後發。所以過大的網路延遲主要是由緩衝隊列延遲過大造成的!
Google最新的TCP BBR演算法,就是積極主動測量網路的延遲,運用智能演算法,獲知網路的最大可利用帶寬,使發送速率 ≤ 最大可利用帶寬,最大限度減少路由器的緩衝隊列的深度,最大限度減少延遲。在互聯網中大部分的延遲都是因為帶寬不足造成的。
帶寬一旦不夠----&>中途的網路設備會丟包----&>丟包就會導致數據重傳----&>重傳會來帶延遲(並且會讓本來已經擁塞的網路變得更加嚴重)惡性循環。
所以我們盡量不讓數據丟包,面對突發的流量我們選擇使用隊列技術緩存起來再慢慢發出去,這是就是網路的QoS實現方式之一,然而數據包緩存也會帶來延遲,只不過相比丟包來說會好一些。
你要徹底將延遲降低,就是擴容帶寬,100Mbps不夠就擴到1Gbps,1Gbps不夠就擴到10Gbps。簡單說,網路延遲由兩部分構成:
網路傳輸消耗的時延+網路設備處理消耗的時延
舉個例子
北京一個數據包從北京發到廣州,假設中間不過任何轉發交換設備,光纖傳輸,那延遲就是
發送數據包的設備發送處理動作消耗時延+接受數據包的設備接受處理動作消耗時延+光纖傳輸的時延
但事實上網路傳輸沒那麼簡單啦,北京到廣州中間可能要結果10個點的接力,那每個點都會經過處理的動作,這就又加上一些時延。
那這個傳輸時延,其實介質很多很多啦,有線無線,光纖銅纜,無線的各種制式,同等距離傳輸同等數據的消耗差別很大,還會收到環境影響,干擾啊什麼的,這些都會增加網路傳輸帶來的延遲。
設備處理時延,那花樣就更多啦,經過多少設備,設備處理(計算、存儲、轉發。。。)能力都會對處理速度帶來影響。
延遲帶來的最大問題就是降低用戶體驗性能了,比如說你打開一個網頁,慢悠悠1分鐘,你在線看個片子,一分鐘卡18下,那當然不爽啦
那為了降低影響,網路工程師們就想了很多招數啦
--------------
待續。。。
1.收費站過關太慢,經常能看到收費站前排滿長龍;2.路太破坑太多車道太少,車速起不來;3.距離確實太遠。上海到烏魯木齊就算你一路不松油門時速200+,仍然需要時間;
網路時延主要由發送時延,傳播時延和處理時延組成。
發送時延是指數據塊從節點完全進入傳輸媒體所花費 的時間,上限為數據塊信息量/信道帶寬
傳播時延是數據從發送開始到接收端接收結束【當然實際當中我們是用發送端收到接收端的確認幀所花費的時間來獲得傳播時延的。】而傳播時延是由媒介傳輸時延和節點處理時延構成的,前者在工程考慮中一般可以忽略【高頻交易系統除外,他們會盡量縮短到交易所伺服器的網線。】節點處理時延主要是路由器的轉發時延帶來的。
處理時延是接收端處理接收信息所用的時延,和計算機性能有關。
一般網路時延主要是傳播時延的節點處理時延造成的。
-----------------------------------------------題主沒學過《計算機網路》嗎?
建議買本書看看。以下內容你可以不看
最高票答案把幾個層級的內容混淆在一起,比較混亂,這種 搜索引擎搜索+整合的答案建議少看,這是網紅程序員的老套路。
這就是為什麼有些網紅程序員去找工作的時候面試都過不了。
當然面試過不了是能力問題,這可以理解。可是把面試他的程序員掛出來批判一番再黑一下他應聘的公司這就是人品問題了。哈哈,順便黑一下某網紅程序員。影響網路通信質量的因素四種:1.帶寬;2.延遲(時延);3.抖動;4.丟包。其中帶寬好理解,就好比馬路越寬單位時間通過的車輛就會越多一樣。延遲這裡面分這幾種延遲:a.傳輸延遲;和介質,距離有關
b.處理延遲;和設備性能有關
c.隊列延遲;和隊列調度機制有關(可以人控)d.串列化延遲。這個意思就是一個包出設備的時間。抖動就是傳輸數據時間有偏移。丟包就是傳輸中出現丟失,丟失小可能影響不大,丟失大了就不好了。其實很簡單,沒必要說得那麼複雜
網路中的延遲是由以下幾個不同部分組成的:
1.發送時延:發送時延是主機或路由器發送數據幀所需要的時間,也就是從發送幀的第一個比特算起,到該幀的最後一個比特發送完畢所需的時間。
2.傳播時延:傳播時延是電磁波在信道中傳播一定的距離需要花費的時間。
電磁波在自由空間的傳播速率是光速。電磁波在網路傳輸媒體中的傳播速率比在自由空間要略低一些:在銅線電纜中的傳播速率約2.3*10的5次方km/s,在光纖中的傳播速率約為2.0*10的5次方km/s。例如,1000km長的光纖線路產生的傳播時延大約為5ms。
以上兩種時延不要弄混了。只要理解這兩種時延發生的地方,就不會把它們弄混。發送時延發生在機器的內部的發送器中,而傳播時延則發生在機器外部的傳輸信道媒體上。可以用一個見到的比喻說明。假定有10輛車的車隊從公路收費站入口出發到相距50公里的目的地。再假定每一輛車過收費站要花的時間:發車時間共需60秒(相當於網路中的發送時延),行車時間需要30分鐘(相當於網路中的傳播時延),因此總共花費的時間是31分鐘。
下面兩種時延也需要考慮,但比較容易理解。
3.處理時延:主機或路由器在收到數據時要花費一定的時間進行處理,例如分析分組的首部,進行差錯檢驗或者查找適合的路由等等,這就產生了處理時延。
4.排隊時延:數據在經過網路傳輸時,要經過許多路由器。但數據在進入路由器後要先在輸入隊列中排隊等待處理。在路由器確定了轉發介面後,還要再輸出隊列中排隊等待轉發。這就產生了排隊時延。排隊時延的長短往往取決於網路當時的通信量。當網路的通信量很大時會發生隊列溢出,使分組丟失,這相當於排隊時延為無窮大。
數據在網路中經歷的總時延就是以上四種時延之和:
總時延=發送時延+傳播時延+處理時延+排隊時延
歡迎關注微信公眾號:技術宅樂園
http://weixin.qq.com/r/IjhnfyvEo3bcrW8c920w (二維碼自動識別)
@車小胖 說的幾乎差不多了。其實無非就是堵車。高速/國道/省道/路寬夠不夠,司機開的快不快,收費站多不多,以及,是不是像逢年過節,開車上路的多不多。。
IDC是主要的,其次才是帶寬
1 存儲後轉發2 電路中不可避免存在電容,電感現象
你假想你人在中國,你用一根線遙控美國的一輛車,信號是光速,也要大幾十毫秒才能發射到美國。超過100毫秒,打dota就能夠感覺得出了。
從網路誕生的時候就有了,只要不是單機,都有延時
推薦閱讀:
※為什麼有些程序員喜歡用《V字仇殺隊》面具當頭像?
※如何開拓一個互聯網或者物聯網的新興市場?
※為什麼「嘀嘀打車」要改名為「滴滴打車」?
※眾多網址導航中,哪個最好?理由是什麼?
※為什麼大多數互聯網公司自己寫 PHP 框架?