qos的_QoS 概述

2b55dc53dfcbb516d55b4f205278cff4.png

QoS 是一個很大的領域,涉及到網絡中的多個層次和環節。本文僅簡要的談談 Endpoint 側的 QoS 概念,將這些紛繁的概念名詞串起來,便于理解。

QoS 技術背景

下圖說明了 QoS workflow 中,各項技術的位置和關系

216d62060f39d04265468d62572862e5.png
摘自 < 端到端QoS網絡設計 >

當流量進入設備后,它依次經過 mark(標記)→ meter(計量) → police(管制) → class/dscp(重分類) → queue(隊列) → sharper(整形) → queue priority (優先級調度). meter + police 完成 rate-limit 功能。 而 queue + sharping + priority 完成 congestion manager 功能。sharping 功能屬于可選項。

細解釋其中的專業術語和實現特點

  • Classification and marking
  • Metering
  • Policing
  • Shaping
  • Scheduling
  • Congestion management
  • 分類:將數據分為不同的類別,稱為分類(classification),分類并不修改原來的數據包。
  • 標記:將數據設置為不同的優先級稱為標記(marking),而標記會修改原來的數據包。
  • 流量計量:流量計量可以通過漏桶算法(常用于ATM網絡)或令牌桶算法(常用于IP網絡)實現。計量后的數據包會根據不同的整形類別分別保存在緩沖區中,待滿足對應的流量資料后再進行發送。
  • 流量管制:丟棄超出帶寬,稱為管制(Policing)。
  • 流量整形:將超出的帶寬緩存在內存中,等到下一秒再傳遞,這種行為稱為Shaping。典型作用是限制流出某一網絡的某一連接的流量與突發,使這類報文以比較均勻的速度向外發送,以符合種給定的“流量資料”(traffic profile)。
  • 隊列調度機制:在QoS技術體系中屬于擁塞管理的范疇。
  • 擁塞管理:當網絡發生擁塞后,數據還是要被傳遞的,正因為接收到的數據遠多于自身的傳輸能力,所以數據被傳輸時就出現了先后順序,而依照什么樣的方式來傳數據,就需要隊列的指導,QOS中的隊列定義了數據包被傳輸的先后順序。如果處理方式為管制,那么數據包就會被丟棄,通常情況下,網絡設備默認丟棄后到的數據包而傳輸先到的數據包,這樣的丟棄方式稱為尾丟棄。

流量整形(traffic shaping)常與流量監管(traffic policing)混淆。它們的主要區別在于,流量整形是一種主動調整流量輸出速率的措施。流量整形對流量監管中需要丟棄的報文進行緩存——通常是將它們放入緩沖區或隊列內,再根據特定算法均勻的向外發送這些被緩存的報文。但這不代表流量整形不會丟棄報文。shaping可能會增加延遲,而policing幾乎不引入額外的延遲。

通常的實現方式

  • Marking: fwmark, ToS/IPP/DSCP
  • Metering: token bucket, trTCM, mark ToS/IPP/DSCP
  • Policing per interface (egress)
  • Shaping per interface (egress)
  • Scheduling: Priority Queuing
  • Congestion management: Taildrop

標記方式

實現 QoS 的一個最基本的方法就是分類和標記。

ToS/IPP/DSCP 是 IP頭部的一個名為 ToS 字段。用于標記服務類型。這個字段隨著發展,被不斷的賦予了新的定義。見下表:

a79d057a338342bfe52ed73ef5abe829.png

ToS/IPP:根據RFC791定義,IP報文頭ToS(Type of Service)域由8個比特組成,其中3個比特的 Precedence 字段標識了 IP 報文的優先級

DSCP:差分服務代碼點(Differentiated Services Code Point)RFC2474 重新定義了 IP 報文中的 ToS 域,增加了C比特,表示傳輸開銷(Monetary Cost)。

下圖是RFC1349 定義的每個位的意義:

c5e38988d7e5ade87c4083e270020bfc.png

上圖示例了一些協議應該如何設置(4~1)位:

到了 RFC2474 , IPP的的意義就發生了變化。而 DTR位意義不變。IPP 與 DSCP 相應存在一個轉換關系。DSCP 可以看成定義了一系列隊列類別,下表列出一部分:

6809da8ab77db3ead15bf85f84d9a229.png

在路由器中,一般都是把 CS6 和CS7 中的數據用 PQ 做絕對優先處理,無論下面是否有數據也是要優先來傳遞這兩個隊列中的數據。而其他EF到AF1的隊列中是用 WFQ 來做的,保證所有隊列都可以得到帶寬來傳輸。

PQ(Priority Queueing,優先隊列):PQ會先服務高優先級的子隊列,若高優先級子隊列里沒有數據后,再服務中等優先級子隊列,依次類推。如果PQ正在服務中等優先級子隊列,但是高優先級里又來了數據包,則PQ會中斷中等優先級子隊列的服務,轉而服務高優先級子隊列。

WFQ(Weighted Fair Queueing,加權公平隊列):可以保證相同優先級業務間公平,不同優先級業務間加權。

計量算法

令牌桶算法(Token Bucket)
有時人們將漏桶算法與令牌桶算法錯誤地混淆在一起。而實際上,這兩種算法具有截然不同的特性并且為截然不同的目的而使用。它們之間最主要的差別在于:漏桶算法能夠強行限制數據的傳輸速率,而令牌桶算法能夠在限制數據的平均傳輸速率的同時還允許某種程度的突發傳輸。

雙速率三色標記器(trTCM)

基于令牌桶算法做計量器

管制支持

Ingress policing per interface provided by the Fast Path QoS module. QoS basic 支持對 入口流量做管制。 QoS advance 僅支持對 出口流量做管制。管制也即丟棄。

隊列調度算法

Priority Queuing

在報文到達接口后,首先對報文進行分類,然后按照報文所屬類別讓報文進入所屬隊列尾部,在報文發送時,按照優先級,總是在所有優先級較高隊列中報文發送完畢后,再發送低優先級隊列中報文,這樣,在每次發送報文時,總是將優先級高的報文先發出去,保證了屬于較高優先級隊列報文有較低時延,所以PQ的優缺點是很明顯的:優點是可以保證高優先級隊列的報文可以得到較大帶寬、較低的時延、較小的抖動;缺點是低優先級隊列的報文不能得到及時的調度,甚至得不到調度,即會出現“餓死”現象。
PQ具有如下特征:
(1) 報文丟棄策略采用 Tail Drop 機制;
(2) 每個隊列內部使用FIFO邏輯;
(3) 當從隊列調度報文時,先從高優先級的隊列調度報文
從上面可以看出,PQ一般的應用場合是保證某類流量盡可能得到最好的服務,而不管其它流量的“死活”。

擁塞管理算法

與調度算法相匹配,使用簡單的尾部丟棄算法(tail drop)

上述的這些實現方式,按照文章中的第一個 workflow 圖,被串起來,對流量進行控制。各種 Endpoint QoS 實現,都無出本文之右。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534926.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534926.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534926.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么python 為什么沒有接口_python做接口測試的必要性

什么是接口測試 接口測試主要用于檢測外部系統與內部系統之間,以及系統內部各 個子系統之間的交互點。其測試的重點是,檢查數據的交換、傳遞和控 制管理過程,以及系統間的邏輯依賴關系等。 為什么要做接口測試 1.傳統的測試方法成本急劇增加&…

路由器mysql密碼重置密碼_【驗證】mysql root密碼恢復

1.首先確認服務器出于安全的狀態,也就是沒有人能夠任意地連接MySQL數據庫。因為在重新設置MySQL的root密碼的期間,MySQL數據庫完全出于沒有密碼保護的狀態下,其他的用戶也可以任意地登錄和修改MySQL的信息。可以采用將MySQL對外的…

centos daemonize_手把手教你在centos上配置Django項目(超詳細步驟)

前言關于Django的部署,本人也踩了很多坑,這篇文章一步一步教你怎么進行部署,只需要你按照我的步驟來就OK了!這里我們使用的服務器是一個全新的服務器,沒有安裝任何東西。基礎環境搭建步驟★ 注意:下面的步驟…

mysql8.0.17壓縮包安裝教程_mysql 8.0.16 壓縮包安裝配置方法圖文教程

本文為大家分享了mysql 8.0.16 壓縮包安裝配置方法,供大家參考,具體內容如下運行環境:windows 10 x641、下載zip安裝包:mysql8.0 for windows zip包:,進入頁面后可以不用登錄。后點擊底部“no thanks, just…

python收集數據程序_基于Python語言的互聯網數據收集軟件的設計

軟件建立所需的工具及其版本 編寫環境與 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方庫與版本號 Requests 2.12.1 BeautifulSoup 4.5.1 PYQT5 5.8.1 Pyinstaller 庫的作用 用于爬蟲編寫 用于爬蟲編寫 用于軟件 GUI 設計 用于封裝 python 程序 1.1 百度地圖…

Mysql保存是事件驅動嗎_【CHRIS RICHARDSON 微服務系列】事件驅動的數據管理-5

編者的話 |本文來自 Nginx 官方博客,是「Chris Richardson 微服務」系列的第五篇文章。第一篇文章介紹了微服務架構模式,并且討論了使用微服務的優缺點;第二和第三篇描述了微服務架構模塊間通訊的不同方面;第四篇研究了服務發現中…

chrome postman插件_收集了一些Chrome插件神器,助你快速成為老司機

剛開始開發項目的時候,我一直都在用火狐,因為它有一個fireBug插件,特別好用(目前已不支持),也不知道什么時候,就一直用起來Chrome瀏覽器了,可能是因為它有強大的插件作為后盾吧。開發了這么多年&#xff0c…

phpmyadmin 導出mysql,在phpmyadmin中導入/導出非常大的mysql數據庫

i have a db in phpmyadmin having 3000000 records. i want to export this to another pc. now when i export this only 200000 entries exported into .sql file and that is also not imported on the other pc.解決方案Answering this for anyone else who lands here. I…

python字符串是否包含某元素_Python實現判斷一個字符串是否包含子串的方法總結...

本文實例總結了Python實現判斷一個字符串是否包含子串的方法。分享給大家供大家參考,具體如下: 1.使用成員操作符 in >>> snihao,shijie >>> tnihao >>> result t in s >>> print result True 2.使用string模塊的f…

python怎么全選_有沒有一種方法可以在Python網頁上模擬“全選復制粘貼”?

我對Python相當陌生,我不知道selenium是什么,但是如果您能夠找到某種模式,您應該能夠執行您描述的內容。關鍵是找到一個模式。下面是幾個示例腳本,它們可能會讓您了解如何開始。在import urllib2from bs4 import BeautifulSoupf …

python當前時間怎么弄_python獲取當前時間

我有的時候寫程序要用到當前時間,我就想用python去取當前的時間,雖然不是很難,但是老是忘記,用一次丟一次, 為了能夠更好的記住,我今天特意寫下這篇文章,如果你覺的對你有用的話,可以…

window.open不重復打開同一個名稱的窗口_干貨滿滿|Ctrl鍵的正確打開方式

“ctrl”是鍵盤中一個常用的鍵,全名為"control",中文意為"控制",在計算機基礎中稱為“控制鍵”。那么你知道“ctrl”都能控制什么嗎?難道只知道 “ctrl”C 復制、“ctrl”V 粘貼 這些?&#xff1f…

java 按位_Java中的按位運算

一、位運算符簡介:1.按位與&。如果兩個整形數據 a、b 對應位都是1,則結果位才為1,否則為0,(int 最大值0x7fffffff ):1 int a 0x7fffffff;2 int b 12;3 int c 0;4 int aAndB a&b; //aAndB is 125 int aAndC a&c; …

jmeter安裝包_分布式執行jmeter腳本步驟(非GUI)

備注:【Linux查看服務器是32位還是64位命令】uname -mgetconf LONG_BIT1.Linux環境安裝jmeter可參考https://www.cnblogs.com/surewing/p/9271886.html如需要用到3臺客戶機,分別在三臺機器中安裝,以下安裝之前需安裝jdk環境1)將jm…